【MySQL】数据库原理复习——SQL语言

对基本的SQL语句编写的练习题,其中的题目的答案可能会有多种书写方式。

1、题目1

1.1 关系模式

学生student:SNO:学号,SNAME:姓名,AGE:年龄 SEX:性别

SNO

SNAME

AGE

SEX

1

李强

23

2

刘丽

22

5

张友

22

课程course:CNO:课程代码,CNAME:课程名称,TEACHER:教师

CNO

CNAME

TEACHER

K1

C语言

王华

K5

数据库原理

程军

K8

编译原理

程军

学生成绩SC:SNO:学号,CNO:课程代码,SCORE:成绩

SNO

CNO

SCORE

1

K1

83

2

K1

85

5

K1

92

2

K5

90

5

K5

84

5

K8

80

1.2 要求一

用SQL语言完成表的创建以及数据的插入:

  1. use test;
  2. create table if not exists student
  3. (
  4. SNO varchar(20) primary key,
  5. SNAME varchar(20) character set gbk,
  6. AGE int,
  7. SEX  char(2) character set gbk CHECK(SEX IN('男','女'))
  8. );
  9. insert into student values('1','李强',23,'男');
  10. insert into student values('2','刘丽',22,'女');
  11. insert into student values('5','张友',22,'男');
  12. create table if not exists course
  13. (
  14. CNO varchar(20) primary key,
  15. CNAME varchar(20) character set gbk,
  16. TEACHER varchar(20) character set gbk
  17. );
  18. insert into course values('K1','C语言','王华');
  19. insert into course values('K5','数据库原理','程军');
  20. insert into course values('K8','编译原理','程军');
  21. create table if not exists sc
  22. (
  23. SNO varchar(20) NOT NULL,
  24. CNO varchar(20) NOT NULL,
  25. SCORE int NOT NULL,
  26. primary key (SNO,CNO),
  27. foreign key (SNO) references student(SNO),
  28. foreign key (CNO) references course(CNO)
  29. );
  30. insert into sc values('1','K1',83);
  31. insert into sc values('2','K1',85);
  32. insert into sc values('5','K1',92);
  33. insert into sc values('2','K5',90);
  34. insert into sc values('5','K5',84);
  35. insert into sc values('5','K8',80);

1.3 要求二

用SQL语言完成如下要求:

(1)       检索至少选修"程军"老师所授全部课程的学生姓名(SNAME);

本题的另外一种说法就是,检索选修了“程军”老师所授全部课程的学生姓名

  1. select sname from student
  2. where not exists
  3. (
  4. select * from course
  5. where teacher='程军' and not exists
  6. (
  7. select * from sc
  8. where sc.sno=student.sno and sc.cno=course.cno
  9. )
  10. );

这里的检索结果是:

+-------+
| sname |
+-------+
| 张友  |
+-------+
1 row in set (0.00 sec)

(2)       检索"李强"同学不学课程的课程号(CNO);

  1. select course.cno from course
  2. where course.cno not in
  3. (
  4. select sc.cno from sc,student
  5. where student.sname='李强' and student.sno=sc.sno
  6. );

+-----+
| cno |
+-----+
| K5  |
| K8  |
+-----+
2 rows in set (0.22 sec)

(3)       检索选修不少于3门课程的学生学号(SNO);

  1. SELECT sc.sno
  2. FROM sc
  3. GROUP BY sc.sno HAVING count(*)>=3
  4. ;

+-----+
| sno |
+-----+
| 5   |
+-----+
1 row in set (0.09 sec)

(4)       检索选修全部课程的学生姓名(SNAME)。

  1. SELECT sname FROM student
  2. WHERE NOT EXISTS
  3. (
  4. SELECT * FROM course
  5. WHERE NOT EXISTS
  6. (
  7. SELECT * FROM sc
  8. WHERE course.cno=sc.cno and student.sno=sc.sno
  9. )
  10. );

+-------+
| sname |
+-------+
| 张友  |
+-------+
1 row in set (0.02 sec)

(5)       检索不学"C语言"的学生信息

  1. SELECT * FROM student
  2. WHERE sno not in
  3. (
  4. SELECT sc.sno FROM sc,course
  5. WHERE course.cno=sc.cno
  6. );

1.4 要求三

请用SQL语言完成如下查询:

(1)查询“程军”老师所教授的所有课程;

  1. SELECT * FROM course
  2. WHERE teacher='程军';

