当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

CISP-PTE真题演示

2sk2225代换3A/1500V中文资料【PDF数据手册】

HCIP第十六天

cmd (command line) to operate or connect to the mysql database, and to create databases and tables

The reason for not using bs4 is that the name is too long?Crawl lottery lottery information

代码越写越乱?那是因为你没用责任链

DistSQL in-depth analysis: creating a dynamic distributed database

史上最全的Redis基础+进阶项目实战总结笔记

ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序

MySQL user authorization
随机推荐
The Road to Ad Monetization for Uni-app Mini Program Apps: Rewarded Video Ads
ML.NET相关资源整理
MySQL 8.0.29 解压版安装教程(亲测有效)
Markdown的使用
IDEA使用技巧
不用bs4的原因居然是名字太长?爬取彩票开奖信息
Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’
2022/07/30 学习笔记 (day20) 面试题积累
鳄梨价格数据集(Avocado Prices)
WSL安装图形界面并通过xrdp/X-Launch访问
Uni-app 小程序 App 的广告变现之路:激励视频广告
MySQL 游标
matlab标量场作图
go语言慢速入门——流程控制语句
Advanced c language: pointers (5)
MySQL压缩包方式安装,傻瓜式教学
成功解决ImportError: cannot import name ‘_validate_lengths‘
Navicat new database
The reason for not using bs4 is that the name is too long?Crawl lottery lottery information
【科研】文献下载神器方式汇总