습관처럼
SQL 기본 및 활용 - 제 5절 WHERE 절 본문
5. WHERE 절
- 사용자들은 자신이 원하는 자료만을 검색하기 위해서 SQL 문장에 WHERE 절을 이용하여 자료들에 대하여 제한
- WHERE 절에 조건이 없는 FTS(Full Table Scan) 문장은 SQL 튜닝의 1차적인 검토 대상이 된다.
(FTS가 무조건 나쁜 것은 아니며 병렬 처리 등을 이용해 유용하게 사용하는 경우도 많다.)
- WHERE 절의 JOIN 조건에 대해서는 1장 9절에서 설명하고 FROM 절의 JOIN에 대해서는 2장 1절에서 설명
연산자의 종류
문자 유형간의 비교 방법
연산자의 우선순위
잘못된 쿼리
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;
선수이름 포지션 백넘버 키
-------- ------ ------ ----
김성환 DF 5 183
가비 MF 10 177
강대희 MF 26 174
고종수 MF 22 176
고창현 MF 8 170
정기범 MF 28 173
정동현 MF 25 175
정두현 MF 4 175
정준 MF 44 170
정진우 DF 7 179
데니스 FW 11 176
: : : :
66개의 행 선택
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;
선수이름 포지션 백넘버 키
-------- ------ ------ ----
가비 MF 10 177
강대희 MF 26 174
고종수 MF 22 176
고창현 MF 8 170
정기범 MF 28 173
정동현 MF 25 175
정두현 MF 4 175
정준 MF 44 170
오규찬 MF 24 178
윤원일 MF 45 176
김동욱 MF 40 176
: : : :
33개의 행 선택
실행 결과의 내용을 보면 포지션이 미드필더(MF: MidFielder)가 아닌 선수들의 명단이 출력되었다. 원하는 데이터는 삼성블루윙즈이거나 전남드래곤즈 중 포지션이 미드필더(MF: Midfielder)인 선수들에 대한 자료만 요청했는데 포지션이 DF나 FW인 선수가 같이 출력된 것이다. 예제에서 “소속팀 코드가 삼성블루윙즈(K02) 이거나 전남드래곤즈(K07)”라는 조건을 만족하고 “포지션이 미드필더(MF)”인 조건을 동시에 만족해야 하는데, 위의 SQL 문장에서는 괄호가 누락됨으로서 OR 논리 연산자보다 AND 논리 연산자를 먼저 실행하기 때문에 잘못된 결과를 나타낸 것이다. 논리 연산자들이 여러 개가 같이 사용되었을 때의 처리 우선순위는 ( ), NOT, AND, OR의 순서대로 처리된다.
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;
두 건 이상의 N 행을 가져오고 싶을 때는 ROWNUM = N; 처럼 사용할 수 없으며
- SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N;
- SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM
추가적인 ROWNUM의 용도로는 테이블 내의 고유한 키나 인덱스 값을 만들 수 있다.
- UPDATE MY_TABLE SET COLUMN1 = ROWNUM;
TOP 절
SQL Server는 TOP 절을 사용하여 결과 집합으로 출력되는 행의 수를 제한할 수 있다.
TOP (Expression) / PERCENT/ WITH TIES
- SELECT TOP(1) PLAYER_NAME FROM PLAYER;
- SELECT TOP(N) PLAYER_NAME FROM PLAYER;
출처 : http://www.bysql.net
'Certification > Sqld' 카테고리의 다른 글
SQL 기본 및 활용 - 제 7절 GROUP BY HAVING 절 (0) | 2020.02.11 |
---|---|
SQL 기본 및 활용 - 제 6절 함수 (0) | 2020.02.08 |
SQL 기본 및 활용 - 제 4절 TCL (0) | 2020.02.08 |
SQL 기본 및 활용 - 제 3절 DML (0) | 2020.02.08 |
SQL 기본 및 활용 - 제 2절 DDL (1) | 2020.02.08 |