SQL JOINについて
JOIN Join
とは、2つ以上のテーブルを組み合わせて結果セットを形成することを意味する.データベース内のテーブルは、重複やスペースの無駄を避けるために複数のテーブルに分けて格納されます.そしてこれらの別々のテーブルは互いにつながっています.
したがって、これらの複数のテーブル間の関係では、2つ以上のテーブルを組み合わせて結果セットの結合として表すプロセスが重要です.
INNER JOIN(内部連結)
INNERJOINはJOINで最も多く使われているJOINです
例を挙げる.商品購入に関する購入フォームと、購入した会員に関する情報を知るための会員に関するフォームがあると仮定します.この場合、物品を配送するために購入した会員の住所を知る必要があります.この会員の住所情報を知るために,住所情報のある会員表と結合した結合はINNERJOINである.--형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인 될 조건>
WHERE 검색조건
上記の形式でINNERJOINをJOINと認識するのは少なくともINNERJOIN
購入フォームにおいて、ID JYP
の人が購入したものを送信するために、その名称/住所/連絡先などをチェックイン検索した場合、以下のように記入することができる.SELECT *
FROM buyTbl
INNER JOIN userTbl
ON buyTbl.userID = userTbl.userID
WHERE buyTbl.userID = 'JYP';
ON構文とWHERE構文には「表名」が含まれます.列名として表示されます.必要なのは、両方のテーブルに同じカラム名があるからです.したがって、2つのテーブルを結合する場合は、同じカラム名を「テーブル名」にする必要があります.列名(Column Name)としてマークアップするには
上の文法は以下の過程を経ています.
購買表userID
人JYP
を抽出した.その後、販売テーブルのJYP
列でuserID
と同じ値を検索し、JYP
というIDを見つけて、購入テーブルと販売テーブルの2行を結合します.WHERE buyTBl.userID = 'JYP'
を省略すると、buytblの各行は同じように繰り返される.
OUTER JOIN(外部連結) OUTER JOIN
は、結合条件を満たさない行を含むJOINである.INNER JOIN
は、両方の表に内容があるものだけを表記する方式で、OUTER JOIN
とINNER JOIN
は同じで、両方に内容があれば当然表記しますが、片方だけでも内容があっても結果が表示されます.
これはたまに役に立つ方法なので、覚えておいてください.SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인 될 조건>
WHERE 검색조건;
例を挙げる.会員全員の購入記録を確認しますが、購入記録がない会員も印刷します.この場合のクエリ文は次のようになります.SELECT U.userID, U.name, B.prodName, U.addr, CONCAT(U.mobile1, U.mobile2) AS '연락처'
FROM userTbl U
LEFT OUTER JOIN buyTbl B
ON U.userID = B.userID
ORDER BY U.userID;
LEFTOUTER JOIN文の意味を왼쪽 테이블(userTbl)의 것은 모두 출력되어야 한다
と解釈すると覚えやすいです.同じ結果を得るためには,左右のテーブルの位置を変えるだけでよい.
Full JOIN(完全連結または完全外部連結)
FULL JOIN簡単にLEFT JOIN+RIGHT JOINと考えればOKすなわち、一方を基準として条件と一致しないコンテンツを出力するのではなく、양쪽 모두
において全ての条件が一致しないコンテンツを出力する.
UNION JOIN
UNIOJOINとは、2つのクエリの結果を行にまとめることです.SELECT 문장1
UNION ALL
SELECT 문장2
INNERJOINはJOINで最も多く使われているJOINです
例を挙げる.商品購入に関する購入フォームと、購入した会員に関する情報を知るための会員に関するフォームがあると仮定します.この場合、物品を配送するために購入した会員の住所を知る必要があります.この会員の住所情報を知るために,住所情報のある会員表と結合した結合はINNERJOINである.
--형식
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인 될 조건>
WHERE 검색조건
上記の形式でINNERJOINをJOINと認識するのは少なくともINNERJOIN購入フォームにおいて、ID
JYP
の人が購入したものを送信するために、その名称/住所/連絡先などをチェックイン検索した場合、以下のように記入することができる.SELECT *
FROM buyTbl
INNER JOIN userTbl
ON buyTbl.userID = userTbl.userID
WHERE buyTbl.userID = 'JYP';
ON構文とWHERE構文には「表名」が含まれます.列名として表示されます.必要なのは、両方のテーブルに同じカラム名があるからです.したがって、2つのテーブルを結合する場合は、同じカラム名を「テーブル名」にする必要があります.列名(Column Name)としてマークアップするには上の文法は以下の過程を経ています.
購買表
userID
人JYP
を抽出した.その後、販売テーブルのJYP
列でuserID
と同じ値を検索し、JYP
というIDを見つけて、購入テーブルと販売テーブルの2行を結合します.WHERE buyTBl.userID = 'JYP'
を省略すると、buytblの各行は同じように繰り返される.OUTER JOIN(外部連結) OUTER JOIN
は、結合条件を満たさない行を含むJOINである.INNER JOIN
は、両方の表に内容があるものだけを表記する方式で、OUTER JOIN
とINNER JOIN
は同じで、両方に内容があれば当然表記しますが、片方だけでも内容があっても結果が表示されます.
これはたまに役に立つ方法なので、覚えておいてください.SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인 될 조건>
WHERE 검색조건;
例を挙げる.会員全員の購入記録を確認しますが、購入記録がない会員も印刷します.この場合のクエリ文は次のようになります.SELECT U.userID, U.name, B.prodName, U.addr, CONCAT(U.mobile1, U.mobile2) AS '연락처'
FROM userTbl U
LEFT OUTER JOIN buyTbl B
ON U.userID = B.userID
ORDER BY U.userID;
LEFTOUTER JOIN文の意味を왼쪽 테이블(userTbl)의 것은 모두 출력되어야 한다
と解釈すると覚えやすいです.同じ結果を得るためには,左右のテーブルの位置を変えるだけでよい.
Full JOIN(完全連結または完全外部連結)
FULL JOIN簡単にLEFT JOIN+RIGHT JOINと考えればOKすなわち、一方を基準として条件と一致しないコンテンツを出力するのではなく、양쪽 모두
において全ての条件が一致しないコンテンツを出力する.
UNION JOIN
UNIOJOINとは、2つのクエリの結果を行にまとめることです.SELECT 문장1
UNION ALL
SELECT 문장2
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인 될 조건>
WHERE 검색조건;
SELECT U.userID, U.name, B.prodName, U.addr, CONCAT(U.mobile1, U.mobile2) AS '연락처'
FROM userTbl U
LEFT OUTER JOIN buyTbl B
ON U.userID = B.userID
ORDER BY U.userID;
SELECT 문장1
UNION ALL
SELECT 문장2
NOT IN / IN
NOT IN
は、1回目のクエリの結果から2回目のクエリを除外する構文です.たとえば、すべてのユーザーを問い合せるが、電話のない人を除外する場合は、次のように使用できます.SELECT name, CONCAT(mobile1, mobile2) AS '전화번호' FROM userTbl
WHERE name NOT IN ( SELECT name FROM userTbl WHERE mobile1 IS NULL );
逆に、1回目のクエリの結果において、2回目のクエリのみがクエリされた場合、IN
を使用することができる.たとえば、電話のない人だけを検索する場合は、次のように使用できます.
SELECT name, CONCAT(mobile1, mobile2) AS '전화번호' FROM userTbl
WHERE name IN (SELECT name FROM userTbl WHERE mobile1 IS NULL);
Reference
この問題について(SQL JOINについて), 我々は、より多くの情報をここで見つけました https://velog.io/@hj8853/SQL-JOIN의-이해テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol