JOIN
두 개 이상 테이블에서 SQL 질의
-- 여러 테이블을 결합해 질의해서 결과 집합을 도출해 낸다.
조인 다이어그램
일반 조인 : SQL 문에서는 주로 동등조인을 사용함
외부 조인 : FROM 절에 조인 종류를 적고 ON을 이용해 조인조건을 명시함
명령 | 문법 | 설명 |
일반조인 | SELECT <속성들> FROM 테이블1, 테이블2 WHERE <조인조건> AND <검색조건> |
SQL 문에는 주로 동등조인을 사용함 두가지 문법 중 하나를 사용할 수 있음 |
SELECT <속성들> FROM 테이블1 INNER JOIN 테이블2 ON <조인조건> WHERE <검색조건> |
||
외부조인 | SELECT <속성들> FROM 테이블1 {LEFR |RIGHT|FULL [OUTER]} JOIN 테이블 2 ON <조인조건> WHERE <검색조건> |
외부조인은 FROM 절에 조인 종류를 적고 ON을 이용해 조인조건을 명시함 |
일반조인 / Inner 조인
-- 기준 테이블과 중복되는 데이터 추출, SQL문에서 주로 동등조인 사용
예시)
SELECT *
FROM Custmer, Orders;
일반조인 / 동등 조인과 조건
-- 조건문과 정렬을 함께 사용해보자
예시)
SELECT *
FROM Customer, Orders
WHERE Customer.custid =Orders.custid;
외부 조인
-- 외부조인은 상대 테이블과 결합된 집합이 됨
예시)
SELECT Customer.name, saleprice
FROM Customer LEFT OUTER JOIN Orders
ON Customer.custid = Orders.custid;
CROSS JOIN
-- 상호 조인이라고 불리며, 테이블의 모든 행등과 조인 대상 테이블의 모든 행을 조인시키는 기능
예시)
SELECT <속성들>
FROM 테이블1 CROSS JOIN
테이블2 ON <조인조건>
WHERE <검색조건>
집합 연산자
두개의 SELECT문의 결과에 대해 합집합, 교집합, 차집합을 구하는 연산자이다.
-- 결합하는 SELECT문의 결과는 열의 수나 각각의 데이터형이 똑같아야 한다.
연산자 | 설명 |
Table1 UNION Table2 | Table1과 Table2의 합집합 |
Table1 MINUS Table2 | Table1과 Table2의 차집합 |
Table1 INTERSECT Table2 | Table1과 Table2의 교집합 |
Mysql에는 MINUS, INTERSECT 연산자 지원이 안되고, IN과 NOT IN 연산자로 구현할 수 있다. |
합집합 UNION
-- SELECT문을 UNION으로 연결하면 중복되는 데이터를 정리한 후 가져온다
예시)
SELECT name
FROM Customer
WHERE address LIKE '대한민국%'
UNION
SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders);
MINUS 연산자
-- Mysql에는 MINUS 연산자 지원이 안되고 NOT IN 연산자로 구현할 수 있다.
INTERSECT 연산자
-- INTERSECT 연산자 지원이 안되고 IN 서브쿼리로 사용 가능하다.
다중행 연산자
다중행 연산자란?
-- 메인쿼리와 서브쿼리 사이에 다중행 변환 값에 대한 비교를 수행한다.
-- 비교연산자(<,>,=,<>)와 결합해 사용
다중행 연산자 소개
연산자 | 설명 |
IN | 서브쿼리 반환 값에서 연산 조건에 해당하는 값이 있으면 참이다. |
ANY, SOME | 서브쿼리 반환 값에서 조건과 각각의 값을 비교하여 하나 이상을 만족하면 참이다 |
ALL | 값을 서브쿼리에 의해 리턴되는 모든 값과 조건값을 비교하여 모든 값을 만족해야 참이다 |
EXISTS | 서브쿼리의 반환 결과 중에서 메인 쿼리 비교 조건이 만족하는 값이 하나라도 존재하면 참이다. |
ANY : OR 개념과 유사, ALL : AND 개념과 유사 |
IN 연산자
-- 서브쿼리가 리턴하는 행 중에서 어느 하나라도 만족하는 경우에 결과를 반환
ALL 연산자
-- 서브쿼리에 의해 반환되는 모든 값과 메인쿼리와 조건값을 비교하여 모든 값을 만족해야 참이다
EXISTS 연산자
-- 양쪽 쿼리 SELECT 조건에 맞는 튜플이 존재하면 결과에 포함시킨다
-- 서브쿼리의 어떤 행이 조건에 만족하면 참이 된다
-- NOT EXISTS는 부속질의문의 모든 행이 조건에 만족하지 않을 때만 참이다.
ANY 연산자
-- ANY 어떤 값과 일치한다라는 의미의 연산자이다
-- 서브 쿼리에 의해 구해진 값 중 아무 값과 비교하고 싶은 경우에만 사용한다.