上机实验二——完整性约束的实现

为Student表创建一插入和更新触发器tri_ins_upd_student:当插入新的学生或者更新学生所在班级时,检查该班级的学生人数有没有超过40人,如果没有则插入或者更新成功,如果超出40人,操作回滚。

CREATE TRIGGERtri_ins_upd_student

ON Student

AFTER INSERT,UPDATE

AS

IF ((

SELECT COUNT(Clno)

FROM Student

WHERE Clno =(

SELECTClno

FROM inserted)) > 40)

BEGIN

PRINT '人数超出限制'

ROLLBACK TRANSACTION

END

为成绩管理数据库中的Student表创建一触发器:当向表中插入或删除记录时,修改Class表中相应班级的人数。

CREATE TRIGGERtri_ins_del_student

ON Student

AFTER INSERT,DELETE

AS

IF UPDATE(SNo)

UPDATE Class

SET Number = Number + 1

WHERE Clno =(

SELECTClno

FROM INSERTED)

ELSE

UPDATEClass

SET Number = Number - 1

WHERE Clno =(

SELECTClno

FROM DELETED)

为CLass表再建一更新触发器:当更新班长学号时,检查新输入的学号是否为同一班级的学生学号,若不是,给出适当的提示信

CREATE TRIGGERtri_upd_student

ON Class

AFTER UPDATE

AS

IF UPDATE(Monitor)

IF (

SELECT Monitor

FROM INSERTED) NOT IN(

SELECTSNo

FROM Student

WHERE Clno =(

SELECTClno

FROM DELETED))

BEGIN

PRINT '班级里没有这位学生'

ROLLBACK TRANSACTION

END

上机实验三——SELECT语句的使用(一)

找出所有被学生选修了的课程号;

SELECT Cno

FROM Grade

找出01311班女学生的个人信息;

SELECT SNo, Sname, Ssex, Sage

FROM Student

WHERE (Clno = 01311) AND(Ssex = '女')

找出01311班、01312班的学生姓名、性别、出生日期;

SELECT Sname, Ssex, Sage

FROM Student

WHERE (Clno = 01311) OR(Clno = 01312)

找出所有姓李的学生的个人信息;

SELECT *

FROM Student

WHERE Sname LIKE '李%'

找出学生李勇所在班级的学生人数;

SELECT Number

FROM Class

WHERE Clno=(

SELECT Clno

FROM Student

WHERE Sname='李勇')

找出课程名为操作系统的平均成绩、最高分、最低分;

SELECT AVG(Gmark) AS AVG, MAX(Gmark) AS MAX, MIN(Gmark) AS MIN

FROM Grade

WHERE Cno=(

SELECT Cno

FROM Course

WHERE Cname='操作系统')

找出选修了课程的学生人数;

SELECT COUNT(DISTINCT Sno)

FROM Grade

找出选修了课程操作系统的学生人数;

SELECT COUNT(DISTINCT Sno)

FROM Grade

WHERE Cno=(

SELECT Cno

FROM Course

WHERE Cname='操作系统')

找出2000级计算机软件班的成绩为空的学生姓名

SELECT Sname

FROM Student

WHERE (Clno IN(

SELECT clno

FROM Class

WHERE Inyear=2000))

AND(Sno IN(

SELSCT Sno

FROM Grade

WHERE Gmark IS NULL))

试一下以下语句是否正确:

SELECT eno,basepay,service

FROMsalary

WHEREbasepay<AVG(basepay)

答:错误,应修改为

SELECT eno,basepay,service

FROMsalary

WHEREbasepay<(

SELECT AVG(basepay)

FROM salary)

思考题:

什么情况下需要使用关系的别名?别名的作用范围是什么?

 

答:当为名称较长的表分配别名,以使编码较长的查询更易进行时会使用关系别名。

别名的作用范围就是在查询中一旦分配了别名,就一定要在该查询中一直使用该别名。查询中一定不能将表的全名和其别名混合使用。

 

 

上机实验四——SELECT语句的使用(二)

找出与李勇在同一个班级的学生信息;

SELECT *

FROM Student

WHERE Clno=(

SELECTClno

FROM Student

WHERE Sname='李勇') AND Sname NOT IN('李勇')

找出所有与学生李勇有相同选修课程的学生信息;

SELECT *

FROM Student

WHERE SNo IN(

SELECTSno

FROM Grade

WHERE Cno IN(

SELECTCno

FROM Grade

WHERE Sno =(

SELECTSNo

FROMStudent

WHERESname ='李勇'))) AND Sname NOT IN('李勇')

找出年龄介于学生李勇和25岁之间的学生信息;

SELECT *

FROM Student

WHERE Sage < 25 AND Sage >(

SELECT Sage

FROM Student

WHERE Sname='李勇')

找出选修了课程操作系统的学生学号和姓名;

SELECT SNo, Sname

FROM Student

WHERE SNo IN(

SELECTSno

FROM Grade

WHERE Cno =(

SELECT Cno

FROM Course

WHERE Cname='操作系统'))

找出所有没有选修1号课程的学生姓名;

SELECT Sname

FROM Student

WHERE SNo NOT IN(

SELECTSno

FROM Grade

WHERE Cno =('1'))

找出选修了全部课程的学生姓名。(提示:可找出这样的学生,没有一门课程是他不选修的。)

SELECT Sname

FROM Student

WHERE NOT EXISTS(

SELECT*

FROM Course

WHERE NOT EXISTS(

SELECT*

FROM Grade

WHERE Sno= Student.SNo

AND Cno= Course.Cno))

查询选修了3号课程的学生学号及其成绩,并按成绩的降序排列;

SELECT Sno, Gmark

FROM Grade

WHERE Cno ='3'

ORDER BY Gmark DESC

查询全体学生信息,要求查询结果按班级号升序排列,同一班级学生按年龄降序排列;

SELECT *

FROM Student

ORDER BY Clno ASC,Sage DESC

求每个课程号及相应的选课人数;

SELECT Cno, COUNT(Cno) AS'选修人数'

FROM Grade

GROUP BY Cno

查询选修了3门以上课程的学生学号。

SELECT Sno, COUNT(Sno) AS'选修课程数'

FROM Grade

GROUP BY Sno

HAVING (COUNT(Sno) > 3)

使用存在量词[NOT]EXISTS的嵌套查询时,何时外层查询的WHERE条件为真,何时为假。

答:子查询并不返回数据,而是进行布尔检验,看该数据是否存在。

思考题:

1.  用UNION或UNION ALL将两个SELECT命令结合为一个时,结果有何不同?

答:在合并结果集时,默认将从最后的结果集中删除重复的行,除非使用ALL关键字

 

2.  当既能用连接词查询又能用嵌套查询时,应该选择哪种查询较好?为什么?

答:查询涉及多个关系时,用嵌套查询逐步求解,层次清楚,易于构造,具有结构化程序设计的优点。

3.  库函数能否直接使用在:SELECT选取目标、HAVING子句、WHERE子句、GROUPBY列名中?

答:SELECT选取目标可以直接使用

HAVING子句可以直接使用

GROUP BY列名不能直接使用

WHERE子句 不能直接使用

