如果你没试过水的话,那一题一题地每一题都敲一遍吧。不管它们对你看来有多么简单。 

建库代码

部分题目答案在末尾,可用ctrl f  搜索题号。

作业练习——学生-选课 表结构
学生表: Student(Sno,Sname,Ssex,Sage,Sdept)
说明:Sno 学号(主键),Sname 姓名,Ssex 性别,Sage
年龄,Sdept 所在系别
课程表: Course(Cno,Cname,Cpno,Ccredit)
说明:Cno 课程号(主键),Cname 课程名,Cpno 选修课
号(某课程的选修课),Ccredit 学分
学生选课表: SC(Sno,Cno,Grade)
说明:Sno 学号(主键),Cno 课程号(主键),Grade 成绩

作业练习——学生-选课 题目-1
1.编写建库sql语句
2.编写创建数据库表的语句
3.给数据表加约束
4.往三个表添加测试数据
5.查询全体学生的学号与姓名
6.查询全体学生的详细记录
7.查询全体学生的姓名及其出生年份
8.查询全体学生的姓名,出生年份和所有系,要求用小写字母表示所
有系名
9.查询选修了课程的学生学号 并消除重复行
10.查询计算机系全体学生的名单
11.查询所有年龄在20岁以下的学生姓名及其年龄
12.查询考试成绩有不及格的学生的学号
作业练习——学生-选课 题目-2(续)
13.查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名,系别
和年龄
14.查询年龄不在20~23岁之间的学生的姓名,系别和年龄
15.查询信息系(IS),数学系(MA)和计算机系(CS)的学生姓名和性别
16.查询即不是信息系(IS),数学系(MA)也不是计算机系(CS)的学生姓
名和性别
17.查询学生号为 2009001 的学生的详细情况
18.查询所有姓刘的学生姓名,学号和性别
19.查询姓“欧阳”且全名为三个汉字的学生的姓名
20.查询名字中第二个字为阳字的学生的姓名和学号
21.查询缺少成绩的学生的学号和相应的课程号
22.查询所有成绩的学生的学号和相应的课程号
23.查询计算机系年龄在20岁以上的学生姓名
作业练习——学生-选课 题目-3(续)
24.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降
序排列
25.查询全体学生情况,查询结果按所在系的系号升序排列,同一系
中的学生按年龄降序排列
26.查询学员总人数
27.查询选修了课程的学生人数
28.计算 1 号课程的学生平均成绩
29.查询选修1号课程的学生最高分数
30.求各个课程号及相应的选课人数
31.查询选修了2门以上课程的学生学号
32.查询每个学生及其选修课程的情况
33.查询每一门课的间接选修课(即选修课的选修课)
34.查询选修2号课程且成绩在60分以上的所有学生
作业练习——学生-选课 题目-4(续)
35.查询每个学生的学号,姓名,选修的课程及成绩
36.查询与 "刘晨"在同一个系学习的学生
37.查询选修了课程名为“信息系统”的学生学号和姓名
38.查询其他系中比信息系某一学员年龄小的学生姓名和年龄
39.查询其他系中比信息系所有学员年龄都小的学生姓名和年龄
40.查询所有选修了 1 号课程的学生姓名
41.查询没有选修 1 号课程的学生姓名
42.查询选修了全部课程的学生姓名
43.查询至少选修了 学生 2009002 选修的全部课程的学生号码
44.对每一个系,求学生的平均年龄,并把结果存入数据库
45.将计算机系的全体学生的成绩置零
作业练习——学生-选课 题目-5(续)
46.删除学号为 2009008 的学员记录
47.删除计算机系所有学生的选课记录
48.查询不选修课程名为’SC’的学员姓名和学号
49.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
50.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”
号课和“2”号课的成绩

建库代码

