实验五 单表查询

【实验目的】
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 SC
go----------------------------
--使用、定位数据库SC
----------------------------
use SC
go--**************************
--***    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.cno
order by 课程名,成绩 desc
----------------------------

2. 单表列的查询

--查询列select *
from studentselect sno,sname,ssex,sdept,sage,ssex
from Student--可以用重新命名  格式(列 as 新列名),as可以省略select sno as 学号,Sname as 姓名, Ssex 性别
from Student--目标列可以出现表达式
--查询所有学生的姓名和出生年(2013-sage)select sname,2013-sage as 出生年
from Student--查询每个课程的学分
select cname,ccredit*0.8
from course--目标列可以出现函数
--查询有个学生
select COUNT(sno)
from student--查询有几个学生选修了课程(distinct 重复的只计算一次,去掉重复的)
select COUNT(distinct sno)
from sc--查询有几门课程被选修
select COUNT(distinct cno)
from SC

3. 单表行的选择

--对行的查询
--通过where条件子句,多满足条件的元组进行显示--查询所有男生学生信息select *
from Student
where Ssex = '男'--查询18岁以上的学生信息
select *
from Student
where Sage>18--查询18岁到20岁之间的学生信息
select *
from Student
where Sage>=18 and  Sage<=20--查询成绩在80分与90分之间的选课记录
--between x and y 包含端点
--x与y前者要小于后者,等价于 grade>=x and grade<=y
select *
from SC
where Grade between 90 and 80--查询年龄在18岁以上女生,或者年龄不限的男生
select *
from Student
where (Ssex='女' and Sage>18) or Ssex = '男'--查询 在IS系或者在MA系的学生
select *
from Student
where Sdept = 'IS' or Sdept = 'MA'select *
from Student
where sdept in ('IS','MA')--查询选修了3分以上课程的学生学号(使用不相关子查询,嵌套)
select distinct sno
from SC
where Cno in(select Cnofrom Coursewhere Ccredit>3
)
--查询3分以上课程的课程号和课程名,学分
select cno,cname,ccredit
from Course
where Ccredit>3select * from Student--查询3号课程的选修情况,结果按照成绩降序排列
select *
from SC
where Cno = '3'
order by Grade desc
--注意:desc降序,默认;asc是升序。--查询,每个学生选修的课程平均分(分组统计)

转载于:https://www.cnblogs.com/cnlht/p/9495680.html

实验五 单表查询(V2.0版)相关推荐

  1. SQL-server第三次实验(单表查询)

    单表查询 一.选择表中的若干列 二.选择表中的若干元组 三.ORDER BY子句 四.聚集函数 GROUP BY子句 一.选择表中的若干列 1.查询经过计算的值 例3.19 查询全体学生的姓名及其出生 ...

  2. SQLServer 实验一 单表查询

    在订单数据库中,完成如下的查询: (1)查询员工的姓名.职务和薪水. select employeeName,headShip,salary from Employee (2)查询名字中含有" ...

  3. 【数据库实验】 单表查询

    [例3.19] 查全体学生的姓名及其出生年份. select Sname,2021-Sage from student; [例3.20] 查询全体学生的姓名.出生年份和所在的院系,要求用小写字母表示系 ...

  4. 数据库系统实训——实验二——单表查询

    一.第四章-检索数据 题号:1 SQL语句描述:select prod_name from products; 查询功能描述:检索单个列 执行结果截图: 二.第五章-排序数据 题号:1 SQL语句描述 ...

  5. 《数据库系统实训》实验报告——单表查询

    检索数据 题号: 1.1 SQL语句描述:select prod_id from products; 查询功能描述:查询所有的产品ID: 执行结果截图: 排序数据 题号: 2.1 SQL语句描述:se ...

  6. 数据库系统概论 实验报告答案 实验五:数据库单表查询

    实验五:数据库单表查询 一.实验目的 1. 掌握SELECT语句的基本语法和查询条件表示方法: 2. 掌握查询条件表达式和使用方法: 3. 掌握GROUP BY 子句的作用和使用方法: 4. 掌握HA ...

  7. python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)

    在讲解单表查询时,首先创建一个emp的员工表,表中字段包括:empno(员工编号).ename(员工姓名).job(员工职位).mgr(员工领导).hiredate(员工入职日期).sal(员工月薪) ...

  8. 【数据库系统原理作业】五、数据查询中的单表查询

    上一次的作业: https://blog.csdn.net/qq_21331159/article/details/115165279 单表查询 一.选择表中的若干列 ①.查询指定列 ②.查询全部列 ...

  9. mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计[实训目的与要求][实训原理][实训步骤]一.简单查询二.按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWE ...

最新文章

  1. golang结构体数组
  2. CSS设置图片的对齐
  3. nyoj-257-郁闷的C小加(一 )中缀式变后缀式
  4. SignalTap II逻辑分析仪的使用
  5. 459. Repeated Substring Pattern 重复的子字符串
  6. 用FFmpeg搭建基于CNN的视频分析方案
  7. 云图说 | 揭秘云硬盘高可靠性的秘密,速来围观
  8. 验证码绕过(对验证码绕过的理解-----burpsuite)
  9. 动态分配内存的初始化
  10. 引入ELK前需要知道的“坑”(上)
  11. 猿人学第5题,hook任意cookie被设置的瞬间
  12. MongoDB快速学习
  13. 订单超时自动取消 java_springboot 支付订单超时自动处理
  14. UEBA案例分析系列之检测失陷凭证
  15. mongodb java 内嵌文档_MongoDB 内嵌文档
  16. 【DevOps研发管理方案】四:持续集成 持续交付
  17. IT培训行业揭秘(五)
  18. java编程的一个猜数字有趣小游戏
  19. Linux文件系统体系结构
  20. Sql注入基础原理介绍(超详细)

热门文章

  1. android怎么看错误日志,android运行错误日志帮看下 不懂啊
  2. linux tee命令_Linux tee命令示例
  3. 什么是pytorch_什么是Pytorch?
  4. Android在片段之间传递数据
  5. TotalCommander增加回到桌面功能
  6. 在资源管理器中增加二级菜单
  7. [msi]安装包无法安装,提示没有找到源文件xxx.cab
  8. 开课吧:C++基础之字符串匹配之BM算法(Boyer-Moore)
  9. Java基础篇之LinkedList类
  10. PYTHON——TCPUDP:socketserver实现多人聊天