MySql学习笔记10——连接查询(sql92语法)

MySql学习笔记10——连接查询(sql92语法)含义 连接查询 又称多表查询 当查询的字段来自于多个表时 就会用到连接查询笛卡尔乘积现象 表 1 有 m 行 表 2 有 n 行 结果 m n 行发生原因 没有有效的连接条件如何避免 添加有效的连接条件分类 按年代分类 sql92 标准仅仅支持内连接 sql99

大家好,欢迎来到IT知识分享网。

含义: 连接查询 又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

笛卡尔乘积现象:表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

sql92标准

1.等值连接

①多表等值连接的结果为多表的交集部分

②n表连接,至少需要n-1个连接条件

③多表的顺序没有要求

④一般需要为表起别名

⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

查询每个学生对应的各科教师的名字

select student.name,student.subject,teacher.name from student , teacher

where student.teacher_id = teacher.id

可以为表取别名:

①提高语句的简洁度

②区分多个重名的字段

注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定

select st.name,st.subject,te.name from student as st, teacher as te

where st.teacher_id = te.id

两个表的顺序可以调换:

select st.name,st.subject,te.name from teacher as te ,student as st

where st.teacher_id = te.id

加筛选条件查询:

查询每个学生对应的语文教师的名字

select st.name,st.subject,te.name from teacher as te ,student as st

where st.teacher_id = te.id and st.subject =’语文’

加分组查询:

查询张行老师学生的语文成绩平均分

select st.subject,te.name,avg(st.score) from teacher as te ,student as st

where st.teacher_id = te.id and te.name =’张行’ and st.subject =’语文’

group by st.subject,te.name

加排序查询:

查询张行老师学生的语文成绩(由高到低排序)

select st.name,st.subject,te.name,st.score from teacher as te ,student as st

where st.teacher_id = te.id and 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,level as le

where st.score between le.lowest_score and le.highest_score

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

(0)
上一篇 2026-03-15 17:01
下一篇 2025-08-12 22:45

相关推荐

发表回复

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

关注微信