创建数据库db_school后:

 USE `db_school`;

 /*Table structure for table `t_course` */

 DROP TABLE IF EXISTS `t_course`;

 CREATE TABLE `t_course` (
`Cno` int(11) NOT NULL AUTO_INCREMENT,
`Cname` varchar(50) NOT NULL,
`Cpno` int(11) NOT NULL,
`Ccredit` float NOT NULL,
PRIMARY KEY (`Cno`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; /*Data for the table `t_course` */ insert into `t_course`(`Cno`,`Cname`,`Cpno`,`Ccredit`) values (1,'数据库',5,4),(2,'数学',0,2),(3,'信息系统',1,4),(4,'操作系统',6,3),(5,'数据结构',7,4),(6,'数据处理',0,2),(7,'PASCAL语言',6,4); /*Table structure for table `t_sc` */ DROP TABLE IF EXISTS `t_sc`; CREATE TABLE `t_sc` (
`Sno` int(11) NOT NULL,
`Cno` int(11) NOT NULL,
`Grade` float DEFAULT NULL,
PRIMARY KEY (`Sno`,`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `t_sc` */ insert into `t_sc`(`Sno`,`Cno`,`Grade`) values (20090001,1,92),(20090001,2,85),(20090001,3,NULL),(20090002,2,90),(20090002,3,80); /*Table structure for table `t_student` */ DROP TABLE IF EXISTS `t_student`; CREATE TABLE `t_student` (
`Sno` int(11) NOT NULL AUTO_INCREMENT,
`Sname` varchar(20) NOT NULL,
`Ssex` varchar(10) NOT NULL,
`Sage` int(11) DEFAULT NULL,
`Sdept` varchar(50) DEFAULT NULL,
PRIMARY KEY (`Sno`)
) ENGINE=InnoDB AUTO_INCREMENT=20160034 DEFAULT CHARSET=utf8; /*Data for the table `t_student` */ insert into `t_student`(`Sno`,`Sname`,`Ssex`,`Sage`,`Sdept`) values (20090001,'张凯','男',22,'CS'),(20090002,'李勇','男',23,'IS'),(20090003,'刘晨','女',22,'MA'),(20090004,'张力','男',22,'MA'),(20090005,'张悦','女',20,'CS'),(20090006,'王敏','女',18,'IS'),(20160001,'张三','男',33,'计算机系'),(20160002,'zh','女',12,'计算机系'),(20160003,'zh','男',12,'计算机系'),(20160004,'zh','女',55,'sdfs'),(20160005,'zh','女',12,'sdfs'),(20160006,'zh','女',55,'计算机系'),(20160007,'zh','男',24,'sdfs'),(20160008,'zh','女',47,'计算机系'),(20160009,'zh','男',12,'sdfs'),(20160010,'zh','女',12,'sdfs'),(20160011,'zh','男',12,'sdfs'),(20160012,'zh','女',77,'sdfs'),(20160013,'zh','男',12,'sdfs'),(20160014,'zh','男',12,'计算机系'),(20160015,'zh','男',12,'sdfs'),(20160016,'zh','女',12,'sdfs'),(20160017,'zh','男',12,'sdfs'),(20160018,'zh','男',12,'sdfs'),(20160019,'zh','女',12,'计算机系'),(20160020,'zh','男',12,'sdfs'),(20160021,'zh','男',12,'计算机系'),(20160022,'zh','女',12,'sdfs'),(20160023,'zh','男',12,'sdfs'),(20160024,'zh','女',12,'sdfs'),(20160025,'zh','女',12,'sdfs'),(20160026,'zh','男',12,'sdfs'),(20160027,'zh','女',12,'sdfs'),(20160028,'zh','女',12,'sdfs'),(20160029,'zh','女',12,'sdfs');

个人记录:

多表查询
连接,即:查询的结果表的一个记录依赖于各个子表和连接条件。

SELECT s.stuName,c.courseName,sc.grade FROM t_student s,t_course c,t_studentcourse sc WHERE s.stuId=sc.stuId AND c.courseId=sc.courseId;
等于
SELECT s.stuName,c.courseName,sc.grade FROM t_student s join t_course c join t_studentcourse sc ON s.stuId=sc.stuId AND c.courseId=sc.courseId;

查询的结果都是得到一个完整(记录FULL!)的结果表,然后截取所要的。

COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;

select 查询了聚集函数只返回一个记录。

group by 配合聚集函数使用,也可以不配合。值相同的为一组。
分组后一般只查询分组对象,其他对象没有意义。
group by 后只接having语句,因为对象为组。

嵌套查询是独立的,如别名。
mysql 查询时对字符串的大小写不敏感。

查询是否为null: WHERE sc.Grade IS NULL;

order by 列,列 //用逗号分隔。

聚集函数在结果表中作用,即后发执行。。比broup by还后。

group by 后每个组只存在一个记录。

查询所有选修了 1 号课程的学生姓名
? 41.查询没有选修 1 号课程的学生姓名
41:
SELECT s.Sname FROM t_student s
WHERE s.Sname
NOT IN(SELECT s.Sname FROM t_student s,t_sc sc
WHERE s.Sno=sc.Sno
AND sc.Cno=1 GROUP BY sc.Sno);
//不用group by也行。
//返回多个记录,适用于in子句。
//
因为group by 只返回一条数据,所以只有:查询结果以group by对象区分时才有意义(最直观的情况是只查询group by的对象)。换个说法:我们要得到的结果中作为分组依据的列的每个值只有一个记录。
group by函数本质是为‘聚合’服务的。
//推断不确定:上面的sql中恰好Cno=1的记录分组中只有一条。
//不过应该是对的。

相似的having语句是筛选组的(组的记录固定为1),所以。。。不分组(即一个组)只返回一个记录。

为null的列参与判断时,所属记录不参与查询。

既然having是搭配group by用到,而where又不能与聚合函数连用,那用嵌套查询:
SELECT *FROM t_sc sc WHERE sc.Grade>=(SELECT AVG(sc.Grade) FROM t_sc sc)

42查询选修了全部课程的学生姓名
以得到各个学生的课程数目表为突破口。
SELECT sc.Sno,COUNT(sc.Cno) AS coursenum FROM t_sc sc
GROUP BY sc.Sno HAVING coursenum=3;
也可以:
SELECT sc.Sno FROM t_sc sc
GROUP BY sc.Sno HAVING COUNT(sc.Cno)=3;

group by是配合查询中的聚集函数用的。

43查询至少选修了 学生 2009002 选修的全部课程的学生号码
SELECT sc.Sno,COUNT(sc.Cno) AS num FROM t_sc sc
WHERE sc.Cno IN(SELECT sc.Cno FROM t_sc sc WHERE sc.Sno='20090002')
GROUP BY sc.Sno HAVING num=(SELECT COUNT(*) FROM t_sc sc WHERE sc.Sno='20090002');

mysql中的整数数据是从1开始的,没有0;

50.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”
号课和“2”号课的成绩
SELECT sc1.Sno,sc1.grade,sc2.grade FROM t_sc sc1,t_sc sc2
WHERE sc1.Sno=sc2.Sno AND sc1.Cno=1 AND sc2.Cno=2 AND sc1.Grade>sc2.Grade;

思考题:如何查询得到一个包含学号和所有所选课程的成绩?

49.
SELECT sc.Sno,COUNT(*) FROM t_sc sc WHERE sc.Grade>80 GROUP BY sc.Sno
HAVING COUNT(*)>=2;
等于:
SELECT sc.Sno FROM t_sc sc WHERE sc.Grade>80 GROUP BY sc.Sno
HAVING COUNT(*)>=2;
只要出现了聚集函数,不管在group by 前或后,group by都能得到正确的使用。
:聚集函数的加入相当于增加了一个列,该列的值的计算以分组为界限。

48.
SELECT s.Sname,s.Sno FROM t_student s WHERE s.Sno
NOT IN((SELECT sc.Sno FROM t_course c,t_sc sc
WHERE c.Cno=sc.Cno AND c.Cname='数据库'));

45.
UPDATE t_sc AS sc SET grade=0 WHERE sc.Sno
IN(
SELECT s.Sno FROM t_student s WHERE s.Sdept='cs'
);

mysql练习题目试水50题,附建库sql代码的更多相关文章

  1. Mysql,zip格式安装、修改密码、建库

    Mysql,zip格式 1. Mysql 主目录最好别带有"- ."之类的字符 2. Mysql 配置环境变量 Path 环境变量后加上 mysql解压路径:eg:E:\mysql ...

  2. MYSQL 简单的建库操作代码

    一.查询所有数据库 代码:show databases; 成功后如下图: 二.建立一个数据库 代码:create database test3: 成功后如下图: 三.连接数据库 代码:use test ...

  3. 【mysql】排序方操作50题练习及其答案

    1.创建数据库.相关表,并插入数据create database homework;use homework; create table class_grade(gid int primary key ...

  4. j接近50道经典SQL练习题,附建表SQL解题SQL

    说明 本文章整理了47道常见sql联系题,包括建表语句,表结构,习题列表,解题答案都涵盖在本文章内.文末提供了所用SQL脚本下载链接.所有解题答案都是本人自己写的,广大读者如果在阅读使用中,有任何问题 ...

  5. hdu_1033(我怎么找到的这么水的题,只为保存代码。。。)

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...

  6. MySQL练习50题

    介绍一个学习SQL的网站:https://sqlbolt.com/ 习题来源于网络,SQL语句是自己的练习答案,部分参考了网络上的答案. 花了一晚上的时间做完,个人认为其中的难点有:分组提取前几名的数 ...

  7. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...

  8. POJ推荐50题

    此文来自北京邮电大学ACM-ICPC集训队 此50题在本博客均有代码,可以在左侧的搜索框中搜索题号查看代码. 以下是原文: POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求, ...

  9. 第一回:Scrapy的试水

    前言:今天算是见到Scrapy的第二天,之前只是偶尔查了查,对于这个框架的各种解释,我-----都-----看------不------懂----,没办法,见面就是刚. 目的:如题,试水 目标:< ...

随机推荐

  1. call apply bind的使用方法和区别

    call 1.改变this指向   2.执行函数    3.传参 var obj={}; function fun(a,b){ console.log(a,b,this); } fun(1,2); / ...

  2. 2018-9-1-win10-17025-触摸bug

    title author date CreateTime categories win10 17025 触摸bug lindexi 2018-09-01 09:50:18 +0800 2018-2-1 ...

  3. Sql server 启用调试

    在SQL Server 2008管理平台上,调试2005的数据库,会报错. 用 SQL Server 2008管理平台,调试本机数据库,当登录服务器名为“.”的时候也会报错.   解决方法,暂时使用S ...

  4. 洛谷P2606 [ZJOI2010]排列计数 组合数学+DP

    题意:称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很大, ...

  5. Matlab的2D作图

    1 plot()函数 画一条线 plot(X,Y) 最基本的例子 x = 0: pi / 100:2 * pi; y = sin(x); figure plot(x,y) 在一张图上画多条线 clc; ...

  6. alert(1) to win 8

    function escape(s) { return '<script>console.log("' + s.toUpperCase() + '")</scri ...

  7. vue大文件分片上传插件

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  8. jquery常用用法

    1.$("prve + next" )                          选择紧接着在perve后的next元素2.$("#div1 > *&quo ...

  9. python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

    昨日内容回顾 进程 multiprocess Process —— 进程 在python中创建一个进程的模块 start daemon 守护进程 join 等待子进程执行结束 锁 Lock acqui ...

  10. KindEditor 完全复制word内容

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...