(2)查询“李强”同学所有课程的成绩;

  1. SELECT score FROM student,sc
  2. WHERE student.sname='李强' AND student.sno=sc.sno

(3)查询课程名为“C语言”的平均成绩;

  1. SELECT AVG(score) FROM sc,course
  2. WHERE course.cname='C语言' AND course.cno=sc.cno

(4)查询选修了所有课程的同学信息。

  1. SELECT * FROM student
  2. WHERE NOT EXISTS
  3. (
  4. SELECT * FROM course
  5. WHERE NOT EXISTS
  6. (
  7. SELECT * FROM sc
  8. WHERE course.cno=sc.cno AND student.sno=sc.sno
  9. )
  10. );

1.5 要求四

(1)检索王老师所授课程的课程号和课程名。

  1. SELECT cno,cname FROM course WHERE teacher LIKE '王%';

(2)检索年龄大于23岁的男学生的学号和姓名。

  1. SELECT sno,sname FROM student
  2. WHERE age>23;

(3)检索至少选修王老师所授课程中一门课程的女学生姓名。

  1. SELECT sname FROM student
  2. WHERE sex='女' AND sno IN
  3. (
  4. SELECT distinct sno FROM sc,course
  5. WHERE teacher LIKE '王%' AND sc.cno=course.cno
  6. );

(4)检索李同学不学的课程的课程号。

  1. SELECT course.cno FROM course
  2. WHERE course.cno NOT IN
  3. (
  4. SELECT sc.cno FROM sc,student
  5. WHERE student.sname LIKE '李%' AND sc.sno=student.sno
  6. );

(5)检索至少选修两门课程的学生学号。

  1. SELECT sno FROM sc
  2. GROUP BY sno HAVING (count(*)>=2);

(6)检索全部学生都选修的课程的课程号与课程名。

  1. SELECT course.cno,course.cname FROM course
  2. WHERE course.cno IN
  3. (
  4. SELECT cno FROM sc
  5. GROUP BY cno HAVing count(*)=(SELECT count(*) FROM student)
  6. );

(7)检索选修课程包含王老师所授课的学生学号。

  1. SELECT DISTINCT sno FROM sc
  2. WHERE cno IN
  3. (
  4. SELECT cno FROM course
  5. WHERE teacher LIKE '王%'
  6. );

(8)统计有学生选修的课程门数。

  1. SELECT count(*)  NumberOfCourse
  2. FROM
  3. (
  4. SELECT DISTINCT cno FROM sc
  5. GROUP BY cno
  6. ) AS testTab;

(9)求选修K1课程的学生的平均年龄。

  1. SELECT AVG(age) AverageOfAge
  2. FROM student
  3. WHERE sno IN
  4. (
  5. SELECT sno FROM sc
  6. WHERE cno='K1'
  7. );

(10)求王老师所授课程的每门课程的学生平均成绩。

  1. SELECT sc.cno,AVG(sc.score)
  2. FROM sc
  3. WHERE sc.cno IN
  4. (
  5. SELECT course.cno FROM course
  6. WHERE course.teacher LIKE '王%'
  7. )
  8. GROUP BY sc.cno

