一、关联查询

1、概念

在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中。这个时候,需要同时操作这些表来查询数据,即关联查询。

关联查询所涉及到的表与表之间都会存在有关联的字段,如员工表的部门编号和部门表的部门编号。

2、笛卡尔积

在做关联查询时,数据库会使用某一张表中的每一条记录都与另外一张表的所有记录进行组合。比如表A有x条记录,表B有y条记录,最终组合数为x*y,这个值就是笛卡尔积,通常没有意义。

3、等值连接

在做关联查询时,这些表中存在着有关联的两个字段。我们使用某一张表中的一条记录通过相关联的字段与另外一张表的记录进行匹配,组合成一条新的记录。使用"="连接关联字段

需求1:查询员工的姓名,职位及其所在部门的名称 、地址

4、内连接

内连接返回所有满足条件的记录,关键字join on。查询效果与等值连接一样。
用法:表A [inner] join 表B on 关联条件

5、外连接

在做关联查询时,我们所需要的数据,除了那些满足关联条件的数据外,还有不满足关联条件的数据。此时需要使用外连接。

会涉及到两个概念:

驱动表(主表):除了显示满足条件的数据,还需要显示不满足条件的数据的表
从表(副表):只显示满足关联条件的数据的表

mysql外连接只支持左外连接,右外连接,不支持全外连接

左外连接:表A left [outer] join 表B  on 关联条件。 表A是驱动表,表B是从表
右外连接表A right [outer] join 表B  on 关联条件表B是驱动表,表A是从表
全外连接:两张表的数据不管满不满足条件,都做显示。表A  full [outer] join 表B on 关联条件
PS:mysql 不支持全外连接

需求1:查询所有员工的姓名,职位,及其部门编号,部门名称----分析:员工表为驱动表,部门表为从表

select e.ename,e.job,e.deptno,d.dname from emp e left join dept d on e.deptno = d.deptno;

6、自连接

自连接是一种特殊的关联查询。数据的来源是同一个表,这样的表内的多个字段要存有关系。我们要使用表别名来虚拟出两个表。

需求1:查询员工姓名,职位及其上司姓名,职位。

mysql >  select a.ename 员工姓名,
a.job 员工职位,
b.ename 上司姓名,
b.job 上司职位
from emp a join emp b on a.mgr=b.empno;分析:可以看出 a的mgr与b的empno关联,所以,a是员工表,b是领导表

二、高级关联查询

有的时候,我们要查询的数据,一个简单的查询语句完成不了,并且我们使用的数据,表中不能直观体现出来。而是预先经过一次查询才会有所体现。那么先执行的查询,我们称之子查询。被子查询嵌入的查询语句称之为父查询或主查询。

主查询可以是select语句,也可以是DML语句或者是DDL语句。

根据子查询返回结果的不同,可以分为单行单列子查询、多行单列子查询、多行多列子查询。

子查询所在的位置,有可能出现在以下地方:

1)子查询可以在where子句中
2)子查询可以在from子句中
3)子查询可以在having子句中
4)子查询可以在select字句中,相当于外连接的另外一种写法。

1、在where子句中

需求1:查询和员工姓名scott同职位的员工信息。

select 

需求2:查询薪水比所有员工的平均薪水高的员工信息

mysql > select ename,job,hiredate,sal from emp where sal > (select avg(ifnull(sal,0)) from emp);

需求3:查询出部门中有salesman但是职位不是salesman的员工信息

select 

exists 关键字

有时候,子查询需要引用主查询的字段数据,我们使用exists关键字。exists后面的子查询至少返回一条记录,则整个条件为true;

需求:查询有员工的部门信息

mysql 

2、在from子句中

from子句用于指定表,如果想在一个子查询的结果里继续查询,则子查询需要写在from子句中,相当于一个表。

需求1:查询工资大于本部门平均工资的员工的信息。

mysql 

需求2:查询每个员工的工资,姓名和其部门的平均工资。

select 

3、在having子句中

需求:查询平均工资大于30号部门平均工资的部门号、平均工资

mysql 

4、在select子句中

需求1:查询每个员工的姓名,工资,及其部门的平均工资,工资之和

select 

