数据库常规操作实验

  • 一、建表
  • 二、数据插入
  • 三、实际问题

一、建表

学生(学号,姓名,年龄,性别),课程(课程号,课程名,学分,先行课号),选修(学号,课程号,成绩)。
我们可以知道,学生表的主码是学号,课程表的主码是课程号,选修表的主码是学号、课程。
学生表的创建:

mysql> create table student-> (-> s VARCHAR(11) primary key,-> sname VARCHAR(25),-> age INT(5),-> sex VARCHAR(25)-> );

课程表的创建:

mysql> create table courses-> (-> c INT(11) primary key,-> cname VARCHAR(25),-> score INT(5),-> pc INT(11)-> );

选修表的创建:

mysql> create table sc-> (-> s INT(11),-> c INT(11),-> GRADE INT,-> PRIMARY KEY(s,c)-> );

二、数据插入

mysql> INSERT INTO student VALUES('S1','LU',20,'M');
Query OK, 1 row affectedmysql> INSERT INTO student VALUES('S2','YIN',19,'M');
Query OK, 1 row affectedmysql> INSERT INTO student VALUES('S3','XU',18,'F');
Query OK, 1 row affectedmysql> INSERT INTO student VALUES('S4','QU',18,'F'),-> ('S6','PAN',14,'M');
Query OK, 2 rows affected
Records: 2  Duplicates: 0  Warnings: 0mysql> INSERT INTO student VALUES('S7','PANG',18,'F'),-> ('S8','DONG',24,'M');
Query OK, 2 rows affected
Records: 2  Duplicates: 0  Warnings: 0
mysql> INSERT INTO courses-> (c,cname,score)-> VALUES('B1','基础',2);
Query OK, 1 row affectedmysql> INSERT INTO courses VALUES('B2','VB',4,'B1'),('B3','C',4,'B1');
Query OK, 2 rows affected
Records: 2  Duplicates: 0  Warnings: 0mysql> INSERT INTO courses (c,cname,score) VALUES('C1','数学','4'),('C2','英语',8);
Query OK, 2 rows affected
Records: 2  Duplicates: 0  Warnings: 0mysql> INSERT INTO courses VALUES('C3','数据结构',4,'C2'),('C4','数据库',3.5,'C3'),('C5','网络',4,'C3');
Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0

三、实际问题

(1)列出选修课程号为C2的学生学号与姓名。
SELECT s,sname FROM student WHERE s IN (SELECT s FROM sc WHERE c=‘c2’);
±—±------+
| s | sname |
±—±------+
| S1 | LU |
| S2 | YIN |
| S3 | XU |
| S4 | QU |
| S6 | PAN |
| S8 | DONG |
±—±------+
6 rows in set
(2)检索选修课程名为“数学”的学生学号与姓名。
mysql> SELECT s,sname
-> FROM student
-> WHERE s IN (SELECT s
-> FROM sc WHERE c IN(SELECT c
-> FROM courses
-> WHERE cname=‘数学’)
-> );
±—±------+
| s | sname |
±—±------+
| S1 | LU |
| S2 | YIN |
| S3 | XU |
| S4 | QU |
| S6 | PAN |
| S8 | DONG |
±—±------+
6 rows in set
(3)检索没有选修C2课程的学生姓名与年龄。
mysql> SELECT sname,age
-> FROM student
-> WHERE s NOT IN(
-> SELECT s
-> FROM sc
-> WHERE c=‘c2’);
±------±----+
| sname | age |
±------±----+
| PANG | 18 |
±------±----+
1 row in set
(4)检索选修全部课程的学生姓名。
mysql> SELECT st.sname FROM student st WHERE st.s IN(SELECT sc.s FROM sc,courses co
-> GROUP BY sc.s
-> HAVING COUNT(DISTINCT sc.c)=(SELECT COUNT(*) FROM courses co));
Empty set
(5)检索sc表中多于3名学生选修的并以B开头的课程号的平均分数。
mysql> SELECT c,avg(GRADE) FROM sc WHERE c LIKE ‘B%’ GROUP BY c HAVING count©>3;
±—±-----------+
| c | avg(GRADE) |
±—±-----------+
| B1 | 86.0000 |
| B2 | 83.0000 |
±—±-----------+
2 rows in set
(6)检索sc表中最低分大于70,最高分小于90的S#列。
mysql> SELECT s FROM sc GROUP BY s HAVING MAX(GRADE)<90 AND MIN(GRADE)>70;
±—+
| s |
±—+
| S1 |
| S3 |
±—+
2 rows in set
(7)检索sc表中最高分与最低分之差大于12分的课程号。
mysql> SELECT s FROM sc GROUP BY s HAVING MAX(GRADE)-MIN(GRADE)>12;
±—+
| s |
±—+
| S1 |
| S2 |
| S3 |
| S4 |
| S6 |
| S8 |
±—+
6 rows in set
(8)检索s表中与学号为“s3”的学生同年出生的所有学生的S#,SNAME,AGE列。
mysql> SELECT s,sname,sex FROM student WHERE age=(
-> SELECT age FROM student WHERE s=‘s1’);
±—±------±----+
| s | sname | sex |
±—±------±----+
| S1 | LU | M |
±—±------±----+
1 row in set
(9)检索考试成绩为最高分的学生姓名。

