SQL语句JOIN

本文介绍了如何使用SQL中的JOIN操作从多个表中获取数据。通过实例解释了主键和外键的概念,并演示了INNER JOIN的用法。此外,还讨论了其他类型的JOIN,包括LEFT JOIN、RIGHT JOIN和FULL JOIN。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Join 和 Key

又是为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行join。
数据库中的表通过键将彼此联系起来,主键(primary key)是一个列,在这个列中的每一行的值都是唯一的,在表中,每个主键的值都时唯一的,这样做的目的在不重复每个表中的所有数据的情况下,把表间的数据交叉绑定在一起。SQL教程
请看DUCK表:

DUCK_IDNAMEYEAR
HK234DUCK012016
DK244DUCK022016
KK134DUCK032016

DUCK_ID时DUCK表中的主键,这意味着没有两列数据的主键是相同的
接下来是MEAT表:

MEAT_IDKINDPRODUCTION_YEARDUCK_ID
LO23DUCK2016KK134
LO93DUCK2016DK244
LO03DUCK2016HK234
LO66DUCK2016CO134

MEAR 表中MEAT_ID时该表的主键,同时表中的DUCK_ID引用DUCK中的主键,


引用两张表
我们可以通过引用两张表的方式,从两个表中获取数据:

SELECT M.MEAT_ID,D.DUCK_ID,M.KIND,M.PRODUCTION_YEAR,D.YEAR FROM MEAT M,DUCK D WHERE M.DUCK_ID=D.DUCK_ID;

结果:

MEAT_IDDUCK_IDKINDPRODUCTION_YEARYEAR
LO23KK134DUCK20162016
LO23KK134DUCK20162016
LO23KK134DUCK20162016

SQL JOIN使用join
除了上面的方法,我们也可以使用关键字JOIN来从两个表中获取数据。

SELECT M.MEAT_ID,D.DUCK_ID,M.KIND,M.PRODUCTION_YEAR,D.YEAR FROM MEAT M INNER JOIN DUCK D ON M.DUCK_ID=D.DUCK_ID ORDER BY M.MEAT_ID;

结果:

MEAT_IDDUCK_IDKINDPRODUCTION_YEARYEAR
LO03HK234DUCK20162015
LO23KK134DUCK20162016
LO93DK244DUCK20162016

不同的SQL JOIN
除了我们在上面的例子中使用的INNER JOIN(内连接),我们还可以使用其他几种方式连接。
下面是使用JOIN类型,和他们之间的差异。

  • JOIN:如果表中至少有一个匹配,则返回行。
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行。
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行,
  • FULL JOIN:只要其中一个表中存在匹配,就返回行
### SQL JOIN 语句概述 SQL `JOIN` 语句用于根据两个或多个表中的列之间的关系组合来自不同表格的数据。常见的 `JOIN` 类型有四种:INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN。 ### INNER JOIN 示例与解释 当需要获取两个表中满足连接条件的匹配记录时,可以使用 `INNER JOIN`: ```sql SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id; ``` 此查询返回订单表和客户表中存在关联的所有订单及其对应的客户名称[^2]。 ### LEFT JOIN 示例与解释 如果希望即使右侧表没有匹配项也保留左侧表的所有记录,则应采用 `LEFT JOIN`: ```sql SELECT employees.name AS employee_name, departments.name AS department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id; ``` 这段代码会列出所有员工的名字以及他们所属部门的信息;如果有员工未分配至任何部门,则该字段显示为空值(NULL)[^1]。 ### RIGHT JOIN 示例与解释 为了确保右边表内的全部数据都能被展示出来而不管左边是否有对应条目,可以选择 `RIGHT JOIN` : ```sql SELECT * FROM Table1 t1 RIGHT OUTER JOIN Table2 t2 ON t1.Col1 = t2.Col1 WHERE t1.Col1 IS NULL; ``` 上述命令用来找出仅存在于Table2但不在Table1里的那些行[^3]。 ### FULL OUTER JOIN 示例与解释 最后一种情况是想要得到两张表所有的记录集合——无论它们之间是否存在交集部分,这时就需要运用到 `FULL OUTER JOIN` 。不过需要注意的是,并不是所有的数据库都支持这种类型的联接操作。 ```sql SELECT * FROM tableA a FULL OUTER JOIN tableB b ON a.common_field = b.common_field; ``` 这条指令将会把tableA和tableB里所有的记录都提取出来并按照指定的关键字进行配对,对于找不到匹配的对象则填充NULL作为占位符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值