mysql 表与表之间的条件比对_《MySQL数据库》关联查询相关推荐

  1. MySQL 一个字段,用’,‘隔开,存储多个id,关联查询

    MySQL 一个字段,用','隔开,存储多个id,关联查询 因为朋友过来问我,一个商品表的一个颜色的关联字段,里面放着多个颜色的id,这些id用逗号隔开,然后想要查出一条商品记录上显示出所有颜色.实现 ...

  2. mysql 表与表之间的条件比对_值得收藏 | 一份最完整的MySQL规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  3. mysql 表与表之间的条件比对_十六年老司机笔记:MySQL性能优化之必备技能

    导读:MySQL 是目前广泛使用的数据库,但很多项目对 MySQL 的使用仍然存在欠优化的地方,本文根据作者长年的经验提出了 MySQL 数据库优化方法,这些方法是否适合你的项目?还有哪些优化方法值得 ...

  4. 数据库 --关联查询(多表查询)

    需求:查询员工及其所在部门(显示员工姓名,部门名称) 1.交叉连接查询(笛卡尔积 有些是重复记录 不推荐) select empName ,deptName from employee,dept: 2 ...

  5. mysql数据库关联查询

    记录mysql数据库的部分关联查询语句. 1.mysql数据库中最常用的关联查询有内连接和外链接,内连接仅选两张表中互相匹配的记录, 而外连接可以根据表选出其他不匹配的记录,包括左连接left joi ...

  6. yii2 mysql like_Yii2实现跨mysql数据库关联查询排序功能

    遇到一个项目,需要跨表网上找了很多的资料,整理一下,方便以后再次使用 背景:在一个mysql服务器上(注意:两个数据库必须在同一个mysql服务器上)有两个数据库: memory (存储常规数据表) ...

  7. presto联合查询mysql和ES_presto-mysql/elasticsearch6.0.0安装部署测试,异种数据源关联查询入门实践...

    本文简单记录一次实践使用过程,涉及presto-mysql,presto-elasticsearch,文中参数未做注释,请参考官方文档,希望能帮到大家 1 下载安装 presto-0.228 < ...

  8. MySQL基础~多表查询分类与SQL92和99语法如何实现内连接和外连接

    文章目录 多表查询的分类 等值连接 vs 非等值连接 自连接 vs 非自连接 内连接 vs 外连接 SQL92和SQL99语法如何实现内外连接 多表查询的分类 这个分类是根据多表查询时的连接条件而划分 ...

  9. 【MySQL】多表查询策略(多表联查子查询)

    目录 一.MySQL多表查询 二.准备工作 1.运行环境 2.创建公司表 3.创建员工表 三.多表查询 (一)多表联查-同时查询多张表 1.联结 2.左连接 3.右连接 4.右连接 (二)子查询 1. ...

最新文章

  1. 物联网行业网络解决方案_2021物联网趋势:有望从物联网传感器网络中受益的5大行业...
  2. wxWidgets:wxWidgets 中的 Unicode 支持
  3. rvm RuvyGem Cocoapods brew
  4. memset()、memcpy()、memcmp()的使用方法
  5. 极致业务基础开发平台
  6. androidstudio做登录界面_Vue-cli+Element-ui实现后台管理系统(二)实现后台登录功能...
  7. 11月国内网站流量统计:百度夺冠 360安全中心居亚
  8. java io 字符流操作工具类
  9. pip 下载torch gup版本
  10. ubuntu 键盘输入法为空_[已解决]HELP!!!fcitx 输入法不出来,键盘也不见了
  11. 铁路cj继电器_铁路信号继电器简介
  12. 图形 1.3 纹理的秘密
  13. 【人工大猩猩部队优化算法】基于人工大猩猩部队优化算法求解单目标优化问题(GTO)含Matlab源码
  14. CSDN【精品专栏】第29期
  15. 窥一斑而知全豹,几分钟带你读懂Java字节码,再也不怕了
  16. 一种很神奇但是也很有意思的分组方式
  17. 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB
  18. 爱迪尔 门锁接口文档_门锁接口说明
  19. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期
  20. CY7C68013 USB2.0芯片调试总结

热门文章

  1. 麦块服务器显示连接已丢失,麦块服务器密码怎么设置
  2. const变量生存周期_CTM期刊 |神经胶质瘤中HOTAIREZH2抑制剂AQB能上调CWF19L1并促进CDK4/6抑制剂帕博西尼对细胞周期的抑制...
  3. 计算机字符代码表,计算机ASCII码对照表
  4. 幼师学计算机心得体会怎么写,幼儿教师学习心得
  5. 串口接收数据转换成double型
  6. java list find方法_Java 8 Stream - Find Max and Min from List - 入门小站-rumenz.com
  7. java匿名内部对象_JavaSE 学习参考:匿名内部类和匿名对象
  8. pytorch修改tensor的维度(修改为任意维度,或单纯的增减维度)
  9. Linux单机安装kafka
  10. 推荐系统学习(四)推荐系统学习资料(补充中...)