语法:
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实现连接条件和筛选条件的分离,可读性较高
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/5979.html