Mysql day04 高级数据查询

连接查询

连接查询概述

  • 内连接: 连接两个表时,取的是两个表中都存在的数据。(取交集)
  • 左连接: 连接两个表时,取的是左表中特有的数据,对于右表中不存在的数据,用null来填充。
  • 右连接:连接两个表时,取的是右表中特有的数据,对于左表中不存在的数据,用null来填充。
图片[1]-Mysql  day04 高级数据查询-个人学习时光
图片[2]-Mysql  day04 高级数据查询-个人学习时光
图片[3]-Mysql  day04 高级数据查询-个人学习时光
图片[4]-Mysql  day04 高级数据查询-个人学习时光

1.内连接(重点)

  • 语法格式
select * from 表名1 inner join 表名2 on 表1.列=表2.列;
-- 例1: 查询学生信息及学生的成绩
select * from students inner join scores on students.studentNo = scores.studentNo;

2.左连接(知道)

  • 语法格式
select * from 表1 left join 表2 on 表1.列=表2.列
-- 例1: 查询所有学生的成绩, 包括没有成绩的学生
select * from students stu left join scores sc on stu.studentNo = sc.studentNo

3.右连接(知道)

  • 语法格式
select * from 表1 right join 表2 on 表1.列=表2.列
-- 例1:查询所有学生的成绩, 包括没有成绩的学生
select * from scores right join students on scores.studentNo = students.studentNo
-- 例2:查询所有学生的成绩, 包括没有成绩的学生, 需要显示课程名
select * from scores
right join courses on scores.courseNo = courses.courseNo
right join students on students.studentNo = scores.studentNo

4.自关联(知道)

  • 语法格式
select * from 表名 as 别名1 inner join 表名 as 别名2 on 别名1.列=别名2.列
-- 查询出河南省所有的市
select * from areas as a1 inner join areas as a2 on a1.aid=a2.pid where a1.atitle='河南省';

5.子查询

  • 语法格式,例子
-- 例1:查询王昭君的成绩,要求显示成绩(标量子查询)
select studentNo from students where name='王昭君';
select * from scores where studentNo=(select studentNo from students where name='王昭君');
-- 例2:查询18岁的学生的成绩,要求显示成绩(列子查询)
select studentNo from students where age=18;
select score from scores where studentNo in (select studentNo from students where age=18);
-- 例3:查询和王昭君同班、同龄的学生信息(行子查询)
select class, age from students where name='王昭君';
select * from students where (class, age)=(select class, age from students where name='王昭
君');

5.1子查询充当数据源(知道)

-- 例1:查询数据库和系统测试的课程成绩
select * from scores as sc inner join (
select * from courses where name in ('数据库','系统测试')
) as co on sc.courseNo=co.courseNo;
  • 子查询关键字
图片[5]-Mysql  day04 高级数据查询-个人学习时光
  • 例子
-- 例2:查询18岁的学生的成绩,要求显示成绩(列子查询)
select studentNo from students where age=18;
select score from scores where studentNo in (select studentNo from students where age=18);
-- =any和in等价
select score from scores where studentNo = any(select studentNo from students where age=18);
-- SOME:是ANY的别称,很少用
select score from scores where studentNo = some(select studentNo from students where age=18);
-- != all 和 not in 等价
select score from scores where studentNo not in (select studentNo from students where age=18);
select score from scores where studentNo != all(select studentNo from students where age=18);
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片