mysql> SELECT student.sname
-> FROM student,sc
-> WHERE student.s=sc.s
-> group by student.s
-> having avg(sc.GRADE)>=all(SELECT avg(GRADE)
-> FROM sc
->
-> GROUP BY s);
±------+
| sname |
±------+
| PAN |
±------+
1 row in set
(10)检索选修学生人数多于5人的某课程的课程名。
mysql> SELECT courses.cname
-> FROM courses,sc
-> WHERE courses.c=sc.c
-> GROUP BY sc.c
-> HAVING count(sc.c)>5;
±------+
| cname |
±------+
| 基础 |
| 数学 |
| 英语 |
±------+
3 rows in set
(11)检索选修课号为“B1”课程且成绩至少高于某个选修编号为“C1”课程的学生的c#,s#和grade,并按grade从高到低次序排列。
mysql> SELECT * FROM sc a
-> WHERE a.c=‘B1’ AND a.GRADE>(
-> SELECT b.GRADE FROM sc b WHERE c=‘C1’ AND a.s=b.s)
-> order by GRADE desc;
±—±---±------+
| s | c | GRADE |
±—±---±------+
| S4 | B1 | 98 |
| S6 | B1 | 92 |
| S1 | B1 | 89 |
| S8 | B1 | 89 |
±—±---±------+
(12)检索选修课号为“B1”课程且成绩高于选修编号为“C2”课程的学生的c#,s#和grade。
mysql> SELECT * FROM sc a
-> WHERE a.c=‘B1’ AND a.GRADE>(
-> SELECT b.GRADE FROM sc b WHERE c=‘C2’ AND a.s=b.s)
-> ;
±—±---±------+
| s | c | GRADE |
±—±---±------+
| S1 | B1 | 89 |
| S4 | B1 | 98 |
| S6 | B1 | 92 |
| S8 | B1 | 89 |
±—±---±------+
4 rows in set
(13)检索成绩比该课程平均成绩低的学生成绩表。
mysql> SELECT * FROM sc a WHERE GRADE<(SELECT avg(GRADE)
-> FROM sc b WHERE a.c=b.c);
±—±---±------+
| s | c | GRADE |
±—±---±------+
| S1 | B2 | 75 |
| S1 | C1 | 85 |
| S1 | C2 | 73 |
| S1 | C5 | 73 |
| S2 | B1 | 75 |
| S2 | C3 | 80 |
| S2 | C4 | 85 |
| S3 | B1 | 73 |
| S4 | B2 | 75 |
| S4 | C1 | 84 |
| S6 | C2 | 75 |
| S8 | B3 | 67 |
| S8 | C1 | 87 |
| S8 | C4 | 88 |
±—±---±------+
14 rows in set
(14)检索所有选课学生的sname。
mysql> SELECT distinct student.sname
-> FROM sc,student
-> WHERE student.s=sc.s;
±------+
| sname |
±------+
| LU |
| YIN |
| XU |
| QU |
| PAN |
| DONG |
±------+
6 rows in set
(15)检索所有未选课学生的Sname。
mysql> SELECT sname FROM student WHERE s NOT IN
-> (SELECT distinct student.s
-> FROM sc,student
-> WHERE student.s=sc.s);
±------+
| sname |
±------+
| PANG |
±------+
1 row in set
(1)把C2课程的非空成绩提高10%。
mysql> UPDATE sc
-> SET GRADE=GRADE*1.1
-> WHERE c=‘C1’ AND GRADE IS NOT NULL;
Query OK, 6 rows affected
Rows matched: 6 Changed: 6 Warnings: 0
(2)在SC表中删除课程名为“物理”的成绩所对应的元组。
mysql> DELETE FROM sc WHERE c=(
-> SELECT c FROM courses
-> WHERE cname=‘物理’);
Query OK, 0 rows affected
(3)在S和SC表中删除学号为S8的所有数据。
mysql> DELETE FROM sc WHERE s=‘S8’;
Query OK, 7 rows affected
mysql> DELETE FROM student WHERE s=‘S8’;
Query OK, 1 row affected
之前没关联
如果关联:
(1)建立男生学生的视图,属性包括学号,姓名,选修课程名和成绩。
DELETE FROM student,sc WHERE s=‘S8’;
mysql> CREATE VIEW man AS
-> SELECT *
-> FROM student
-> WHERE sex=‘M’;

