MySql面試練習(xí)題

我是從別的博主抄來的題,算不上面試題,但是基本上涵蓋了查詢所需要的方法。包括多表查詢等
原博地址:http://blog.sina.com.cn/s/blog_767d65530101861c.html
雖然比較老,但是知識是不變的。
下面貼出我的答案,與原博的不一樣,但是也能實(shí)現(xiàn)結(jié)果。(題目需要查看原博,從最基本的SQL語句建表開始)

//創(chuàng)建學(xué)生表
create table student (
id int(10) not null PRIMARY key ,
name varchar(50) not null ,
age int(10) not null ,
sex varchar(4),
BirthDay YEAR ,
Deptment VARCHAR(20) not NULL,
Address varchar(50)
)
//創(chuàng)建score成績表
create table Sorce(
id int(10) not NULL  UNIQUE PRIMARY KEY auto_increment,
Stu_id INT(10) NOT NULL ,
C_name VARCHAR(20),
Grade INT(10) 
)

插入數(shù)據(jù)

#插入數(shù)據(jù)項(xiàng)數(shù)據(jù)庫
INSERT INTO student VALUES( 901,'張老大', 20,'男',1985,'計(jì)算機(jī)系', '北京市海淀區(qū)');
INSERT INTO student VALUES( 902,'張老二', 21,'男',1986,'中文系', '北京市昌平區(qū)');
INSERT INTO student VALUES( 903,'張三',22, '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四',23, '男',1990,'英語系', '遼寧省阜新市');
INSERT INTO student VALUES( 905,'王五',21, '女',1991,'英語系', '福建省廈門市');
INSERT INTO student VALUES( 906,'王六', 22,'男',1988,'計(jì)算機(jī)系', '湖南省衡陽市');

#項(xiàng)source表中填入數(shù)據(jù)
INSERT INTO score VALUES(NULL,901, '計(jì)算機(jī)',98);
INSERT INTO score VALUES(NULL,901, '英語', 80);
INSERT INTO score VALUES(NULL,902, '計(jì)算機(jī)',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '計(jì)算機(jī)',70);
INSERT INTO score VALUES(NULL,904, '英語',92);
INSERT INTO score VALUES(NULL,905, '英語',94);
INSERT INTO score VALUES(NULL,906, '計(jì)算機(jī)',90);
INSERT INTO score VALUES(NULL,906, '英語',85);

答案如下:

#查詢student表的所有記錄
select * from student 
#查詢score表的所有記錄
SELECT * from score 
#查詢student表的第2條到4條記錄
SELECT * from student LIMIT 1,3
#查詢score表的第2條到4條記錄
SELECT * from score LIMIT 4,2
#查詢score表的第6條到8條記錄
SELECT * from score LIMIT 5,3
#從student表查詢所有學(xué)生的學(xué)號(id)、姓名(name)和院系(department)的信息\
SELECT id,name,Deptment from student

#從student表中查詢計(jì)算機(jī)系和英語系的學(xué)生的信息
錯誤的:SELECT * from student where Deptment='計(jì)算機(jī)系' and Deptment='英語系'
select * from student where Deptment in('計(jì)算機(jī)系','英語系')

#從student表中查詢年齡18~22歲的學(xué)生信息(havaing 語句的使用表示的是先分組再進(jìn)行篩選 往往和 GROUP BY 聯(lián)合使用)
SELECT * from student GROUP BY age HAVING 18<age<22

SELECT id,name,2013-BirthDay as age ,Deptment,Address from student where 2013-BirthDay BETWEEN  18 AND 22

#從student表中查詢每個院系有多少人
SELECT Deptment ,count(id) from student GROUP BY Deptment


#從score表中查詢每個科目的最高分
SELECT C_name,MAX(Grade) from score GROUP BY C_name

下面的比較復(fù)雜也是本篇的核心,讀者可以對比原博客的寫法進(jìn)行學(xué)習(xí)。

#.查詢李四的考試科目(c_name)和考試成績(grade)
SELECT c_name,grade FROM score INNER JOIN (SELECT * FROM student WHERE name='李四')a  ON a.id=score.Stu_id
SELECT id from student where name='李四'
SELECT c_name,grade FROM score where Stu_id(SELECT id from student where name='李四')

#$用連接的方式查詢所有學(xué)生的信息和考試信息
SELECT name,sex,BirthDay,Deptment,Address ,C_name ,Grade from student,score where student.id=score.Stu_id

#12.計(jì)算每個學(xué)生的總成績
SELECT student.id,name,SUM(Grade) from student,score WHERE student.id=score.Stu_id GROUP BY id
#13.計(jì)算每個考試科目的平均成績
SELECT C_name,AVG(Grade) FROM score GROUP BY C_name
#14.查詢計(jì)算機(jī)成績低于95的學(xué)生信息
SELECT * from student where Deptment ='計(jì)算機(jī)系' INNER JOIN
(SELECT * from score where  C_name='計(jì)算機(jī)' and Grade < 95)a on student.id = a.Stu_id
正確:
select * from student where id in (SELECT Stu_id from score where C_name="計(jì)算機(jī)" and grade<95)


#15.查詢同時參加計(jì)算機(jī)和英語考試的學(xué)生的信息
SELECT * from student where 
(SELECT Stu_id FROM  score where C_name="計(jì)算機(jī)" AND C_name="英語")

SELECT Stu_id FROM  score where  C_name="計(jì)算機(jī)" AND C_name="英語"
SELECT * from student INNER JOIN
(SELECT Stu_id FROM  score where C_name="英語" )a INNER JOIN ON student.id=a.Stu_id
(SELECT Stu_id FROM  score where  C_name="計(jì)算機(jī)")b  ON student.id=a.Stu_id=b.Stu_id

SELECT Stu_id from score where C_name="計(jì)算機(jī)"
###############上面的是錯誤的

#第一步:
SELECT * from score where Stu_id in (SELECT Stu_id from score where C_name="計(jì)算機(jī)") AND C_name="英語"
#(重疊式的,先滿足一個條件,再將這個條件嵌套在另外一個條件中充當(dāng)元素)

#第二步:
SELECT student.id,name,sex,BirthDay,Deptment,Address from student INNER JOIN (SELECT * from score where Stu_id in 
(SELECT Stu_id from score where C_name="計(jì)算機(jī)") AND C_name="英語")a ON student.id=a.Stu_id



#16.將計(jì)算機(jī)考試成績,按從高到低進(jìn)行排序

SELECT Stu_id,Grade from score where C_name="計(jì)算機(jī)" ORDER BY Grade  DESC


#17.從student表和score表中查詢出學(xué)生的學(xué)號,然后合并查詢結(jié)果(考察union 聯(lián)合查詢合并重復(fù))
SELECT id from student 
union
SELECT Stu_id from score

#18.查詢姓張或者姓王的同學(xué)的姓名、院系和考試科目及成績
#正確:
SELECT student.id,name,Deptment,C_name,Grade from student,score where (name like '王%' OR name like '張%') AND student.id=score.Stu_id


select student.id,name,Deptment,C_name,Grade from student,score where (name like '王%' OR name like '張%') and student.id= score.Stu_id


#19.查詢都是湖南的學(xué)生的姓名、年齡、院系和考試科目及成績
select a.name ,a.age,a.Deptment,C_name,Grade  from score INNER JOIN
(SELECT * from student where  Address LIKE '%湖南%' )a on a.id=score.Stu_id

半吊子初學(xué)并稍微學(xué)有所成,誠心招各位學(xué)友學(xué)習(xí)一起走向架構(gòu)師。
飛向架構(gòu)師交流群:264698630

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容