当前位置:网站首页>MySQL联合查询(多表查询)
MySQL联合查询(多表查询)
2022-08-02 05:19:00 【饿饿好饿】
一、内连接
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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

eggjs controller层调用controller层解决方案

Meta公司新探索 | 利用Alluxio数据缓存降低Presto延迟

25K test old bird's 6-year experience in interviews, four types of companies, four types of questions...

51单片机外设篇:点阵式LCD

Meta公司内部项目-RaptorX:将Presto性能提升10倍

【漫画】2021满分程序员行为对照表(最新版)

字节面试题:如何保证缓存和数据库的一致性

5款经典代码阅读器的使用方案对比

Differences between i++ and ++i in loops in C language

BGP+MPLS综合实验
随机推荐
人工神经网络
Difference and analysis of CPU usage and load
Redis(十一) - 异步优化秒杀
leetcode每天5题-Day04
H5 access payment process - WeChat payment & Alipay payment
Cyber Security Learning - Intranet Penetration 4
【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台
5款经典代码阅读器的使用方案对比
Double for loop case (use js jiujiu printing multiplication table)
[OpenCV from entry to practice] image processing technology [pixel] (the most detailed in the whole network)
51单片机外设篇:DS18B20
NPM ---- 安装yarn
A list of 300+ learning resources compiled by senior engineers of the Tao Department (the latest version in 2021)
OAuth 授权协议 | 都云原生时代了,我们应该多懂一点OAuth ?
跨桌面端Web容器演进
There are more and more talents in software testing. Why are people still reluctant to take the road of software testing?
HCIP BGP综合实验 建立对等体、路由反射器、联邦、路由宣告及聚合
使用TinkerPop框架对GDB增删改查
关于鸿蒙系统 JS UI 框架源码的分析
驱动页面性能优化的3个有效策略