MySQL联合查询(多表查询)⼀、内连接
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.name from score_table st join course c urse_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条件查询];
左 / 右连接可以互相实现,只需要将表的顺序调换即可。
mysql语句多表查询sap是什么系统软件c语言while例子联表查询中on和where的区别:
<在内连接中可省略,外连接不可省略;
<在内连接中执⾏效果和外连接执⾏效果不同;
查询不能过滤掉左表中的数据,⽽内连接on查询可以过滤掉全局数据。
3.外连接中on和where不同
on筛选笛卡尔积过滤条件,where筛选具体业务
三、⾃连接(⾃查询)
select *from 表名 as t1,表名 as t2 where t1.id=t2.id [, ...]
例1:查询英语成绩<;计算机成绩的数据
(1)根据科⽬名称查出来科⽬ID(成绩表中只有科⽬ID,没有科⽬名)
(2)⾃查询
为什么使用php(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='英语';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论