티스토리 뷰
본 포스팅은 데이터베이스 다중테이블 연산과 JOIN에 대해 알아보겠습니다.
앞선 포스팅에서 데이터베이스의 관계에 대해 알아보았습니다. 본 포스팅에서는 각각의 테이블간의 연관관계를 기준으로 다중테이블 연산 방법을 살펴보고 JOIN 연산을 활용하는 방법에 대해 알아보도록 하겠습니다.
먼저 데이터베이스 다중테이블 연산 방법입니다.
먼저 CREATE / SELECT & INSERT (거의)동시에 사용하는 방법입니다.
INSERT INTO profession (profession)
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
SELECT 한 결과가 (profession)에 업데이트가 됩니다.
다음으로 SELECT & CREATE 동시에 사용하는 방법입니다.
CREATE TABLE profession AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
SELECT 한 결과가 TABLE 열로 추가됩니다.
다음으로 CREATE / SELECT & INSERT 동시에 사용하는 방법입니다.
CREATE TABLE profession
(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
profession VARCHAR(20)
) AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
다음으로 AS (alias)에 대해 알아보겠습니다.
AS는 새로 만드는 테이블을 SELECT 한 결과로 채우는 역할을 합니다.
별명 : 열의 이름을 AS로 지정할 수 있습니다.
연결 이름 : 테이블을 AS로 별명 지정할 수 있습니다.
AS를 생략해도 무방합니다.
그럼 이제 JOIN에 대해 살펴보겠습니다.
먼저 INNER JOIN (내부조인) 입니다.
[test 환경]
CREATE DATABASE JOIN_TEST;
USE JOIN_TEST;
CREATE TABLE toys
(
toy_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
toy VARCHAR(30) NOT NULL
);
INSERT INTO toys
(toy)
VALUES
('balsa glider'),('toy soldiers'),('harmonica'),('<wbr />baseball cards');
CREATE TABLE boys
(
boy_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
boy VARCHAR(30) NOT NULL
);
INSERT INTO boys
(boy)
VALUES
('Davey'),('Bobby'),('Beaver')<wbr />,('Richie');
SELECT * FROM boys;
SELECT * FROM toys;
SELECT t.toy, b.boy
FROM toys AS t
CROSS JOIN boys AS b;
크로스 조인은 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 반환합니다.
콤마 조인은 CROSS JOIN 대신 ,로 대체한 조인입니다. (동작 방식 동일)
INNER JOIN (내부조인)은 쿼리의 조건에 따라 일부 열과 열이 제거 된 크로스 조인입니다.
SELECT t.toy, b.boy
FROM toys AS t
INNER JOIN
boys AS b
ON(WHERE) t.toy_id = b.boy_id;
동등조인은 같은지를 테스트하는 내부 조인입니다.
SELECT t.toy, b.boy
FROM toys AS t
INNER JOIN
boys AS b
ON t.toy_id = b.toy_id;
비동등조인은 같지 않은지를 테스트하는 내부 조인입니다.
SELECT t.toy, b.boy
FROM toys AS t
INNER JOIN
boys AS b
ON t.toy_id <> b.toy_id
ORDER BY b.boy;
자연조인은 일치하는 열 이름을 사용하는 내부 조인입니다.
SELECT t.toy, b.boy
FROM toys AS t
NATURAL JOIN
boys AS b;
# 참조
외부 조인은 테이블을 조인하는 순서가 매우 중요하다.
다음으로 OUTER JOIN (외부조인) 입니다.
OUTER JOIN (외부조인)은 왼쪽과 오른쪽이 있습니다.
SELECT <컬럼 목록>
FROM <첫 번째 테이블 (LEFT TABLE)>
<LEFT | RIGHT | FULL > OUTER <wbr />JOIN <두 번째 테이블 (RIGHT TABLE)>
ON <조인될 조건>
WHERE 검색조건
먼저 LEFT OUTER JOIN 입니다.
왼쪽 외부 조인(LEFT OUTER JOIN) 왼쪽 테이블의 모든 행과 오른쪽 테이블의 행을 비교합니다.
SELECT t.toy, b.boy
FROM toys t
LEFT OUTER JOIN boys b
ON b.toy_id = t.toy_id;
외부 조인은 결과와 없더라도 NULL값을 출력합니다. 외부 조인이 여러개 일치할 경우 충복 값이 나옵니다.
다음으로 RIGHT OUTER JOIN 입니다.
LEFT OUTER JOIN과 동일하나 FROM ~ RIGHT OUTER JOIN 사이에 위치한 TABLE이 오른쪽이 됩니다.
마지막으로 FULL OUTER JOIN 입니다.
양 테이블 모두를 머지합니다.
그밖의 JOIN에 대해 알아보겠습니다.
먼저 SELF JOIN입니다.
셀프 조인으로 하나의 테이블로 같은 정보를 가진 테이블이 두개 있는 것처럼 쿼리를 보낼 수 있습니다.
다음으로 UNION(유니온)입니다. 두 개 이상의 테이블을 묶는 방법입니다.
각 SELECT 문의 열 수는 같아야 합니다. (열의 내용이 같은 타입 유형이어야 하나로 머지의 의미가 있다.)
각 SELECT 문에 표현식과 집계 함수도 같아야 합니다.
SELECT 문의 순서에 영향을 주지 않습니다.
중복을 보고 싶은 경우 UNION ALL을 사용합니다.
SELECT toy_id FROM toys
UNION
SELECT toy_id FROM boys
UNION
SELECT toy_id FROM girls;
SELECT toy_id FROM toys
UNION ALL
SELECT toy_id FROM boys
UNION ALL
SELECT toy_id FROM girls;
모든 SELECT 문이 완료 된 이후에 정렬되며, ORDER BY는 마지막에 한번만 가능합니다.
마지막으로 JOIN과 비슷한 INTERSECT & EXCEPT (AND & OR)입니다.
INTERSECT의 경우 첫번째 두번째 쿼리 모두에 있는 열을 반환합니다.
EXCEPT의 경우 첫번째 쿼리에만 있는 열을 반환합니다.
지금까지 다중테이블 연산 및 다양한 JOIN에 대해 알아보았습니다.
다음시간에는 서브쿼리에 대해 알아보겠습니다.
고맙습니다.
'⑤ 개발, 데이터베이스 > ⓓ Database' 카테고리의 다른 글
[SQL 6일차] 데이터베이스 보안 (0) | 2018.07.03 |
---|---|
[SQL 5일차] 데이터베이스 서브쿼리와 제약조건, 뷰, 트랜잭션 (0) | 2018.07.03 |
[SQL 3일차] 데이터베이스 설계 (0) | 2018.07.03 |
[SQL 2일차] 데이터베이스 정규화와 ALTER문 (0) | 2018.07.03 |
[SQL 1일차] 데이터베이스와 테이블 그리고 DML (0) | 2018.07.03 |
- Total
- Today
- Yesterday
- k8s
- SWA
- 쿠버네티스
- git
- node.js
- Da
- SA
- kubernetes
- aws
- Docker
- JBoss
- 마이크로서비스 아키텍처
- 마이크로서비스
- OpenStack
- openstack tenant
- 아키텍처
- aa
- apache
- openstack token issue
- Architecture
- API Gateway
- nodejs
- MSA
- wildfly
- TA
- JEUS7
- webtob
- JEUS6
- 오픈스택
- jeus
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |