多表联合查询

  • 内连接
  • 左链接
  • 右链接
  • 子查询

    1在多表链接中只有一个主表其他的都是子表

1内链接

  • where 链接条件 (这是一个隐性内连接)
  • inner join on

准备数据

1准备dog表create table dog(
id int(11)primary key auto_increment,
dogname varchar(20) not null default "旺财",
dogsex enum("1","0")   default 1,
dogmasterid int(11)
);2 准备dogmaster表
create table dogmaster(
uid int(11) primary key,
mname varchar(20) not null,
salary int(9) unsigned default 1500,
jobnum int(4) unsigned not null,
Depid  int(4) unsigned not null
)3 准备公司表
create table com(
cjobnum int(4) unsigned not null,
cdepid int(4) unsigned not null,
cdepname varchar(16) not null,
bonus int(8) unsigned
) engine = innodb charset = utf8mb41.1构建dog表数据
insert into dog(dogname,dogsex,dogmasterid) values("灰灰","1",100167),("小黑","0",100168),("小紫","0",100169),("云安","1",100169),("于山","0",100670),("开饭","0",20081),("米啾","1",20081),("葡萄","0",20081);+----+---------+--------+-------------+
| id | dogname | dogsex | dogmasterid |
+----+---------+--------+-------------+
|  1 | 灰灰    | 1      |      100167 |
|  2 | 小黑    | 0      |      100168 |
|  3 | 小紫    | 0      |      100169 |
|  4 | 云安    | 1      |      100169 |
|  5 | 于山    | 0      |      100670 |
|  6 | 开饭    | 0      |       20081 |
|  7 | 米啾    | 1      |       20081 |
|  8 | 葡萄    | 0      |       20081 |
+----+---------+--------+-------------+1.2构建dogmaster表数据
insert into dogmaster  VALUEs(100167,"赵敏",4700,1379,10),(100168,"河东君",3725,1380,20),(100169,"徐霞客",3000,1381,30),(100670,"云雾",3000,1382,20),(20081,"鱼幼薇",7000,1383,20)+--------+--------+--------+--------+-------+
| uid    | mname  | salary | jobnum | Depid |
+--------+--------+--------+--------+-------+
|  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
| 100167 | 赵敏   |   4700 |   1379 |    10 |
| 100168 | 河东君 |   3725 |   1380 |    20 |
| 100169 | 徐霞客 |   3000 |   1381 |    30 |
| 100670 | 云雾   |   3000 |   1382 |    20 |
+--------+--------+--------+--------+-------+1.3构建公司表数据
INSERT into com VALUES(1379,10,"金庸部门",3333),(1380,20,"秦淮八绝",6578),(1381,30,"自由摸鱼人",75),(1382,20,"秦淮八绝",7755),(1383,20,"秦淮八绝",9735)+---------+--------+------------+-------+
| cjobnum | cdepid | cdepname   | bonus |
+---------+--------+------------+-------+
|    1379 |     10 | 金庸部门   |  3333 |
|    1380 |     20 | 秦淮八绝   |  6578 |
|    1381 |     30 | 自由摸鱼人 |    75 |
|    1382 |     20 | 秦淮八绝   |  7755 |
|    1383 |     20 | 秦淮八绝   |  9735 |
+---------+--------+------------+-------+可以直接复制

1.1where连接

  • 语法是 表1,表2。。。。表n where 连接条件
  • 那张表在前面取决你的from 的表顺序
