mysql練習題

Student(S#,Sname,Sage,Ssex) 學生表?

Course(C#,Cname,T#) 課程表?

SC(S#,C#,score) 成績表?

Teacher(T#,Tname) 教師表?

問題:?

1、查詢“001”課程比“002”課程成績高的所有學生的學號;?

select a.S# from (select s#,score from SC where C#=’001’) a,(select s#,score?

from SC where C#=’002’) b?

where a.score>b.score and a.s#=b.s#;?

2、查詢平均成績大于60分的同學的學號和平均成績;?

select S#,avg(score)?重點內容?

from sc?

group by S# having avg(score) >60;?

3、查詢所有同學的學號、姓名、選課數、總成績;?

select Student.S#,Student.Sname,count(SC.C#),sum(score)?

from Student left Outer join SC on Student.S#=SC.S#?

group by Student.S#,Sname?

4、查詢姓“李”的老師的個數;?

select count(distinct(Tname))?

from Teacher?

where Tname like ‘李%’;?

5、查詢沒學過“葉平”老師課的同學的學號、姓名;?

select Student.S#,Student.Sname?

from Student?

where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’葉平’);?

6、查詢學過“001”并且也學過編號“002”課程的同學的學號、姓名;?

select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#=’001’and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002’);?

7、查詢學過“葉平”老師所教的所有課的同學的學號、姓名;?

select S#,Sname?

from Student?

where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’葉平’ group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname=’葉平’));?

8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;?

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#=’002’) score2?

from Student,SC where Student.S#=SC.S# and C#=’001’) S_2 where score2

-------------------------------------------------------------------------------------------------------------------------------------------------------------

--1.學生表

Student(S,Sname,Sage,Ssex) --S 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別

--2.課程表?

Course(C,Cname,T) --C --課程編號,Cname 課程名稱,T 教師編號

--3.教師表?

Teacher(T,Tname) --T 教師編號,Tname 教師姓名

--4.成績表?

SC(S,C,score) --S 學生編號,C 課程編號,score 分數

*/

--創建測試數據

create table Student(Svarchar(10),Sname varchar(10),Sage datetime,Ssex nvarchar(10))

insert into Student values('01' , '趙雷' , '1990-01-01' , '男')

insert into Student values('02' , '錢電' , '1990-12-21' , '男')

insert into Student values('03' , '孫風' , '1990-05-20' , '男')

insert into Student values('04' , '李云' , '1990-08-06' , '男')

insert into Student values('05' , '周梅' , '1991-12-01' , '女')

insert into Student values('06' , '吳蘭' , '1992-03-01' , '女')

insert into Student values('07' , '鄭竹' , '1989-07-01' , '女')

insert into Student values('08' , '王菊' , '1990-01-20' , '女')

create table Course(Cvarchar(10),Cname,varchar(10),T varchar(10))

insert into Course values('01' , '語文' , '02')

insert into Course values('02' , '數學' , '01')

insert into Course values('03' , '英語' , '03')

create table Teacher(T varchar(10),Tname,varchar(10))

insert into Teacher values('01' , '張三')

insert into Teacher values('02' , '李四')

insert into Teacher values('03' , '王五')

create table SC(S varchar(10),Cvarchar(10),score decimal(18,1))

insert into SC values('01' , '01' , 80)

insert into SC values('01' , '02' , 90)

insert into SC values('01' , '03' , 99)

insert into SC values('02' , '01' , 70)

insert into SC values('02' , '02' , 60)

insert into SC values('02' , '03' , 80)

insert into SC values('03' , '01' , 80)

insert into SC values('03' , '02' , 80)

insert into SC values('03' , '03' , 80)

insert into SC values('04' , '01' , 50)

insert into SC values('04' , '02' , 30)

insert into SC values('04' , '03' , 20)

insert into SC values('05' , '01' , 76)

insert into SC values('05' , '02' , 87)

insert into SC values('06' , '01' , 31)

insert into SC values('06' , '03' , 34)

insert into SC values('07' , '02' , 89)

insert into SC values('07' , '03' , 98)

mysql...

--1、查詢"01"課程比"02"課程成績高的學生的信息及課程分數

SELECT a.*,b.score AS'01分數',c.scoreAS '02分數'

FROM student a

INNER JOIN sc b

ON a.s=b.s AND b.c='01'

INNER JOIN sc c

ON a.s=c.s AND c.c='02'

WHERE b.score>c.score

--2、查詢"01"課程比"02"課程成績低的學生的信息及課程分數

--3、查詢平均成績大于等于60分的同學的學生編號和學生姓名和平均成績

SELECT a.s

?????? ,a.sname

?????? ,AVG(b.score) AS avgnum

FROM student a

INNER JOIN sc b

ON a.s=b.s

GROUP BY a.s

?????? ,a.sname

HAVING AVG(b.score)>60

--4、查詢平均成績小于60分的同學的學生編號和學生姓名和平均成績

--5、查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績

SELECT a.s

?????? ,a.sname

?????? ,COUNT(b.c)

?????? ,SUM(b.score)

FROM student a

LEFT JOIN sc b

ON a.s=b.s

GROUP BY 1,2

--6、查詢"李"姓老師的數量?

SELECT COUNT(1) FROM teacherWHERE tname LIKE '李%'

--7、查詢學過"張三"老師授課的同學的信息?

SELECT a.*

FROM student a

INNER JOIN sc b

ON a.s=b.s

INNER JOIN course c

ON b.c=c.c

INNER JOIN teacher d

ON c.t=d.t

WHERE d.tname='張三'

GROUP BY 1,2,3,4

--方法2

SELECT a.*

FROM student a

LEFT JOIN (

?????? SELECT a.*

?????? FROM student a

?????? INNER JOIN sc b

?????? ON a.s=b.s

?????? INNER JOIN course c

?????? ON b.c=c.c

?????? INNER JOIN teacher d

?????? ON c.t=d.t

?????? WHERE d.tname='張三'

?????? GROUP BY 1,2,3,4

)b

ON a.s=b.s

WHERE b.s IS NULL

--8、查詢沒學過"張三"老師授課的同學的信息?

SELECT a.*

FROM student a

LEFT JOIN sc b

ON a.s=b.s

WHERE NOT EXISTS(

????????????? SELECT *

????????????? FROM course aa

????????????? INNER JOIN teacher b

????????????? ON aa.t=b.t

????????????? INNER JOIN sc c

????????????? ON aa.c=c.c

????????????? WHERE b.tname='張三'

????????????? AND c.s=a.s

?????? )

GROUP BY 1,2,3,4

--9、查詢學過編號為"01"并且也學過編號為"02"的課程的同學的信息

SELECT a.*

FROM student a

INNER JOIN sc b

ON a.s=b.s AND b.c='01'

INNER JOIN sc c

ON a.s=c.s AND c.c='02'

--10、查詢學過編號為"01"但是沒有學過編號為"02"的課程的同學的信息

select *

from student a

left join sc b

on a.s=b.s and b.c='01'

left join sc c

on a.s=c.s and c.c='02'

where b.c='01' and c.c is null

--11、查詢沒有學全所有課程的同學的信息?

SELECT a.*

FROM student a

LEFT JOIN sc b

ON a.s=b.s

LEFT JOIN (SELECT COUNT(1) anumFROM course) c

ON 1=1

GROUP BY 1,2,3,4

HAVING MAX(c.anum)>COUNT(b.c)

--12、查詢至少有一門課與學號為"01"的同學所學相同的同學的信息?

SELECT a.*

FROM student a

INNER JOIN sc b

ON a.s=b.s

WHERE EXISTS(

??? SELECT 1 FROM sc WHERE s='01' AND c=b.c

)

GROUP BY 1,2,3,4

--13、查詢和"01"號的同學學習的課程完全相同的其他同學的信息?

SELECTa.s,a.sname,a.sage,a.ssex

FROM (SELECT a.*,COUNT(b.c) ASsnum

?????? FROM student a

?????? INNER JOIN sc b

?????? ON a.s=b.s

?????? WHERE EXISTS(

?????? ??? SELECT 1 FROM scWHERE s='01' AND c=b.c

?????? )

?????? GROUP BY 1,2,3,4)a

INNER JOIN (SELECTa.*,COUNT(b.c) AS anum

?????? FROM student a

?????? INNER JOIN sc b

?????? ON a.s=b.s

?????? GROUP BY 1,2,3,4)b

ON a.s=b.s

INNER JOIN (SELECT COUNT(1) ASnum1 FROM sc WHERE s='01')c

ON 1=1

WHERE a.snum=b.anum ANDa.snum=c.num1

--方法二



SELECT a.*

?????? ,COUNT(b.c) AS anum

?????? ,SUM(CASE WHEN EXISTS(SELECT 1 FROM sc WHERE s='01' AND c=b.c)THEN 1 ELSE 0 END) AS snum

?????? ,MAX(c.num1) AS num1

FROM student a

INNER JOIN sc b

ON a.s=b.s

INNER JOIN (SELECT COUNT(1) ASnum1 FROM sc WHERE s='01')c

ON 1=1

GROUP BY 1,2,3,4

HAVING anum=snum AND anum=num1

--14、查詢沒學過"張三"老師講授的任一門課程的學生姓名?

SELECT a.*

FROM student a

LEFT JOIN(

?????? SELECT a.s

?????? FROM student a

?????? LEFT JOIN sc b

?????? ON a.s=b.s

?????? LEFT JOIN course c

?????? ON b.c=c.c

?????? LEFT JOIN teacher d

?????? ON c.t=d.t AND d.tname='張三'

?????? WHERE d.t IS NOT NULL

?????? )b

ON a.s=b.s

WHERE b.s IS NULL

--15、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績?

SELECT a.s

?????? ,a.sname

?????? ,AVG(b.score)

FROM student a

INNER JOIN sc b

ON a.s=b.s

GROUP BY 1,2

HAVING SUM(CASE WHENb.score>=60 THEN 0 ELSE 1 END)>=2

--16、檢索"01"課程分數小于60,按分數降序排列的學生信息

SELECT a.*

?????? ,b.score

FROM student a

INNER JOIN sc b

ON a.s=b.s

WHERE

? b.c='01'

? AND b.score<60

ORDER BY b.score DESC

--17、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績

SELECT a.*

?????? ,SUM(CASE WHEN b.c='01' THEN b.scoreELSE 0 END) AS s01

?????? ,SUM(CASE WHEN b.c='02' THEN b.scoreELSE 0 END) AS s02

?????? ,SUM(CASE WHEN b.c='03' THEN b.score ELSE0 END) AS s03

?????? ,AVG(CASE WHEN b.score IS NULL THEN 0ELSE b.score END) avs

FROM student a

LEFT JOIN sc b

ON a.s=b.s

GROUP BY 1,2,3,4

ORDER BY avs DESC

--18、查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率

--及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90

SELECT a.c

?????? ,a.cname

?????? ,MAX(b.score)

?????? ,MIN(b.score)

?????? ,AVG(b.score)

?????? ,SUM(CASE WHEN b.score>=60 THEN 1ELSE 0 END)/COUNT(1)

?????? ,SUM(CASE WHEN b.score>=70 ANDb.score<80 THEN 1 ELSE 0 END)/COUNT(1)

?????? ,SUM(CASE WHEN b.score>=80 ANDb.score<90 THEN 1 ELSE 0 END)/COUNT(1)

?????? ,SUM(CASE WHEN b.score>=90 THEN 1ELSE 0 END)/COUNT(1)

FROM course a

INNER JOIN sc b

ON a.c=b.c

GROUP BY 1,2

--19、按各科成績進行排序,并顯示排名

SET @rn:=0;

SELECT a.*,@rn:=@rn+1

FROM(

??? SELECT a.*,b.score

??? FROM course a

??? INNER JOIN sc b

??? ON a.c=b.c

??? WHERE a.c='01'

??? ORDER BY b.c,score DESC

)a

--20、查詢學生的總成績并進行排名

SELECT a.*

?????? ,COUNT(b.c)+1 asall

FROM sc a

LEFT JOIN sc b

ON a.c=b.c ANDa.score<b.score

GROUP BY 1,2,3

ORDER BY a.c,asall

--21、查詢不同老師所教不同課程平均分從高到低顯示?

SELECT a.*

?????? ,b.cname

?????? ,AVG(c.score) ascore

FROM teacher a

INNER JOIN course b

ON a.t=b.t

INNER JOIN sc c

ON b.c=c.c

GROUP BY 1,2,3

ORDER BY ascore DESC

--22、查詢所有課程的成績第2名到第3名的學生信息及該課程成績

SELECT a.*,b.cname,b.score

FROM student a

INNER JOIN (

?????? SELECT a.*

?????? ?????? ,c.cname

?????? ?????? ,COUNT(b.c)+1 AStp

?????? FROM sc a

?????? LEFT JOIN sc b

?????? ON a.c=b.c AND a.score<b.score

?????? LEFT JOIN course c

?????? ON a.c=c.c

?????? GROUP BY 1,2,3,4

?????? HAVING COUNT(b.c)+1 IN(2,3)

?????? ORDER BY a.c,tp)b

ON a.s=b.s

--23、統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[0-60]及所占百分比?

SELECT a.c

?????? ,a.cname

?????? ,SUM(CASE WHEN b.score<=100 ANDb.score>85 THEN 1 ELSE 0 END) AS '[100-85]'

?????? ,SUM(CASE WHEN b.score<=85 ANDb.score>70 THEN 1 ELSE 0 END) AS '[85-70]'

?????? ,SUM(CASE WHEN b.score<=70 ANDb.score>60 THEN 1 ELSE 0 END) AS '[70-60]'

?????? ,SUM(CASE WHEN b.score<=60 ANDb.score>0 THEN 1 ELSE 0 END) AS '[60-0]'


?????? ,SUM(CASE WHEN b.score<=100 ANDb.score>85 THEN 1 ELSE 0 END)/COUNT(1) AS '[100-85]%'

?????? ,SUM(CASE WHEN b.score<=85 ANDb.score>70 THEN 1 ELSE 0 END)/COUNT(1) AS '[85-70]%'

?????? ,SUM(CASE WHEN b.score<=70 ANDb.score>60 THEN 1 ELSE 0 END)/COUNT(1) AS '[70-60]%'

?????? ,SUM(CASE WHEN b.score<=60 ANDb.score>0 THEN 1 ELSE 0 END)/COUNT(1) AS '[60-0]%'

FROM course a

INNER JOIN sc b

ON a.c=b.c

GROUP BY 1,2

--24、查詢學生平均成績及其名次?

SELECT a.*

?????? ,COUNT(b.s)+1

FROM (

?????? SELECT a.*,AVG(CASE WHEN b.score IS NULL THEN 0 ELSE b.scoreEND) AS ascore

?????? FROM student a

?????? LEFT JOIN sc b

?????? ON a.s=b.s

?????? GROUP BY 1,2,3,4

????? )a

LEFT JOIN(

?????? SELECT a.*,AVG(CASE WHEN b.score IS NULL THEN 0 ELSE b.scoreEND) AS ascore

?????? FROM student a

?????? LEFT JOIN sc b

?????? ON a.s=b.s

?????? GROUP BY 1,2,3,4

????? )b

ON a.ascore<b.ascore

GROUP BY 1,2,3,4,5

--25、查詢各科成績前三名的記錄

SELECT a.*,COUNT(b.c)+1 ASascore

FROM sc a

LEFT JOIN sc b

ON a.c=b.c ANDa.score<b.score

GROUP BY 1,2,3

HAVING ascore<=3

ORDER BY a.c,ascore

--26、查詢每門課程被選修的學生數?

SELECT a.*

?????? ,COUNT(b.s)

FROM course a

LEFT JOIN sc b

ON a.c=b.c

GROUP BY 1,2,3

--27、查詢出只有兩門課程的全部學生的學號和姓名??

SELECT a.*

?????? ,COUNT(b.c)

FROM student a

LEFT JOIN sc b

ON a.s=b.s

GROUP BY 1,2,3,4

HAVING COUNT(b.c)=2

--28、查詢男生、女生人數?

--29、查詢名字中含有"風"字的學生信息

--30、查詢同名同性學生名單,并統計同名人數

?SELECT sname

?????? ,ssex

?????? ,COUNT(1)

FROM student

GROUP BY 1,2

HAVING COUNT(1)>1

--31、查詢1990年出生的學生名單(注:Student表中Sage列的類型是datetime)?

SELECT * FROM student WHEREYEAR(sage)=1990

--32、查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號

SELECT a.*

?????? ,AVG(b.score) ascore

FROM course a

LEFT JOIN sc b

ON a.c=b.c

GROUP BY 1,2,3

ORDER BYascore DESC,a.c

--33、查詢平均成績大于等于85的所有學生的學號、姓名和平均成績?

SELECT a.*

?????? ,AVG(b.score) ascore

FROM student a

LEFT JOIN sc b

ON a.s=b.s

GROUP BY 1,2,3,4

HAVING ascore>=85

--34、查詢課程名稱為"數學",且分數低于60的學生姓名和分數?

SELECT c.*

FROM course a

LEFT JOIN sc b

ON a.c=b.c

LEFT JOIN student c

ON b.s=c.s

WHERE a.cname='數學'

AND b.score<60

--35、查詢所有學生的課程及分數情況;?

SELECT *

FROM sc a

INNER JOIN student b

ON a.s=b.s

INNER JOIN course c

ON a.c=c.c

--36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;?

SELECT b.sname

?????? ,c.cname

?????? ,a.score

FROM sc a

INNER JOIN student b

ON a.s=b.s

INNER JOIN course c

ON a.c=c.c

WHERE a.score>70

--37、查詢不及格的課程

--38、查詢課程編號為01且課程成績在80分以上的學生的學號和姓名;?

SELECT a.*

FROM student a

INNER JOIN sc b

ON a.s=b.s

WHERE b.c='01' AND b.score>80

--39、求每門課程的學生人數?

--40、查詢選修"張三"老師所授課程的學生中,成績最高的學生信息及其成績

SELECT a.*,b.score

FROM student a

INNER JOIN sc b

ON a.s=b.s

INNER JOIN(

?????? SELECT c.c

?????? ?????? ,MAX(c.score) ASmaxscore

?????? FROM teacher a

?????? INNER JOIN course b

?????? ON a.t=b.t

?????? INNER JOIN sc c

?????? ON b.c=c.c

?????? WHERE a.tname='張三'

?????? GROUP BY c)c

ON b.c=c.c ANDb.score=c.maxscore

--41、查詢不同課程成績相同的學生的學生編號、課程編號、學生成績?

SELECT a.s

?????? ,a.c

?????? ,a.score

FROM sc a

INNER JOIN (

?????? SELECT a.score

?????? ?????? ,b.s

?????? ?????? ,COUNT(1)

?????? FROM sc a

?????? INNER JOIN student b

?????? ON a.s=b.s

?????? GROUP BY a.score,b.s

?????? HAVING COUNT(1)>1

)b

ON a.s=b.s AND a.score=b.score


方法二

SELECT a.*

FROM sc a

LEFT JOIN sc b

ON a.s=b.s AND a.score=b.scoreAND a.c<>b.c

GROUP BY 1,2,3

HAVING COUNT(b.s)>0

--42、查詢每門功成績最好的前兩名?

--43、統計每門課程的學生選修人數(超過5人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列 ?

SELECT a.c

?????? ,COUNT(1) AS pnum

FROM sc a

GROUP BY 1

HAVING pnum>5

ORDER BY pnum DESC,a.c

--44、檢索至少選修兩門課程的學生學號?

--45、查詢選修了全部課程的學生信息?

--46、查詢各學生的年齡

SELECT a.*,YEAR(CURDATE())-YEAR(a.sage)

FROM student a

--47、查詢本周過生日的學生

SELECT a.*

FROM student a

WHERECONCAT(MONTH(a.sage),DAY(a.sage))>=CONCAT(MONTH(SUBDATE(CURDATE(),WEEKDAY(CURDATE()))),DAY(SUBDATE(CURDATE(),WEEKDAY(CURDATE()))))

AND CONCAT(MONTH(a.sage),DAY(a.sage))<=CONCAT(MONTH(SUBDATE(CURDATE(),WEEKDAY(CURDATE())-6)),DAY(SUBDATE(CURDATE(),WEEKDAY(CURDATE())-6)))

--48、查詢下周過生日的學生

--49、查詢本月過生日的學生

SELECT a.* FROM student a WHEREMONTH(a.sage)=MONTH(CURDATE())

--50、查詢下月過生日的學生

SELECT a.*FROM student a WHERE MONTH(a.sage)=MONTH(CURDATE())+1

-------------------------------------------------------------------------------------------------------------------------------------------------------------

1、 mysql如何創建一個庫,添加一個表,在表中插入數據。

CREATE DATABASE database_name;

CREATE TABLE table_name(

ID varchar (4) NOT NULL,

NAME varchar (50) NOT NULL

);

INSERT INTO table_name() VAULES();

2、 mysql如何查詢一個表中的所有數據?

SELECT * FROM table_name;

3、 mysql如何給一個表添加完整性約束?

ALTER TABLE COMMENT ADD CONSTRAINT FK_comment_blog_id FOREIGN KEY (blog_id) REFERENCES table_name(id) ON DELETE RESTRICT ON UPDATE RESTRICT;

4、如何清空TabB表的數據

truncate table TabB;

5、如何登陸mysql數據庫

MySQL-u username -p

6、如何開啟/關閉mysql服務

service mysql start/stop

7、查看mysql的狀態

service mysql status

8、如何顯示數所有數據庫

show databases

9、如何獲取表內所有字段對象的名稱和類型

describe table_name;

10、varchar和char的區別

Char是一種固定長度的類型,varchar是一種可變長度的類型

11、數據庫事物屬性有哪幾種?

隔離性、持續性、一致性、原子性

12、mysql里記錄貨幣用什么字段類型好?

NUMERIC和DECIMAL類型被MySQL實現為同樣的類型,這在SQL92標準允許。他們被用于保存值,該值的準確精度是極其重要的值,例如與金錢有關的數據。

13、mysql數據庫索引類型都有哪些?

索引類型: B-TREE索引,哈希索引

14、mysql取得當前時間的函數是?,格式化日期的函數是?

? ? 取得當前時間用 now() 就行。

在數據庫中格式化時間 用DATE_FORMA T(date, format)。

15、mysql批量替換的SQL語句怎么寫?

Update `dede_addonarticle` set body = replace(body,’oldvalue’,'newvalue’) 其中 dede_addonarticle 為你的表名。body為字段名

16、mysql相比于其他數據庫有哪些特點?

MySQL是一個小型關系型數據庫管理系統,開發者為瑞典MySQL AB公司,現在已經被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操作系統

與其他的大型數據庫例如Oracle、DB2、SQL Server等相比功能稍弱一些

? ? ?1)、可以處理擁有上千萬條記錄的大型數據

? ? ?2)、支持常見的SQL語句規范

? ? ?3)、可移植行高,安裝簡單小巧

