数据库表的查询操作(实验二)
作者:lijiao 发布时间:2024-01-25 13:18:59
【实验目的】:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识。
【实验要求】:掌握利用Select语句进行各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等。
【实验内容】
一、单表查询
1.简单查询
打开查询分析器,根建立teacher表,并加入数据。从teacher表中分别检索出教师的所有信息,以及仅查询教工号、姓名和职称。语句如下:
select * from teacher
select tno, tname from teacher
如要查询时改变列标题的显示,则从teacher表中分别检索出教师教工号、姓名、电子邮箱信息并分别加上‘教师姓名'、‘教工号'、'电子邮箱'等标题信息。
select tno 工号, tname 姓名, temail 电子邮箱 from teacher
使用TOP关键字:分别从teacher中检索出前2条及前面67%的教师的信息。
select top 2 * from teacher
select top 67 percent * from teacher
使用DISTINCT关键字:从teacher表中检索出教师的职称并且要求显示的职称不重复。select distinct tposition from teacher
2.用计算列:将teacher表中各教师的姓名、教工号及工资按95%发放的信息,第2条语句将工资按95%发放后列名该为‘预发工资'。语句如下:
select tno tname ,tsalary*0.95 from teacher
select tno工号, tname姓名, tsalary*0.95 AS 预发工资 from teacher
3.使用ORDER BY子句对查询的结果进行排序
使用ORDER BY语句可以对查询的结果进行排序,ASC、DESC分别是升序和降序排列的关键字,系统默认的是升序排列。从teacher表中查询工资大于2800的教师的教工号、姓名,并按升序排列,语句如下:
select tno, tname from teacher
WHERE tsalary>2800 order by tsalary ASC
4.条件查询
(1)使用关系运算符:从teacher表中查询出工作量大于288的教师资料,语句如下:
select * from teacherWHERE tamount>288 order by tamount DESC
(2)使用BETWEENAND谓词:从teacher表中查询出工作量界于144和288之间的教师资料,语句如下:
select * from teacher WHERE tamount between 144 and 288
(3) 使用IN谓词:从teacher表中查询出职称为“教授”或“副教授”的教师的教工号、教师姓名、职称及家庭住址,语句如下:
select tno,tname,tposition, taddress from teacher
WHERE tposition in ('教授','副教授')
(4)使用LIKE谓词:从teacher表中分别检索出姓'王'的教师的资料,或者姓名的第2个字是'莉'或'轩'的教师的资料,语句如下:
select * from teacher WHERE tname like '王%'
select * from teacher WHERE tname like '_[莉,轩]%'
二、多表查询
数据库各表中存放着不同的数据,用户经常需要用多个表中的数据来组合提炼出所需要的信息,如果一个查询需要对多个表进行操作,就称为关联查询,关联查询的结果集或结果表称为表之间的连接。关联查询实际上是通过各各表之间共同列的关联来查询数据的,它是关系数据库查询最基本的特征。
1.SQL 2000兼容2种连接形式:用于FROM子句的ANSI连接语法和用于WHERE子句的SQL SERVER连接语法形式。
从student、course和SC三张表中检索学生的学号、姓名、学习课程号、学习课程名及课程成绩,语句如下:
select student.sno, sname, cno, grade
from student inner join SC on student.sno=SC.sno
select student.sname,sc.grade
from student,sc
WHERE student.sno=sc.sno
select student.sno,student.sname,sc.cno,course.cname,sc.grade
from student,sc,course
WHERE student.sno=sc.sno and sc.cno=course.cno
2.使用UNION子句进行查询
使用UNION子句可以将一个或者多个表的某些数据类型相同的列显示在同一列上。如从teacher表中列出教工号、姓名并从student表中列出学号及学生姓名,语句及查询结果如下:
select sno AS 学号或工号, sname AS 姓名 from student
union
select tno, tname from teacher
3.用GROUP子句进行查询
如果要在数据检索时对表中数据按照一定条件进行分组汇总或求平均值,就要在SELECT语句中与GROUP BY子句一起使用集合函数。使用GROUP BY子句进行数据检索可得到数据分类的汇总统计、平均值或其他统计信息。
(1) 使用不带HAVING的GROUP BY子句。
使用不带HAVING 的GROUP BY子句汇总出SC表中的学生的学号及总成绩,语句如下:
select '学号'=sno,'总成绩'=SUM(Grade)
from SC
group by Sno
(2)使用带HAVING 的GROUP BY子句。
使用带HAVING 的GROUP BY子句汇总出SC表中总分大于450分的学生的学号及总成绩,语句如下:
select '学号'=sno,'总成绩'=SUM(Grade) from SC
group by Sno
Having SUM(Grade)>160
4.用COMPUTE和COMPUTE BY子句进行查询
使用COMPUTE和COMPUTE BY 既能浏览数据又能看到统计的结果。
(1) 用COMPUTE子句汇总出SC表中每个学生的学号及总成绩,语句如下:
select '学号'=sno,'成绩'=Grade from SC
order by sno COMPUTE SUM(Grade)
(2)用COMPUTE BY 子句按学号汇总出SC表中每个学生的学号及总成绩,语句如下:
select '学号'=sno,'成绩'=Grade from SC
ORDER BY Sno COMPUTE SUM(Grade) by sno
观察执行COMPUTE和COMPUTE BY子句的结果有什么不同?
5.嵌套查询
(1) 使用IN或NOT IN关键字
使用IN关键字查询出j10011班所有男生的学号、课程号及相应的成绩,语句如下:
select SC.sno , SC.cno,SC.grade
FROM SC
WHERE sno IN
( SELECT sno FROM student
WHERE Sclass='j10011' AND Ssex='男')
使用IN关键字查询出与教师不同名的学生(学号,姓名),语句如下:
select sno 学号, sname 姓名
from student
where sname not in (select tname from teacher)
(2) 使用EXISTS 或NOT EXISTS关键字。
使用EXISTS关键字查询出‘j10011'班的学生的学号、课程号及相应的成绩,语句如下:
SELECT SC.sno,SC.cno,SC.grade
FROM SC
WHERE EXISTS
( SELECT * FROM student
WHERE SC.sno=student.sno AND student.sclass=‘j10011' )


猜你喜欢
- 前言:Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开
- 本文实例讲述了Python Excel到CSV的转换程序。分享给大家供大家参考,具体如下:题目如下:利用第十二章的openpyxl模块,编程
- XML、 XLink、 Namespace、 DTD、 Schema、 CSS、 XHTML...假如你从未接触XML, 或许你会感觉不知从
- 示例首先模拟一个业务场景,有订单、产品、自定义订单三个结构体,订单中包含多个产品:type Order struct {Id
- 本文实例讲述了Python面向对象编程之继承与多态。分享给大家供大家参考,具体如下:Python 类的继承在OOP(Object Orien
- turtle的文档:https://docs.python.org/3/library/turtle.html用Python的turtle库
- 在使用echarts的自定义饼图Customized Pie时,定义的动态数据会发生颜色无法渲染的问题,如下图所示:该图表的颜色是根据ite
- 凯撒加密就是通过将字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移,被替换成密文。例如
- MSSQL SERVER 2005 数学函数 1.求绝对值 ABS() select FWeight-50,ABS(FWeight-50),
- v-model 最好用的就是配合 data 達成 Two-way Binding,但若使用 Vuex 之後,是否還能使用 v-model 搭
- Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还
- 一、枚举与字典类型字典类型的缺点:1.值可变 2.没有防止相同标签的功能枚举的特点:1.枚举类的值不可以被外界更改 2.不能存在相同的标签,
- 本文实例为大家分享了python多线程http压力测试的具体代码,供大家参考,具体内容如下#coding=utf-8import sysim
- 下面,小编将通过一组实例演示,让大家更直观,更清楚明白的了解要设置中文这一内容的操作步骤。首先展示实例代码:import pygamefro
- 1.散点图代码# This import registers the 3D projection, but is otherwise unu
- 重装了笔记本上的oracle,安装完成后,可以正常使用OEM控制台,但是注销后重新登录或者重启系统后登录,或者笔记本使用网络环境发生了变化,
- 在使用SQL Server 的过程,中由于经常需要从多个不同地点将数据集中起来或向多个地点复制数据,所以数据的导出,导入是极为常见的操作.我
- 本文实例讲述了Python处理命令行参数模块optpars用法。分享给大家供大家参考,具体如下:optpars是python中用来处理命令行
- 1.首先通过控制面板应用卸载当前环境下的Node.js相关安装,并清理磁盘残存的文件夹等文件2.下载nvm来管理node版本 &
- 前言在日常开发中,用mysql进行查询的时候,有一个比较少见的关键词exists,我们今天来学习了解一下这个exists这个sql关键词的用