1 dog 和dogmaster链接select * from dog,dogmaster where dog.dogmasterid = dogmaster.uid;
+----+---------+--------+-------------+--------+--------+--------+--------+-------+
| id | dogname | dogsex | dogmasterid | uid    | mname  | salary | jobnum | Depid |
+----+---------+--------+-------------+--------+--------+--------+--------+-------+
|  1 | 灰灰    | 1      |      100167 | 100167 | 赵敏   |   4700 |   1379 |    10 |
|  2 | 小黑    | 0      |      100168 | 100168 | 河东君 |   3725 |   1380 |    20 |
|  3 | 小紫    | 0      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|  4 | 云安    | 1      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|  5 | 于山    | 0      |      100670 | 100670 | 云雾   |   3000 |   1382 |    20 |
|  6 | 开饭    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  7 | 米啾    | 1      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  8 | 葡萄    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
+----+---------+--------+-------------+--------+--------+--------+--------+-------+2 三张表一起链接
首先我们来理一下想要的效过   我想要
公司表——》狗主人表——》狗表
那么from 后面顺序就应该是和上面的结果一样select * from com,dogmaster as dm,dog where com.cjobnum = dm.jobnum and dm.uid = dog.dogmasterid;  结果为   如果不喜欢重复字段可以自己加筛选条件过滤结果集
+---------+--------+------------+-------+--------+--------+--------+--------+-------+----+---------+--------+-------------+
| cjobnum | cdepid | cdepname   | bonus | uid    | mname  | salary | jobnum | Depid | id | dogname | dogsex | dogmasterid |
+---------+--------+------------+-------+--------+--------+--------+--------+-------+----+---------+--------+-------------+
|    1379 |     10 | 金庸部门   |  3333 | 100167 | 赵敏   |   4700 |   1379 |    10 |  1 | 灰灰    | 1      |      100167 |
|    1380 |     20 | 秦淮八绝   |  6578 | 100168 | 河东君 |   3725 |   1380 |    20 |  2 | 小黑    | 0      |      100168 |
|    1381 |     30 | 自由摸鱼人 |    75 | 100169 | 徐霞客 |   3000 |   1381 |    30 |  3 | 小紫    | 0      |      100169 |
|    1381 |     30 | 自由摸鱼人 |    75 | 100169 | 徐霞客 |   3000 |   1381 |    30 |  4 | 云安    | 1      |      100169 |
|    1382 |     20 | 秦淮八绝   |  7755 | 100670 | 云雾   |   3000 |   1382 |    20 |  5 | 于山    | 0      |      100670 |
|    1383 |     20 | 秦淮八绝   |  9735 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |  6 | 开饭    | 0      |       20081 |
|    1383 |     20 | 秦淮八绝   |  9735 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |  7 | 米啾    | 1      |       20081 |
|    1383 |     20 | 秦淮八绝   |  9735 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |  8 | 葡萄    | 0      |       20081 |
+---------+--------+------------+-------+--------+--------+--------+--------+-------+----+---------+--------+-------------+3我不想要这么多字段,我只想要每个员工养狗狗的只数select cjobnum,mname 员工名,count(dogname) 狗的只数 from com,dogmaster as dm,dog where com.cjobnum = dm.jobnum and dm.uid = dog.dogmasterid group by cjobnum;+---------+--------+----------+
| cjobnum | 员工名 | 狗的只数 |
+---------+--------+----------+
|    1379 | 赵敏   |        1 |
|    1380 | 河东君 |        1 |
|    1381 | 徐霞客 |        2 |
|    1382 | 云雾   |        1 |
|    1383 | 鱼幼薇 |        3 |
+---------+--------+----------+还想筛选自己晒辣不会在问我辣。

1.2inner join on连接

  • 语法是 from 表1 inner join 表2 on 条件[inner join 表3 on 条件]
  • 所有这玩意感觉都一样。就是以哪个表为主
1 dog 和dogmaster链接select * from dog inner join dogmaster as dm on dog.dogmasterid = dm.uid;结果和上面相同  喜欢用哪个就用哪个
+----+---------+--------+-------------+--------+--------+--------+--------+-------+
| id | dogname | dogsex | dogmasterid | uid    | mname  | salary | jobnum | Depid |
+----+---------+--------+-------------+--------+--------+--------+--------+-------+
|  1 | 灰灰    | 1      |      100167 | 100167 | 赵敏   |   4700 |   1379 |    10 |
|  2 | 小黑    | 0      |      100168 | 100168 | 河东君 |   3725 |   1380 |    20 |
|  3 | 小紫    | 0      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|  4 | 云安    | 1      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|  5 | 于山    | 0      |      100670 | 100670 | 云雾   |   3000 |   1382 |    20 |
|  6 | 开饭    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  7 | 米啾    | 1      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  8 | 葡萄    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
+----+---------+--------+-------------+--------+--------+--------+--------+-------+2 三张表一起链接
select * from com inner join dogmaster as dm on com.cjobnum = dm.jobnum inner join dog on dog.dogmasterid = dm.uid;+---------+--------+------------+-------+--------+--------+--------+--------+-------+----+---------+--------+-------------+
| cjobnum | cdepid | cdepname   | bonus | uid    | mname  | salary | jobnum | Depid | id | dogname | dogsex | dogmasterid |
+---------+--------+------------+-------+--------+--------+--------+--------+-------+----+---------+--------+-------------+
|    1379 |     10 | 金庸部门   |  3333 | 100167 | 赵敏   |   4700 |   1379 |    10 |  1 | 灰灰    | 1      |      100167 |
|    1380 |     20 | 秦淮八绝   |  6578 | 100168 | 河东君 |   3725 |   1380 |    20 |  2 | 小黑    | 0      |      100168 |
|    1381 |     30 | 自由摸鱼人 |    75 | 100169 | 徐霞客 |   3000 |   1381 |    30 |  3 | 小紫    | 0      |      100169 |
|    1381 |     30 | 自由摸鱼人 |    75 | 100169 | 徐霞客 |   3000 |   1381 |    30 |  4 | 云安    | 1      |      100169 |
|    1382 |     20 | 秦淮八绝   |  7755 | 100670 | 云雾   |   3000 |   1382 |    20 |  5 | 于山    | 0      |      100670 |
|    1383 |     20 | 秦淮八绝   |  9735 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |  6 | 开饭    | 0      |       20081 |
|    1383 |     20 | 秦淮八绝   |  9735 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |  7 | 米啾    | 1      |       20081 |
|    1383 |     20 | 秦淮八绝   |  9735 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |  8 | 葡萄    | 0      |       20081 |
+---------+--------+------------+-------+--------+--------+--------+--------+-------+----+---------+--------+-------------+#和上面一样   筛选自己写啊我十几岁我好累

