SQL 数据库 学习 029 查询-12 连接查询 --- 内连接

本文详细讲解了SQL中的内连接查询,包括内连接的概念、不同类型的内连接(如`INNER JOIN`、`USING`、`ON`的区别)、连接条件的位置以及SQL92与SQL99标准的用法,并提供了多个练习题加深理解。

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


  • 我的电脑系统:Windows 10 64位
  • SQL Server 软件版本: SQL Server 2014 Express

本篇博客里面使用了 scott 库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇博文来在你的服务器里面附加scott库。


连接查询

定义:

将两个表或者两个以上的表以一定的连接条件连接起来。从中检索出满足条件的数据。

一 . 内连接 — 知识点 (重点中的重点)

牛刀小试

select "E".ename "员工姓名", "D".dname "部门名称"
    from emp "E"
    join dept "D"
    on "E".deptno = "D".deptno

Alt text


需要学的知识点:

  1. select ... from A, B 的用法
  2. select ... from A, B where ... 的用法
  3. select ... from A join B on ... 的用法
  4. select ... from A, B where ...select ... from A join B on ... 的比较
  5. selectfromwherejoinongroupordertophaving 的混合使用。


1 . select ... from A, B 的用法 — 笛卡尔积

--emp是14行; dept是5行3列
select * from emp, dept
    --输出是70行。不任何条件,进行笛卡尔积连接。

Alt text

A 表里面没有个元组都会连接 B 表一个元组,这样就导致 B 表中的每一个元组都连接了 A 表中的没有个元组。

产生的结果: 行数是 A和B的乘积;列数是A和B之和。或者说:把A表的每一条记录都和B表的每一条记录组合在一起,形成的是个笛卡尔积。


2 . select ... from A, B where ... 的用法

select *
    from emp, dept
    where empno = 7369
    --输出5行,11

Alt text

其中有两个列deptno 属性,一列是来自 dept 表,一列是来自 emp 表。

select ... from A, B where ... 中的 where 是对 select * from emp, dept 产生的deptemp 两个表进行笛卡尔积后得到的临时表进行过滤。

注意:
select * from emp, dept where 1-1 输出70行 11列
select * from emp, dept where empno = 7369 5行
select * from emp, dept where deptno = 10 error
select * from emp, dept where emp.deptno = 10 5行的倍数
select * from emp, dept where dept.deptno = 10 14行


3 . select ... from A join B on ... 的用法

select "E".ename "员工姓名", "D".dname "部门名称"
    from emp "E"   --"E" 是别名
    join dept "D"  --"D" 是别名 join是连接
    on "E".deptno = "D".deptno  ---on 表示:连接条件
    --连接条件是:两个表里面的deptno属性相同,才能连接
    --所以现在得到的结果不是70行。

Alt text

select *
    from emp "E"
    join dept "D"
    on "E".deptno = "D".deptno
    --输出是11列(有两列(deptno)是重复的)

Alt text


下面的两个指令输出都是一样的结果。

select "E".ename "员工姓名", "D".dname "部门名称"
    from emp "E"
    join dept "D"
    on 1=1   --连接条件是 1=1 表示永远为真,所以执行后得到的结果是702列。
select "E".ename "员工姓名", "D".dname "部门名称"
    f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值