发布时间:2024-04-05 22:30:01
Join 是“连接”的意思,顾名思义,SQL JOIN 子句用于将两个或者多个表联合起来进行查询。SELECT table1.column1, table2.column2... FROM table1 JOIN table2 ON table1.common_column1 = table2.common_column2;table1.common_column1 = table2.common_column2 是连接条件,只有满足此条件的记录才会合并为一行。您可以使用多个运算符来连接表,例如 =、>、、=、!=、BETWEEN、LIKE 或者 NOT,但是最常见的是使用 =。
.
分隔,如下所示:
table_name.column_name
当然,如果书写的字段名在两个表中是唯一的,也可以不使用以上格式,只写字段名即可。+----+----------+-----+-----------+----------+ | 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 | +----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+ |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 JOIN ORDERS ON 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> SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID; WHERE AMOUNT >1515 ORDER BY AMOUNT;执行结果:
+----+----------+--------+---------------------+ | ID | NAME | AMOUNT | DATE | +----+----------+--------+---------------------+ | 2 | Khilan | 1560 | 2009-11-20 00:00:00 | | 4 | Chaitali | 2060 | 2008-05-20 00:00:00 | | 3 | kaushik | 3000 | 2009-10-08 00:00:00 | +----+----------+--------+---------------------+
连接类型 | 说明 |
---|---|
INNER JOIN | (默认连接方式)只有当两个表都存在满足条件的记录时才会返回行。 |
LEFT JOIN | 返回左表中的所有行,即使右表中没有满足条件的行也是如此。 |
RIGHT JOIN | 返回右表中的所有行,即使左表中没有满足条件的行也是如此。 |
FULL JOIN | 只要其中有一个表存在满足条件的记录,就返回行。 |
SELF JOIN | 将一个表连接到自身,就像该表是两个表一样。为了区分两个表,在 SQL 语句中需要至少重命名一个表。 |
CROSS JOIN | 交叉连接,从两个或者多个连接表中返回记录集的笛卡尔积。 |
SELECT table1.column1, table2.column2... FROM table1 INNER JOIN table2 ON table1.common_column1 = table2.common_column2;以上 SQL 语句将产生 table1 和 table2 的交集,只有 table1 和 table2 中匹配的行才被返回,如下图所示:
SELECT table1.column1, table2.column2... FROM table1 LEFT JOIN table2 ON table1.common_column1 = table2.common_column2;以上 SQL 语句将产生 table1 的全集,而 table2 中匹配的则有值,不能匹配的则以 NULL 值取代,如下图所示:
SELECT table1.column1, table2.column2... FROM table1 RIGHT JOIN table2 ON table1.common_column1 = table2.common_column2;以上 SQL 语句将产生 table2 的全集,而 table1 中匹配的则有值,不能匹配的则以 NULL 值取代,如下图所示:
SELECT table1.column1, table2.column2... FROM table1 FULL JOIN table2 ON table1.common_column1 = table2.common_column2;以上 SQL 语句将产生 table1 和 table2 的并集,能匹配和不能匹配的行全部被返回,但是能匹配的行将合并为一行,不能匹配的行将另一个表中的数据用 NULL 值替换,如下所示: