mysql实战笔记(MySql学习笔记11连接查询)
语法:select 查询列表,下面我们就来说一说关于mysql实战笔记?我们一起去了解并探讨一下这个问题吧!
mysql实战笔记
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名 on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
内连接(★) :inner
外连接
左外(★):left 【outer】
右外(★):right 【outer】
全外:full 【outer】
交叉连接:cross
内连接
select查询列表
from 表1 别名
inner. join 表2 别名
on连接条件;
分类:
等值
非等值
自连接
MySql学习笔记10——连接查询(sql92语法)
原创2021-11-30 11:38·包家三少
含义: 连接查询 又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积现象:表1有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
分类:
按年代分类 |
sql92标准 |
仅仅支持内连接 |
sql99标准[推荐] |
支持内连接 外连接( 左外和右外) 交叉连接 | |
按功能分类 |
内连接 |
等值连接 |
非等值连接 | ||
自连接 | ||
外连接 |
左外连接 | |
右外连接 | ||
全外连接 | ||
交叉连接 |
student表
name |
sex |
age |
subject |
score |
teacher_id |
张三 |
男 |
15 |
语文 |
80 |
1 |
李四 |
女 |
15 |
语文 |
85 |
1 |
王二 |
男 |
16 |
语文 |
65 |
2 |
张三 |
男 |
15 |
英语 |
86 |
3 |
李四 |
女 |
15 |
英语 |
77 |
3 |
王二 |
男 |
16 |
英语 |
56 |
4 |
张三 |
男 |
15 |
数学 |
98 |
5 |
李四 |
女 |
15 |
数学 |
76 |
6 |
王二 |
男 |
16 |
数学 |
54 |
6 |
teacher表
id |
name |
sex |
age |
1 |
张行 |
男 |
45 |
2 |
柳青青 |
女 |
35 |
3 |
杨逍遥 |
男 |
27 |
4 |
胡月华 |
女 |
55 |
5 |
李丽 |
女 |
38 |
6 |
王志杰 |
男 |
41 |
level表
level |
lowerest_score |
highest_score |
A |
90 |
100 |
B |
80 |
89 |
C |
70 |
79 |
D |
60 |
69 |
E |
0 |
59 |
1.等值连接
查询每个学生对应的各科教师的名字
select student.name,student.subject,teacher.name from student
inner join teacher
on student.teacher_id = teacher.id
可以为表取别名:
①提高语句的简洁度
②区分多个重名的字段
注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
select st.name,st.subject,te.name from student as st,
inner join teacher as te
on st.teacher_id = te.id
两个表的顺序可以调换:
select st.name,st.subject,te.name from teacher as te
inner join student as st
on st.teacher_id = te.id
加筛选条件查询:
查询每个学生对应的语文教师的名字
select st.subject,te.name,avg(st.score) from teacher as te
inner join student as st
on st.teacher_id = te.id
where te.name ='张行' and st.subject ='语文'
group by st.subject,te.name
加排序查询:
查询张行老师学生的语文成绩(由高到低排序)
select st.name,st.subject,te.name,st.score from teacher as te
inner join student as st
on st.teacher_id = te.id
where te.name ='张行' and st.subject ='语文'
group by st.name,st.subject,te.name,st.score
order by st.score desc
2.非等值连接
查询学生各科成绩的等级
select st.name,st.subject,st.score le.level from student as st
inner join level as le
on st.score between le.lowest_score and le.highest_score
外连接特点:
1、外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果 主表中有而从表没有的记录
2、左外连接,left join|左边的是主表
右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
左外连接:
查询每位学生对应的各学科老师姓名
select st.name,st.subject,te.name from student as st
left outer join teacher as te
where st.teacher_id = te.id
右外连接:
select st.name,st.subject,te.name from teacher as te
right outer join student as st
where st.teacher_id = te.id
sql92语法和sql99语法 比较
功能: sql99支持的较多
可读性: sql99实现连接条件和筛选条件的分离,可读性较高
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com