实验3数据库查询-学生表(Student)、课程表(Course)、学生选课表(SC)
答案
查询select 彻底删除drop 修改alter 创建creat
--删除数据库
drop database TK --数据库名
查询学生表S中的所有信息
use TK --数据库名
select * --列名
from S --表名
子查询
在SQL语句中,一个select-from-where语句称为一个查询块.
将一个查询块嵌入在另一个查询块的where子句或者Having短语或者from子句的条件中的查询为嵌套查询
()内为子查询,()外为父查询
SQL先执行子查询的内容,求出子查询的值后执行父查询,返回最后的结果
带有in谓词的子查询
SQL 子查询 EXISTS 和 NOT EXISTS
- SELECT … FROM table WHERE EXISTS (subquery)
该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留。
EXISTS代表存在量词∃。带有EXISTS谓词的子查询只返回“true”或“false”。
--(9) 查询所有选修了004号课程的学生姓名:
--正确做法:
use TK
SELECT * from S
where exists (select Sno from SC where Cno ='004' and SC.Sno=S.Sno);
--错误做法:
use TK
SELECT * from S
where exists (select Sno from SC where Cno ='004');--没有加筛选条件SC.Sno=S.Sno,导致查询结果直接输出表S所有内容
不等于 <>
order by排序
子查询的select语句不能用orderby子句。
orderby子句只能用于对最终查询结果排序。
--输出学习004号课程的成绩前两名的学生的学号和成绩
use TK
SELECT TOP 2 Sno,grade from SC
where CNO ='004'
order by grade desc; --order by排序,默认升序。ASC升序,DESC降序。
--按所在系的系名升序排列,同一系的按年龄降序排列
select * from S
order by Sdept,Sage DESC;
group by分组,count统计函数
--查询统计表S的男女学生的人数。
--count(*)统计该性别的所有人数,as '人数' 给统计结果那列起一个列名
select Ssex as '性别',count(*) as '人数' from S --count统计函数。除count(*)外,统计函数遇到空值时,都跳过空值不处理。
group by Ssex;--group by 分组
有count就有groupby,否则报错
--(22) 查询各系的男女生学生总数, 并按系别,升序排列, 女生排在前:
select Sdept,Ssex,count(*) as '人数'from S
group by Sdept,Ssex --select语句中查询哪列,groupby分组语句就要有对应的列,否则会报错
order by Sdept,Ssex desc;
union并,intersect交,except差
集合运算:当查询结果集有多个且不同时但又希望它们按一定的关系连接在一起组成一组数据,这时可用联合查询(集合运算)实现。
--查询选修了012课程或004课程的学生的学号
use TK
SELECT SNO
FROM SC
WHERE CNO ='012'
union --union并,intersect交,except差
SELECT SNO
FROM SC
WHERE CNO='004'
连接查询
查询学生选课情况时,即要那些有选课信息的学生情况,又要有那些没有选课信息的学生情况,可用左外连接
--内连接inner join
--查询每个学生的情况及其选课情况
use TK
SELECT *
FROM S INNER JOIN SC ON S.Sno=SC.Sno;--S与SC表中同一学号的元组连接起来
--左外连接left join:对连接条件左边的表不加限制
--总结:左连接显示左表全部行。如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
--查询每个学生的情况及其选课情况(含未选课程的学生信息)
select S.*,Cno,Grade
from S left join SC on S.Sno=SC.Sno;
--右外连接right join:对连接条件左边的表不加限制
--总结:右连接显示右表全部行。如果右表中行在左表中没有匹配行,则结果中左表中的列返回NULL。
select S.*,Cno,Grade
from S right join SC on S.Sno=SC.Sno;
--全外连接full join:对连接条件的两个表都不加限制
select S.*,Cno,Grade
from S full join SC on S.Sno=SC.Sno;
--交叉连接cross join:没有连接条件下的两个表的连接,包含所连接的两个表的所有元组
select S.*,SC.Cno,SC.Grade
from S cross join SC ;
自身连接
--查询与’王刚’在同一个系学习的学生的信息:
use TK
select a.*
from S as a join S as b --为表S设置两个别名
on a.Sdept=b.Sdept and b.Sname='王刚';
聚集函数:max、min、sum(求总和)、avg(求平均值)、count(求总行数)
max、min、sum、avg都是忽略null的,而count(*)统计的行数包括null,count(column)忽略null的行。
特别记忆count 的三种使用方式:
count(*) 对表中行的数目进行统计,不忽略null值
count(column) 忽略null的值。
count(distinct Sno) 忽略重复行
--(14)查询学生总人数:
select count(*) as '学生总人数' from S;
--方法二:
--select count(Sno) as '学生总人数' from S;
--(15)查询选修了课程的学生总数:
select count(distinct Sno) as '选课学生总数' from SC
--方法二:
--select count(Sno) as '选修了课程的学生总数' from S
--where Sno in (select Sno from SC)--推荐方法一
结果:
--(18)查询’计算机系’学生”数据结构”课程的平均成绩:
select avg(Grade)
from S,C,SC
where s.Sno=sc.Sno and C.cno=sc.cno and c.Cname='数据结构' and s.Sdept='CS'
/*方法二:
select avg(Grade) as CS数据结构平均成绩
from SC
where Cno=(select Cno from C where Cname ='数据结构') and Sno in (select Sno from S where Sdept ='CS');
*/
error :
--(19)查询每个学生的课程成绩最高的成绩信息(学号,课程号,成绩):
select *
from SC as a
where Grade = (select max(Grade) from SC as b where b.Sno=a.Sno );
--按学生分组 where b.Sno=a.Sno
distinct去除结果表中的重复行
--(12) 查询至少选修了学生20040002选修的全部课程的学生的学号
select distinct Sno as '学号'
--distinct去掉结果表中的重复行
from SC as a
where exists (select * from SC as b where b.Sno='20040002' and a.Cno=b.Cno)and a.Sno<>'20040002';--去掉结果表中学号为20040002的行
having筛选分组
当完成数据结果的查询和统计后,用Having对结果进行进一步的筛选
--(23) 查询选修了3门课程以上的学生的学号和姓名:
select Sno,Sname
from S
where exists(select Sno from SC where S.Sno=SC.Sno--这句如果没加,结果表会输出表S的所有行group by Sno having count (Cno)>3 --having筛选分组);--子查询,查询选修了3门课程以上的学生的学号
实验3数据库查询-学生表(Student)、课程表(Course)、学生选课表(SC)相关推荐
- Mysql数据库使用:学生选课系统,其中设计到三张表,分别为学生表,课程表,学生和课程对应的关联表。
Mysql数据库使用 练习内容:主要针对学生选课系统而设计,其中设计到三张表,分别为学生表,课程表,学生和课程对应的关联表. 学生表主要用于存储学生信息,包括姓名,性别,地址,电话等信息 课程表主要用 ...
- 有以下三张表,学生表 student 课程表 course 成绩表 result
表结构如下: 学生表 student(学生编号 sid.学生姓名 sname.学生年龄 age) 课程表 course(课程编号 cid.课程名称 cname) 成绩表 result(学生编号 sid ...
- 数据库原理实验 三个关系表 学生表students 课程表course 学生选课表sc
实验数据如下: 在数据库中建立三个关系表Students,Course,SC. 学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname, ...
- mysql 创建学生表、课程表、学生选课表
数据库系统概论(第五版)79页提供的三个表,为了我们上机操作容易,下面创建这三个表 学生-课程数据库中包含以下三个表 学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程 ...
- Sql Server 行转列学习 根据学生表、课程表、学生成绩表统计每个学生的各科成绩和他的总成绩、平均成绩...
-------************************************************************* -------学习.测试行转列 ------- So ...
- oracle学生选课查询(学生表student、成绩表sc、课程表c)
oracle学生选课查询--学生表student.成绩表sc.课程表c 一.创建学生表,表结构(学号,姓名,年龄,性别,系别,出生地),插入几条记录 二.创建成绩表,表结构(学号,课程号,成绩),插入 ...
- 建立数据库,建立一个“学生”表student。
1.建立数据库,建立一个"学生"表student. 2.设计思想:首先利用create database语句建立一个数据库,再用create table语句按要求建立基本表,再按照 ...
- 常见的SQL面试题(学生表_课程表_成绩表_教师表)
表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师 ...
- sql面试题(学生表_课程表_成绩表_教师表)
原帖链接:http://bbs.csdn.net/topics/280002741 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课 ...
- SQL经典案例(学生表,课程表,选课表,教师表) 练习
一·创建表 课程表 DROP TABLE IF EXISTS `course`; CREATE TABLE `course` (`CNO` int(10) NOT NULL COMMENT '课程号' ...
最新文章
- 你的分区够用吗?来学lvm吧!
- (转)IIS7 配置ASP.NET 2.0, WCF, ASP.NET MVC
- 开发工程师面试自我介绍_30道经典面试题,靠它我在一线拿到了20k的前端开发工程师岗位...
- 运筹学状态转移方程例子_强化学习第4期:H-J-B方程
- 中国离婚大数据:离婚/结婚比东北三省和四大直辖市霸榜
- Centos5.6 x86_64下安装DRBD+Heartbeat+NFS
- 【Elasticsearch】 es 集群发现机制
- 2021年机器学习及R应用 陈强老师 应用于领域 经济管理 人文社科 医学卫生领域等
- 股票python量化交易002-常见量化指标(技术面)
- 在线EXCEL编辑器-Luckysheet
- android 广播的插件化
- 在eclipes中实现支付宝的沙箱模拟付款
- OSPF多区域与配置
- 2020秋招——万字面经分享,这一篇超级走心
- 2021广西灵山中学高考成绩查询,2021年广西高考县中实力榜 玉林中学超群
- 武汉大学IGS数据中心网站的下载方法
- android 无线显示功能,华为手机的无线显示功能在哪,怎么使用?
- 人脸区域马赛克,圆形(心形)模糊Mask
- 微信小程序上传图片及文件(上传、下载、删除及预览)
- 那些年snap的那些事:官方实例无法成功运行、官方snap下载源速度太慢
热门文章
- Multi-Armed Bandit(MAB)多臂老虎机问题学习笔记
- Linux 中断控制器(五):中断号映射
- PDF怎么直接绘图?这些渠道可以试试
- 实验五数据通路实验_微程序控制器方式实验报告
- 代码随想录【day 10 栈与队列】| 232.用栈实现队列、 225. 用队列实现栈
- pads 生成gerber时提示 “没有该尺寸的符号:0.8- 所使用的符号: +”
- 软件工程基础个人项目——数独终局生成求解
- java模拟银行存取_JAVA模拟银行存钱,取钱操作以及计算利息操作
- 分布式问题,你知道几个?
- java毫秒转换参数_SimpleDateFormat使用详解及与毫秒的相互转换