[データベース]SQL JOIN
机を割る
複数のテーブルの情報を1つのテーブルに組み合わせる技術.
1、3番の調音には重複する情報があります.メリットは一目でわかりますが、データベース容量が大量に消費され、データの変更時に問題が発生します.
読みやすいですが、書き込みが不便です.
topic、author、profileを3つのテーブルに分けることで、重複データを減らすことができます.データの変更は簡単ですが、一目瞭然ではありません.
データの変更は便利だが、読むのは不便だ.
📌この両者の関係を解決するために,RDBのJOIN演算が存在する.
JOIN可視化
JOIN
例
例
LEFT (OUTER) JOIN ⭐
SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key = B.key WHERE B.key IS NULL
SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key = B.key
SELECT * FROM topic
LEFT JOIN author
ON topic.author_id = author.aid
(ただしtopic.author id=author.aidのみ)
SELECT * FROM topic
LEFT JOIN author
ON topic.author_id = author.aid
LEFT JOIN profile
ON author.profile_id = profile.pid;
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid
の結果表と概要表はLEFTOUTER JOINSELECT tid, topic.title, author_id, name, profile.title
AS job_title FROM topic
LEFT JOIN author
ON topic.author_id = author.aid
LEFT JOIN profile
ON author.profile_id = profile.pid;
SELECT tid, topic.title, author_id, name, profile.title
AS job_title FROM topic
LEFT JOIN author
ON topic.author_id = author.aid
LEFT JOIN profile
ON author.profile_id = profile.pid WHERE aid = 1;
RIGHT OUTER JOIN
SELECT * FROM TableA A
RIGHT JOIN TableB B
ON A.key = B.key
SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key = B.key WHERE A.key IS NULL
大部分はLEFTOUTER JOINに還元して使用(非常用)INNER JOIN ⭐⭐
SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key = B.key
SELECT * FROM topic
INNER JOIN author
ON topic.author_id = author.aid
左側のoutherjoin結果からnull値を持つtupleを削除します.
SELECT * FROM topic
INNER JOIN author
ON topic.author_id = author.id
INNER JOIN profile
ON profile.pid = author.profile_id
これから現れるjoinは難しいが、重要ではない.
FULL OUTER JOIN
SELECT * FROM TableA A
FULL OUTER JOIN TableB B
ON A.key = B.key
full outer joinの結果と同じです.
-- full outer join
SELECT * FROM topic
FULL OUTER JOIN author
ON topic.author_id = author.aid
-- left outer join + right outer join 에서 중복 제거
(SELECT * FROM topic
LEFT JOIN author
ON topic.author_id = author.aid)
UNION -- DISTINCT가 생략되어있다.
(SELECT * FROM topic
RIGHT JOIN author
ON topic.author_id = author.aid)
EXCLUSIVE LEFT JOIN
SELECT * FROM TableA A
FULL OUTER JOIN TableB B
ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL
SELECT * FROM topic
LEFT JOIN author
ON topic.author_id = author.aid
WHERE author.aid is NULL
CROSS JOIN
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
CROSS JOIN JOIN_TABLE B
SELF JOIN
SELECT
A.NAME, B.AGE
FROM EX_TABLE A, EX_TABLE B
Reference
この問題について([データベース]SQL JOIN), 我々は、より多くの情報をここで見つけました https://velog.io/@guswns3371/데이터베이스-SQL-JOINテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol