공부했던 자료 정리하는 용도입니다.
재배포, 수정하지 마세요.
예제는 Oracle Database에서 기본으로 제공되는 SCOTT계정 데이터로 진행됩니다.
WHERE절
SELECT *
FROM EMP
WHERE DEPNO = 30; -- WHERE절에 조회할 행을 선별하기 위한 조건식을 넣는다.
WHERE 절은 어떤 조건에 일치하는 행만을 골라내어 조회하는 데 사용한다. WHERE 절이 포함된 SELECT 문을 실행하면 조회할 테이블의 각 행에 WHERE 절의 조건식을 대입하여 결과가 true 인 경우에만 출력된다.
AND, OR
SELECT *
FROM EMP
WHERE DEPTNO = 30
AND JOB = 'SALESMAN';
OR JOB = 'CLERK';
조건식을 지정할때 AND 나 OR 연산자를 사용한다. WHERE 절에 사용할 수 있는 조건식의 개수는 사실상 제한이 없다고 봐도 무방하다. (SQL문은 대 · 소문자를 구별하지 않지만 테이블 안에 들어있는 문자 or 문자열 데이터는 대 · 소문자를 구별하므로 주의한다.)
연산자의 종류
■ 산술연산자
수치 연산에 사용하는 연산자이다.
ex) + , - , * , /
■ 비교 연산자
연산자 앞뒤에 있는 데이터 값을 비교하는 데 사용한다. 문자열은 알파벳 순서로 문자열의 대소를 비교한다.
ex) > , >= , < , <=
+ 등가 비교 연산자 : 연산자 양쪽 항목이 같은 값인지 검사하는 연산자
ex) = , != , <> , ^= : = 를 제외한 3개는 모두 같은 의미
■ 논리 부정 연산자
반대의 결과를 얻고자 할 때 사용할 수 있다.
ex) NOT
■ IN 연산자
SELECT [조회할 열1 이름], [열2 이름], ..., [열N 이름]
FROM [조회할 테이블 이름]
WHERE 열 이름 IN(데이터1, 데이터2, ... 데이터N);
-- ex
SELECT *
FROM EMP
WHERE JOB IN( 'MANAGER', 'SALESMAN', 'CLERK');
특정 열에 해당하는 조건을 여러 개 지정할 때 IN 을 사용한다. NOT IN 은 반대의 결과를 출력한다.
■ BETWEEN A AND B 연산자
SELECT [조회할 열1 이름], [열2 이름], ..., [열N 이름]
FROM [조회할 테이블 이름]
WHERE 열 이름 BETWEEN 최소값 AND 최대값;
-- ex
SELECT *
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
특정 열 값의 최소 · 최고 범위를 지정하여 해당 범위 내의 데이터만 조회할 경우에 BETWEEN A AND B 를 사용한다.
■ LIKE 연산자와 와일드카드
SELECT *
FROM EMP
WHERE ENAME LIKE 'S%';
일부 문자열이 포함된 데이터를 조회할 때 LIKE 를 사용한다. 같이 사용하는 와일드카드로는 _ 와 % 가 있다. NOT LIKE 를 하면 반대의 결과가 출력된다.
- _ : 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
- % : 길이와 상관없이(문자가 없는 경우도 포함)모든 문자 데이터를 의미
+ 와일드카드 문자가 데이터의 일부일 경우
SELECT *
FROM SOME_TABLE
WHERE SOME_COLUMN LIKE 'A\_A%' ESCAPE '\'; -- ESCAPE절에서 ESCAPE문자를 지정할 수 있다.(\외 다른 문자도 지정가능)
데이터에 와일드 카드 기호로 사용되는 _ 나 % 가 문자 데이터로 포함된 경우엔 ESCAPE 절에서 ESCAPE 문자를 지정해서 사용하면 된다. 위의 예제에서 나온 \ 외 다른 문자도 지정하여 사용할 수 있다.
■ IS NULL 연산자
NULL 인 데이터를 찾을 때 IS NULL 을 사용한다. IS NOT NULL 하면 반대의 의미로 NULL 값이 아닌 데이터를 찾는다.( NULL 은 값이 없는 상태로 0 과는 다르다. 또한 NULL 은 산술 연산자와 비교 연산자로 비교해도 결과 값이 NULL 이 되므로 조건식을 사용할 때 주의해야 한다.(조건식의 결과값이 true도 false도 아니어서 출력 대상에서 제외됨))
■ 집합 연산자
집합 연산자의 종류
종 류 | 설 명 |
UNION | 연결된 SELECT 문의 결과값을 합집합으로 묶어준다. (결과값의 중복은 제거) |
UNION ALL | 연결된 SELECT 문의 결과 값을 합집합으로 묶어준다. (결과 값도 제거 없이 모두 출력) |
MINUS | 먼저 작성한 SELECT 문의 결과값에서 다음 SELECT 문의 결과 값을 차집합 처리한다. 먼저 작성한 SELECT 문의 결과 값 중 다음 SELECT 문에 존재하지 않는 데이터만 출력된다. |
INTERSECT | 먼저 작성한 SELECT 문과 다음 SELECT 문의 결과 값이 같은 데이터만 출력된다. (교집합과 같은 의미) |
UNION 은 두 개의 SELECT 문의 결과값을 연결할 때 각 SELECT 문이 출력하려는 열 개수와 각 열의 자료형이 순서별로 일치해야 한다! (자료형만 같으면 조회하는 열 이름이 달라도 문제없다. 값만 이상하게 나올 뿐.. 또한 최종 출력되는 열 이름은 먼저 작성한 SELECT 문의 열 이름으로 표기된다.)
연산자의 우선순위
( ) 로 묶어주면 우선순위와는 별개로 괄호 안의 연산식을 먼저 수행한다.
'Back end > Database' 카테고리의 다른 글
[Oracle] 숫자 함수, 날짜 함수, 형변환 함수, NULL처리 함수, DECODE와 CASE (0) | 2019.09.03 |
---|---|
[Oracle] 함수의 종류와 문자함수 (0) | 2019.09.02 |
[Oracle] SELECT문의 기본형식 (0) | 2019.08.27 |
[Oracle] 관계형 데이터베이스와 오라클 데이터베이스 (0) | 2019.08.05 |
[Oracle] Database, DBMS (0) | 2019.08.02 |