mysql全外连接和笛卡尔积_数据库(join) 内连接、外连接、笛卡尔积
今天,重刷了刷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) 内连接、外连接、笛卡尔积相关推荐
- mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...
Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...
- 查询计算机系学生的详细记录,实验三_数据库的简单查询和连接_.doc
实验三_数据库的简单查询和连接_ 实验三 数据库的简单查询和连接查询 实验目的及要求 掌握SELECT语句的基本语法: 熟练掌握表的数据简单查询.数据排序: 熟练掌握表的连接查询的表示: 掌握等值连接 ...
- mysql自然连接和等值连接_数据库自然连接与等值连接
mysql-数据查询语句-多表 连接查询 连接查询,是关系数据库中最主要的查询,包括等值查询.自然连接查询.非等值查询.自身连接查询.外连接查询和复合条件连接查询等. 1.等值与非等值连接查询 连接查 ...
- mysql连接与嵌套查询_数据库之嵌套查询与连接查询
嵌套查询 单值嵌套查询 值返回结果是一个值的嵌套查询称为单值嵌套查询 对Sales数据库,列出市场部的所有员工的编号 USE Sale GO SELECT employee_id FROM emplo ...
- mysql 中外码和主码_数据库原理与应用(6)——关系的候选码、主码和外码、关系完整性、关系代数、元组关系的演算、域关系演算...
一.关系的候选码 候选码(Candidate Key):能唯一标识关系中元组的一个属性或属性集 性质:唯一性,最小性 二.关系的主码和外码 主码(Primary Key):从多个候选码中选择一个作为查 ...
- navicat无法连接远程mysql数据库_[数据库]Navicat Premium 解决无法连接远程mysql数据库问题...
[数据库]Navicat Premium 解决无法连接远程mysql数据库问题 0 2018-07-18 00:00:15 问题原因 : 第一点 远程服务器数据库没有授权 第二点 远程连接数据库的端 ...
- MySQL笔记:第11章_数据库的设计规范
第11章_数据库的设计规范 1. 为什么需要数据库设计 2.范式 2.1范式简介 2.2范式都包括哪些 2.3 键和相关属性的概念 2.4第一范式(1st NF) 2.5 第二范式(2nd NF) 2 ...
- mysql联表查询多记录显示_数据库:MySQL(多表的表记录的查询)(三)
一.外键约束 1.创建外键 ---每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...
- MYSQL中概念模型的基本概念_数据库基本概念
一. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 模型是对现实世界的抽象,在数据库技术中,我们用数据模型的概念描述数据库的结构和语义,对现实世界的数据进行抽象.从现实世界的信息到数 ...
最新文章
- php特殊函数,PHP常用特殊运算符号和函数的简单示例
- php获取循环,PHP循环获取GET和POST值的代码
- _xmlXPathNewContext, referenced from
- C# 生成缩略图 方法
- git或gitlab修改密码之后,报错remote: HTTP Basic: Access denied,fatal: Authentication failed for ‘git或gitlab地址’
- 联想小新air14笔记本黑屏_联想小新air14锐龙版测评,谈谈它的好和坏
- node 常用的一些终端的命令的快捷键
- 揭开Timeline中Playable Track的神秘面纱
- apso matlab,APSO算法指导
- android studio 中使用lambda表达式
- 定了!百度运维工程师非法挖矿获利 10 万、被判 3 年,如何避免面向监狱编程?...
- iOS中在NavigationController的toolbar中添加Segment控件
- fileservice 类代码放哪里_一步步开发Windows服务(Windows Service)[转]
- Latex 常用代码
- Linux 查找满足条件的文件并复制
- hscan扫描mysql代码_HScan 扫描器
- 最清晰的VGG16模型图
- Azure云服务器搭建
- 2021-01-09
- Hadoop基础入门学习