? ? ?4)、良好的運行效率,有豐富信息的網絡支持

? ? ?5)、調試、管理,優化簡單(相對其他大型數據庫)

17、mysql數據庫是怎么備份的?

備份數據庫:

mysqldump –user=root –password=root密碼 –lock-all-tables 數據庫名 > 備份文件.sql

恢復數據庫:

mysql -u root –password=root密碼 數據庫名 < 備份文件.sql

18、數據庫死鎖概念

如果需要"修改"一條數據,首先數據庫管理系統會在上面加鎖,以保證在同一時間只有一個事務能進行修改操作。鎖定(Locking)發生在當一個事務獲得對某一資源的"鎖"時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證數據一致性。

19、實際操作

Sutdent表的定義

字段名 字段描述 數據類型 主鍵 外鍵 非空 唯一 自增

Id 學號 INT(10) 是 否 是 是 是

Name 姓名 VARCHAR(20) 否 否 是 否 否

Sex 性別 VARCHAR(4) 否 否 否 否 否

Birth 出生年份 YEAR 否 否 否 否 否

Department 院系 VARCHAR(20) 否 否 是 否 否

Address 家庭住址 VARCHAR(50) 否 否 否 否 否


Score表的定義

字段名 字段描述 數據類型 主鍵 外鍵 非空 唯一 自增

