13.数据的连接查询操作

1. 连接查询

  1. 描述:查询字段来自多个表,也叫多表查询
  2. 分类:
    • 按功能分类
      • 内连接
      • 外连接
      • 交叉连接
    • 按年代分类
      • SQL92标准:仅仅支持内连接
      • SQL99标准:支持内连接、外连接(左外+右外)、交叉连接

2. 内连接

​ 分类:等值连接、非等值连接、自然连接

2.1 SQL92标准的等值连接

  • 描述:将表1记录逐一与表2记录对比,通过等值连接条件来决定是否返回
# 语法
SELECT 查询列表 FROM 数据表列表 WHERE 等值连接条件 AND 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b,`provide` p WHERE b.`b_pro_id` = p.`pro_id`;

2.2 SQL92标准的非等值连接

  • 描述:将表1记录逐一与表2记录对比,通过非等值连接条件来决定是否返回
# 语法
SELECT 查询列表 FROM 数据表列表 FROM 非等值连接条件 AND 筛选条件;

# 实例
SELECT b.`b_id`,b.`b_name`,p.`pro_id`,p.`pro_name` FROM `bill` b,`provide` p WHERE b.`b_id` > p.`pro_id`;

2.3 SQL92标准的自然连接

  • 描述:自然连接一般是指自己连接自己,比如查询员工的上级,员工和上级信息都是存储在一个表中的
# 语法
SELECT 查询列表 FROM 数据表列表 FROM 自然连接条件 AND 筛选条件;

# 实例
SELECT t1.`username` 管理者,t2.`username` 领导 FROM `user` t1,`user` t2 WHERE t1.`super` = t2.`pk_id`;

2.4 SQL99标准的等值连接

# 语法
SELECT 查询列表 FROM 表1 表1别名 INNER JOIN 表2 表2别名 ON 等值连接条件 WHERE 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b INNER JOIN `provide` p ON b.`b_pro_id` = p.`pro_id`;

2.5 SQL99标准的非等值连接

# 语法
SELECT 查询列表 FROM 表1 表1别名 INNER JOIN 表2 表2别名 ON 非等值连接条件 WHERE 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b INNER JOIN `provide` p ON b.`b_id` > p.`pro_id`;

2.6 SQL99标准的自然连接

# 语法
SELECT 查询列表 FROM 表1 表1别名 INNER JOIN 表2 表2别名 ON 自然连接条件 WHERE 筛选条件;

# 实例
SELECT t1.`username` 管理者,t2.`username` 领导 FROM `user` t1 INNER JOIN `user` t2 ON t1.`super` = t2.`pk_id`;

3. 外连接

3.1 左外连接

  • 描述:以表1为主表,表2为从表,如果从表有匹配主表的显示匹配记录,若从表没有匹配主表的记录用NULL值填充
# 语法
SELECT 查询列表 FROM 表1 表1别名 LEFT OUTER JOIN 表2 表2别名 ON 连接条件 WHERE 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b LEFT OUTER JOIN `provide` p ON b.`b_pro_id` = p.`pro_id`;

3.2 右外连接

  • 描述:以表2为主表,表1为从表,如果从表有匹配主表的显示匹配记录,若从表没有匹配主表的记录用NULL填充
# 语法
SELECT 查询列表 FROM 表1 表1别名 RIGHT OUTER JOIN 表2 表2别名 ON 连接条件 WHERE 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b RIGHT OUTER JOIN `provide` p ON b.`b_pro_id` = p.`pro_id`;

3.3 全外连接

  • 描述:如果表1有匹配表2的显示匹配记录,若表1没有匹配表2的记录用NULL填充,若表2没有匹配表1的记录用NULL填充
  • 注意:mysql不支持
# 语法
SELECT 查询列表 FROM 表1 表1别名 FULL OUTER JOIN 表2 表2别名 ON 连接条件 WHERE 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b FULL OUTER JOIN `provide` p ON b.`b_pro_id` = p.`pro_id`;

4. 交叉连接

  • 含义:将表1的记录与表2的记录一一匹配返回,就是通常说的笛卡尔积
# 语法
SELECT 查询列表 FROM 表1 表1别名 CROSS JOIN 表2 表2别名 WHERE 筛选条件;

# 实例
SELECT b.`b_name`,p.`pro_name` FROM `bill` b CROSS JOIN `provide` p;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值