KH19일차 DATABASE 간단한 공부

2022. 7. 14. 18:19코딩/DataBase

LIKE - 입력한 것이랑 같은거 출력

NOT LIKE - 입력한 것이랑 같은거 제외하고 출력

% - 글자수 제한없이 대체

_ - 한글자 대체

ESCAPE

OR , IN 

LENGTH - 문자길이 반환

LENGTHB - 문자열BYTE 반환 *주의점 한글은 문자 하나당 3BYTE 취급 

INSTR - 찾는 문자열이 지정한 위치부터 지정한 횟수에 나타난 위치 반환

LPAD / RPAD - 주어진 컬럼 문자열에 임의의 문자열을 왼쪽/오른쪽에 덧붙임

LTRIM/RTRIM - 주어진 컬럼이나 문자열의 왼쪽 또는 오른쪽에서 지정한 문자열에 포함된 모든 문자를 제거한 나머지 반환

SUBSTR - 컬럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내어 리턴

 

SELECT 와 FROM 사이에 *입력시

EMPLOYEE 테이블의 모든 데이터 출력

select * from employee;

SELECT 와 FROM 사이에  원하는 컬럼 입력시 FROM 뒷쪽 테이블의

해당 컬럼만 출력

select emp_name from employee;

 

LIKE 

SELECT
    EMP_NAME,SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전__';

SELECT
    EMP_NAME,SALARY
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';

LIKE와 _  를 사용하여 전 으로시작하고 뒤에 두글자는 관련없는 데이터를 출력

LIKE 와 %를 사용해도 된다.

 

ESCAPE

이메일에서 언더바(_)의 앞이 3글자인 직원을 조회하고 싶다.

그런데 _ 를사용하면 한글자를 대체하는것으로 인식이된다.

이를 방지하기 위해 ESCAPE를 사용한다.

인지하고싶은 언더바 앞에 #을 붙이고 ESCAPE'#'를 적어주면 #앞쪽 _는 글자 대채로 인식되고

#뒷쪽 _는 언더바로 인식이 될것이다. 

SELECT
    EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___#_%'ESCAPE'#';

F5 파일 전체실행
ctrl+enter 커서가 있는 한줄 실행

 

NOTLIKE

--2. EMPLOYEE테이블에서 전화번호 첫 3자리가 010이 아닌 직원의 이름 전화번호출력

SELECT
    EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';

OR , IN

--EMPLOYEE 테이블에서 이름, 부서코드

--부서코드(DEPT_CODE)가 D9또는 D6또는 D8인 직원

SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE 
--DEPT_CODE ='D9' OR DEPT_CODE ='D6' OR DEPT_CODE ='D8'; 아래코드랑 같음
DEPT_CODE IN ('D9','D6','D8');

LENGTH

-- LENGTH : 문자열의 길이 반환

SELECT 
    EMP_NAME,LENGTH(EMP_NAME),
    EMAIL, LENGTH(EMAIL)
FROM EMPLOYEE;

LENGTHB

--LENTHB : 문자열BYTE 반환

--한글은 한글자당 3BYTE로 인식이 된다.

SELECT 
    EMP_NAME,LENGTHB(EMP_NAME),
    EMAIL, LENGTHB(EMAIL)
FROM EMPLOYEE;

INSTR

--INSTR : 찾는 문자열이 지정한 위치부터 지정한 횟수에 나타난 위치 반환

EX1)

SELECT 'Hello World Hi High' FROM DUAL;
SELECT INSTR('Hello World Hi High','H',1,1) FROM DUAL;
SELECT INSTR('Hello World Hi High','H',1,2) FROM DUAL;
--두번째 H가있는곳까지
SELECT INSTR('Hello World Hi High','H',1,3) FROM DUAL;
--세번째 까지
SELECT INSTR('Hello World Hi High','H',2,1) FROM DUAL;
--2번째 문자부터 출발
SELECT INSTR('Hello World Hi High','H',-1,1) FROM DUAL;
--음수가 붙으면 뒤에서부터 앞으로 찾아간다
--DUAL 은 테스트를 위한 테이블