Id 編號 INT(10) 是 否 是 是 是

Stu_id 學號 INT(10) 否 否 是 否 否

C_name 課程名 VARCHAR(20) 否 否 否 否 否

Grade 分數 INT(10) 否 否 否 否 否


1).創建student和score表

CREATE ?TABLE ?student (

id ?INT(10) ?NOT NULL ?UNIQUE ?PRIMARY KEY ?,

name ?VARCHAR(20) ?NOT NULL ,

sex ?VARCHAR(4) ?,

birth ?YEAR,

department ?VARCHAR(20) ,

address ?VARCHAR(50)?

);

創建score表。SQL代碼如下:

CREATE ?TABLE ?score (

id ?INT(10) ?NOT NULL ?UNIQUE ?PRIMARY KEY ?AUTO_INCREMENT ,

stu_id ?INT(10) ?NOT NULL ,

c_name ?VARCHAR(20) ,

grade ?INT(10)

);

2).為student表和score表增加記錄

向student表插入記錄的INSERT語句如下:

INSERT INTO student VALUES( 901,'張老大', '男',1985,'計算機系', '北京市海淀區');

INSERT INTO student VALUES( 902,'張老二', '男',1986,'中文系', '北京市昌平區');

INSERT INTO student VALUES( 903,'張三', '女',1990,'中文系', '湖南省永州市');