2左右连接

  • 左连接 主表 left join 子表 on 连接条件
  • 右连接 主表 left join 子表 on 连接条件

select * 的时候主表的数据项全部显示 如果子表没有该数据则会自动添加一个万用链接补齐该项(null)

新增一条数据以查看结果
insert into dog(dogname,dogmasterid) value("蓝狗",7563)1左连接   即以主表为主
select * from dog left join dogmaster on dog.dogmasterid = dogmaster.uid;因为蓝狗的主人id右表没有所以自动添加一个万用链接结果如下
+----+---------+--------+-------------+--------+--------+--------+--------+-------+
| id | dogname | dogsex | dogmasterid | uid    | mname  | salary | jobnum | Depid |
+----+---------+--------+-------------+--------+--------+--------+--------+-------+
|  6 | 开饭    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  7 | 米啾    | 1      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  8 | 葡萄    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|  1 | 灰灰    | 1      |      100167 | 100167 | 赵敏   |   4700 |   1379 |    10 |
|  2 | 小黑    | 0      |      100168 | 100168 | 河东君 |   3725 |   1380 |    20 |
|  3 | 小紫    | 0      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|  4 | 云安    | 1      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|  5 | 于山    | 0      |      100670 | 100670 | 云雾   |   3000 |   1382 |    20 |
|  9 | 蓝狗    | 1      |        7563 |   NULL | NULL   |   NULL |   NULL |  NULL |
+----+---------+--------+-------------+--------+--------+--------+--------+-------+2 以右表为主连接
因为右边的主表不包含那一项,所以就算你左边有也不显示select * from dog right join dogmaster on dog.dogmasterid = dogmaster.uid;
+------+---------+--------+-------------+--------+--------+--------+--------+-------+
| id   | dogname | dogsex | dogmasterid | uid    | mname  | salary | jobnum | Depid |
+------+---------+--------+-------------+--------+--------+--------+--------+-------+
|    1 | 灰灰    | 1      |      100167 | 100167 | 赵敏   |   4700 |   1379 |    10 |
|    2 | 小黑    | 0      |      100168 | 100168 | 河东君 |   3725 |   1380 |    20 |
|    3 | 小紫    | 0      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|    4 | 云安    | 1      |      100169 | 100169 | 徐霞客 |   3000 |   1381 |    30 |
|    5 | 于山    | 0      |      100670 | 100670 | 云雾   |   3000 |   1382 |    20 |
|    6 | 开饭    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|    7 | 米啾    | 1      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
|    8 | 葡萄    | 0      |       20081 |  20081 | 鱼幼薇 |   7000 |   1383 |    20 |
+------+---------+--------+-------------+--------+--------+--------+--------+-------+

3子查询

  • any 大于子查询结果中某个结果的值
  • all 大于子查询结果中的所有值
  • union 并集 可以去重完全啊不一样的
  • union all 把表中数据都罗列出来
  • union和union all 用在两个select 语句之间

select * from dog where id> all (select id from dog where dogname in ("灰灰","米啾","于山","开饭"));
结果如下
+----+---------+--------+-------------+
| id | dogname | dogsex | dogmasterid |
+----+---------+--------+-------------+
|  8 | 葡萄    | 0      |       20081 |
|  9 | 蓝狗    | 1      |        7563 |
+----+---------+--------+-------------+SELECT dog.dogmasterid,dog.dogname FROM dog UNION all SELECT mname,uid from dogmaster;
+-------------+---------+
| dogmasterid | dogname |
+-------------+---------+
| 100167      | 灰灰    |
| 100168      | 小黑    |
| 100169      | 小紫    |
| 100169      | 云安    |
| 100670      | 于山    |
| 20081       | 开饭    |
| 20081       | 米啾    |
| 20081       | 葡萄    |
| 7563        | 蓝狗    |
| 鱼幼薇      | 20081   |
| 赵敏        | 100167  |
| 河东君      | 100168  |
| 徐霞客      | 100169  |
| 云雾        | 100670  |
+-------------+---------+

