mysql实战笔记(MySql学习笔记11连接查询)

语法:select 查询列表,下面我们就来说一说关于mysql实战笔记?我们一起去了解并探讨一下这个问题吧!

mysql实战笔记(MySql学习笔记11连接查询)

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

    分享
    投诉
    首页