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)としてマークアップするには
上の文法は以下の過程を経ています.
購買表userIDJYPを抽出した.その後、販売テーブルのJYP列でuserIDと同じ値を検索し、JYPというIDを見つけて、購入テーブルと販売テーブルの2行を結合します.WHERE buyTBl.userID = 'JYP'を省略すると、buytblの各行は同じように繰り返される.

OUTER JOIN(外部連結)

OUTER JOINは、結合条件を満たさない行を含むJOINである.INNER JOINは、両方の表に内容があるものだけを表記する方式で、OUTER JOININNER 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文1とSELECT文2の結果列の個数は同じでなければなりません.
  • データフォーマットも、各列単位で同じまたは互換性のあるデータフォーマットでなければならない.たとえば、文1の結果がINTであり、文1の結果がCHARである場合、エラーが発生します.
  • 列名記事1の列名による.
  • ユニオンのみで重複した列を消去し、データのみを並べ替え、ユニオンALLで重複した列をすべて出力します.

  • 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);