INSERT INTO student VALUES( 904,'李四', '男',1990,'英語系', '遼寧省阜新市');

INSERT INTO student VALUES( 905,'王五', '女',1991,'英語系', '福建省廈門市');

INSERT INTO student VALUES( 906,'王六', '男',1988,'計算機系', '湖南省衡陽市');

向score表插入記錄的INSERT語句如下:

INSERT INTO score VALUES(NULL,901, '計算機',98);

INSERT INTO score VALUES(NULL,901, '英語', 80);

INSERT INTO score VALUES(NULL,902, '計算機',65);

INSERT INTO score VALUES(NULL,902, '中文',88);

INSERT INTO score VALUES(NULL,903, '中文',95);

INSERT INTO score VALUES(NULL,904, '計算機',70);

INSERT INTO score VALUES(NULL,904, '英語',92);

INSERT INTO score VALUES(NULL,905, '英語',94);

INSERT INTO score VALUES(NULL,906, '計算機',90);

INSERT INTO score VALUES(NULL,906, '英語',85);


3).查詢student表的所有記錄

mysql> SELECT * FROM student;

+-----+--------+------+-------+------------+--------------+

| id ?| name ? | sex ?| birth | department | address ? ? ?|

+-----+--------+------+-------+------------+--------------+

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 |

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 |