SQL语言的基础操作(二)相关推荐

  1. 实验二 SQL 语言——SELECT 查询操作(第一部分)

    SQL 语言--SELECT 查询操作 实验目的: -了解查询的概念和方法:-掌握 SQL Server 集成管理器查询子窗口中执行 SELECT 操作的方法:-掌握 SELECT 语句在单表查询中的 ...

  2. 数据库实验4 SQL语言-SELECT查询操作

    数据库实验4 SQL语言-SELECT查询操作 1.首先按照第三章的jxgl数据库的模板创建jxgl数据库并插入数据: 创建数据库jxgl: create database jxgl; 创建相应的表: ...

  3. 深度学习(6)TensorFlow基础操作二: 创建Tensor

    深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...

  4. R语言入门基础操作 啰嗦同桌级教程(一)

    本文写给有编程基础和无编程基础的所有R语言小白!一个星期前,笔者也是一个R语言小白,所以自知所学甚浅,如同学们在阅读时发现本文的错误和不足,热热热烈欢迎大噶在评论区补充或直接私聊联系笔者! 笔者所用环 ...

  5. php 越权 漏洞,PHPYUN最新版多处SQL注入及越权操作二

    ### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)多处SQL注入及越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了, ...

  6. Sql语言(基础一)

    我们今天开始接触一种新的语言Sql语言,在21世纪,最有价值的便是数据,那我们是不是应该把这些数据拿一些数据储存起来呢,Sql语言就是这么一个存储数据的容器,今天我们来探一探Sql的庐山真面目!!! ...

  7. Python爬虫基础操作二

    目录 四.爬虫数据存储csv/excel 五.session与cookies 六.selenium库:控制浏览器操作 七.定时与邮件 上一篇爬虫操作基础,本篇讲解爬虫数据存储.cookies,sess ...

  8. 图像处理基础操作二(边缘检测、轮廓检测、光流估计)

    目录 一.边缘检测 二.图像金字塔 三.图像轮廓检测 1.绘制图像轮廓 2.轮廓近似绘制 3.画轮廓边界矩形框 4.画轮廓外接圆 四.背景建模 五.光流估计 一.边缘检测 边缘检测通常是在保留原有图像 ...

  9. 【SQL语言——SELECT查询操作】

    基于创建的数据库(包含读者.图书.借阅三张表),试用SQL的查询语句表达下列查询: 1.查询图书表中售价介于50元到70元之间的图书的全部信息 2.查询图书表中全部图书的最高售价.最低售价和平均售价. ...

最新文章

  1. antv g6 禁止移动_antV G6流程图在Vue中的使用
  2. 深入了解ibatis源码----简单ibatis示例代码
  3. 生成器和生成器表达式
  4. 每周论文清单:知识图谱,文本匹配,图像翻译,视频对象分割
  5. React with Webpack - 2: css 处理
  6. 西门子Mendix发低代码最新报告趋势:客户体验先行、智能化和全渠道化
  7. 计算机技术知识字,计算机基础知识
  8. 发现Tensorflow
  9. linux未设置为接受端口,Simple gawk server
  10. java加解密算法概述
  11. 如何制作Win10启动U盘启动盘iso镜像文件
  12. SQL语句--创建视图
  13. 物联网人工智能软件市场现状研究分析报告 -
  14. 怎样绘制产品流程图?绘制的技巧分享
  15. 基于C51单片机的锂电池容量检测仪电压电流检测 原理图PCB程序设计
  16. 笔记本计算机故障与诊断,笔记本电脑维护与故障诊断
  17. tdr 定位公式_基于土壤热导率定位监测容重的Thermo-TDR技术
  18. python中response对象的方法_django HttpResponse对象 - 刘江的django教程
  19. python培训费用多少钱?学习python课程价格?
  20. 流量无限离我们还有多远?

热门文章

  1. python许可证_一图看懂各种许可协议
  2. 极客日报:阿里旗下App接入微信支付;马斯克成世界首富;PostgreSQL 14 RC 1发布
  3. 编译安装Linux内核(以5.10.104版本为例)
  4. “decompose“没有适用于“ts“目标对象的方法
  5. 促销 java 满 赠_促销活动除了打折、返现、满赠,还有什么方式?
  6. 【璟丰机电】美国派克Parker产品在FPD中的行业应用案例盘点
  7. JS算法-整数转罗马数字
  8. 2019最新spark面试题,看了它,你还怕找不到工作吗?
  9. 护眼灯对孩子眼睛好吗?盘点最好的儿童护眼灯品牌
  10. android删除本地图片,Android中结合contentResolver.delete和file.delete实现本地图片的删除...