【SQL系列】合并行

简介: 【SQL系列】合并行

问题

你想执行基于相同列或相同列值的连接,以返回多张表中的行。例如,你想显示所有部门编号为 30 的员工的姓名以及每位员工所属部门的位置,但这些数据存储在两张表中。

解决方案

基于 DEPTNO 连接 EMP 表和 DEPT 表。

select e.name, d.loc

from emp e,

    dept d

where e.deptno = d.deptno

 and e.deptno = 30

扩展

上述解决方案使用了连接,准确地说是相等连接——内连接的一种。连接是一种将两张表中的行合并的操作,而相等连接是基于相等条件(比如一张表的部门编号与另一张表的部门编号相等)的连接。内连接是最基本的连接,它返回的每一行都包含来自参与连接查询的各张表的数据。

从概念上说,为生成结果集,连接首先会创建 FROM 子句中指定的表的笛卡儿积(所有可能的行组合)。

select e.name,

      d.loc,

      e.deptno as emp_deptno,

      d.deptno as dept_deptno

from emp e,

    dept d

where e.deptno = 30;

这将返回 EMP 表中部门编号为 30 的每位员工与 DEPT 表中每个部门的组合。然后 WHERE 子句中涉及 e.deptno 和 d.deptno(连接)的表达式会对结果集进行限制,使其只包含 EMP.DEPTNO 和 DEPT.DEPTNO 相等的行。

select e.name, d.loc,

      e.deptno as emp_deptno,

      d.deptno as dept_deptno

 from emp e, dept d

where e.deptno = d.deptno

  and e.deptno = 30

另一种解决方案是显式地指定 JOIN 子句(关键字 INNER 是可选的)。

select e.name,

      d.loc,

      e.deptno as emp_deptno,

      d.deptno as dept_deptno

from emp e

        inner join dept d

                   on (e.deptno = d.deptno)

where e.deptno = 30

如果你喜欢在 FORM 子句(而不是 WHERE 子句)中指定连接逻辑,那么可以使用 JOIN 子句。


点个赞吧,这对我非常重要!

目录
相关文章
|
13天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
70 13
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
3月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
51 6
|
2月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
253 0
|
3月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
168 1
|
3月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
184 3
|
3月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。