当前位置: 首页>編程日記>正文

mysql sql练习题_Mysql----sql语句练习题(一)

mysql sql练习题_Mysql----sql语句练习题(一)

以下这篇帖子,就当是sql语句练习,适合入门新手,练练这些sql语句,也有处于打牢数据库的基础。

前期的准备工作,给出三张表,student,course,sc,我们可以清楚的看到每张表的主键,以及表与表之间的字段联系

20200718151149251j0ruuel3nry2mkv_2.png

打开每张表,可以看到具体的字段信息:

20200718151149251j0ruuel3nry2mkv_1.png

20200718151149251j0ruuel3nry2mkv_3.png

20200718151149251j0ruuel3nry2mkv_0.png

以上就是三张表,至于怎么创建,有两种方法,要么你自己写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

单表查询

一、带*号

查询全体学生的详细记录

二、带计算、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升序)

①将学生按照年龄升序排列

②查询选修了'C002'课程的学生的学号以及成绩,查询结果按照成绩降序排列

③查询全体学生的信息,查询结果按所在的系名升序排列,同一个系的学生按照年龄降序排列

六、聚合函数汇总数据(count sum avg max min等)

①统计学生总人数

②统计选了课程的学生人数

③统计学号为'0811101'的学生的考试总成绩

④统计'0831103'的学生的考试平均成绩

⑤查询'C001'课程考试成绩的最高分和最低分

七、分组(group by 和 having)

1.group by

①统计每门课程的选课人数,列出课程号和选课人数

②统计每个学生的选课门数和平均成绩

③统计每个系的学生人数和平均年龄

④统计每个系的女生人数

⑤统计每个系的男生人数和女生人数以及男生的最大年龄和女生的最大年龄,结果按照系名升序排列

2.HAVING

①查询选课门数超过3门的学生的学号和选课门数

②查询计算机系和信息管理系每个系的学生人数

③查询每个系年龄小于等于20的学生人数

接下来,把所有最基础的单表查询的结果,放出来,供有需要的同学借鉴使用

-- 查询全体学生的详细记录

SELECT* FROM student

/*

二、带计算、as列名

*/

-- 查询全体学生的姓名以及出生年份

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'的学生的考试总成绩

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


https://www.fengoutiyan.com/post/13467.html

相关文章:

  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機