| 903 | 張三 ? | 女 ? | ?1990 | 中文系 ? ? | 湖南省永州市 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 |

| 905 | 王五 ? | 女 ? | ?1991 | 英語系 ? ? | 福建省廈門市 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 |

+-----+--------+------+-------+------------+--------------+


4).查詢student表的第2條到4條記錄

mysql> SELECT * FROM student LIMIT 1,3;

+-----+--------+------+-------+------------+--------------+

| id ?| name ? | sex ?| birth | department | address ? ? ?|

+-----+--------+------+-------+------------+--------------+

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 |

| 903 | 張三 ? | 女 ? | ?1990 | 中文系 ? ? | 湖南省永州市 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 |

+-----+--------+------+-------+------------+--------------+


5).從student表查詢所有學生的學號(id)、姓名(name)和院系(department)的信息

mysql> SELECT id,name,department FROM student;

+-----+--------+------------+

| id ?| name ? | department |

+-----+--------+------------+

| 901 | 張老大 | 計算機系 ? |

| 902 | 張老二 | 中文系 ? ? |

| 903 | 張三 ? | 中文系 ? ? |

| 904 | 李四 ? | 英語系 ? ? |

| 905 | 王五 ? | 英語系 ? ? |

| 906 | 王六 ? | 計算機系 ? |