Query OK, 0 rows affected
(2)在男生视图中查询平均成绩大于80分的学生学号和姓名。

mysql> SELECT a.s,a.sname FROM man a,sc b WHERE a.s=b.s
-> GROUP BY b.s
-> HAVING AVG(GRADE)>80;
±—±------+
| s | sname |
±—±------+
| S1 | LU |
| S2 | YIN |
| S6 | PAN |
±—±------+
3 rows in set
(1)计算每个学生选修课程的门数、平均成绩。
mysql> SELECT count©,avg(GRADE)
-> FROM sc
-> GROUP BY s;
±---------±-----------+
| count© | avg(GRADE) |
±---------±-----------+
| 7 | 83.0000 |
| 7 | 86.8000 |
| 4 | 86.0000 |
| 5 | 86.7500 |
| 6 | 88.5000 |
±---------±-----------+
5 rows in set
(2)建立一个合法的用户,将SC表的查询权限授予该用户。
mysql> GRANT SELECT ON TABLE sc
-> TO wangrongfeng;
Query OK, 0 rows affected
(3)使用GRANT语句,把对基本表students、Courses、SC的使用权限授予其他用户。
-> GRANT all privileges
-> ON courses TO wangrongfeng
-> ;
-> GRANT all privileges
-> ON sc TO wangrongfeng
-> ;
-> GRANT all privileges
-> ON student TO wangrongfeng
-> ;

