JoinとUnion
7851 ワード
1.Join
=, <>, <=, >=, !=, BETWEEN、LIKE、NOT;テーブルを接続するために使用できます.しかし、最も一般的な演算子はシンボルに等しい.
SQL接続で使用可能なタイプは異なります:INNER JOIN:レコードを返します.2つのテーブルが一致している場合.
LEFTJOIN:右のテーブルに一致しない場合でも、左のテーブルのすべてのローを返します.
RIGHT JOIN:左のテーブルに一致していなくても、右のテーブルのすべてのローを返します.
FULL JOIN:テーブルに一致するすべてのローを返します.SQL FULL JOIN結合の左、右外部接続の結果.
SELF JOIN:テーブル自体を接続するために使用され、テーブルに2つのテーブルがある場合は、少なくとも1つのテーブルにあるSQL文を一時的に名前を変更します.
CARTESIAN JOIN:2つ以上の結合されたテーブルからのレコードのセットのデカルト積を返します.
2.Union
SQL UNION句/オペレータは、2つ以上のSELECT文の結果をマージするために使用され、重複する行は返されません.
UNIONを使用するには、SELECTごとに同じ列数、同じ数の列式、同じデータ型を選択し、同じ順序で配置する必要がありますが、同じ長さを持つ必要はありません.
UNIONALL演算子は、重複行の結果を含む2つのSELECT文を結合するために使用されます.
ユニオン同様のルールはユニオンALL操作にも適用されます.
SQL INTERSECT句:2つのSELECT文を使用しますが、最初のSELECT文から2番目のSELECT文の結果と全く同じ行をすべて返します.
SQL EXCEPT句:SQL EXCEPT句/オペレータは、2つのSELECT文をマージし、2番目のSELECT文によって返されなかった最初のSELECT文から行を返します.
=, <>, <=, >=, !=, BETWEEN、LIKE、NOT;テーブルを接続するために使用できます.しかし、最も一般的な演算子はシンボルに等しい.
,(a)CUSTOMERS :
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
(b) :
+-----+---------------------+-------------+--------+
|OID | DATE | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 | 3 | 3000 |
| 100 | 2009-10-08 00:00:00 | 3 | 1500 |
| 101 | 2009-11-20 00:00:00 | 2 | 1560 |
| 103 | 2008-05-20 00:00:00 | 4 | 2060 |
+-----+---------------------+-------------+--------+
SQL> SELECT ID, NAME, AGE, AMOUNT FROM CUSTOMERS, ORDERS
WHERE CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
#
+----+----------+-----+--------+
| ID | NAME | AGE | AMOUNT |
+----+----------+-----+--------+
| 3 | kaushik | 23 | 3000 |
| 3 | kaushik | 23 | 1500 |
| 2 | Khilan | 25 | 1560 |
| 4 | Chaitali | 25 | 2060 |
+----+----------+-----+--------+
SQL接続で使用可能なタイプは異なります:INNER JOIN:レコードを返します.2つのテーブルが一致している場合.
INNER JOIN。 。
, A B 。
INNER JOIN :
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
:
,(a)CUSTOMERS :
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
(b) ORDERS :
+-----+---------------------+-------------+--------+
| OID | DATE | ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 | 3 | 3000 |
| 100 | 2009-10-08 00:00:00 | 3 | 1500 |
| 101 | 2009-11-20 00:00:00 | 2 | 1560 |
| 103 | 2008-05-20 00:00:00 | 4 | 2060 |
+-----+---------------------+-------------+--------+
SQL> SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
:
+----+----------+--------+---------------------+
| ID | NAME | AMOUNT | DATE |
+----+----------+--------+---------------------+
| 3 | kaushik | 3000 | 2009-10-08 00:00:00 |
| 3 | kaushik | 1500 | 2009-10-08 00:00:00 |
| 2 | Khilan | 1560 | 2009-11-20 00:00:00 |
| 4 | Chaitali | 2060 | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+
LEFTJOIN:右のテーブルに一致しない場合でも、左のテーブルのすべてのローを返します.
RIGHT JOIN:左のテーブルに一致していなくても、右のテーブルのすべてのローを返します.
FULL JOIN:テーブルに一致するすべてのローを返します.SQL FULL JOIN結合の左、右外部接続の結果.
FULL JOIN :
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
#mysql
SQL> SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION ALL
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
SELF JOIN:テーブル自体を接続するために使用され、テーブルに2つのテーブルがある場合は、少なくとも1つのテーブルにあるSQL文を一時的に名前を変更します.
SELECT a.column_name, b.column_name...FROM table1 a, table1 b
WHERE a.common_field = b.common_field;
CARTESIAN JOIN:2つ以上の結合されたテーブルからのレコードのセットのデカルト積を返します.
。 , , 。
:
SELECT table1.column1, table2.column2...
FROM table1, table2 [, table3 ]
:
,(a)CUSTOMERS :
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
(b) ORDERS :
+-----+---------------------+-------------+--------+
|OID | DATE | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 | 3 | 3000 |
| 100 | 2009-10-08 00:00:00 | 3 | 1500 |
| 101 | 2009-11-20 00:00:00 | 2 | 1560 |
| 103 | 2008-05-20 00:00:00 | 4 | 2060 |
+-----+---------------------+-------------+--------+
SQL> SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS, ORDERS;
+----+----------+--------+---------------------+
| ID | NAME | AMOUNT | DATE |
+----+----------+--------+---------------------+
| 1 | Ramesh | 3000 | 2009-10-08 00:00:00 |
| 1 | Ramesh | 1500 | 2009-10-08 00:00:00 |
| 1 | Ramesh | 1560 | 2009-11-20 00:00:00 |
| 1 | Ramesh | 2060 | 2008-05-20 00:00:00 |
| 2 | Khilan | 3000 | 2009-10-08 00:00:00 |
| 2 | Khilan | 1500 | 2009-10-08 00:00:00 |
| 2 | Khilan | 1560 | 2009-11-20 00:00:00 |
| 2 | Khilan | 2060 | 2008-05-20 00:00:00 |
| 3 | kaushik | 3000 | 2009-10-08 00:00:00 |
| 3 | kaushik | 1500 | 2009-10-08 00:00:00 |
| 3 | kaushik | 1560 | 2009-11-20 00:00:00 |
| 3 | kaushik | 2060 | 2008-05-20 00:00:00 |
| 4 | Chaitali | 3000 | 2009-10-08 00:00:00 |
| 4 | Chaitali | 1500 | 2009-10-08 00:00:00 |
| 4 | Chaitali | 1560 | 2009-11-20 00:00:00 |
| 4 | Chaitali | 2060 | 2008-05-20 00:00:00 |
| 5 | Hardik | 3000 | 2009-10-08 00:00:00 |
| 5 | Hardik | 1500 | 2009-10-08 00:00:00 |
| 5 | Hardik | 1560 | 2009-11-20 00:00:00 |
| 5 | Hardik | 2060 | 2008-05-20 00:00:00 |
| 6 | Komal | 3000 | 2009-10-08 00:00:00 |
| 6 | Komal | 1500 | 2009-10-08 00:00:00 |
| 6 | Komal | 1560 | 2009-11-20 00:00:00 |
| 6 | Komal | 2060 | 2008-05-20 00:00:00 |
| 7 | Muffy | 3000 | 2009-10-08 00:00:00 |
| 7 | Muffy | 1500 | 2009-10-08 00:00:00 |
| 7 | Muffy | 1560 | 2009-11-20 00:00:00 |
| 7 | Muffy | 2060 | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+
2.Union
SQL UNION句/オペレータは、2つ以上のSELECT文の結果をマージするために使用され、重複する行は返されません.
UNIONを使用するには、SELECTごとに同じ列数、同じ数の列式、同じデータ型を選択し、同じ順序で配置する必要がありますが、同じ長さを持つ必要はありません.
UNION :
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNIONALL演算子は、重複行の結果を含む2つのSELECT文を結合するために使用されます.
UNION ALL :
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION ALL
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
ユニオン同様のルールはユニオンALL操作にも適用されます.
SQL INTERSECT句:2つのSELECT文を使用しますが、最初のSELECT文から2番目のSELECT文の結果と全く同じ行をすべて返します.
SQL EXCEPT句:SQL EXCEPT句/オペレータは、2つのSELECT文をマージし、2番目のSELECT文によって返されなかった最初のSELECT文から行を返します.