左连接、右连接

本文通过实例解释了SQL中左连接(left join)和右连接(right join)的概念,并特别强调了一对多情况下的表现形式,即当右侧表格中有多个记录与左侧的一个记录匹配时,左侧记录将被重复展示。

left join,right join 这个很平常的 sql 关联。今天我才真正明白啥意思。以前一直认为是。left join 就是以左边为主。right join 就是以右边为主。但是如果是一对多的情形呢?右边有多条与左边的一条对应。那左连接结果是什么样子呢?今天我才知道。凡事右边与左边关联的也都能显示出来。左边的那一条就重复出现。右边有几条和他对应。左边的那一条就出现几次。

这也提醒了我自己还很浅薄。内功还没练到一定的修为。路漫漫。

### SQL 左连接连接的概念及用法 #### 左连接(LEFT JOIN左连接是一种外连接,以左表为基础进行数据检索。它会返回左表中的所有记录,即使表中没有匹配的记录,也会在结果集中显示左表的记录,而表对应的字段则会显示为 `NULL`。 以下是一个典型的左连接示例: ```sql SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_id; ``` 在这个例子中,`employees` 表是左表,`departments` 表是表。查询结果会包含 `employees` 表中的所有员工信息,即使某些员工没有分配到部门(即 `departments` 表中没有对应的 `dept_id`),这些员工的部门名称字段将显示为 `NULL`[^2]。 #### 连接(RIGHT JOIN连接也是一种外连接,但它是以表为基础进行数据检索。它会返回表中的所有记录,即使左表中没有匹配的记录,也会在结果集中显示表的记录,而左表对应的字段则会显示为 `NULL`。 以下是一个典型的连接示例: ```sql SELECT t1.s_id, t1.s_name, t2.score FROM student AS t1 RIGHT JOIN score AS t2 ON t1.s_id = t2.s_id; ``` 在这个例子中,`student` 表是左表,`score` 表是表。查询结果会包含 `score` 表中的所有成绩记录,即使某些成绩没有对应的学生信息(即 `student` 表中没有对应的 `s_id`),这些成绩的学生信息字段将显示为 `NULL`[^3]。 #### 区别与联系 - **基础表不同**:左连接以左表为基础,连接表为基础。 - **结果集内容**:左连接会确保左表的所有记录都出现在结果集中,连接会确保表的所有记录都出现在结果集中。 - **NULL 值处理**:左连接中,表无匹配时显示 `NULL`;连接中,左表无匹配时显示 `NULL`。 - **等价性**:连接可以通过调整表的位置转换为左连接,反之亦然。例如,`A RIGHT JOIN B` 等价于 `B LEFT JOIN A`[^4]。 ### 示例代码对比 #### 左连接 ```sql SELECT e.name, d.department FROM employee e LEFT JOIN department d ON e.dept_id = d.id; ``` #### 连接 ```sql SELECT e.name, d.department FROM employee e RIGHT JOIN department d ON e.dept_id = d.id; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值