当前位置:网站首页>MySQL联合查询(多表查询)
MySQL联合查询(多表查询)
2022-07-30 22:10:00 【web18334137065】
一、内连接
select *from 表1 [ inner | cross ] join 表2 [ on过滤条件 ] [ where查询条件 ] ;
[ inner | cross ]:
join 内连接关键字(必须要有);
on从语法上可省略,但如果省略它,将查询的是多表的笛卡尔积;
1.select *from 表1 join 表2 [ on过滤条件 ] [ where查询条件 ] ;
2.select *from 表1,表2 [ where查询条件 ] ;
3.select *from 表1 inner join 表2 [ on过滤条件 ] [ where查询条件 ] ;
4.select *from 表1 cross join 表2 [ on过滤条件 ] [ where查询条件 ] ;
(1.2使用较多;多表查询使用1较好)


例1:查询张三的成绩:
1.进行内连接查询(笛卡尔积)
select s.*,st.* from student s join score_table st;

2.去掉无效的数据(on过滤条件)
select s.*,st.* from student s join score_table st on s.id=st.student_id;

3.查询张三的成绩(where 条件)
select s.*,st.* from student s join score_table st on s.id=st.student_id where s.username=‘张三’;

例2:查询每个人成绩、科目名、个人信息:
1.连表查询(三张表)select *from 表1 join 表2 join 表3;
2.过滤笛卡尔积中无意义数据:select *from 表1 join 表2 [ on 条件过滤 ] join 表3[ on 条件过滤 ];
select s.username,s.sn,s.mail,st.score,c.namefrom score_table st join course c on st.course_id=c.id join student s on s.id=st.student_id;
二、外连接:
1.左(外)连接:
select * from 表1 left join 表2 on连接条件 [where条件查询];
表1 查询结果是所有数据,表2查询结果是与表1重合部分的数据

2.右(外)连接
select * from 表1 right join 表2 on连接条件 [where条件查询];

左 / 右连接可以互相实现,只需要将表的顺序调换即可。


联表查询中on和where的区别:
1.on在内连接中可省略,外连接不可省略;
2.on在内连接中执行效果和外连接执行效果不同;
left join…on查询不能过滤掉左表中的数据,而内连接on查询可以过滤掉全局数据。
3.外连接中on和where不同
on筛选笛卡尔积过滤条件,where筛选具体业务
三、自连接(自查询)
select *from 表名 as t1,表名 as t2 where t1.id=t2.id [, …]
例1:查询英语成绩<计算机成绩的数据
(1)根据科目名称查出来科目ID(成绩表中只有科目ID,没有科目名)
(2)自查询
(3)去除笛卡尔积中无意义数据(有意义数据:主键相同;)
(4)设置where条件,让表1只查询英语成绩,表2查询计算机成绩
(5)设置where多条件查询,让英语成绩<计算机成绩

四、子查询(嵌套查询)
select 字段名 from
例:查张三的同班同学

五、合并查询(至少两张表)
union(进行结果集合并,并去重,只保留重复数据中的一条)
union all(不会去掉结果集中的重复行)
例:查询id小于3和名字为“英语”的课程
select * from course where id<3 union select * from course where name=‘英语’;
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- c语言进阶篇:指针(五)
- matlab标量场作图
- IDEA2021.2安装与配置(持续更新)
- Navicat connection MySQL error: 1045 - Access denied for user 'root'@'localhost' (using password YES)
- MySQL压缩包方式安装,傻瓜式教学
- 使用LVS和Keepalived搭建高可用负载均衡服务器集群
- mysql remove duplicate data
- 史上最全的Redis基础+进阶项目实战总结笔记
- Google Earth Engine ——快速实现MODIS影像NDVI动画的在线加载并导出
- 3分钟带你了解微信小程序开发
猜你喜欢

TCP 连接 三次握手 四次挥手

解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead

不用bs4的原因居然是名字太长?爬取彩票开奖信息

StoneDB 为何敢称业界唯一开源的 MySQL 原生 HTAP 数据库?

It is enough for MySQL to have this article (disgusting typing 37k words, just for Bojun!!!)

Google Earth Engine ——ee.List.sequence函数的使用

About the data synchronization delay of MySQL master-slave replication

cnpm installation steps

MYSQL JDBC Book Management System

@RequestBody、 @RequestParam 、 @PathVariable 和 @Vaild 注解
随机推荐
WinDbg实践--入门篇
ClickHouse to create a database to create a table view dictionary SQL
TransGAN代码复现—九天毕昇平台
cnpm的安装与使用
手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践
MySQL 灵魂 16 问,你能撑到第几问?
StoneDB 为何敢称业界唯一开源的 MySQL 原生 HTAP 数据库?
Rust编译报错:error: linker `cc` not found
MySQL user authorization
Knowledge of C language corners of byte alignment
2022/07/30 学习笔记 (day20) 面试题积累
2sk2225代换3A/1500V中文资料【PDF数据手册】
MySQL 8.0.29 设置和修改默认密码
JUC原子类详解
MySQL compressed package installation, fool teaching
MySql创建数据表
语言代码表
【Nacos】解决Nacos下载速度缓慢的问题
IDEA使用技巧
ArrayList扩容机制分析