(11)统计每门课程的学生选修人数(超过2人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

  1. SELECT cno,Num
  2. FROM
  3. (
  4. SELECT cno,count(*) as Num
  5. FROM sc
  6. GROUP BY cno HAVING (count(*) >= 2)
  7. ) tb_temp
  8. ORDER BY Num DESC,cno ASC
  9. ;

(12)检索学号比李同学大,而年龄比他小的学生姓名。

  1. SELECT stu1.sname
  2. FROM student stu1,
  3. (
  4. SELECT max(sno) snoLi,min(age) ageLi FROM student
  5. WHERE sname LIKE '李%'
  6. ) AS stuLi
  7. WHERE (stu1.age < stuLi.ageLi) AND (stu1.sno>stuLi.snoLi)
  8. ;

(13)检索姓名以李打头的所有学生的姓名和年龄。

  1. SELECT sname,age FROM student
  2. WHERE sname LIKE '李%'
  3. ;

(14)在SC中检索成绩为空值的学生学号和课程号。

  1. SELECT sno,cno FROM sc
  2. WHERE score IS NULL;

(15)求年龄大于女同学平均年龄的男学生姓名和年龄。

  1. SELECT sname,age FROM student
  2. WHERE
  3. sex='男' AND age > (
  4. SELECT AVG(age)
  5. FROM student
  6. WHERE sex='女'
  7. )
  8. ;

(16)求年龄大于所有女同学年龄的男学生姓名和年龄。

  1. SELECT sname,age
  2. FROM student
  3. WHERE sex='男' AND age > (
  4. SELECT max(age)
  5. FROM student
  6. WHERE sex='女'
  7. )
  8. ;
版权声明:本文为博主原创文章,未经博主允许不得转载。

【MySQL】经典数据库SQL语句编写练习题——SQL语句扫盲的更多相关文章

  1. Mysql初识数据库《五》初识sql语句

    初识sql语句 有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写 mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要 ...

  2. MySQL查看数据库表容量大小

    本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用. 1.查看所有数据库容量大小 select table_schema as '数据库', sum(table ...

  3. 数据库MySQL经典面试题之SQL语句

    数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...

  4. mysqls,为node.js而编写的sql语句生成插件 (crud for mysql).

    It is written in JavaScript,crud for mysql.You can also use transactions very easily. mysqls 一款专为nod ...

  5. MYSQL之数据库初识、安装详解、sql语句基本操作

    目录 MYSQL之数据库初识及安装详解 1.什么是数据库? 1.什么是数据?(data) 2.什么是数据库?(databases,简称DB) 2.为什要用数据库? 3.什么是数据库管理系统?(Data ...

  6. MySQL学习-数据库设计以及sql的进阶语句

    1.数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步 在开发中有很多设计数据库的软件,常用的如power des ...

  7. php面试专题---17、MySQL的SQL语句编写考点

    php面试专题---17.MySQL的SQL语句编写考点 一.总结 一句话总结: 注意:只写精品 1.MySQL的关联UPDATE语句? 关键UPDATE A,B:UPDATE A,B SET A.c ...

  8. PHP面试 MySQL的SQL语句编写

    MySQL的SQL语句编写 面试题一 有A表(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出一条SQL语句,将B中age>50 ...

  9. mysql 对数据库操作的常用sql语句

    1.查看创建某个数据库的 创建语句 show create database mysql 这个sql语句的意思是 展示创建名为mysql的数据库的 语句.执行之后如下图所示 仿造上面这个创建语句 创建 ...

随机推荐

  1. CentOS7.4使用yum安装MySQL5.6

    CentOS默认数据库为mariadb可以使用yum安装MySQL5.6 系统版本查看 下载yum源安装 wget http://dev.mysql.com/get/mysql-community-r ...

  2. 修改Docker默认存储位置的方法

    在日常使用中由于我们的根目录通常都比较小,如果想大量存储容器镜像的话很容易导致根目录写满 docker 默认的数据目录是/var/lib/docker 我们想要移动数据目录可以按照下面说明操作即可. ...

  3. python基础-第九篇-9.3线程池

    简单版 import queue import threading class ThreadPool(object): def __init__(self, max_num=20): self.que ...

  4. 苹果推送通知服务APNs编程(转)

    add by zhj: 下面的几篇文章也非常好, http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios- ...

  5. gb28181的SPVMN测试环境搭建以及设备端和服务器的具体实现

    1.GB/T28181开发1之SPVMN(1.0.0.1)环境搭建 https://blog.csdn.net/hiwubihe/article/details/82910685 2.SPVMN 视频 ...

  6. Spark的RDD原理以及2.0特性的介绍

    转载自:http://www.tuicool.com/articles/7VNfyif 王联辉,曾在腾讯,Intel 等公司从事大数据相关的工作.2013 年 - 2016 年先后负责腾讯 Yarn ...

  7. Selenium之IE浏览器的启动

    1.下载IEDriverServer.exe文件放至需要的目录中: 2.编写代码 import org.openqa.selenium.WebDriver; import org.openqa.sel ...

  8. mysql索引之主键索引

    MySQL目前主要有以下几种索引类型:1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 二.语句 CREATE TABLE table_name[col_name data type] [ ...

  9. 解决 failed to push some refs to 'git@github.com:zle1992/head-first-java' hint: Updates were rejected because the tip of your curr

    问题描述: 寒假之前用实验室电脑push到github 上head first java 的程序,寒假回家后,想用自己的笔记本继续编,继续push . 我先从github下载zip到本地,然后 解压后 ...

  10. CTR预估中的贝叶斯平滑方法(一)原理及实验介绍

    1. 背景介绍 广告形式: 互联网广告可以分为以下三种: 1)展示广告(display ad) 2)搜索广告(sponsored search ad) 3)上下文广告(contextual ad)   ...