+-----+--------+------------+


6).從student表中查詢計算機系和英語系的學生的信息

mysql> SELECT * FROM student WHERE department IN ('計算機系','英語系');

+-----+--------+------+-------+------------+--------------+

| id ?| name ? | sex ?| birth | department | address ? ? ?|

+-----+--------+------+-------+------------+--------------+

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 |

| 905 | 王五 ? | 女 ? | ?1991 | 英語系 ? ? | 福建省廈門市 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 |

+-----+--------+------+-------+------------+--------------+


7).從student表中查詢年齡18~22歲的學生信息

mysql> SELECT id,name,sex,2013-birth AS age,department,address

? ? -> FROM student

? ? -> WHERE 2013-birth BETWEEN ?18 AND 22;

+-----+------+------+------+------------+--------------+

| id ?| name | sex ?| age ?| department | address ? ? ?|

+-----+------+------+------+------------+--------------+

| 905 | 王五 | 女 ? | ? 22 | 英語系 ? ? | 福建省廈門市 |

+-----+------+------+------+------------+--------------+

mysql> SELECT id,name,sex,2013-birth AS age,department,address

? ? -> FROM student

? ? -> WHERE 2013-birth>=18 AND 2013-birth<=22;

+-----+------+------+------+------------+--------------+

| id ?| name | sex ?| age ?| department | address ? ? ?|

