数据库-创建及使用数据库(三、三种连接join、嵌套查询select、in、exists、视图view)

在这里插入图片描述
在这里插入图片描述
注意!!!!
在这里插入图片描述
要学会如何使用多个join on语句!
在这里插入图片描述在这里插入图片描述

select student.sname,student.sdept,sc.cno from student join sc on student.sno=sc.sno where cno='c02'

在这里插入图片描述
SQL LEFT JOIN 关键字:
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行(例如:包括没有选课的学生),即使在右表 (table_name2) 中没有匹配的行。

在这里插入图片描述

不写left、right 只有join默认是内连接,只有写了left、right才会被视为外连接。外连接又分为left、right,left是指以左边的表进行连接,右边的表中即使没有相关信息也要连接(以null替换)

在这里插入图片描述
左连接(左外连接):会输出不满足连接条件的元组,上图中,“王敏”、“张立”,在sc表中没有信息(即没有进行选课),只在student表中有他们的信息,采用左连接时会将他们一并输出,但内连接不会!

一般题目中出现了需要选出“未修课”的学生那就要用left join ,用内连接是选不出来的!
在这里插入图片描述
在这里插入图片描述

select student.sno as 学号, sname as 姓名, Sdept as 所在系, cno from student left join sc on student.sno=sc.sno where cno is null

交叉连接 cross join

在这里插入图片描述
在这里插入图片描述

嵌套查询

在这里插入图片描述

any和all的区别:>all表示大于最大值,>any表示至少大于一个值,即大于最小值!

说明:就是把外查询的一个一个的数据拿到exists中判断,如果找得到就返回true,where发现是true了就允许外查询的要求!


一般会把外查询的一项值拿给子查询作判断依据!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明:in是拿具体的一项值去进行比较,而exists是将外查询中的一行行数据拿去对比,看是不是true!
在这里插入图片描述
一步一步,慢慢分析,进行嵌套分析

在这里插入图片描述
在这里插入图片描述
易错点:
注意:如果写成where sage=max(sage),则是错误!计算函数不能出现在where后,如果要使用计算函数则需要用到select嵌套!

在这里插入图片描述
在这里插入图片描述
SQL Server 比较操作运算符
= 等于。对于两个完全一样的值,这个运算符将返回True
<> 不等于。对于两个不完全一样的值,这个运算符将返回True
!= 不等于。这个运算符与“< >”运算符功能一样。

在这里插入图片描述

注意!在使用exists时,后面的select子句中一定要出现where sno=student.sno 来做为与前面主句的匹配条件!否则会出现多选的情况。

例:
用子查询查询修了‘c02’课程且成绩高于此课程的平均成绩的学生的学号和成绩。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

视图的本质就是在select语句前加上create view xxx(xx,xx如果有聚合函数) as select.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

考点:
注意!创建视图时,如果子查询选择的列包含了表达式或者聚合函数,并且在原表中也没有这样的列标题,则在定义视图时要在视图名后加上列的名字(每一个列都要加,用逗号隔开)
例:create view stu_g(sno,gavg) as select sno,avg(grade) from sc group by sno

可以在view后面加上括号进行说明,也可以直接在后面的select语句中使用as xxx,来给它命名,两种方式都是允许的!
法一:

create view LECTURE_view2(教师号,教师名,授课时数) as select 教师表.教师号,教师名,sum(授课时数) from 教师表 join 授课表 on 教师表.教师号=授课表.教师号
group by 教师表.教师号,教师名

法二:

create view LECTURE_view2 as select 教师表.教师号,教师名,sum(授课时数) as 授课总时数 from 教师表 join 授课表 on 教师表.教师号=授课表.教师号
group by 教师表.教师号,教师名

在这里插入图片描述
在这里插入图片描述

create view temp (学号,总学分)as
    select student.sno,sum(course.ccredit)
    from student join sc on
    student.sno=sc.sno join course on
    sc.cno=course.cno where grade>60 group by student.sno
select * from temp


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除视图:Drop view<视图名>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注意:此时的sname,sno由你最初创建视图时的命名为准!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@u@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值