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

建库代码

部分题目答案在末尾,可用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. k3 cloud单据体首行过滤功能

    #实现单据体首行过滤  clr.AddReference('System') clr.AddReference('Kingdee.BOS.Core') from Kingdee.BOS.Core.Dy ...

  2. td内容超出 以…显示

    table中的td内容超出以省略号显示,需满足的条件是: <style type="text/css"> table{ table-layout: fixed; bor ...

  3. Thymeleaf简介

    Thymeleaf Thymeleaf简介 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C# ...

  4. 基于TMS320C6678、FPGA XC5VLX110T的6U CPCI 8路光纤信号处理卡

    基于TMS320C6678.FPGA XC5VLX110T的6U CPCI 8路光纤信号处理卡 1.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采用两片TI DSP T ...

  5. apache重写规则简单理解

    1.前提:开启apache重写,并把httpd.conf里的相关的AllowOverride denied改为AllowOverride all 2.重写规则可写在项目根目录的.htaccess文件或 ...

  6. mysql查询每个部门/班级前几名

    Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id . +----+-------+--------+--------------+ | I ...

  7. CentOS7 利用systemctl添加自定义系统服务

    一.命令systemctl介绍 CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 命 ...

  8. Linux系统下安装jenkins使用

    jenkins 2.190.1 yum 安装 devops一梦千年 发布时间:10-0916:28 jenkins 2.190.1 yum 安装记录 安装环境: 所需安装包: https://pkg. ...

  9. VR和AR

    VR 虚拟现实,比如你天气很炎热,戴上VR眼镜,出现在你眼前的是哈尔滨的冰雪世界 AR 增强现实,比如你站在一片碧绿的草地上,给你身边来一匹快马 想想一个单身狗去电影院,给你身边来一个美女作陪,这是多 ...

  10. 3,LinkedList

    一,LinkedList简介 1,LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. 2,LinkedList 实现 ...