我是靠谱客的博主 激动奇异果,这篇文章主要介绍复杂的高频SQL语句&清空表SQL语句清空表所有数据(慎用),现在分享给大家,希望可以做个参考。

常见SQL语句练习

 

先来看一下表之间的结构和联系

创建表结构

复制代码
1
2
3
4
5
6
7
CREATE TABLE course (cid INT, cname VARCHAR(20), tid INT, PRIMARY KEY(cid)) ENGINE = INNODB; CREATE TABLE teacher (tid INT, tname VARCHAR(20), tcid INT,PRIMARY KEY(tid)) ENGINE = INNODB; CREATE TABLE student (sid INT, sname VARCHAR(20), sbirth VARCHAR(20), ssex VARCHAR(10),PRIMARY KEY(sid)) ENGINE = INNODB; CREATE TABLE score (sid INT, cid INT, sscore INT(3),PRIMARY KEY(sid,cid)) ENGINE = INNODB;

其他表结构不在赘述!

向表中添加数据:

  • student 学生表
复制代码
1
2
3
4
5
6
7
8
insert into student select 1 , '赵雷' , '1990-01-01' , '男' ; insert into student select 2 , '钱电' , '1990-12-21' , '男' ; insert into student select 3 , '孙风' , '1990-05-20' , '男' ; insert into student select 4 , '李云' , '1990-08-06' , '男' ; insert into student select 5 , '周梅' , '1991-12-01' , '女' ; insert into student select 6 , '吴兰' , '1992-03-01' , '女' ; insert into student select 7 , '郑竹' , '1989-07-01' , '女' ; insert into student select 8 , '王菊' , '1990-01-20' , '女' ;

  • course 课程表
复制代码
1
2
3
insert into course select 1 , '语文' , '02'; insert into course select 2 , '数学' , '01'; insert into course select 3 , '英语' , '03';

  • teacher 教师表 插入数据values
复制代码
1
2
3
insert into teacher values(1 , '张三' , 1); insert into teacher values(3 , '李四' , 2); insert into teacher values(2 , '王五' , 3);

  • score 分数表
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
insert into score values(1 , 1 , 80); insert into score values(1 , 2 , 90); insert into score values(1 , 3 , 99); insert into score values(2 , 1 , 70); insert into score values(2 , 2 , 60); insert into score values(2 , 3 , 80); insert into score values(3 , 1 , 80); insert into score values(3 , 2 , 80); insert into score values(3 , 3 , 80); insert into score values(4 , 1 , 50); insert into score values(4 , 2 , 30); insert into score values(4 , 3 , 20); insert into score values(5 , 1 , 76); insert into score values(5 , 2 , 87); insert into score values(6 , 1 , 31); insert into score values(6 , 3 , 34); insert into score values(7 , 2 , 89); insert into score values(7 , 3 , 98);

插入十八条记录

1、查询1课程比2课程成绩低的学生的信息及课程分数  

思路解析: 需要查询的字段:学生信息 课程1分数 课程2分数

SELECT s.* FROM student s;
SELECT sc.sscore FROM score sc;
SELECT s.* , sc.sscore FROM student s JOIN score sc ON s.sid = sc.sid;
SELECT s.* , sc.sscore FROM student s JOIN score sc ON s.sid = sc.sid AND sc.cid = 1;
SELECT s.* , sc2.sscore  as score2 ,sc.sscore as score1 FROM student s JOIN score sc ON s.sid = sc.sid AND sc.cid = 1 LEFT JOIN score sc2 ON s.sid = sc2.sid AND sc2.cid = 2 where sc2.sscore > sc.sscore

2、查询平均成绩大于等于60分的学生编号和学生姓名和平均成绩

复制代码
1
2
3
4
5
6
7
8
-- 查询student表的 sid、sname、avg(score.sscore) SELECT s.sid , s.sname FROM student s; SELECT s.sid , s.sname , sc.sscore FROM student s JOIN score sc ON s.sid = sc.sid; SELECT s.sid , s.sname , sc.sscore FROM student s JOIN score sc ON s.sid = sc.sid GROUP BY s.sid , s.sname HAVING ROUND(AVG(sc.sscore),2)>=60; SELECT s.sid , s.sname , ROUND(AVG(sc.sscore),2) as avgScore FROM student s JOIN score sc ON s.sid = sc.sid GROUP BY s.sid , s.sname HAVING ROUND(AVG(sc.sscore),2)>=60;

3、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
        -- (包括有成绩的和无成绩的)  根据成绩表来看,4、6、8学生的成绩不完整

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT s.sid, s.sname, ROUND( AVG( sc.sscore ), 2 ) AS avgScore FROM student s LEFT JOIN score sc ON s.sid = sc.sid GROUP BY s.sid, s.sname HAVING ROUND( AVG( sc.sscore ), 2 ) < 60 UNION SELECT a.sid, a.sname, 0 AS avgScore FROM student a WHERE a.sid NOT IN ( SELECT DISTINCT sid FROM score );

联合查询前面的是正常的三门课平均成绩不足60的  联合后面是无成绩的学生信息

4、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

复制代码
1
SELECT s.sid , s.sname , COUNT(sc.cid) AS '总课程数', SUM(sc.sscore) AS '总分数' FROM student s LEFT JOIN score sc ON s.sid = sc.sid GROUP BY s.sid , s.sname;
复制代码
1
2
3
4
5
6
7
8
9
10
11
SELECT s.sid, s.sname, COUNT( sc.cid ) AS '总课程数', SUM( sc.sscore ) AS '总分数' FROM student s LEFT JOIN score sc ON s.sid = sc.sid GROUP BY s.sid, s.sname;

5、查询学过"张三"老师授课的同学的信息 

根据表结构关系来看,需要通过中间表 score 建立起学生和教师之间的关系 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT s.* FROM student s LEFT JOIN score sc ON s.sid = sc.sid WHERE sc.cid IN ( SELECT c.cid FROM course c WHERE c.tid = ( SELECT t.tid FROM teacher t WHERE t.tname = '张三' ));

清空表所有数据(慎用)

复制代码
1
truncate table 表名;

 

最后

以上就是激动奇异果最近收集整理的关于复杂的高频SQL语句&清空表SQL语句清空表所有数据(慎用)的全部内容,更多相关复杂内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(91)

评论列表共有 0 条评论

立即
投稿
返回
顶部