where절은 특정 조건을 기준으로 원하는 행을 출력하는데 사용함.
기본형식은 다음과같다.
SELECT [조회할 열이름1],[조회할 열이름2]...[N열 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하기 위한 조건식];
부서 번호가 30인 데이터만 출력하기
SELECT *
FROM EMP
WHERE DEPTNO = 30;
and는 알다시피 2가지 모두 참이여야 참이되는 논리연산자.
부서번호가 30이고 직업이 SALESMAN인 사원정보 출력
SELECT *
FROM EMP
WHERE DEPTNO = 30 AND JOB = 'SALESMAN';
or는 둘중 하나만 참이여도 참이되는 논리연산자.
부서번호가 30이거나 직업이 CLERK인 사원정보 출력
SELECT *
FROM EMP
WHERE DEPTNO = 30 OR JOB = 'CLERK';
+,-,*,/를 이용
SELECT *
FROM EMP
WHERE SAL * 12 = 36000;
대소 비교 연산자
>, >=, <, <=를 이용
급여가 2500이상이고 직업이 ANALYST인 사원정보 출력
SELECT *
FROM EMP
WHERE SAL >= 2500 AND JOB = 'ANALYST';
※ 문자를 대소 비교 연산자로 비교하기
알파벳 순서로 따짐
SELECT *
FROM EMP
WHERE ENAME >= 'F';
단어를 비교해도 마찬가지다. 사전순으로 생각하면됨
SELECT *
FROM EMP
WHERE ENAME >= 'FORZ';
등가 비교 연산자
= : 프로그래밍언어에서 는 대입연산자이지만 SQL에서는 equal의 의미
!=, <>, ^= : not equal의 의미로, 세가지모두 동일.
SELECT *
FROM EMP
WHERE SAL != 3000;
NOT을 붙이면 true값은 false로, false값은 true가 된다.
앞으로 나올 IN, BETWEEN, IS NULL, LIKE 연산자와 함께 복합적으로 많이 사용된다.
복잡한 조건식에서 반대의 결과를 원할때 SQL문 작성시간을 줄이는데 도움이 된다.
SELECT *
FROM EMP
WHERE NOT SAL = 3000;
바로 위 쿼리문과 같다.
=기호는 특정 열데이터 값만 조회할때 쓰는데, 여러조건을 조회할때는 OR연산자가 따른다.
SELECT *
FROM EMP
WHERE JOB = 'MANAGER' OR JOB = 'SALESMAN' OR JOB = 'CLERK';
IN연산자는 특정열에 해당하는 조건을 여러개 지정할 수 있다.
SELECT *
FROM EMP
WHERE JOB IN ('MANAGER','SALESMAN','CLERK');
--NOT연산자와 같이쓴다면?
SELECT *
FROM EMP
WHERE JOB NOT IN ('MANAGER','SALESMAN','CLERK');
어떤 사이값을 비교해야 한다고 했을때, 대소 비교 연산자와 AND연산자를 써야한다.
SELECT *
FROM EMP
WHERE SAL >= 2000 AND SAL<=3000;
이때 BETWEEN 연산자로 더 간단하게 표현 가능하다.
SELECT *
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
--NOT연산자와 같이 쓴다면?
SELECT *
FROM EMP
WHERE SAL NOT BETWEEN 2000 AND 3000;
LIKE연산자는 이메일이나 게시판제목 또는 내용검색처럼 일부 문자열이 포함된 데이터를 조회할때 사용함.
SELECT *
FROM EMP
WHERE ENAME LIKE 'S%';
'S%'에서 %는 와일드카드 기호라고 한다.
LIKE연산자와 함께 사용할 수 있는 와일드카드는 _와 %이다.
_ : 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
% : 길이와 상관없이(문자가 없는경우 포함) 모든문자데이터를 의미
간혹 데이터안에 %나 _가 포함되어있다면 \%나, \_로 표현한다. 이 글도 지금 그렇게 쓰이고 있다.
약간 자바스크립트의 regex랑 비슷하다고 보면될것같다.
NULL은 =으로 검색이 안된다. 왜냐하면 =는 비교연산자이기 때문에
NULL은 비교대상이 아님.
NULL인지 아닌지 판단하려면 IS NULL연산자를 사용한다.
SELECT *
FROM EMP
WHERE COMM IS NULL;
NOT연산자와 같이쓰면
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
관계형 데이터베이스의 개념은 집합론에서 시작되었다. 2개 이상의 select문의 결과값을 연결할 때 사용한다.
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
주의할 점은 select문의 자료형과 순서모두 같아야 한다.
오라클에서 사용하는 집합연산자는 다음과 같다.
UNION : 합집합. 결과값 중복없음
UNION ALL : 합집합. 결과값 중복허용
MINUS : 차집합.
INTERSECT : 교집합.
연산자 우선순위
높은순서대로,
*,/
+,-
=, !=, >, >=, <, <=
BETWEEN A AND B
NOT
AND
OR