SQLD자격증독학

[SQLD자격증독학] SQL 연산자의 종류

i-moo 2017. 3. 12. 14:11
반응형

BETWEEN a AND b  : a와 b의 값 사이에 있으면 된다.(a와 b의 값이 포함됨)

IN(list)                  : 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.

LIKE '비교문자열'    : 비교 문자열과 형태가 일치하면 된다.

IS NULL                : NULL 값인 경우


SELECT ENAME, JOB, DEPTNO

FROM EMP

WHERE (JOB, DEPTNO) IN (('MANAGER', 20), ('CLERK', 30));

-> MANAGER이며 20인 경우, CLERK이며 30인 경우


SELECT ENAME, JOB, DEPTNO

FROM EMP

WHERE JOB IN ('MANAGER', 'CLERK') AND DEPTNO IN (20, 30);

-> MANAGER과 CLERK 인경우에서 20, 30 인 경우


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE POSITION LIKE 'MF';

-> LIKE : 비교 연산자 '='


와일드 카드의 종류

% : 0개 이상의 어떤 문자를 의미

_ : 1개인 단일 문자를 의미


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE PLAYER_NAME LIKE '장%';

-> 장씨를 가진 선수를 검색


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE HEIGHT BETWEEN 170 AND 180;

-> BETWEEN a AND b : 범위에서 'a'와 'b'의 값을 포함하는 범위를 말한다


NULL

- NULL값과의 수치연산은 NULL 값을 리턴

- NULL 값과의 비교연산은 FALSE 리턴

- 어떤 값과 비교 X, 특정값보다 크다, 작다 X

- POSITION = NULL X -> POSITION IS NULL O


SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID

FROM PLAYER

WHERE POSITION IS NULL;


논리 연산자의 종류

AND : 앞과 뒤의 조건 모두 참일 경우 참

OR : 앞이나 뒤의 조건 중 하나의 조건이 충족할 경우 참

NOT : 뒤에 오는 조건에 반대되는 결과 되돌려준다


SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID

FROM PLAYER

WHERE TEAM_ID = 'K02'

AND HEIGHT >= 170;

-> 팀이름이 K02이고 170보다 같거나 큰 선수 검색


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE TEAM_ID IN ('K02', 'K07') AND POSITION = 'MF';

-> 팀이름이 K02와 K07인 선수들 중에서 포지션이 MF인 선수 검색


SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIFHT 키

FROM PLAYER

WHERE TEAM_ID = 'K02' OR TEAM_ID = 'K07'

AND POSITION = 'MF'

AND HEIGHT >= 170

AND HEIGHT <= 180;

-> 팀이 K02이거나 K07인 선수들 중 포지션이 MF이고 키가 170이상 180이하인 선수들

-> But, K02와 K07에 해당하는 선수들은 모두 검색된다

Why? 논리연산자 순서 때문에 OR 논리 연산자보다 AND 논리 연산자가 먼저 실행된다.

-> 처리 우선순위 : (), NOT, AND, OR

-> SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE (TEAM_ID='K02' OR TEAM_ID='K07')

AND POSITION = 'MF'

AND HEIGHT >= 170

AND HEIGHT <= 180;


WHERE : TEAM_ID = 'K02' OR TEAM_ID = 'K07'

     : TEAM_ID IN ('K02', 'K07')

HEIGHT >= 170 AND HEIGHT <= 180  : HEIGHT BETWEEN 170 AND 180


부정 연산자 종류

!= 같지 않다

^= 같지 않다

<> 같지않다

NOT 칼럼명 = ~와 같지 않다

NOT 칼럼명 > ~보다 크지 않다.

NOT BETWEEN a AND b a와 b의 값 사이에 있지 않다.

NOT IN (list) list 값과 일치하지 않는다

IS NOT NULL NULL 값을 갖지 않는다


(ORACLE) SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE TEAM_ID = 'K02'

AND NOT POSITION = 'MF'

AND NOT HEIGHT BETWEEN 175 AND 185;


(SQL) SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키

FROM PLAYER

WHERE TEAM_ID = 'K02'

AND NOT POSITION <> 'MF'

AND NOT HEIGHT BETWEEN 175 AND 185;

-> 팀이 K02이고 포지션이 MF가 아니고 키가 175이상 185이하가 아닌 선수


ROWNUM : 칼럼과 비슷한 성격의 Pseudo Column

: SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호

: WHERE 절에서 행의 개수를 제한하는 목적으로 사용

한 건의 행만 가져오고 싶을 떄

SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1;

   ROWNUM <= 1;

   ROWNUM < 2; 

두 건 이상의 N행을 가져오고 싶을 때는 ROWNUM = N; 은 사용 X

SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N;

SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N+1;


ROWNUM : 테이블 내의 고유한 키나 인덱스 값을 만들 수 있다

UPDATE MY_TABLE SET COLNUM1 = ROWNUM;


TOP : SQL Server는 TOP 절을 사용하여 결과 집합으로 출력되는 행의 수를 제한 할 수 있다.

TOP(Expression) [PERCENT] [WITH TIES]

- Expression : 반환할 행의 수를 지정하는 숫자

- PERCENT : 쿼리 결과 집합에서 처음 Expression%의 행만 반환됨을 나타낸다

- WITH TIES : ORDER BY 절이 지정된 경우에만 사용할 수 있으며, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정할 수 있다.

SELECT TOP(1) PLAYER_NAME FROM PLAYER;

-> 한 건의 행만 가져오고 싶을 때

SELECT TOP(N) PLAYER_NAME FROM PLAYER;

-> 두 건 이상의 행을 가져오고 싶을 때


-> ORDER BY 절이 사용되지 않으면? Oracle의 ROWNUM과 SQL Server의 TOP 절은 같은 기능

   같이 사용되면? 기능차이 O





반응형