MySQL连接查询

  • 前言
  • 一、笛卡尔积
  • 二、SQL92(支持内连接)
  • 三、SQL99(内、外、交叉)
    • 1、内连接
    • 2、外连接
      • 2.1、左右外连接
      • 2.2、全外连接
    • 3、交叉连接(MySQL支持)
  • 总结
  • 参考文献

前言

SQL查询时,一般会涉及到多张表的字段,这时就需要表连接,然后不断匹配。

一、笛卡尔积

当from后跟多个表时,这些表的每行进行全排列,这就是笛卡尔积,也就是无条件的全排列连接。

二、SQL92(支持内连接)

通过表内的一些条件来连接,有内等值连接、非等值连接、自连接(自表引用)

# 一、sql92标准
# 1.内连接
# a 等值连接
# 注:表名如果取了别名,在形成的视图上有了新名,也只有新名,重名字段就应该用新名调用
SELECTboyName,`name`
FROMbeauty,boys
WHEREboys.id = boyfriend_id # 内连接+筛选
SELECTboyName,beauty.NAME
FROMbeauty,boys
WHEREboys.id = boyfriend_id AND LENGTH( beauty.NAME ) > 9 # 注:一个汉字三个字节
# 内连接+ 三表连接
# 员工名、部门名、城市名USE myemployees;
SELECTe.last_name,d.department_name,l.city
FROMemployees e,departments d,locations l
WHEREe.department_id = d.department_id AND d.location_id = l.location_id # b 非等值连接  大于小于不等于 等
# 查询最高工资>10000的部门名
SELECT DISTINCTd.department_name
FROMemployees e,departments d
WHEREe.department_id = d.department_id
GROUP BYe.department_id
HAVINGMAX( salary ) > 10000 # c 自连接 表的自引用时才用,比如员工的上司也是员工
SELECTe1.last_name,e2.last_name
FROMemployees e1,employees e2
WHEREe1.employee_id = e2.manager_id

三、SQL99(内、外、交叉)

1、内连接

等值、非等值、自连接。

/* sql99语法
select 查询列表
from table1 别名 【连接类型】
[注:内连接 [INNER] 左右外 left|right [outer] 全外 full【outer】
交叉连接 cross]
join table2 on 连接条件
[where]
[GROUP BY]
[HAVING]
[ORDER BY]
*/
#  一、内连接
# 1.可添加排序分组筛选 2.inner可省略 3.连接条件放在on后面,其它条件放在where后面
SELECT*
FROMemployees eINNER JOIN departments d ON e.department_id = d.department_id # 三表内等值连接
SELECT*
FROMemployees eINNER JOIN departments d ON e.department_id = d.department_idINNER JOIN locations l ON d.location_id = l.location_id

2、外连接

2.1、左右外连接

/* sql99语法
select 查询列表
from table1 别名 【连接类型】
[注:内连接 [INNER] 左右外 left|right [outer] 全外 full【outer】
交叉连接 cross]
join table2 on 连接条件
[where]
[GROUP BY]
[HAVING]
[ORDER BY]
*/ #  一、内连接
# 1.可添加排序分组筛选 2.inner可省略 3.连接条件放在on后面,其它条件放在where后面
# 左右外连接,查询一个表中有,另一个表中没有的行
# 左外连接 = 内连接+主表没涉及到的行
# 查看没有男朋友的女神
USE girls;
SELECT*
FROMbeauty aLEFT JOIN boys b ON a.boyfriend_id = b.id;WHEREb.id IS NULL

2.2、全外连接

SQL99有其规范,但是MySQL还未支持

/*
/* sql99语法
select 查询列表
from table1 别名 【连接类型】
[注:内连接 [INNER] 左右外 left|right [outer] 全外 full【outer】
交叉连接 cross]
join table2 on 连接条件
[where]
[GROUP BY]
[HAVING]
[ORDER BY]
*/ #  一、内连接
# 1.可添加排序分组筛选 2.inner可省略 3.连接条件放在on后面,其它条件放在where后面# 全外连接,MySQL不支持 其效果 = 左外连接+右外连接
# 找出单身的
SELECTa.NAME
FROMbeauty aFULL JOIN boys b ON a.boyfriend_id = b.id
WHEREa.id IS NULL AND b.id IS NULL;

3、交叉连接(MySQL支持)

/* sql99语法
select 查询列表
from table1 别名 【连接类型】
[注:内连接 [INNER] 左右外 left|right [outer] 全外 full【outer】
交叉连接 cross]
join table2 on 连接条件
[where]
[GROUP BY]
[HAVING]
[ORDER BY]
*/ #  一、内连接
# 1.可添加排序分组筛选 2.inner可省略 3.连接条件放在on后面,其它条件放在where后面
# 外连接 sql99中表达笛卡尔积的方式
SELECTa.NAME
FROMbeauty aCROSS JOIN boys b;

总结

1)SQL99语法功能更加细致和强大
2)多表连接查询

参考文献

[1] MySQL 尚硅谷

MySQL连接查询-笛卡尔乘积相关推荐

  1. MySQL连接查询—笛卡尔乘积

    连接查询 含义:连接查询又称为多表查询,当查询的字段来自多个表时,就会用到连接查询. 笛卡尔乘积 笛卡尔乘积现象:表1有 m 行,表2有 n 行,则查询结果有 m*n 行. SELECT `name` ...

  2. 连接查询——笛卡尔乘积

    连接查询 概要 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接 笛卡尔乘积现象:表1 有m行,表2 有n行,结果=m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分 ...

  3. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  4. MySQL连接查询\等值连接介绍

    MySQL连接查询\等值连接介绍 连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会使用到连接查询 笛卡尔乘积现象:表一有m行,表二有n行,结果=m*n行 发生原因:没有有效的连接条件 如 ...

  5. 一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接

    文章目录 笛卡尔乘积 连接查询分类 等值连接 非等值连接 自连接 外连接 交叉连接 连接查询又称为多表查询,当查询的字段来自于多个表时,使用连接查询. 笛卡尔乘积 笛卡尔乘积现象:表1有m行,表2有n ...

  6. 数据库中的四大join 笛卡尔乘积(以MySQL为例)

    1. 绪言 不管是面试还是实际工作中,总是会听到你对两个表做连接查询试试呢,你知道数据库有哪些连接吗,诸如此类的对话 数据库中,表与表之间大部分都是存在关系的,比如经典的学生表和班级表.班级表与学校表 ...

  7. mysql 迪卡尔运算_「笛卡尔乘积」mysql笛卡儿积 - seo实验室

    笛卡尔乘积 1.笛卡儿积数学理解 A={2,3} :B= {0,2,4} AxB = {(2,0),(3,0),(2,2),(3,2),(2,4),(3,4)},则AxB的结果集既是笛卡儿积: 但其不 ...

  8. 笛卡尔乘积 oracle,笛卡尔乘积引出的表的连接

    1.多表连接简介: 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及一个表的,那么那个表也往往低于第三范式,存在大量冗余与异常. 因此,连接(Join)就是一 ...

  9. mysql 笛卡尔乘积

    笛卡尔乘积是由笛卡尔发现的这种现象,在数学中指集合A.B的结果集: 在mysql中指X.Y表的所有集合. 语法:select 查询列表,查询列表 from 表1,表2-

最新文章

  1. java基本类型转换,随记
  2. zookeeper集群环境搭建
  3. 推荐 2个十分好用的 pandas 数据探索分析神器!
  4. 购物价值观(values of shopping)
  5. Database之SQLSever:SQLSever基础知识进阶、软件安装注意事项、软件使用经验总结之详细攻略
  6. WAF指纹识别和XSS过滤器绕过技巧
  7. matlab guide 自定义右键菜单
  8. 数据结构与算法-列表相关时间复杂度
  9. 剑指offer 面试题62. 圆圈中最后剩下的数字
  10. C++ 作用域与生命周期
  11. 指数函数及其性质教学设计
  12. k3 服务器名称修改,k3修改服务器地址
  13. 如何正确使用RS485半双工芯片
  14. dell5580bios恢复出厂_戴尔笔记本如何恢复Bios出厂设置?
  15. Python简单方法实现英文文本词频统计
  16. 台式计算机如何联络无线网,台式电脑怎样设置无线网络
  17. Android 在后台无法启动Activity
  18. 彩虹屁夸人语录 夸人好看的彩虹屁合集
  19. Ta-lib学习笔记02--K线模式识别
  20. 6-2 车的不同行为 (10 分)

热门文章

  1. 举个栗子~Tableau 技巧(228):堆叠柱形图中同时显示类别值与总值
  2. 一场压测引发的血案(有点虚构了,不懂行真不行)
  3. python一键生成二维码/条形码并保存成图片
  4. 视频图像压缩编码之预测编码
  5. 无人驾驶常用路径规划
  6. 用DELPHI开发DirectX游戏 (转)
  7. vista开机出现explorer停止工作有感
  8. java.lang.NoSuchMethodError: javax.persistence.OneToOne.orphanRemoval()Z at
  9. 我们饭碗保住了!谷歌胜,甲骨文败
  10. 无字天书之Python第四页(变量基础)