지난 포스팅에선 SQL문 중 DML 문에 대하여 정리하였다.
이번 포스팅에선 DML문 중 다중검색에 대하여 정리하겠다.
지난 번과 마찬가지로 [ ]는 생략 가능한 문장이다.
더불어 다중검색은 정보처리 기능사 수준에서 많이 출제되는 난이도의 유형이 아니므로 시간이 부족한 사람들은 넘어가는게 좋겠다
다중 검색:
다중검색이란 두 개 이상의 릴레이션들을 섞어서 검색하는 SELECT문의 일종이다.
1. 다중 검색 - 하위 질의
다른 테이블에서 조건에 맞는 튜플들을 뽑은 리스트를 만든 뒤 그 리스트에 등록되어있는지의 유무로 해당 테이블에서 튜플을 뽑는 방식
EX.1)
<여가활동>테이블에서 취미가 ‘나이트댄스’인 사원에 대해 <사원>테이블에서 해당 사원
의 이름과 주소를 검색해라(주어진 테이블은 사원, 여가활동 테이블이 있다.)
SELECT 이름, 주소
FROM 사원
WHERE 이름 IN(SELECT 이름 FROM 여가활동 WHERE 취미 = ‘나이트댄스’);
EX.2)
여가활동을 하지 않는 사원들의 이름을 검색해라(주어진 테이블은 사원, 여가활동 테이블이 있다.)
SELECT 이름
FROM 사원
WHERE 이름 NOT IN (SELECT 이름 FROM 여가활동);
2. 다중 검색 - 복수 질의
속성 이름을 쓸 때 <테이블명.속성명> 형식으로 작성하여 복수 테이블중 어느 테이블에서 자료값을 뽑아쓸지 정한다.
EX.1)
경력이 10년 이상이면서 취미가 있는 사원들의 이름, 부서, 취미, 경력을 검색해라(주어진 테이블은 사원, 여가활동 테이블이 있다.)
SELECT 사원.이름, 사원.부서, 여가활동.취미, 사원.경력
FROM 사원, 여가활동
WHERE 사원.경력>=10 AND 사원.이름 = 여가활동.이름;
3. 다중 검색 – 통합 질의
UNION을 사용하여 두 테이블 중 어딘가에 등록 되어있는 튜플이면 모두 출력한다.(합집합)
EX.1)
사원들의 명단이 <임원>테이블과 <직원>테이블에 저장되어있다. 두 테이블을 통합하여라(단, 같은 레코드값이 중복되어 나오지 않게 해라)
SELECT * FROM 임원 UNION SELECT * FROM 직원4. 다중검색(JOIN)
4. 다중검색(JOIN)
4-1. INNER JOIN
두 릴레이션에서 겹치는 값들만 출력한다.
EQUI 조인: 중복된 값들만 출력하되 한번씩만 출력한다. NATURAL JOIN 이라고도 한다.
4-1-1. WHERE절을 이용한 EQUI JOIN
EX.1)
<학생>테이블과 <학과>테이블에서 학과코드 값이 같은 튜플을 JOIN 하여 학번, 이름, 학과코드, 학과명을 출력하여라
SELECT 학생.학번, 학생.이름, 학과.학과코드, 학과.학과명
FROM 학생,학과
WHERE 학생.학과코드 = 학과.학과코드;
4-1-2. NATURAL JOIN을 이용한 EQUI JOIN
EX.1)
<학생>테이블과 <학과>테이블에서 학과코드 값이 같은 튜플을 JOIN 하여 학번, 이름, 학과코드, 학과명을 출력하여라
SELECT 학생.학번, 학생.이름, 학과.학과코드, 학과.학과명
FROM 학생 NATRUAL JOIN 학과
WHERE 학생.학과코드 = 학과.학과코드;
4-1-3. JOIN ~ USING을 이용한 EQUI JOIN
EX.1)
<학생>테이블과 <학과>테이블에서 학과코드 값이 같은 튜플을 JOIN 하여 학번, 이름, 학과코드, 학과명을 출력하여라
SELECT 학생.학번, 학생.이름, 학과.학과코드, 학과.학과명
FROM 학생 JOIN 학과
USING(학과코드);
4-1-4. JOIN ~ ON을 이용한 EQUI JOIN
EX.1)
<학생>테이블과 <학과>테이블에서 학과코드 값이 같은 튜플을 JOIN 하여 학번, 이름, 학과코드, 학과명을 출력하여라
SELECT 학생.학번, 학생.이름, 학과.학과코드, 학과. 학과명
FROM 학생 JOIN 학과
ON 학생.학과코드 = 학과.학과코드 4-2. OUTER JOIN
4.2 OUTER JOIN
테이블에서 JOIN 조건에 맞지 않는 튜플들도 결과로 출력
4-2-1. LEFT OUTER JOIN
EX.1)
<학생> 테이블과 <학과> 테이블에서 학과코드 값이 같은 튜플을 JOIN하여 학번, 이름, 학과코드, 학과명을 출력하여라. 이때 학과코드값이 입력되지 않은 학생들도 같이 출력하여라.
SELECT 학생.학번, 학생.이름, 학생.학과코드, 학과.학과명
FROM 학생 LEFT OUTER JOIN 학과
ON 학생.학과코드 = 학과.학과코드;
// LEFT OUTER JOIN-->좌측에 있는 테이블들은 전체 튜플 출력/우측에 있는 테이블들은 겹치는 튜플만 출력
SELECT 학생.학번, 학생.이름, 학생.학과코드, 학과.학과명
FROM 학생, 학과
WHERE 학생.학과코드 = 학과.학과코드(+);
// LEFT/RIGHT 무관하게 (+)붙어있지 않은 쪽이 전체 튜플 출력/붙어있는 쪽이 겹치는 튜플만 출력
4-2-2. RIGHT OUTER JOIN
EX.1)
<학생> 테이블과 <학과> 테이블에서 학과코드 값이 같은 튜플을 JOIN하여 학번, 이름, 학과코드, 학과명을 출력하여라. 이때 학과코드값이 입력되지 않은 학생들도 같이 출력하여라.
SELECT 학생.학번, 학생.이름, 학생.학과코드, 학과.학과명
FROM 학과 RIGHT OUTER JOIN 학생
ON 학과.학과코드 = 학생.학과코드;
// RIGHT OUTER JOIN-->우측에 있는 테이블들은 전체 튜플 출력/좌측에 있는 테이블들은 겹치는 튜플만 출력
SELECT 학생.학번, 학생.이름, 학생.학과코드, 학과.학과명
FROM 학생,학과
WHERE 학과.학과코드(+) = 학생.학과코드;
// LEFT/RIGHT 무관하게 (+)붙어있지 않은 쪽이 전체 튜플 출력/붙어있는 쪽이 겹치는 튜플만 출력
4-2-3. FULL OUTER JOIN
EX.1)
<학생> 테이블과 <학과> 테이블에서 학과코드 값이 같은 튜플을 JOIN하여 학번, 이름, 학과코드, 학과명을 출력하여라. 이때 학과코드값이 입력되지 않은 학생들과 학생이 없는 학과코드들도 같이 출력하여라.
SELECT 학생.학번, 학생.이름, 학생.학과코드, 학과.학과명
FROM 학생 FULL OUTER JOIN 학과
ON 학생.학과코드 = 학과.학과코드
이번 포스팅에선 DML문 중 다중검색에 대하여 정리하면서 SQL문에 대한 정리를 마무리한다.
다음 포스팅에선 운영체제에 대하여 정리하겠다.
'정보처리 기능사 정리' 카테고리의 다른 글
9. 각 운영체제별 특징 (0) | 2022.09.03 |
---|---|
8. 운영체제 (0) | 2022.08.31 |
6. SQL 기본 문법 - DML (0) | 2022.08.31 |
5. SQL 기본 문법 - DCL (0) | 2022.08.30 |
4. SQL 기본 문법 - DDL (0) | 2022.08.23 |