mysql 03多表联合操作——个人笔记相关推荐

  1. mysql 横纵表转化_数据库MySQL横纵表相互转化操作实现方法

    本文实例讲述了MySQL横纵表相互转化操作实现方法.分享给大家供大家参考,具体如下: 先创建一个成绩表(纵表) create table user_score ( name varchar(20), ...

  2. mysql的多表联合查询

    mysql的多表联合查询 文章目录 mysql的多表联合查询 创建环境 什么是多表联合查询 交叉连接(CROSS JOIN) 笛卡尔积 交叉连接 内连接 外连接 左连接 右连接 分组查询 GROUP ...

  3. 第四篇:Mysql查询-多表联合查询-及子查询

    mysql查询语句 多表联合查询 几子查询 1,单表查询:select * from 表名; eg:  select * from t1; 2,按条件查询: select 字段1,字段2,字段n... ...

  4. 7、mysql中的表结构操作

    之前已经介绍了字段以及修饰字段的一些属性,根据特定的对象可以将字段进行组合,这就有了表的概念,接下来介绍一下如何操 作数据表结构.对数据表结构的操作有添加表.修改表.删除表.查看表结构. 添加表 格式 ...

  5. mysql中多表联合查询语句_mysql中的多表联合查询语句是什么

    mysql中的多表联合查询语句是:[select 语句1 union [union 选项] select 语句2 union [union 选项] select 语句n].多表联合查询结果是将多个se ...

  6. MySQL的库表详细操作

    MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf8; 1.2 数据库命名规则 ...

  7. 【MySQL】多表联合查询、连接查询、子查询

    文章目录 [1]连接查询 内连接查询 外连接查询 左连接 右连接 [2]联合查询 [3]子查询 带in关键字的子查询 带比较运算符的子查询 带exists的子查询 带any关键字的子查询 带all关键 ...

  8. Ubuntu Mysql 数据库和表的操作   [2P]

    1.在终端启动:mysql -uroot -p密码 然后回车: 2.查看数据库的名字:SHOW DATABASES;: 3.选择一个数据库:USE test_STinfo;:(今天总是SELECT,惭 ...

  9. Mysql数据库大表归档操作

    由于公司的某个系统数据表过亿,考虑到数据表的压力.所以根据某个时间点对数据表做了一个归档.以下的操作是在当前的数据库新建表用于存储历史数据,然后再对生产表做一个清理操作.如果有条件的话可以把归档的数据 ...

  10. 在mysql中删除表正确的是什么_在MySQL中删除表的操作教程

    丢弃现有MySQL的表是很容易的.但是需要非常小心,删除任何现有的一个表后将无法恢复,因为数据丢失. 语法: 下面是通用的SQL语法丢弃(删除)MySQL表: DROP TABLE table_nam ...

最新文章

  1. java的json导出excel_利用json生成excel表格
  2. 学界 | 马里兰大学研究:人脑神经网络的动态变化和声音感知
  3. 0076-小升初1:生日蛋糕
  4. vue滚动条禁止_vue弹窗后如何禁止滚动条滚动?
  5. macappstore登不上去_丈夫在外与多人暧昧,妻子气愤不已,可他却怒怼:这还不都是你逼的...
  6. 该如何来开发这个喜欢的功能呢?
  7. python必背代码-Python高手必修课:如何让 Python 代码更易读,推荐收藏
  8. UG NX10 NX12 用曲线方程式绘制实体模型的方法
  9. 音频 ASIO 驱动开发
  10. 2022软件测试面试题 最新字节跳动50道真题面试题 刷完已拿下15k 附讲解+答疑
  11. ecshop在linux运行慢,解决ECShop访问速度慢
  12. Vue 2.0 升(cai)级(keng)之旅
  13. Springboot启动流程详解
  14. JVM|记一次生产环境 CPU 占用飙高问题解决
  15. 计算机中的正数,负数到底是什么?
  16. 苹果cms(mac cms)安装和避雷
  17. 测试用例编写练习(二)
  18. VSCode下配置R语言环境(Windows)
  19. VB:SysInfo控件
  20. 软件设计师中级: 2019年上半年软件设计师考试上午真题 专业解析+参考答案

热门文章

  1. python爬虫负面新闻_Python爬虫实战项目:简单的百度新闻爬虫
  2. 29_互联网(The Internet)(IP数据包;UDP;TCP;DNS;OSI)
  3. 笨鸟的平凡之路-Spark之资源调优
  4. React Router V6实现嵌套路由重定向
  5. Python攻克之路-文件操作
  6. 解决C++中两个类的头文件互相包含问题
  7. 大数据开发复习第一篇(MySQL篇)
  8. kafka.network.InvalidRequestException: Error getting request for apiKey: 3 and apiVersion: 2
  9. Mybatis不能正确解析typeAliases问题的处理方法( Could not resolve type alias 'Orders')
  10. 计算机编程英语单词,计算机编程英语单词汇总