实验五 单表查询(V2.0版)
来源:互联网 发布:网络丢包率测试工具 编辑:程序博客网 时间:2024/04/28 01:31
实验五 单表查询
【实验目的】
1. 掌握单表的列的查询
2. 掌握单表的行的查询
【实验内容】
1. 实验前准备,SC数据库的创建。 (见参考资料1)
2. 查询的理论基础
命令:
1) Select [all | distinct] <目标列>
2) From <表>
3) [where <对元组的筛选条件> ]
4) [group by <分组列> [having <对组的筛选条件>]]
5) [order by 排序列 [DESC | ASC]]
功能:
1) 第一行命令,对目标列做出要求。决定了查询结果的格式。
2) 第二行命令指定操作对象。
3) 第三行命令:从表中查询满足条件的元组。
4) 第四行命令用于需要分组统计时使用。Having条件用于对分组后的筛选。Where用于在分组前元组的筛选。
5) 第五行命令是对查询结果的一个排序操作。
6) 第三行、第四行和第五行是可选的命令行。不需要时,不需要。
3. 单个表的列的查询
1 )选择指定的列
【例1】 查询全体学生的学号和姓名
命令:select sno,sname
from student
结果:
2 )查询全部列 (用*或列出所有列的名称)
【例2】 查询全体学生的详细信息
3 )对查询后的指定列进行命名
【例3】 查询全部学生的 “ 姓名 ” 及其 “ 出生年 ” 两列
4 )消除取值重复的行 (distinct)
【例4】 查询选修了课程的学生学号
4. 查询满足条件的行
选择表中若干元组(满足条件的)
( I)大小比较
【例5】 查询计算机系( IS )全体学生名单
【例6】 查询全体 20 岁以下的学生姓名和年龄
( II)确定范围
【例7】 查询所有在 20 到 23 岁(含 20 和 23 )的学生姓名、系别和年龄
( III) in 和 not in 确定集合
【例8】 查询 IS 系和 CS 系的全体学生姓名和性别
【例9】 查询既不属于 IS 系,也不属于 MA 系的学生姓名和年龄
( IV)字符匹配( like % _ )
【例10】 查询所有姓李的学生姓名和性别
【例11】 查询所有 “2002” 年入学的学生学号、姓名和系别
【例12】 查询所有不姓 “ 刘 ” 的学生信息
【例13】 查询名称含有 “ 数据 ” 的课程号、课程名及学分
( V)涉及空值的查询( is null )
【例14】 查询没有先修课的课程号和课程名。
【例15】 查询所有有成绩的学生学号、课程号及成绩
5. 查询结果排序( order by )
【例16】 查询选修了 3 号课程的学生学号和成绩,结果按成绩降序排列。
注:
排序是对查询后的结果排序。所以应该放在最后。
6. 聚集函数
聚集函数有count 、 sum 、 avg 、 max 、 min
count(列1),功能:计算列1的个数,行数。如果加distinct ,计算列1的不同值的个数。
sum(列1),功能是对列1的值进行求和。累加。条件是列1的属性为可累加的。
avg(列1),对列1的值进行求平均数。
Max,min,avg和sum具有共同的条件,列可计算。
【例17】 查询学生总数
【例18】 查询所有课程的总学分
【例19】 查询全体学生平均年龄
【例20】 查询 1 号课程的最高分
7. 分组统计( group by )
【例21】 查询男女学生各有多少人。
【例22】 查询每个课程的课程号和平均分。
【例23】查询选修了3门课程以上(含3门)的学生学号和选修课程数。
【例24】查询选修了2门课程以上(含2门,但不含1号课程),学生学号和选修课程数。
【例25】查询不及格门数2门以上的学生学号。
【例26】查询有2名以上(含2名)学生选修了的课程号和选修人数。
注:1.分组查询的目标列可以出现分组的列及含在聚集函数中的其他列;
2.where条件用于分组前的选择条件;having子句,用于分组后选择的条件。
【参考资料】
1. SC数据库创建代码
--**************************--*** 1.建立数据库SC ***--**************************create database SCgo------------------------------使用、定位数据库SC----------------------------use SCgo--**************************--*** 2.创建数据表 ***--**************************------------------------------1)创建表Student----------------------------create table Student ( Sno char(9) primary key, /*Sno是主码 列级完整性约束条件 实体完整性*/ Sname char(10) unique, /*Sname取唯一值,不重复*/ Ssex char(2), Sage smallint, /*类型为smallint*/ Sdept char(20) /*所在系*/ ); /*;要加*/ ------------------------------2)创建表Course----------------------------create table Course ( Cno char(4) primary key, /*列级完整性约束条件,Cno是主码*/ Cname char(20), Cpno char(4), /*Cpno的含义是先行课*/ Ccredit smallint, foreign key (Cpno) references Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/ ); ----------------------------------------------------------3)创建表SC----------------------------create table SC ( Sno char(9), Cno char(4), Grade smallint, primary key (Sno,Cno), /*主码有两个属性构成,必须作为表级完整性进行定义*/ foreign key (Sno) references Student(Sno), /*表级完整性约束条件,Sno是外码,被参照表是Student*/ foreign key (Cno) references Course(Cno) /*表级完整性约束条件,Cno是外码,被参照表示Course*/ ); ----------------------------go --**************************--*** 3.插入数据 ***--************************** -------------------------------1)插入Student数据 ---------------------------- insert into Student values('200215121','李勇','男',20,'CS') /*向表Student中插入一个元组*/ insert into Student values('200215122','刘晨','女',19,'IS') /*向表Student中插入一个元组*/ insert into Student values('200215123','王敏','女',18,'MA') /*向表Student中插入一个元组*/ insert into Student values('200215125','张立','男',19,'IS') /*向表Student中插入一个元组*/ ---------------------------- -------------------------------2)插入Course数据 ---------------------------- --注意顺序(先行课问题) 注意添加一个空元素用 null insert into Course values('2','数学',null,2)/*向表Course中插入一个元组*/ insert into Course values('6','数据处理',null,2)/*向表Course中插入一个元组*/ insert into Course values('4','操作系统','6',3)/*向表Course中插入一个元组*/ insert into Course values('7','PASCAL语言','6',4)/*向表Course中插入一个元组*/ insert into Course values('5','数据结构','7',4)/*向表Course中插入一个元组*/ insert into Course values('1','数据库','5',4)/*向表Course中插入一个元组*/ insert into Course values('3','信息系统','1',4)/*向表Course中插入一个元组*/ -----------------------------------------------------------3)插入SC数据 ---------------------------- insert into SC values('200215121','1',92)/*向表SC中插入一个元组*/ insert into SC values('200215121','2',85)/*向表SC中插入一个元组*/ insert into SC values('200215121','3',88)/*向表SC中插入一个元组*/ insert into SC values('200215122','2',90)/*向表SC中插入一个元组*/ insert into SC values('200215122','3',80)/*向表SC中插入一个元组*/ ------------------------------**************************--*** 4.查询数据 ***--************************** ----------------------------select * from student select * from course select * from sc select student.sno as 学号,sname as 姓名,cname as 课程名,grade as 成绩from student,course,sc where student.sno=sc.sno and course.cno=sc.cnoorder by 课程名,成绩 desc----------------------------
2. 单表列的查询
--查询列select *from studentselect sno,sname,ssex,sdept,sage,ssexfrom Student--可以用重新命名 格式(列 as 新列名),as可以省略select sno as 学号,Sname as 姓名, Ssex 性别from Student--目标列可以出现表达式--查询所有学生的姓名和出生年(2013-sage)select sname,2013-sage as 出生年from Student--查询每个课程的学分select cname,ccredit*0.8from course--目标列可以出现函数--查询有个学生select COUNT(sno)from student--查询有几个学生选修了课程(distinct 重复的只计算一次,去掉重复的)select COUNT(distinct sno)from sc--查询有几门课程被选修 select COUNT(distinct cno)from SC
3. 单表行的选择
--对行的查询--通过where条件子句,多满足条件的元组进行显示--查询所有男生学生信息select *from Studentwhere Ssex = '男'--查询18岁以上的学生信息select *from Studentwhere Sage>18--查询18岁到20岁之间的学生信息select *from Studentwhere Sage>=18 and Sage<=20--查询成绩在80分与90分之间的选课记录--between x and y 包含端点--x与y前者要小于后者,等价于 grade>=x and grade<=yselect *from SCwhere Grade between 90 and 80--查询年龄在18岁以上女生,或者年龄不限的男生select * from Studentwhere (Ssex='女' and Sage>18) or Ssex = '男'--查询 在IS系或者在MA系的学生select *from Studentwhere Sdept = 'IS' or Sdept = 'MA'select *from Studentwhere sdept in ('IS','MA')--查询选修了3分以上课程的学生学号(使用不相关子查询,嵌套)select distinct snofrom SCwhere Cno in(select Cnofrom Coursewhere Ccredit>3)--查询3分以上课程的课程号和课程名,学分select cno,cname,ccreditfrom Coursewhere Ccredit>3select * from Student--查询3号课程的选修情况,结果按照成绩降序排列select *from SCwhere Cno = '3'order by Grade desc--注意:desc降序,默认;asc是升序。--查询,每个学生选修的课程平均分(分组统计)
- 实验五 单表查询(V2.0版)
- 实验六 多表查询(V2.0)
- 实验七 嵌套查询(V2.0)
- 五、单表查询
- Oracle表的常用查询实验(五)
- oracle 实验三 单表查询
- 数据库实验报告四(单表查询)
- 实验3.2 复杂的单表查询
- 实验3.1 简单的单表查询
- 实验八 视图(V2.0)
- 实验九 数据库完整性实验(V2.0)
- 实验十一 连接数据库实验(V2.0)
- 深度相机(五)--Kinect v2.0
- DSP实验五(单路,多路模数转换)
- 实验五.用callback增强链表模块来实现命令行菜单小程序V2.8
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 推荐算法分类
- WebService的实现——Hessian
- 嵌入式和驱动开发面试笔试题搜集整理
- 单链表的若干问题
- 创建使用dll
- 实验五 单表查询(V2.0版)
- HDU 1423 最大公共递增子序列长度
- dojo(二):事件处理
- 程序员的谎谬之言还是至理名言?
- hdu 4404 Worms
- Java基础——动态绑定
- Scala Trait 的线性化
- C用语言中的数组与指针
- 送给程序员:最好的编程名言