각 줄의 실행 결과

 

EX2)

--이메일 중에서 @를 첫 문자부터찾기 시작해서 @만날때까지 찾는다 

SELECT EMP_NAME,
INSTR(EMAIL,'@',1,1)
FROM EMPLOYEE;

LPAD / RPAD

--LPAD/RPAD : 주어진 컬럼 문자열에 임의의 문자열을 왼쪽/오른쪽에 덧붙임

SELECT
    EMAIL,LENGTH(EMAIL),
    LPAD(EMAIL,20,'#'),
    RPAD(EMAIL,20,'#') 
FROM EMPLOYEE;
--메일이 14짜리 라면 6개만큼 왼쪽에 #을 덧붙임 15짜리라면 5개
--LPAD는 왼쪽에 채워넣고 RPAD는 오른쪽에 채워넣음
--주의점 LPAD(EMAIL,10,'#')라고 적으면 공간이 모자르면 그만큼 잘라낸다

LTRIM/RTRIM

--LTRIM/RTRIM : 주어진 컬럼이나 문자열의 왼쪽 또는 
--오른쪽에서 지정한 문자열에 포함된 모든 문자를 제거한 나머지 반환

TRIM

-왼쪽 오른쪽 가리지 않고 주어진 컬럼이나 문자열에 있는 지정문자를 제거한뒤 반환

SELECT '000KH000' FROM DUAL;
SELECT LTRIM('000KH000','0') FROM DUAL;
--왼쪽 0 3개만 삭제
SELECT LTRIM('12322123123KH000','123') FROM DUAL;
--숫자를 한덩이로 보는게 아니라 하나씩 쪼개서 보고 해당하는것들을 지운다
--('12322123123KH000','123')라고 하면 1,2,3에 해당하는것을 다지우고 K를 만나는 순간 끝
--RTRIM도 같은 메커니즘 다만 오른쪽부터 시작
-- TRIM : 왼쪽 오른쪽 가리지 않고 주어진컬럼이나 
--문자열에 있는 지정한 문자를 제거한 나머지 반환
SELECT '000KH000' FROM DUAL;
SELECT TRIM('0' FROM '000KH000') FROM DUAL;
--위 아래 같은코드
SELECT TRIM(BOTH'0' FROM '000KH000') FROM DUAL;
SELECT TRIM(LEADING'0' FROM '000KH000') FROM DUAL;
--앞쪽만 삭제
SELECT TRIM(TRAILING'0' FROM '000KH000') FROM DUAL;
--뒤쪽만 삭제

 

위코드들 실행결과들 

SUBSTR

--SUBSTR : 컬럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내어 리턴

SELECT 'SHOW ME THE MONEY' FROM DUAL;
SELECT SUBSTR('SHOW ME THE MONEY',6,2) FROM DUAL;
--문자열중에 6번째부터 2개를 잘라오라는 뜻 6번째는 M이기때문에 ME가 출력
SELECT SUBSTR('SHOW ME THE MONEY',9,3) FROM DUAL;
--위랑 같은이유로 THE출력
SELECT SUBSTR('SHOW ME THE MONEY',9) FROM DUAL;
--제약을 하나만 주면 앞의제약 번째부터 끝까지 다 나옴
SELECT SUBSTR('SHOW ME THE MONEY',-9,3) FROM DUAL;
-- 앞의 조건이 음수이기에 뒤에서부터 찾기 시작하지만
-- 뒤의 조건은 뒤에서 앞으로가 아닌 앞에서 뒤로진행한다
-- 그래서 THE가 출력이 된다

위코드 실행 내역

'코딩 > DataBase' 카테고리의 다른 글

Oracle SQL 배운 명령어 모음 (수정중)  (0) 2022.07.15