数据库实验三 嵌套查询和视图操作
实验三 嵌套查询和视图操作
实验目的:
1. 通过本实验能够熟练应用sql语言使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
2. 掌握视图的定义、查询、修改。
实验要求:
1. 在进行本实验之前,应熟练课程内容,在上机之前做好实验计划,编写好相应的代码。
2. 认真填写实验报告,记录所有实验用例。
实验内容:
(一) 嵌套查询
1.求选修了’MA’的学号和姓名。(信息系统)
select sno, sname from student where sno in (select sno from sc where cnoin (select cno from course where cname='信息系统'));
SNO SNAME
--------- --------
20070001 李佳
20070003 王添
2.查询与刘晨在同一个系学习的学生。
SQL> select * from student where sdept=(select sdept from student wheresname='李佳');
SNO SNAME SSEX SAGE SDEPT
--------- -------- ---- ---- --------------------
20070001 李佳 女 20 MA
20070003 王添 男 18 MA
20070006 张力 男 19 MA
224129 庞阿男 男 22 MA
3. 求选修1号课程的成绩高于刘晨的成绩(指刘晨选修的所有的课程的成绩)的学生学号及成绩。(李佳)
SQL> select sno,grade from sc where cno='1' and grade >(selectmax(grade) from sc where sno=(select sno from student where sname='李佳'));
SNO GRADE
--------- -----
224128 100
4. 求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)。
select * from student where sdept<>'MA' and sage<(selectmax(sage) from student where sdept='MA');
SNO SNAME SSEX SAGE SDEPT
--------- -------- ---- ---- --------------------
20070004 张力 女 21 IS
20070005 张力 女 19 CS
224128 庞振男 女 20 IT
5. 求其他系中比计算机系学生年龄都小的学生姓名及年龄。
SQL> select sname, Sage from student where sdept<>'CS' andsage<(select min(sage) from student where sdept='CS');
SNAME SAGE
-------- ----
王添 18
6. 求没有选修3号课程的学生姓名。
SQL> select sname from student where sno not in(select sno from scwhere cno='3');
SNAME
--------
张力
张力
张力
庞振男
庞阿男
nana
6 rows selected
7. 查询选修了全部课程的学生姓名。
SQL语言中没有全称量词∨(,all)。但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。(∨x)P≡∟(exists x(∟P))
SQL> select sname from student where not exists (select * from coursewhere not exists (select * from sc where sno=student.sno and cno=course.cno));
SNAME
--------
李佳
试做:查询所有学生都选修的课程名
试做:
SQL> select cname from course where not exists(select * from studentwhere not exists (select * from sc where sno=student.sno and cno=course.cno));
CNAME
--------------------
数据库原理
DB
8. 求至少选修了学号为“200215121”的学生所选修全部课程的学生学号和姓名。
首先看学号为“200215122”的学生是否选修了学号为“200215121”这个学生所修的全部课程;
即:当200215122号学生没有没选200215121所选的课程时,即200215122全选了200215121同学选修的全部课程。
select * from sc a wherea.sno='200215121' and not exists(select * from sc b where b.sno='200215122' anda.cno=b.cno);
扩展到所有的学生
select sno,sname from student where not exists (select * from sc a wherea.sno='200215122' and not exists(select * from sc b where b.sno=student.sno anda.cno=b.cno));
9. 求选修课程超过2门的学生的学号和姓名。
SQL> select sno,sname from student where sno in (select a.sno from sca,sc b where a.sno=b.sno and a.cno<>b.cno);
SNO SNAME
--------- --------
20070001 李佳
20070003 王添
借助于笛卡尔积(求的是选修课程大于等于两门的学生)
SQL> select sno,sname from student where sno in (select sno from scgroup by sno having count(*)>2);
SNO SNAME
--------- --------
20070003 王添
20070001 李佳
借助于聚集函数,此种方法更好一些
二、数据更新
1.插入数据
1)向Student表中插入2行数据,1行为你的信息,另一行自定。
SQL> insert into student (sno,sname,ssex,sage,sdept) values (224128,'庞振男','女',20,'IT');
1 row inserted
SQL> insert into student (sno,sname,ssex,sage,sdept) values (224129,'庞阿男','男',22,'MA');
1 row inserted
SQL> commit;
Commit complete
2)向Course表中插入2行数据,1行为本门课程的信息,另一行自定。
SQL> insert into course (cno,cname,cpno,ccredit)values(001,'DB','002',3);
1 row inserted
SQL> insert into course (cno,cname,cpno,ccredit)values(002,'OS','003',4);
1 row inserted
SQL> commit;
Commit complete
3)向SC表中插入数据,插入你的这门课程的选课信息。
SQL> insert into sc (sno,cno,grade) values(224128,001,100);
1 row inserted
SQL> commit;
Commit complete
2.修改数据
1)将姓刘的同学删除。
SQL> delete from student where sno in (select sno from student wheresname like '刘%');
1 row deleted
SQL> commit;
Commit complete
或者:
deletefrom student where sname like '刘%';
2)将’CS’系同学的选课信息中的成绩置0。
SQL> update sc set grade=0 where sno in (select sno from student wheresdept='CS');
1 row updated
SQL> commit;
Commitcomplete
3.删除数据
1)删除和’ 刘晨’在同一个系的学生的信息。
SQL> delete from student where sdept=(select sdept from student wheresname='李佳');
4 rowsdeleted
SQL> commit;
Commitcomplete
2)删除’CS’系同学的选课信息。
SQL> delete from sc where sno in (select sno from student wheresdept='CS');
1 row deleted
SQL> commit;
Commitcomplete
在插入修改删除数据时,一定不要忘记commit;
数据库实验三 嵌套查询和视图操作相关推荐
- 数据库实验三 SQL查询数据
实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...
- 数据库之多表查询与视图操作
步骤: 在上一次的基础上对已经创建的jwg数据库中的数据表进行各种查询操作 多表查询 1.进行多表查询 从student.course.student_course三个表中检索出学生的学号.姓名.学习 ...
- 数据库实验三 数据查询一
第1关:按条件查询单表的所有字段 任务描述 本关任务:按条件查询数据表的所有字段 为了完成本关任务,你需要掌握: 如何查询数据表的所有字段 相关知识 查询数据表 命令格式: select * from ...
- MySQL数据库实验三 MySQL查询
一.实验项目: MySQL查询. 二.实验目的 掌握MySQL的查询操作. 三.实验内容 (一): 1.查询lineitem表中商品编号(productid)和单价(unitprice),要求消除重复 ...
- 数据库实验三 数据查询二
第1关:多表查询 任务描述 本关任务:查询来自借阅.图书.读者数据表的数据 为了完成本关任务,你需要掌握: 如何多表查询 相关知识 查询多个数据表 在实际应用中,查询经常会涉及到几个数据表. 基于多个 ...
- 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶
数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...
- 数据库 ----- 实验三:SQL的查询
实验三 SQL的查询 [实验目的和要求] 1.掌握SQL Server Management Studio中SQL 查询操作: 2.掌握SQL 的单表查询命令: 3.掌握SQL 的连接查询操作: 4. ...
- 数据库原理及应用(MySQL版)——实验三 MySQL查询
实验三 MySQL查询 1.实验目的 2.实验内容及要求 1.实验目的 熟悉SELECT语句的语法结构: 熟练掌握组合使用where.group by.having和order by等子句: 熟悉聚合 ...
- 太原理工大学软件学院19级数据库实验三(2021.4.19)
太原理工大学数据库实验三(2021.4.19) 以下代码需按步骤复制到查询控制台 博主用的软件是DataGrip,与SQL Server Management Studio在操作上有些差别 1.以Wi ...
最新文章
- 3.Spring Security 自定义用户认证
- shell for循环命令行_精心汇总的24道shell脚本面试题
- 【转】How Many Boyfriends
- Docker源码修改工作总结(三)
- VC++ 添加UNICODE和_UNICODE预处理选项
- mysql必_MySQL必知必会(一)
- JAVA设计模式 - 代理模式
- redis复制key的数据_Redis常见面试题
- 29.优化 MySQL Server
- win7 计算机设置命令,win7系统如何设置自动关机?
- AI机器学习实战の电磁导航智能车中神经网络应用的问题与思考-交流向-本科生竞赛
- codeforces1467E. Distinctive Roots in a Tree
- 女程序员的工位,藏着她们鲜衣怒码的人生 | 3·8特辑
- python语言支持中文输出_python2输出汉字的解决办法暨python2/python3的编码环境参数的查看-Go语言中文社区...
- 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
- WLAN 双链路+HSB高可靠性
- BI数据分析师工作说明
- linux服务器视频转换,linux下视频格式转换工具
- 大型语言模型综述(二)
- component组件中的is属性居然有大用?