검색결과 리스트
NULL연산에 해당되는 글 1건
- 2015.08.29 [SQLD] 2과목 SQL 기본및 활용 - 1장 5절 WHERE
글
[SQLD] 2과목 SQL 기본및 활용 - 1장 5절 WHERE
1. WHERE 조건절 개요
- 사용자들은 자신이 원하는 자료만을 검색하기 위해서 SQL문장에 WHERE 절을 이용하여 자료들에 대하여 제한할 수 있다.
- WHERE절에는 두 개 이상의 테이블에 대한 조인 조건을 기술하거나 결과를 제한하기위한 조건을 기술할 수도 있다.
- WHERE절에 조건이 없는 경우 FULL TABLE SCAN이 발생하므로 SQL튜닝의 1차적인 검토대상이 된다.
2. 연산자의 종류
구분 | 연산자 | 의미 |
비교연산자 | = | 같다 |
> | 크다 | |
> = | 크거나 같다 | |
< = | 작거나 같다 | |
SQL 연산자 | BETWEEN a AND b | a보다 크거나 같고 b보다 작거나 같다 |
IN( list) | list에 있는 값 중에서 어느 하나라도 일치하면 된다. | |
LIKE '비교문자열' | 비교문자열과 형태가 일치하면 된다. (%, _) 사용 | |
IS NULL | NULL 값인 경우 | |
AND | 앞에 있는 조건과 뒤에 오는 조건이 참이되면 결과도 참이된다. (둘다 참) | |
OR | 앞의 조건이 참이거나 뒤의조건이 참이 되어야 결과도 참이된다 (둘 중 하나 이상 참) | |
NOT | 뒤에 오는 조건에 반대되는 결과를 되돌려준다. | |
부정비교연산자 | ! = | 같지 않다. |
^ = | 같지 않다. | |
< > | 같지않다. | |
NOT 칼럼명 = | ~ 와 같지않다. | |
NOT 칼럼명 > | ~ 보다 크지 않다 | |
부정 SQL 연산자 | NOT BEETWEEN a AND b | a 보다 크거나 같지않으며 b보다 작거나 같지않다. |
NOT IN (list) | list 값과 일치하지 않는다. | |
IS NOT NULL | NULL 값을 갖지 않는다. |
* 연산자 우선순위 (처리순서)
1) 괄호를 묶은 연산이 가장 먼저 처리된다.
2) 연산자들 중에는 부정 연산자가 먼저 처리되고
3) 비교연산자( =, > ,>=, <, <=), SQL 비교연산자 (BETWEEN a AND b, IN (list), LIKE, IS NULL) 처리되고
4) 논리연산자 중에는 AND, OR 순으로 처리된다.
Q. K 리그 일부 선수들의 이름과 포지션, 백넘버를 알고싶다.
조건은 소속팀이 삼성블루윙즈이거나 전남드래곤즈에 소속된 선수들 중에 포지션이 미드필드이면서 키는 170이상 180 이하여야한다.
A.
SELECT PLAYER_NAME, POSITION, BACKNO
FROM PLAYER
WHERE (TEAMNAME ='삼성블루윙즈'
OR TEAMNAME='전남드래곤즈')
AND POSITION = 'MF'
AND HEIGHT 170 BETWEEN 180 ;
3. 비교연산자.
* 문자 유형 비교 방법
구분 | 비교방법 |
비교연산자의 양쪽이 모두 CHAR 유형인 경우 | 길이가 서로 다른 CHAR형 타입이면 작은 쪽에 SPACE를 추가하여 길이를 같게한 후 비교한다. |
서로 다른 문자가 나올 때까지 비교한다. | |
달라진 첫 번째 문자의 값에 따라 크기를 결정한다. | |
BLANK의 수만 다르다면 서로 같은 값으로 결정한다. | |
비교 연산자의 어느 한쪽이 VARCHAR인 경우 | 서로 다른 문자가 나올 때 까지 비교한다 |
길이가 다르다면 짦은 것이 끝날 때까지만 비교한 후에 길이가 긴 것이 크다고 판단한다. | |
길이가 같고 다른 것이 없다면 같다고 판단한다. | |
VARCHAR는 NOT NULL까지 길이를 말한다. | |
상수값과 비교할 경우 | 상수 쪽을 변수 타입과 동일하게 바꾸고 비교한다. |
변수 쪽이 CHAR 유형 타입이면 위의 CHAR 유형 타입의 경우를 적용한다. | |
변수 쪽이 VARCHAR 유형 타입이면 위의 VARCHAR 유형 타입의 경우를 적용한다. |
4. SQL 연산자
1) IN 연산자 사용
SELECT PLAYER_NAME
FROM PLAYER
WHERE TEAM_ID IN ('K02', 'K07');
Q. 사원테이블에서 JOB이 MANAGER 이면서 20번 부서에 속하거나 JOB이 CLERK 이면서 30번 부서에 속하는 사원의 정보를 IN 연산자를 이용하여 출력하라
A1.
SELECT *
FROM EMP
WHERE (JOB,DEPTNO) IN (('MANAGER',20),('CLERK',30));
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7566 JONES MANAGER 7839 02-APR-81 2975 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
* 이렇게 조회하면 결과가 다르므로 용도에 맞춰 사용한다.
SELECT *
FROM EMP
WHERE JOB IN ('MANAGER','CLERK')
AND DEPTNO IN (20,30);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
2) LIKE 연산자 사용
- LIKE 연산자에서는 와일드카드 사용이 가능하다.
와일드카드 | 설명 |
% | 0개 이상의 어떤 문자를 의미함 |
_ | 1개 인 단일 문자를 의미함. |
SCOTT@PROD>SELECT ENAME FROM EMP WHERE ENAME LIKE 'J%';
ENAME ---------- JONES
JAMES
SCOTT@PROD>SELECT ENAME FROM EMP WHERE ENAME LIKE 'J__';
no rows selected SCOTT@PROD>SELECT ENAME FROM EMP WHERE ENAME LIKE 'J____';
ENAME ---------- JONES JAMES |
3) IS NULL연산자
* NULL값의 특성
- NULL값과 수치연산은 NULL을 리턴한다.
- NULL과 비교 연산은 FALSE를 리턴한다.
- 어떤 값과 비교할 수도 없으며 특정 값보다 크다, 적다라고 표현할 수 없다.
* NULL값의 비교연산은 IS NULL, IS NOT NULL을 사용해야 원하는 결과를 얻을 수 있다.
구성 SCOTT@PROD>select * from emp order by empno;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 1 noname 7369 seungho singer 7902 17-DEC-80 800 20 7499 ALLEN people 7698 20-FEB-81 1600 300 30
7521 WARD actor 7698 22-FEB-81 1250 500 30 * WHERE절에 = 연산자를 통한 NULL값 비교 1) ' ' 표기 SELECT * FROM EMP WHERE JOB = 'NULL'; 2) SELECT * FROM EMP WHERE JOB = NULL; 1,2 결과 모두 원하는 결과를 출력할 수 없다. 3) IS NULL 사용 SELECT * FROM EMP WHERE JOB IS NULL ; 결과 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 1 noname
* NULL인 값만 조회 가능 4) IS NOT NULL 사용 SELECT * FROM EMP WHERE JOB IS NOT NULL; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 seungho singer 7902 17-DEC-80 800 20 7499 ALLEN people 7698 20-FEB-81 1600 300 30
7521 WARD actor 7698 22-FEB-81 1250 500 30 * NULL 이 아닌 값만 조회 가능. |
4) ROWNUM, TOP 사용
- 오라클 ROWNUM 사용
SQL 처리 결과 집합과 각 행에 대해 임시로 부여되는 일련번호로 테이블이나 집합에서 원하는 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용한다.
한 건의 행만 가져오고 싶을 때 - SELECT * FROM EMP WHERE ROWNUM = 1; - SELECT * FROM EMP WHERE ROWNUM <= 1; - SELECT * FROM EMP WHERE ROWNUM < 2; 두 건 이상의 N행을 가져오고싶을 때 - SELECT * FROM EMP WHERE ROWNUM <= N; - SELECT * FROM EMP WHERE ROWNUM < N+1; |
- SQL server TOP 사용
TOP (Expression) [PERCENT] [WITH TIES]
- Expression : 반환할 행의 수를 지정하는 숫자.
- PERCENT : 쿼리 결과 집합에서 처음 Expresseion%의 행만 반환됨.
- WITH TIES : ORDER BY 절이 지정된 경우에만 사용할 수 있으며, TOP N(PERCENT)의 마지막 행과 같은 값이 있는 경우 추가 행이 출력되도록 지정할 수 있다.
한 건의 행만 가져오고 싶을 때 - SELECT TOP(1) ENAME FROM EMP; 두 건 이상의 N행을 가져오고싶을 때 - SELECT TOP(N) ENAME FROM EMP; |
* SQL 문장에서 ORDER BY 절이 사용되지않으면 ROWNUM과 TOP절은 같은 기능을 하지만 ORDER BY 절이 사용되면 기능상 차이를 보인다.
'자격증을 위한 > SQLD' 카테고리의 다른 글
[SQLD] 2과목 SQL 기본및 활용 - 1장 7절 GROUP BY, HAVING 절 (0) | 2015.08.29 |
---|---|
[SQLD] 2과목 SQL 기본및 활용 - 1장 6절 함수 (0) | 2015.08.29 |
[SQLD] 2과목 SQL 기본및 활용 - 1장 4절 TCL (0) | 2015.08.29 |
[SQLD] 2과목 SQL 기본및 활용 - 1장 3절 DML (0) | 2015.08.26 |
[SQLD] 2과목 SQL 기본및 활용 - 1장 2절 DDL (0) | 2015.08.26 |
RECENT COMMENT