今天,重刷了刷leetcode数据库的题目,对数据库连接查询做一个记录。

数据库(join) 内连接、外连接、笛卡尔积

内连接(自身连接)

内连接有隐式内连接和显示内连接两种:

隐式(无join),from后跟多个表名,生成的中间临时表是全部笛卡尔积。最后用where条件筛选

例如:

select A.Name

from Employee as A, Employee as B

where A.ManagerId=B.Id and A.Salary>B.Salary

显示(有join),中间临时表是经过ON子句过滤后的笛卡尔积。最后用where条件筛选

例如:a [INNER] JOIN b ON a.id=b.id

select A.name as Employee

from Employee As A inner join Employee as B on A.ManagerId=B.Id

where A.Salary>B.Salary

差异:隐式生成的是全部笛卡尔积,连接时生成的中间临时表更大。on条件是生成中间临时表的过滤条件;where条件是在临时表生成好后,再对临时表进行过滤的条件。

外连接

外连接有左连接、右连接、全连接三种:

左连接 a LEFT JOIN b ON a.id=b.id

左边为主表,保留所有行(即使在右表没有匹配的行),右表输出满足 on 条件的行,不满足的输出null

select A.FirstName, A.LastName, B.City, B.State

from Person as A left join Address as B on A.PersonId=B.PersonId

右连接 a RIGHT JOIN b ON a.id=b.id

右边为主表,保留所有行(即使在左表没有匹配的行),左表输出满足 on 条件的行,不满足的输出null

select A.FirstName, A.LastName, B.City, B.State

from Person as A right join Address as B on A.PersonId=B.PersonId

全连接 a FULL JOIN b ON a.id=b.id

MySQL不支持全连接。一定要使用的话可以用左连接+右连接+去重=全连接。

笛卡尔积(交叉连接)

定义:是指在数学中,两个集合 X 和 Y 的乘积 X * Y。

它不带WHERE子句,返回被连接的两个表所有数据行的乘积。a CROSS JOIN b , cross join可以省略。

select * from Person as A cross join Address as B

select * from Person as A, Address as B

例如,两个表如图:

A表的每一行会和B表的每一行组合,笛卡尔积是:

总结

子查询执行时系统要先把子查询转化成连接查询来实现,因此连接查询执行时效率更高。

子查询是把问题细分成子问题,然后解决,更符合人们的解决问题习惯。但是因为效率的原因,遇到一个问题尽量用连接查询实现,如果连接查询实现时很复杂或者实现不了,则可以考虑使用子查询实现。

mysql全外连接和笛卡尔积_数据库(join) 内连接、外连接、笛卡尔积相关推荐

  1. mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

  2. 查询计算机系学生的详细记录,实验三_数据库的简单查询和连接_.doc

    实验三_数据库的简单查询和连接_ 实验三 数据库的简单查询和连接查询 实验目的及要求 掌握SELECT语句的基本语法: 熟练掌握表的数据简单查询.数据排序: 熟练掌握表的连接查询的表示: 掌握等值连接 ...

  3. mysql自然连接和等值连接_数据库自然连接与等值连接

    mysql-数据查询语句-多表 连接查询 连接查询,是关系数据库中最主要的查询,包括等值查询.自然连接查询.非等值查询.自身连接查询.外连接查询和复合条件连接查询等. 1.等值与非等值连接查询 连接查 ...

  4. mysql连接与嵌套查询_数据库之嵌套查询与连接查询

    嵌套查询 单值嵌套查询 值返回结果是一个值的嵌套查询称为单值嵌套查询 对Sales数据库,列出市场部的所有员工的编号 USE Sale GO SELECT employee_id FROM emplo ...

  5. mysql 中外码和主码_数据库原理与应用(6)——关系的候选码、主码和外码、关系完整性、关系代数、元组关系的演算、域关系演算...

    一.关系的候选码 候选码(Candidate Key):能唯一标识关系中元组的一个属性或属性集 性质:唯一性,最小性 二.关系的主码和外码 主码(Primary Key):从多个候选码中选择一个作为查 ...

  6. navicat无法连接远程mysql数据库_[数据库]Navicat Premium 解决无法连接远程mysql数据库问题...

    [数据库]Navicat Premium 解决无法连接远程mysql数据库问题 0 2018-07-18 00:00:15 问题原因 :  第一点 远程服务器数据库没有授权 第二点 远程连接数据库的端 ...

  7. MySQL笔记:第11章_数据库的设计规范

    第11章_数据库的设计规范 1. 为什么需要数据库设计 2.范式 2.1范式简介 2.2范式都包括哪些 2.3 键和相关属性的概念 2.4第一范式(1st NF) 2.5 第二范式(2nd NF) 2 ...

  8. mysql联表查询多记录显示_数据库:MySQL(多表的表记录的查询)(三)

    一.外键约束 1.创建外键 ---每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...

  9. MYSQL中概念模型的基本概念_数据库基本概念

    一. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 模型是对现实世界的抽象,在数据库技术中,我们用数据模型的概念描述数据库的结构和语义,对现实世界的数据进行抽象.从现实世界的信息到数 ...

最新文章

  1. php特殊函数,PHP常用特殊运算符号和函数的简单示例
  2. php获取循环,PHP循环获取GET和POST值的代码
  3. _xmlXPathNewContext, referenced from
  4. C# 生成缩略图 方法
  5. git或gitlab修改密码之后,报错remote: HTTP Basic: Access denied,fatal: Authentication failed for ‘git或gitlab地址’
  6. 联想小新air14笔记本黑屏_联想小新air14锐龙版测评,谈谈它的好和坏
  7. node 常用的一些终端的命令的快捷键
  8. 揭开Timeline中Playable Track的神秘面纱
  9. apso matlab,APSO算法指导
  10. android studio 中使用lambda表达式
  11. 定了!百度运维工程师非法挖矿获利 10 万、被判 3 年,如何避免面向监狱编程?...
  12. iOS中在NavigationController的toolbar中添加Segment控件
  13. fileservice 类代码放哪里_一步步开发Windows服务(Windows Service)[转]
  14. Latex 常用代码
  15. Linux 查找满足条件的文件并复制
  16. hscan扫描mysql代码_HScan 扫描器
  17. 最清晰的VGG16模型图
  18. Azure云服务器搭建
  19. 2021-01-09
  20. Hadoop基础入门学习

热门文章

  1. oracle预算,ORACLE EBS 标准功能预算功能和实例
  2. python IDE - Komodo 支持汉语输入设置
  3. 关于孩子的教育,心理健康教育值得我们重视
  4. vs运行出现无法启动IIS Express服务器
  5. Android 正则表达式验证手机和邮箱格式是否正确
  6. 天正打开在tshowbar卡死 cad打开半天没反应 内存使用量大
  7. C#中自动发送邮件的实现
  8. uniapp实战——实现导航的基本结构
  9. css为什么要用浮动_细品100道CSS知识点(上)「干货满满」
  10. python调用CORBA