建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...
學生選課數據庫SQL語句45道練習題:
一、??????????? 設有一數據庫,包括四個表:學生表(Student)、課程表(Course)、成績表(Score)以及教師信息表(Teacher)。四個表的結構分別如表1-1的表(一)~表(四)所示,數據如表1-2的表(一)~表(四)所示。用SQL語句創建四個表并完成相關題目。
表1-1數據庫的表結構
表(一)Student (學生表)
屬性名
數據類型
可否為空
含 義
Sno
varchar (20)
否
學號(主碼)
Sname
varchar (20)
否
學生姓名
Ssex
varchar (20)
否
學生性別
Sbirthday
datetime
可
學生出生年月
Class
varchar (20)
可
學生所在班級
表(二)Course(課程表)??? 主外碼(主外鍵)
屬性名
數據類型
可否為空
含 義
Cno
varchar (20)
否
課程號(主碼)
Cname
varchar (20)
否
課程名稱
Tno
varchar (20)
否
教工編號(外碼)
表(三)Score(成績表)
屬性名
數據類型
可否為空
含 義
Sno
varchar (20)
否
學號(外碼)
Cno
varchar (20)
否
課程號(外碼)
Degree
Decimal(4,1)
可
成績
主碼:Sno+ Cno
表(四)Teacher(教師表)
屬性名
數據類型
可否為空
含 義
Tno
varchar (20)
否
教工編號(主碼)
Tname
varchar (20)
否
教工姓名
Tsex
varchar (20)
否
教工性別
Tbirthday
datetime
可
教工出生年月
Prof
varchar (20)
可
職稱
Depart
varchar (20)
否
教工所在部門
表1-2數據庫中的數據
表(一)Student
Sno
Sname
Ssex
Sbirthday
class
108
曾華
男
1977-09-01
95033
105
匡明
男
1975-10-02
95031
107
王麗
女
1976-01-23
95033
101
李軍
男
1976-02-20
95033
109
王芳
女
1975-02-10
95031
103
陸君
男
1974-06-03
95031
表(二)Course
Cno
Cname
Tno
3-105
計算機導論
825
3-245
操作系統
804
6-166
數字電路
856
9-888
高等數學
831
表(三)Score
Sno
Cno
Degree
103
3-245
86
105
3-245
75
109
3-245
68
103
3-105
92
105
3-105
88
109
3-105
76
101
3-105
64
107
3-105
91
108
3-105
78
101
6-166
85
107
6-166
79
108
6-166
81
表(四)Teacher
Tno
Tname
Tsex
Tbirthday
Prof
Depart
804
李誠
男
1958-12-02
副教授
計算機系
856
張旭
男
1969-03-12
講師
電子工程系
825
王萍
女
1972-05-05
助教
計算機系
831
劉冰
女
1977-08-14
助教
電子工程系
1、 查詢Student表中的所有記錄的Sname、Ssex和Class列。
2、 查詢教師所有的單位即不重復的Depart列。
3、 查詢Student表的所有記錄。
4、 查詢Score表中成績在60到80之間的所有記錄。
5、 查詢Score表中成績為85,86或88的記錄。
6、 查詢Student表中“95031”班或性別為“女”的同學記錄。
7、 以Class降序查詢Student表的所有記錄。
8、 以Cno升序、Degree降序查詢Score表的所有記錄。
9、 查詢“95031”班的學生人數。
10、?查詢Score表中的最高分的學生學號和課程號。(子查詢或者排序)
11、 查詢每門課的平均成績。
12、查詢Score表中至少有5名學生選修的并以3開頭的課程的平均分數。
13、查詢分數大于70,小于90的Sno列。
14、查詢所有學生的Sname、Cno和Degree列。
15、查詢所有學生的Sno、Cname和Degree列。
16、查詢所有學生的Sname、Cname和Degree列。
17、?查詢“95033”班學生的平均分。
18、 假設使用如下命令建立了一個grade表:
create table grade(low? int(3),upp? int(3),rank? char(1))
insert into grade values(90,100,’A’)
insert into grade values(80,89,’B’)
insert into grade values(70,79,’C’)
insert into grade values(60,69,’D’)
insert into grade values(0,59,’E’)
現查詢所有同學的Sno、Cno和rank列。
19、? 查詢選修“3-105”課程的成績高于“109”號同學成績的所有同學的記錄。
20、查詢score中選學多門課程的同學中分數為非最高分成績的記錄。
21、查詢成績高于學號為“109”、課程號為“3-105”的成績的所有記錄。
22、查詢和學號為108的同學同年出生的所有學生的Sno、Sname和Sbirthday列。
23、查詢“張旭“教師任課的學生成績。
24、查詢選修某課程的同學人數多于5人的教師姓名。
25、查詢95033班和95031班全體學生的記錄。
26、? 查詢存在有85分以上成績的課程Cno.
27、查詢出“計算機系“教師所教課程的成績表。
28、查詢“計算機系”與“電子工程系“不同職稱的教師的Tname和Prof。
29、查詢選修編號為“3-105“課程且成績至少高于選修編號為“3-245”的同學的Cno、Sno和Degree,并按Degree從高到低次序排序。
30、查詢選修編號為“3-105”且成績高于選修編號為“3-245”課程的同學的Cno、Sno和Degree.
31、?查詢所有教師和同學的name、sex和birthday.
32、查詢所有“女”教師和“女”同學的name、sex和birthday.
33、?查詢成績比該課程平均成績低的同學的成績表。
34、 查詢所有任課教師的Tname和Depart.
35?、 查詢所有未講課的教師的Tname和Depart.
36、查詢至少有2名男生的班號。
37、查詢Student表中不姓“王”的同學記錄。
38、查詢Student表中每個學生的姓名和年齡。
39、查詢Student表中最大和最小的Sbirthday日期值。
40、以班號和年齡從大到小的順序查詢Student表中的全部記錄。
41、查詢“男”教師及其所上的課程。
42、查詢最高分同學的Sno、Cno和Degree列。
43、查詢和“李軍”同性別的所有同學的Sname.
44、查詢和“李軍”同性別并同班的同學Sname.
45、查詢所有選修“計算機導論”課程的“男”同學的成績表。
答案:
1.select sname,ssex,class from student
2.select distinct depart from teacher
3.select * from student
4.select * from score where degree btween 60 and 80;
5.select * from score where degree in(85,86,88)
6.select * from student where class='95031' or ssex='女'
7.select * from student order by class desc
8.select * from score order by cno,degree desc
9.select count(*) from student where class='95031'
10.select sno,cno from score where degree=(select max(degree) from score)
select * from score order by degree desc limit 0,1
11.select cno,avg(degree) from score group by cno
12.select avg(degree) from score where cno like'3%' and cno in(select cno from score group by cno having count(*)>4)
select avg(degree) from score group by cno having count(*)>4 and cno like '3%'
13.select sno from score where degree>70 and degree<90
14.select student.sname,score.cno,score.degree from student,score where student.sno = score.sno
15.select score.sno,course.cname,score.degree from score,course where score.cno=course.cno
16.select student.sname,course.cname,degree from score,student,course where student.sno=score.sno and score.cno=course.cno
17.select avg(degree) from score where sno in(select sno from student where class='95033')
18.select sno,cno,rank from score,grade where degree between low and upp
19.(1)select * from score where cno = '3-105' and degree>(select max(degree) from score where sno='109')
(2)select * from score where cno = '3-105' and degree>(select max(degree) from score where sno='109' and cno='3-105')
20.(1)select * from score where sno in(select sno from score group by sno having count(*)>1) and degree
(2)select * from score a where sno in(select sno from score group by sno having count(*)>1) and degree
21.select * from score where degree>(select degree from score where sno='109' and cno='3-105')
22.select sno,sname,sbirthday from student where YEAR(sbirthday) = (select YEAR(sbirthday) from student where sno='108')
23.select * from score where cno in(select cno from course where tno =(select tno from teacher where tname='張旭'))
24.select tname from teacher where tno in(select tno from course where cno in(select cno from score group by cno having count(*)>5))
25.select * from student where class in('95033','95031')
26.select distinct cno from score where degree>85
27.select * from score where cno in(select cno from course where tno in(select tno from teacher where depart='計算機系'))
28.select tname,prof from teacher where depart='計算機系' and prof not in(select prof from teacher where depart='電子工程系')
union
select tname,prof from teacher where depart='電子工程系' and prof not in(select prof from teacher where depart='計算機系')
select tname,prof from teacher where prof not in( select prof from teacher where depart='計算機系' and prof in(select prof from teacher where depart='電子工程系'))
29.select * from score where cno='3-105' and degree>any(select degree from score where cno='3-245')
30.select * from score where cno='3-105' and degree>all(select degree from score where cno='3-245')
31.select sname,ssex,sbirthday from student
union
select tname,tsex,tbirthday from teacher
32.select sname,ssex,sbirthday from student where ssex='女'
union
select tname,tsex,tbirthday from teacher where tsex='女'
33.select * from score a where degree
34.select tname,depart from teacher where tno in(select tno from course where cno in(select cno from score))
35.select tname,depart from teacher where tno in(select tno from course where cno not in(select cno from score))
36.select class from student where ssex='男' group by class having count(*)>1
37.select * from student where sname not like '王%'
38.select sname,year(now())-year(sbirthday) from student
39.select max(sbirthday),min(sbirthday) from student
40.select * from student order by class desc,sbirthday
41.select tname,cname from teacher,course where teacher.tno = course.tno and tsex='男'
42.select * from score where degree=(select max(degree) from score)
43.select sname from student where ssex=(select ssex from student where sname='李軍')
44.select sname from student where ssex=(select ssex from student where sname='李軍') and class=(select class from student where sname='李軍')
45.select * from score where sno in(select sno from student where ssex='男') and cno in(select cno from course where cname='計算機導論')
總結:
1.聯合主鍵:主碼:aa+bb? 代碼:primary key(aa,bb)
2.若插入數據后出現????? [Err] 1050 - Table 'student' already exists
把原來的表刪除再運行代碼就行了
3.查詢不重復數據:select distinct a from b;
4.把一個表中Cno相同行分組并按Degree求平均值
select Cno,avg(Degree) from Score group by Cno having count(Cno)
5.至少高于:至少高于一個,用any
高于:高于所有,用all
mysql常用函數:
一、數學函數
數學函數主要用于處理數字,包括整型、浮點數等。
ABS(x)
返回x的絕對值
SELECT ABS(-1) -- 返回1
CEIL(x),CEILING(x)
返回大于或等于x的最小整數
SELECT CEIL(1.5) -- 返回2
FLOOR(x)
返回小于或等于x的最大整數
SELECT FLOOR(1.5) -- 返回1
RAND()
返回0->1的隨機數
SELECT RAND() --0.93099315644334
RAND(x)
返回0->1的隨機數,x值相同時返回的隨機數相同
SELECT RAND(2) --1.5865798029924
PI()
返回圓周率(3.141593)
SELECT PI() --3.141593
TRUNCATE(x,y)
返回數值x保留到小數點后y位的值(與ROUND最大的區別是不會進行四舍五入)
SELECT TRUNCATE(1.23456,3) -- 1.234
ROUND(x,y)
保留x小數點后y位的值,但截斷時要進行四舍五入
SELECT ROUND(1.23456,3) -- 1.235
POW(x,y).POWER(x,y)
返回x的y次方
SELECT POW(2,3) -- 8
SQRT(x)
返回x的平方根
SELECT SQRT(25) -- 5
EXP(x)
返回e的x次方
SELECT EXP(3) -- 20.085536923188
MOD(x,y)
返回x除以y以后的余數
SELECT MOD(5,2) -- 1
二、字符串函數
字符串函數是MySQL中最常用的一類函數,字符串函數主要用于處理表中的字符串。
函數說明
CHAR_LENGTH(s)
返回字符串s的字符數
SELECT CHAR_LENGTH('你好123') -- 5
CONCAT(s1,s2,...)
將字符串s1,s2等多個字符串合并為一個字符串
SELECT CONCAT('12','34') -- 1234
CONCAT_WS(x,s1,s2,...)
同CONCAT(s1,s2,...)函數,但是每個字符串直接要加上x
SELECT CONCAT_WS('@','12','34') -- 12@34
INSERT(s1,x,len,s2)
將字符串s2替換s1的x位置開始長度為len的字符串
SELECT INSERT('12345',1,3,'abc') -- abc45
UPPER(s),UCAASE(S)
將字符串s的所有字母變成大寫字母
SELECT UPPER('abc') -- ABC
LOWER(s),LCASE(s)
將字符串s的所有字母變成小寫字母
SELECT LOWER('ABC') -- abc
LEFT(s,n)
返回字符串s的前n個字符
SELECT LEFT('abcde',2) -- ab
RIGHT(s,n)
返回字符串s的后n個字符
SELECT RIGHT('abcde',2) -- de
LTRIM(s)去掉字符串s開始處的空格
RTRIM(s)去掉字符串s結尾處的空格
TRIM(s)去掉字符串s開始和結尾處的空格
SELECT TRIM('@' FROM '@@abc@@') -- abc
REPEAT(s,n)
將字符串s重復n次
SELECT REPEAT('ab',3) -- ababab
SPACE(n)返回n個空格
REPLACE(s,s1,s2)
將字符串s2替代字符串s中的字符串s1
SELECT REPLACE('abca','a','x') --xbcx
STRCMP(s1,s2)比較字符串s1和s2
SUBSTRING(s,n,len)獲取從字符串s中的第n個位置開始長度為len的字符串
LOCATE(s1,s),POSITION(s1 IN s)
從字符串s中獲取s1的開始位置
SELECT LOCATE('b', 'abc') -- 2
REVERSE(s)
將字符串s的順序反過來
SELECT REVERSE('abc') -- cba
FIELD(s,s1,s2...)
返回第一個與字符串s匹配的字符串位置
SELECT FIELD('c','a','b','c') -- 3
三、日期時間函數
MySQL的日期和時間函數主要用于處理日期時間。
函數說明
CURDATE(),CURRENT_DATE()
返回當前日期
SELECT CURDATE()
->2014-12-17
CURTIME(),CURRENT_TIME
返回當前時間
SELECT CURTIME()
->15:59:02
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),
SYSDATE(),LOCALTIMESTAMP()
返回當前日期和時間
SELECT NOW()
->2014-12-17 15:59:02
YEAR(d),
MONTH(d)
DAY(d)
返回日期d中的月份值,1->12
SELECT MONTH('2011-11-11 11:11:11')
->11
MONTHNAME(d)
返回日期當中的月份名稱,如Janyary
SELECT MONTHNAME('2011-11-11 11:11:11')
->November
DAYNAME(d)
返回日期d是星期幾,如Monday,Tuesday
SELECT DAYNAME('2011-11-11 11:11:11')
->Friday
DAYOFWEEK(d)
日期d今天是星期幾,1星期日,2星期一
SELECT DAYOFWEEK('2011-11-11 11:11:11')
->6
WEEKDAY(d)
日期d今天是星期幾,
0表示星期一,1表示星期二
WEEK(d),WEEKOFYEAR(d)
計算日期d是本年的第幾個星期,范圍是0->53
SELECT WEEK('2011-11-11 11:11:11')
->45
DAYOFYEAR(d)
計算日期d是本年的第幾天
SELECT DAYOFYEAR('2011-11-11 11:11:11')
->315
DAYOFMONTH(d)
計算日期d是本月的第幾天
SELECT DAYOFMONTH('2011-11-11 11:11:11')
->11
QUARTER(d)
返回日期d是第幾季節,返回1->4
SELECT QUARTER('2011-11-11 11:11:11')
->4
HOUR(t)
返回t中的小時值
SELECT HOUR('1:2:3')
->1
MINUTE(t)
返回t中的分鐘值
SELECT MINUTE('1:2:3')
->2
SECOND(t)
返回t中的秒鐘值
SELECT SECOND('1:2:3')
->3
四、系統信息函數
系統信息函數用來查詢MySQL數據庫的系統信息。
函數作用
VERSION()
返回數據庫的版本號
SELECT VERSION()
->5.0.67-community-nt
CONNECTION_ID() 返回服務器的連接數
DATABASE()、SCHEMA返回當前數據庫名
USER()、SYSTEM_USER()
返回當前用戶
五、加密函數
加密函數是MySQL用來對數據進行加密的函數。
1、PASSWORD(str)
該函數可以對字符串str進行加密,一般情況下,PASSWORD(str)用于給用戶的密碼加密。
SELECT PASSWORD('123')
->*23AE809DDACAF96AF0FD78ED04B6A265E05AA257
2、MD5
MD5(str)函數可以對字符串str進行散列,可以用于一些普通的不需要解密的數據加密。
SELECT md5('123')
->202cb962ac59075b964b07152d234b70
3、ENCODE(str,pswd_str)與DECODE(crypt_str,pswd_str)
ENCODE函數可以使用加密密碼pswd_str來加密字符串str,加密結果是二進制數,需要使用BLOB類型的字段保存。該函數與DECODE是一對,需要同樣的密碼才能夠解密。
SELECT ENCODE('123','xxoo')
->;vx
SELECT DECODE(';vx','xxoo')
->123
insert into login values('lch','alvin',encode('123','xxoo'),'50')
select Name,decode(Password,'xxoo') from login where username='lch'
總結
以上是生活随笔為你收集整理的建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东方卫视收视率查询_肖战被嘲撑不起跨年收
- 下一篇: linux cmake编译源码,linu