4.2 서브 쿼리
(1) 서브 쿼리
- 서브 쿼리: SQL문 속 또 다른 SQL 문. (중첩) 부속 질의라고도 부름
- 메인 쿼리: 서브 쿼리의 결과 값을 사용하여 기능을 수행하는 영역. 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 때 사용함. 보통 데이터가 대량일 때 데이터를 모두 합쳐서 연산하는 조인보다 필요한 데이터만 찾아서 공급해주는 서브 쿼리가 성능이 더 좋음
- 사용 방법: 동적인 결과를 얻거나 구절의 순서를 바꿔야 하는 경우 ( )를 이용함.
1
2
3
4
5
|
SELECT SUM(saleprice) -- 메인 쿼리
FROM orders
WHERE custid = (SELECTG custid -- 서브 쿼리
FROM customer
WHERE name LIKE '류현진');
|
cs |
- 단일행 서브쿼리: 실행 결과가 하나인 서브 쿼리
- 단일행 연산자: >, >=, <=, <, <>, !=
- 다중행 서브 쿼리: 실행 결과가 여러 개인 서브쿼리
다중행 연산자 | 설명 |
IN | 메인 쿼리의 데이터가 서브 쿼리의 결과 중 하나라도 일치한 데이터가 있다면 true |
ANY, SOME | 메인 쿼리의 조건식을 만족하는 서브 쿼리의 결과가 하나 이상이면 true |
ALL | 메인 쿼리의 조건식을 서브 쿼리의 결과가 모두 만족하면 true |
EXISTS | 서브 쿼리의 결과가 존재하면 (행이 1개 이상인 경우) true |
(2) 다른 서브 쿼리
- 인라인 뷰(Inline View): FROM 절에서 사용하는 서브 쿼리. SELECT 문을 통해 일부 데이터를 먼저 추출한 다음 별칭을 주어 사용함
1
2
3
4
5
|
-- 10번 부서에서 근무하는 사원들의 정보 출력하기
SELECT e10.emp, e10.ename, e10,deptno, d.dname, d.loc
FROM (SELECT * FROM emp WHERE deptno=10) e10,
(SELECT * FROM dept) d
WHERE e10.deptno=d.deptno;
|
cs |
- 스칼라 서브 쿼리(Scalar Subquery): SELECT 절에서 사용하는 서브 쿼리
1
2
3
4
5
6
7
8
9
|
SELECT empno, ename, job, sal
(SELECT grade
FROM salgrade
WHERE e.sal BETWEEN losal AND hisal) "salgrade"
deptno,
(SELECT dname
FROM dept
WHERE e.deptno=dept.deptno) "dname"
FROM emp e;
|
cs |
5장 : SQL 상세
5.1 DDL(데이터 정의어)
(1) CREATE 문
- 기능: 오라클 객체(테이블)을 생성하고, 속성과 속성에 관한 제약을 정의함. 기본키 및 외래키를 정의하는 명령어
- 기본 규칙: 같은 사용자 소유의 테이블 이름은 중복될 수 없음
- 기본 문법
- 기본키를 지정하는 경우
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-- CREATE 문 끝에 지정하기
CREATE TABLE new_book (
book_id NUMBER,
book_name VARCHAR2(20),
publisher VARCHAR2(20),
price NUMBER,
PRIMARY KEY(book_id)
);
-- CREATE 문 중간에 지정하기
CREATE TABLE new_book (
book_id NUMBER
PRIMARY KEY,
book_name VARCHAR2(20),
publisher VARCHAR2(20),
price NUMBER
);
|
cs |
- 기본키를 복합키로 지정하는 경우
1
2
3
4
5
6
|
CREATE TABLE new_book (
book_name VARCHAR2(20),
publisher VARCHAR2(20),
price NUMBER,
PRIMARY KEY(book_name, publisher)
);
|
cs |
- 외래키 지정: 반드시 참조되는 테이블(부모 릴레이션)이 존재해야하며 참조되는 테이블의 기본키여야함. 외래키 지정시 ON DELETE 또는 ON UPDATE 옵션은 참조되는 테이블의 튜플이 삭제되거나 수정될 때 취할 수 있는 동작을 지정함. NO ACTION은 어떠한 동작도 취하지 않는다는 의미임
- 외래키 지정시 추가 옵션
명령어 | 의미 |
RESTRICTED | 자식 릴레이션에서 참조하고 있을 경우 부모 릴레이션의 삭제 작업을 거부함 |
CASCADE | 자식 릴레이션의 관련 튜플을 같이 삭제 처리 |
DEFAULT | 자식 릴레이션의 관련 튜플을 미리 설정해둔 값으로 변경함 |
NULL | 자식 릴레이션의 관련 튜플을 NULL 값으로 설정함 (NULL 값을 허가한 경우에) |
(2) ALTER 문
- 기능: 생성된 테이블의 속성, 속성에 관한 제약을 변경함. 또는 기본키 및 외래키를 변경함
- 옵션
- ADD, DROP: 속성을 추가하거나 제거할 때 사용함
- MODIFY: 속성의 기본값을 설정하거나 삭제할 때 사용함
- 기본 문법
(3) DROP 문
- 기능: 테이블을 삭제하는 명령
- 주의할 점: 테이블의 구조와 데이터를 모두 삭제하므로 사용에 주의해야함
(데이터만 삭제하려면 DELETE 문을 사용해야함) - 기본 문법
5.2 DML (데이터 조작어)
(1) INSERT 문
- 기능: 테이블에 새로운 튜플을 삽입하는 명령
- 기본 문법
- 대량으로 한꺼번에 여러 개의 튜플을 삽입하기
1
2
3
|
INSERT INTO book (book_id, book_name, price, publisher)
SELECT book_id, book_name, price, publisher
FROM imported_book;
|
cs |
(2) UPDATE 문
- 기능: 특정 속성 값을 수정함
- 기본 문법
(3) DELETE 문
- 기능: 테이블에 있는 기존의 튜플을 삭제함
- 기본 문법
(4) 연산자
- 기본 사칙연산: +, -, *, /
- NULL인 경우에는 연산을 해도 NULL임
- 문자열 더하기: || 연산자 사용
1
2
|
SELECT first_name||' '||last_name "이름"
FROM employees;
|
cs |
'기초' 카테고리의 다른 글
[SQL] 6 - JDBC (0) | 2020.06.01 |
---|---|
[SQL] 4 - 내장 함수, 시퀀스 (0) | 2020.05.30 |
[SQL] 2 - SQL 기초 (0) | 2020.05.28 |
[SQL] 1- 데이베이스 개요 (0) | 2020.05.26 |
[JAVA] 13 - 네트워크 기초 (0) | 2020.05.21 |