+-----+------+------+------+------------+--------------+

| 905 | 王五 | 女 ? | ? 22 | 英語系 ? ? | 福建省廈門市 |

+-----+------+------+------+------------+--------------+


8).從student表中查詢每個院系有多少人?

mysql> SELECT department, COUNT(id) FROM student GROUP BY department;

+------------+-----------+

| department | COUNT(id) |

+------------+-----------+

| 計算機系 ? | ? ? ? ? 2 |

| 英語系 ? ? | ? ? ? ? 2 |

| 中文系 ? ? | ? ? ? ? 2 |

+------------+-----------+

9).從score表中查詢每個科目的最高分

mysql> SELECT c_name,MAX(grade) FROM score GROUP BY c_name;

+--------+------------+

| c_name | MAX(grade) |

+--------+------------+

| 計算機 | ? ? ? ? 98 |

| 英語 ? | ? ? ? ? 94 |

| 中文 ? | ? ? ? ? 95 |

+--------+------------+


10).查詢李四的考試科目(c_name)和考試成績(grade)

mysql> SELECT c_name, grade

? ? -> ? ? ?FROM score WHERE stu_id=

? ? -> ?(SELECT id FROM student

? ? -> ? ?WHERE name= '李四' );

+--------+-------+

| c_name | grade |

+--------+-------+

| 計算機 | ? ?70 |

| 英語 ? | ? ?92 |

+--------+-------+


11).用連接的方式查詢所有學生的信息和考試信息

mysql> SELECT student.id,name,sex,birth,department,address,c_name,grade

? ? -> FROM student,score

? ? -> ?WHERE student.id=score.stu_id;

+-----+--------+------+-------+------------+--------------+--------+-------+

| id ?| name ? | sex ?| birth | department | address ? ? ?| c_name | grade |

+-----+--------+------+-------+------------+--------------+--------+-------+

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 | 計算機 | ? ?98 |

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 | 英語 ? | ? ?80 |

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 | 計算機 | ? ?65 |

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 | 中文 ? | ? ?88 |

| 903 | 張三 ? | 女 ? | ?1990 | 中文系 ? ? | 湖南省永州市 | 中文 ? | ? ?95 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 | 計算機 | ? ?70 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 | 英語 ? | ? ?92 |

| 905 | 王五 ? | 女 ? | ?1991 | 英語系 ? ? | 福建省廈門市 | 英語 ? | ? ?94 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 | 計算機 | ? ?90 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 | 英語 ? | ? ?85 |

+-----+--------+------+-------+------------+--------------+--------+-------+


12).計算每個學生的總成績

mysql> SELECT student.id,name,SUM(grade) FROM student,score

? ? -> WHERE student.id=score.stu_id

? ? -> GROUP BY id;

+-----+--------+------------+

| id ?| name ? | SUM(grade) |

+-----+--------+------------+

| 901 | 張老大 | ? ? ? ?178 |

| 902 | 張老二 | ? ? ? ?153 |

| 903 | 張三 ? | ? ? ? ? 95 |

| 904 | 李四 ? | ? ? ? ?162 |

| 905 | 王五 ? | ? ? ? ? 94 |

| 906 | 王六 ? | ? ? ? ?175 |

+-----+--------+------------+


13).計算每個考試科目的平均成績

mysql> SELECT c_name,AVG(grade) FROM score GROUP BY c_name;

+--------+------------+

| c_name | AVG(grade) |

+--------+------------+

| 計算機 | ? ?80.7500 |

| 英語 ? | ? ?87.7500 |

| 中文 ? | ? ?91.5000 |

+--------+------------+


14).查詢計算機成績低于95的學生信息

mysql> SELECT * FROM student

? ? -> WHERE id IN

? ? -> (SELECT stu_id FROM score

? ? -> WHERE c_name="計算機" and grade<95);

+-----+--------+------+-------+------------+--------------+

| id ?| name ? | sex ?| birth | department | address ? ? ?|

+-----+--------+------+-------+------------+--------------+

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 |

+-----+--------+------+-------+------------+--------------+


15).查詢同時參加計算機和英語考試的學生的信息

mysql> SELECT * ?FROM student

? ? -> ?WHERE id =ANY

? ? -> ?( SELECT stu_id FROM score

? ? -> ?WHERE stu_id IN (

? ? -> ? ? ? ? ?SELECT stu_id FROM

? ? -> ? ? ? ? ?score WHERE c_name= ?'計算機')

? ? -> ?AND c_name= '英語' );

