[ 데이터베이스 ] WHERE, IN, LIKE, IS NULL, ROWNUM, TOP

WHERE
WHERE : SQL 문장에 WHERE 절을 사용해 특정 자료만 검색 가능, 테이블 두 개 이상 INNER JOIN 지원 기능
조건식 구성 : 칼럼명(좌측) + 비교 연산자 + 문자/숫자/표현식(우측) OR 비교 칼럼명 (JOIN 사용)
| SELECT [ALL/DISTINCT] 칼럼명 [ALIAS 명] FROM 테이블명 WHERE 조건식; |
연산자 종류
연산자 우선순위 : (), NOT, 비교 연산자, AND, OR
| SQL 연산자 | BETWEEN A AND B | A, B 값 사이에 있다 (A, B 값이 포함됨) |
| IN (LIST) | LIST 값중 하나라도 일치하면 된다 | |
| LIKE '비교문자열' | 비교문자열과 형태가 일치(%, _사용) | |
| IS NULL | NULL 값인 경우 |
| 부정 비교 연산자 | != | 같지 않다 |
| ^= | 같지 않다 | |
| <> | 같지 않다 (ISO 표준) | |
| NOT 칼럼명 = | ~와 같지 않다 | |
| NOT 칼럼명 > | ~보다 크지 않다 |
| 부정 SQL 연산자 | NOT BETWEEN A AND B | A,B 값 사이에 있지 않다 (A, B 값을 포함하지 않는다) A보다 작거나 B보다 크다 조건으로 바꿀 수 있다 |
| NOT IN (LIST) | LIST 값과 일치하지 않는다 | |
| IS NOT NULL | NULL 값을 갖지 않는다 |
WHERE 활용
CHAR, VARCHAR2 : 문자형 인용부호 ' ' 묶어 비교
NUMERIC : 숫자형 인용부호 ' '사용 안 함
EX) 소속팀이 삼성블루윙즈(K02)이거나 전남드래곤즈(K07)에 소속된 선수 들이어야 하고, 포지션이 미드필더(MF).
키는 170 이상, 180 이하여야 한다.
| 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; |
| SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER WHERE TEAM_ID IN ('K02', K07) AND POSITION = 'MF' AND HEIGHT BETWEEN 170 AND 180; |
WHERE 조건
WHERE IN (다중리스트)
EX) JOB이 MANAGER이면서 20번 부서 OR JOB이 CLERK이면서 30번 부서에 속하는 사원 정보 다중 리스트로 출력
| SELECT ENAME, JOB, DEPTNO FROM EMP WHERE (JOB, DEPTNO) IN ((' MANAGER ', 20), ('CLERK', 30)); |
WHERE LIKE (와일드카드)
% : 0개 이상의 어떤 문자를 의미한다.
_ : 1개 단일 문자를 의미한다.
EX) '장' 씨 성을 가진 선수들의 정보를 조회하는 SQL 작성
| SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER WHERE PLAYER_NAME LIKE '장%'; |
EX) 포지션 데이터 2번째 자리 값 'F'인 선수 정보 조회
| SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키 FROM PLAYER WHERE PLAYER_NAME LIKE '_F%' |
IS NULL
- NULL 값과 수치연산은 NULL 값을 리턴한다.
- NULL 값과 비교연산은 거짓(FALSE)을 리턴한다.
- NULL 값의 비교 연산은 IS NULL, IS NOT NULL이라는 정해진 문구를 사용해야 제대로 결과 얻음
| SELECT PLAYER_NAME 선수이름, POSITION 포지션, TEAM_ID FROM PLAYER WHERE POSITION IS NULL; |
부정연산자
EX) 삼성블루윙즈 소속인 선수들 중에서 포지션이 미드필더가 아니고, 키가 175CM 이상, 185 이하가 아닌 선수들의 자료
| SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버 HEIGHT 키 FROM PLAYER WHERE TEAM_ID = 'K02' AND NOT POSITION = 'MF' AND NOT HEIGHT BETWEEN 175 AND 185; |
EX) 국적 칼럼이 NULL이 아닌 선수와 국적을 표시하라
| SELECT PLAYER_NAME 선수이름, NATION 국적 FROM PLAYER WHERE NATION IS NOT NULL; |
ROWNUM (ORACLE)
ROWNUM : 사용자 아닌 시스템이 관리하는 유사 칼럼, 테이블이나 집합에서 원하는 만큼 행을 가지고 올 때 WHERE 사용
- 한 행만 가지고 올 때
| SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1; SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= 1; SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM < 2; |
- 두 개 이상의 행 가지고 올 때
| SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = N; (불가능!!!!) SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N; (가능) SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM < N+1; (가능) |
TOP (SQL SERVER)
TOP : 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; |
'Back-End > SQL 개발자 자격증' 카테고리의 다른 글
| [ 데이터베이스 ] Optimizer, Execution Plan (3) | 2023.10.28 |
|---|---|
| [ 데이터베이스 ] FUNCTION - 1 (2) | 2023.10.16 |
| [ 데이터베이스 ] DML (INSERT, DELETE, SELECT, ALIAS, DUAL) (0) | 2023.09.29 |
| [ 데이터베이스 ] ALTER TABLE, TRUNCATE, DROP, DELETE 차이 (0) | 2023.09.28 |
| [ 데이터베이스 ] 제약조건, NULL, CTAS (0) | 2023.09.27 |