Mysql----sql语句练习题(⼀)
以下这篇帖⼦,就当是sql语句练习,适合⼊门新⼿,练练这些sql语句,也有处于打牢数据库的基础。
前期的准备⼯作,给出三张表,student,course,sc,我们可以清楚的看到每张表的主键,以及表与表之间的字段联系
打开每张表,可以看到具体的字段信息:
以上就是三张表,⾄于怎么创建,有两种⽅法,要么你⾃⼰写sql语句⾃⼰创建,并插⼊⼀些数据,要么你就直接⼿动在表格⾥添加,然后点击Refresh
CREATE TABLE `student` (
`Sno` char(10) NOT NULL,
`Sname` varchar(20) NOT NULL,
`Ssex` char(5) DEFAULT NULL,
`Sage` tinyint(4) DEFAULT NULL,
`Sdept` varchar(20) DEFAULT NULL,
PRIMARY KEY (`Sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `course` (
`Cno` char(10) NOT NULL,
`Cname` varchar(20) NOT NULL,
`Credit` tinyint(4) DEFAULT NULL,
`Semester` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `sc` (
`Sno` char(10) NOT NULL,
`Cno` char(6) NOT NULL,
`Grade` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`Sno`,`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
单表查询
server是什么词性⼀、带*号
查询全体学⽣的详细记录
⼆、带计算、as列名
查询全体学⽣的姓名以及出⽣年份
三、去重distinct
查询学⽣的学号(去掉重复)
四、where条件查询
1.⽐⼤⼩(> < >= !=等相关⼤⼩符号)
①查询计算机系所有学⽣的姓名
②查询所有年龄在20岁以下的学⽣姓名以及年龄
③查询考试成绩有不及格课程的学⽣的学号
2.确定范围(between and)
①查询年龄在20~23岁的学⽣的姓名、所在系和年龄
②查询年龄不在20~23岁的学⽣的姓名、所在系和年龄
③对于⽇期类型的基数,也可以使⽤:select id ,type from titles where pubdate between '2014/7/17' and '2014/12/15'
3.确定集合((常量1,常量2,常量3......))
①查询信息管理系、通信⼯程系和计算机系学⽣的姓名和性别
②查询信息管理系、通信⼯程系和计算机系三个系之外的其他系的学⽣的姓名和性别
4.字符串匹配(like)
①查询姓'张'的学⽣的详细信息
②查询姓'张'、姓'李'、姓'刘'的学⽣的详细信息
③查询名字的第2个字为'⼩'或者'⼤'的学⽣的姓名和学号
④查询所有不姓'刘'的学⽣姓名
⑤在student表中,查询学号的最后⼀位不是2、3、5的学⽣的详细信息
5.空值查询
①查询没有考试的学⽣的学号和相应的课程号
②查询所有已经考试了的学⽣的学号、课程号和考试成绩
6.多重条件查询
①查询计算机系年龄20岁以下的学⽣和姓名
②查询计算机系和信息管理系学⽣中年龄在18~20的学⽣的学号、姓名、所在系和年龄
五、排序(desc降序和 asc升序)
html span标签属性 ①将学⽣按照年龄升序排列
②查询选修了'C002'课程的学⽣的学号以及成绩,查询结果按照成绩降序排列
③查询全体学⽣的信息,查询结果按所在的系名升序排列,同⼀个系的学⽣按照年龄降序排列
六、聚合函数汇总数据(count sum avg max min等)
①统计学⽣总⼈数
②统计选了课程的学⽣⼈数
③统计学号为'0811101'的学⽣的考试总成绩
④统计'0831103'的学⽣的考试平均成绩
⑤查询'C001'课程考试成绩的最⾼分和最低分
七、分组(group by 和 having)
1.group by
①统计每门课程的选课⼈数,列出课程号和选课⼈数
②统计每个学⽣的选课门数和平均成绩
③统计每个系的学⽣⼈数和平均年龄
④统计每个系的⼥⽣⼈数
⑤统计每个系的男⽣⼈数和⼥⽣⼈数以及男⽣的最⼤年龄和⼥⽣的最⼤年龄,结果按照系名升序排列
2.HAVING
①查询选课门数超过3门的学⽣的学号和选课门数
mysql面试题集合
②查询计算机系和信息管理系每个系的学⽣⼈数
③查询每个系年龄⼩于等于20的学⽣⼈数
接下来,把所有最基础的单表查询的结果,放出来,供有需要的同学借鉴使⽤
-- 查询全体学⽣的详细记录
SELECT* FROM student
/*
⼆、带计算、as列名
*/
-- 查询全体学⽣的姓名以及出⽣年份
android 系统应用开发SELECT Sname AS 姓名,2020 - Sage AS 出⽣年份 FROM student
/*
三、去重distinct
*/
-- 查询学⽣的学号(去掉重复)
SELECT DISTINCT Sno FROM sc
/*
四、where条件查询
*/
-- 查询计算机系所有学⽣的姓名
SELECT Sname FROM student WHERE Sdept = '计算机系'
-- 查询所有年龄在20岁以下的学⽣姓名以及年龄
SELECT Sname,Sage FROM student WHERE Sage < 20
-
- 查询考试成绩有不及格课程的学⽣的学号
SELECT DISTINCT Sno FROM sc WHERE grade < 60
-- 查询年龄在20~23岁的学⽣的姓名、所在系和年龄
SELECT Sname,Sdept,Sage FROM student WHERE Sage BETWEEN 20 AND 23
-- 查询年龄不在20~23岁的学⽣的姓名、所在系和年龄
SELECT Sname,Sdept,Sage FROM student WHERE Sage NOT BETWEEN 20 AND 23
-- 查询信息管理系、通信⼯程系和计算机系学⽣的姓名和性别
SELECT Sname,Ssex FROM student WHERE sdept IN ('信息管理系','通信⼯程系','计算机系')
-- 查询信息管理系、通信⼯程系和计算机系三个系之外的其他系的学⽣的姓名和性别
SELECT Sname,Ssex FROM student WHERE sdept NOT IN ('信息管理系','通信⼯程系','计算机系')
-- 查询姓'张'的学⽣的详细信息
SELECT * FROM student WHERE Sname LIKE '张%'
-- 查询姓'张'、姓'李'、姓'刘'的学⽣的详细信息
SELECT * FROM student WHERE Sname LIKE '[张李刘]%'
-- 查询名字的第2个字为'⼩'或者'⼤'的学⽣的姓名和学号
SELECT Sname,Sno FROM student WHERE Sname LIKE '_[⼩⼤]%'
-- 查询所有不姓'刘'的学⽣姓名
SELECT Sname FROM student WHERE Sname NOT LIKE '刘%'
-- 在student表中,查询学号的最后⼀位不是2、3、5的学⽣的详细信息
SELECT* FROM student WHERE Sno LIKE '%[^235]'
-- 查询没有考试的学⽣的学号和相应的课程号
SELECT Sno,Cno FROM sc WHERE Grade IS NULL
-
- 查询所有已经考试了的学⽣的学号、课程号和考试成绩
SELECT Sno,Cno FROM sc WHERE Grade IS NOT NULL
-- 查询计算机系年龄20岁以下的学⽣和姓名
SELECT Sname,Sage FROM student WHERE sdept IN ('计算机系') AND Sage < 20
-- 查询计算机系和信息管理系学⽣中年龄在18~20的学⽣的学号、姓名、所在系和年龄
SELECT Sno,Sname,Sdept,Sage FROM student WHERE sdept IN ('计算机系','信息管理系') AND Sage BETWEEN 18 AND 20
/*
五、排序(desc降序和 asc升序)
*/
-- 如果没有指定升序还是降序,那么默认为升序asc
SELECT * FROM student ORDER BY Sage
-- 以下是按年龄降序
SELECT * FROM student ORDER BY Sage DESC
-- 查询选修了'C002'课程的学⽣的学号以及成绩,查询结果按照成绩降序排
SELECT Sno,Grade FROM sc WHERE Cno = 'C002'ORDER BY Grade DESC
-- 查询全体学⽣的信息,查询结果按所在的系名升序排列,同⼀个系的学⽣按照年龄降序排列
-- 下⾯这种是错误写法
SELECT * FROM student
ORDER BY Sdept ASC
AND ORDER BY Sage DESC (错误)
-- 正确写法如下:
SELECT * FROM student ORDER BY Sdept ASC, Sage DESC
/
*
六、聚合函数汇总数据(count sum avg max min等)
*/
-- 统计学⽣总⼈数
SELECT COUNT(*) AS 学⽣总⼈数 FROM student
-- 统计选了课程的学⽣⼈数
SELECT COUNT(DISTINCT Sno) AS 已选课程的学⽣⼈数 FROM sc -- 这⾥要注意,因为⼀个学⽣可以选择多门课程,所以要去重-- 统计学号为'0811101'的学⽣的考试总成绩
mysql修改表名字符常量和字符串有什么区别SELECT SUM(Grade) AS 总成绩 FROM sc WHERE Sno = '0811101'
-- 统计'0831103'的学⽣的考试平均成绩
SELECT AVG(Grade) AS 平均成绩 FROM sc WHERE Sno = '0831103'
-- 查询'C001'课程考试成绩的最⾼分和最低分
SELECT MAX(Grade) 最⾼分,MIN(Grade) 最低分 FROM sc WHERE Cno = 'C001' -- 此时要不要AS ⽆所谓,要也⾏,不要也⾏
/*
七、分组(group by 和 having)
*/
-- 统计每门课程的选课⼈数,列出课程号和选课⼈数
SELECT COUNT(Sno) AS 选课⼈数,Cno AS 课程号 FROM sc GROUP BY Cno
SELECT COUNT(*) AS 选课⼈数,Cno AS 课程号 FROM sc GROUP BY Cno
-- 统计每个学⽣的选课门数和平均成绩
SELECT COUNT(*) AS 选课门数,AVG(Grade) AS 平均成绩,Sno AS 学号 FROM sc GROUP BY Sno
-- 统计每个系的学⽣⼈数和平均年龄
SELECT COUNT(*) 学⽣⼈数 ,AVG(Sage) AS 平均年龄, Sdept AS 院系 FROM student GROUP BY sdept
-- 统计每个系的⼥⽣⼈数
SELECT COUNT(*) ⼥⽣⼈数,sdept AS 院系 FROM student WHERE Ssex = '⼥' GROUP BY sdept
-- 统计每个系的男⽣⼈数和⼥⽣⼈数以及男⽣的最⼤年龄和⼥⽣的最⼤年龄,结果按照系名升序排列
SELECT Sdept, COUNT(*) ⼈数,Ssex,MAX(Sage) 最⼤年龄 FROM student GROUP BY Sdept,Ssex ORDER BY Sdept
-- 查询选课门数超过3门的学⽣的学号和选课门数
SELECT Sno,COUNT(*) 选课门数 FROM sc
GROUP BY Sno
HAVING COUNT(*) > 3
-- 查询计算机系和信息管理系每个系的学⽣⼈数
-- 思路:先出两个系的所有⼈数,再根据院系进⾏分组SELECT Sdept, COUNT(*) 学⽣⼈数 FROM student
WHERE Sdept IN ('计算机系','信息管理系')
GROUP BY Sdept
-- 查询每个系年龄⼩于等于20的学⽣⼈数
SELECT Sdept,COUNT(*)学⽣⼈数 FROM student
WHERE Sage <= 20
GROUP BY Sdept
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论