MySql学习笔记11——连接查询(sql99语法)

语法:select 查询列表from 表1 别名 【连接类型】join 表2 别名 on 连接条件【where 筛选条件】【group by 分

语法:

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

(0)
上一篇 2022-12-14 16:34
下一篇 2022-12-14 16:34

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信