본문 바로가기

DB/SQLD

SQL 기본 - where 절

반응형

WHERE 절

SQL 쿼리문에서 조건을 입력하기 위한 구문이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
1. where 절에 들어가는 연산자
=>>=<<=, BETWEEN a AND b, IN(list), LIKE '비교문자열', IS NULL, AND, OR ,NOT
!=, ^=<>NOT 칼럼명 =NOT 칼럼명 >NOT BETWEEN a AND b, NOT IN(LIST), IS NOT NULL
 

2. 연산자 우선순위
-1 : 괄호()
-2 : NOT
-3 : 비교 연산자, SQL 비교 연산자
-4 : AND
-5 : OR


3. 예제
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02';
// 선수테이블에서 팀 코드가 'K02'인 선수들의 이름,포지션,백넘버,키 를 가져와라 라는 뜻
// 주의할것은 K02를 ''로 묶었다는 것. 실수 주의
 

4. 문자 유형 비교 방법
비교 연산자의 양쪽이 모두 CHAR 타입인 경우
- 1 서로 길이가 다르면 짧은 쪽에 SPACE를 추가하여 길이를 같게 한 후에 비교
- 2 서로 다른 문자가 나올 때까지 비교
- 3 달라진 첫번째 문자의 값에 따라 크기 결정
- 4 BLANK의 수만 다르다면 서로 같은 값으로 인정 *중요*
비교 연산자의 양쪽이 모두 VARCHAR 타입인 경우
- 1 서로 다른 문자가 나올 때까지 비교
- 2 길이가 다르다면 짧은 것이 먼저 끝날때까지만 비교 후 길이가 긴것이 크다고 판단
- 3 길이가 같고 다른것이 없으면 같다고 판단
 

5. SQL 연산자
SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID IN ('K02','K07')
// 선수테이블에서 팀 코드가 'K02' 나 'K07' 중에 있는지 판단해서 레코드 달라는 뜻
 

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 번인 사원 정보 추출
// 따라서 MANAGER이지만 부서가 30번인 사원도 추출되기 때문에 앞선 SQL문과는 차이가 있음. 주의.
 

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE PLAYER_NAME LIKE '장%';
// 선수 이름이 장씨로 시작하는 선수 추출
// % : 0개 이상의 어떤 문자, _ : 1개인 단일 문자.
// 예를들어 WHERE PLAYER_NAME LIKE '_a%'; 이렇게 써있다면 첫번째에 어떤 단일 문자가 있고 두번째 글자가 a로 시작하는 선수 이름을 추출하는 것이다.
 

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE HEIGHT BETWEEN 170 AND 180;
// 선수테이블에서 키가 170이상 180이하인 선수 추출.
// BETWEEN문은 항상 이상 이하다. 초과, 미만이 아님. 포함관계 확실히 해야함.
 

SELECT PLAYER 선수이름, POSITION 포지션, TEAM_ID
FROM PLAYER
WHERE POSITION IS NULL;
// 포지션이 입력되지 않은 선수를 추출.
// WHERE POSITION = NULL; 이런식의 쿼리문 작성에 유의할 것. 시험문제 나올 수 있음.
 

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02' AND HEIGHT >= 170;
// 팀 코드가 'K02' 이면서 키가 170이상인 선수 추출
// AND, OR ,NOT 으로 다양한 조건을 걸 수 있다.
 

SELECT PLAYER_NAME 선수이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02' AND NOT POSITION = 'MF' AND NOT HEIGHT BETWEEN 175 AND 185;
// NOT 연산 주의
// 팀 코드가 'K02' 이면서 포지션은 미드필더가 아니고 키가 175이상 185이하가 아닌 선수 추출.
 

6. ROWNUM, TOP 원하는 만큼의 행만 가져오고 싶을 때
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM = 1;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= 1;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM < 2;
// 이렇게 사용하면 1개의 레코드만 가져옴
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;
// 이렇게 사용하면 N개의 레코드만 가져옴



다양한 연산자를 통해 조건을 정의할 수 있으니 사용법 정도만 익히자.

반응형

'DB > SQLD' 카테고리의 다른 글

SQL 기본 - group by, having 절  (0) 2017.09.03
SQL 기본 - 함수  (0) 2017.09.02
SQL 기본 - TCL  (0) 2017.08.31
SQL 기본 - DML  (0) 2017.08.28
SQL 기본 - DDL  (0) 2017.08.27