반응형
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 |