+-----+--------+------+-------+------------+--------------+

| id ?| name ? | sex ?| birth | department | address ? ? ?|

+-----+--------+------+-------+------------+--------------+

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 |

+-----+--------+------+-------+------------+--------------+

mysql> SELECT a.* FROM student a ,score b ,score c

? ? -> WHERE a.id=b.stu_id

? ? -> AND b.c_name='計算機'

? ? -> AND a.id=c.stu_id

? ? -> AND c.c_name='英語';

+-----+--------+------+-------+------------+--------------+

| id ?| name ? | sex ?| birth | department | address ? ? ?|

+-----+--------+------+-------+------------+--------------+

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 |

| 904 | 李四 ? | 男 ? | ?1990 | 英語系 ? ? | 遼寧省阜新市 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 |

+-----+--------+------+-------+------------+--------------+


16).將計算機考試成績按從高到低進行排序

mysql> SELECT stu_id, grade

? ? -> ?FROM score WHERE c_name= '計算機'

? ? -> ?ORDER BY grade DESC;

+--------+-------+

| stu_id | grade |

+--------+-------+

| ? ?901 | ? ?98 |

| ? ?906 | ? ?90 |

| ? ?904 | ? ?70 |

| ? ?902 | ? ?65 |

+--------+-------+


17).從student表和score表中查詢出學生的學號,然后合并查詢結果

mysql> SELECT id ?FROM student

? ? -> UNION

? ? -> SELECT stu_id ?FROM score;

+-----+

| id ?|

+-----+

| 901 |

| 902 |

| 903 |

| 904 |

| 905 |

| 906 |

+-----+


18).查詢姓張或者姓王的同學的姓名、院系和考試科目及成績

mysql> SELECT student.id, name,sex,birth,department, address, c_name,grade

? ? -> FROM student, score

? ? -> WHERE

? ? -> ?(name LIKE ?'張%' ?OR name LIKE ?'王%')

? ? -> ?AND

? ? -> ?student.id=score.stu_id ;

+-----+--------+------+-------+------------+--------------+--------+-------+

| id ?| name ? | sex ?| birth | department | address ? ? ?| c_name | grade |

+-----+--------+------+-------+------------+--------------+--------+-------+

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 | 計算機 | ? ?98 |

| 901 | 張老大 | 男 ? | ?1985 | 計算機系 ? | 北京市海淀區 | 英語 ? | ? ?80 |

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 | 計算機 | ? ?65 |

| 902 | 張老二 | 男 ? | ?1986 | 中文系 ? ? | 北京市昌平區 | 中文 ? | ? ?88 |

| 903 | 張三 ? | 女 ? | ?1990 | 中文系 ? ? | 湖南省永州市 | 中文 ? | ? ?95 |

| 905 | 王五 ? | 女 ? | ?1991 | 英語系 ? ? | 福建省廈門市 | 英語 ? | ? ?94 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 | 計算機 | ? ?90 |

| 906 | 王六 ? | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 | 英語 ? | ? ?85 |

+-----+--------+------+-------+------------+--------------+--------+-------+


19).查詢都是湖南的學生的姓名、年齡、院系和考試科目及成績

mysql> SELECT student.id, name,sex,birth,department, address, c_name,grade

? ? -> FROM student, score

? ? -> WHERE address LIKE '湖南%' ? AND

? ? -> ?student.id=score.stu_id;

+-----+------+------+-------+------------+--------------+--------+-------+

| id ?| name | sex ?| birth | department | address ? ? ?| c_name | grade |

+-----+------+------+-------+------------+--------------+--------+-------+

| 903 | 張三 | 女 ? | ?1990 | 中文系 ? ? | 湖南省永州市 | 中文 ? | ? ?95 |

| 906 | 王六 | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 | 計算機 | ? ?90 |

| 906 | 王六 | 男 ? | ?1988 | 計算機系 ? | 湖南省衡陽市 | 英語 ? | ? ?85 |

+-----+------+------+-------+------------+--------------+--------+-------+

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname...
    哈哈海閱讀 1,248評論 0 7
  • 筆記: 一、聚合函數:計數 最大值 最小值 平均數 求和 1.計數 COUNT() 忽略NULL值 方式1:COU...
    鳳之鳩閱讀 5,254評論 0 1
  • 說明:以下五十個語句都按照測試數據進行過測試,最好每次只單獨運行一個語句。 問題及描述: --1.學生表 Stud...
    lijun_m閱讀 1,319評論 0 1
  • Student(S#,Sname,Sage,Ssex) 學生表 Course(C#,Cname,T#) 課程表 S...
    望l閱讀 317評論 0 0
  • 5月第一周的演講主題是:請你結合自己所接觸的專欄,談談對你有觸動有啟發的一個觀點、一個理念、一篇文章甚至一句話,避...
    武哥a閱讀 398評論 0 1