SQL语句新手练习(一)相关推荐

  1. SQL语句性能优化--LECCO SQL Expert

    SQL语句的优化是将性能低下的SQL语句转换成目的相同的性能优异的SQL语句. 人工智能自动SQL优化就是使用人工智能技术,自动对SQL语句进行重写,从而找到性能最好的等效SQL语句. 数据库性能的优 ...

  2. tp5循环查询语句_如何用Excel快速生成SQL语句,用过的人都说好

    Excel的公式自动生成想必大家都知道了,就是写好一个公式后直接往下拖,就可以将后面数据的公式自动生成. 今天我们就用这个功能来快速生成SQL语句. 导入Excel数据 Excel的数据有多种方式,这 ...

  3. 存储过程和SQL语句比较【转】

    做为SQL存储过程和.NET的新手,下面的指导还是很有用的,自己这一段刚刚接触这些东西,搜集了一些相关的东西,能使新手较容易上手,当然啦,要精通和熟练应用,还是要看更多更深的资料的,高手请不要见笑. ...

  4. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  5. 出生日期范围的Sql语句_【呕心总结】python如何与mysql实现交互及常用sql语句

    9 月初,我对 python 爬虫 燃起兴趣,但爬取到的数据多通道实时同步读写用文件并不方便,于是开始用起mysql.这篇笔记,我将整理近一个月的实战中最常用到的 mysql 语句,同时也将涉及到如何 ...

  6. js语句连接mysql数据库_js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池...

    var vue = require('vue'); 引入vue的意思,commonjs的写法.node都是用require来载入模块的,可以看看webpack+vue. require()可以调用模块 ...

  7. 如何用Excel快速生成SQL语句,用过的人都说好

    导读:Excel的公式自动生成想必大家都知道了,就是写好一个公式后直接往下拖,就可以将后面数据的公式自动生成. 今天我们就用这个功能来快速生成SQL语句. 作者:丶平凡世界 来源:SQL数据库开发(I ...

  8. SQL数据库不用SQL语句能显示全表的内容_2020别再说你了解数据库了,你搞清楚这些问题了吗?...

    程序员中一直有一个段子广为流传:大不了我们"删库跑路" 由此可见作为一个程序员,不了解数据库怎么能行,那么数据库到底是个啥呢,作为一个Java工程师,平时和数据库打交道着实不少,所 ...

  9. 如何查询mysql中执行效率低的sql语句

    一些小技巧 1. 如何查出效率低的语句? 在MySQL下,在启动参数中设置 --log-slow-queries=[文件名],就可以在指定的日志文件中记录执行时间超过long_query_time(缺 ...

最新文章

  1. vbyone接口引脚定义_一文了解A、B、C、D、E 5 种HDMI接口类型!网友:今天总算明白了...
  2. html5的交互式微课,浅谈交互式微课的几个特征
  3. centos6.8安装node
  4. 数据库练习题(一)创建表格并做相应的查询
  5. 九九乘法表--0702
  6. OJ1024: 计算字母序号
  7. php 安装pdo odbc,php如何安装pdo odbc扩展
  8. python编写命令行框架_Python2和3的面向命令的命令行框架是什么?
  9. 世界各国 MCC 和 MNC 列表
  10. 资深Java面试题及答案(汇总)
  11. SAS安装及过程中遇到的问题的解决办法
  12. 教你如何选择弱电工程中使用的交换机?
  13. 使用SocksOnline工具突破局域网限制登录QQ
  14. Python爬虫案例——漫画网站爬取图片(模拟浏览器解析网页)
  15. SPDY与http2
  16. 【java工具类】将明文密码转成MD5密码
  17. 《线性代数》学习之———第一章 矩阵与方程组(1.1线性方程组)
  18. 大型网站技术架构:核心原理与案例分析
  19. uniapp APP点击跳转QQ加入群聊
  20. 人工智能学计算机语言,人工智能需要学什么编程语言

热门文章

  1. 程序员面试金典——18.5单词最近的距离
  2. Grad-CAM 神经网络特征图可视化
  3. pytorch 实现RBF网络
  4. pytorch中调整学习率: torch.optim.lr_scheduler
  5. 移动端设备管理平台 atx server2实践
  6. C语言大数阶乘的求法
  7. hibernate框架学习笔记2:配置文件详解
  8. 时间对象与字符串对象之间相互转换
  9. (数据挖掘-入门-2)相似度衡量的方法
  10. JS 浏览器关闭事件