二、表的結構以下:數學
student表(id,name,sex,class_id,address);class
score表(id,student_id,course_id,score);select
class表(id,name,grade_id);方法
grade表(id,name);統計
course表(id,name);查詢
1)查詢出「高一年級」下面的全部班級信息co
分析:用到的表有grade,class圖書
方法:把grade與class經過年級號聯合後,選出高一年級的班級信息便可日期
語句:
select s1.* from class s1,grade s2 where s1.grade_id = s2.id and s2.name= '高一年級';
2)查詢出「高一年級」下面的全部班級裏面的學生信息
分析:用到的表有grade,class,student
方法:把這三個表聯合後,選出高一年級的學生信息便可
語句:
select s1.* from student s1,class s2,grade s3 where s1.id = s2.student_id and s2.grade_id = s3.id and s3.name = '高一年級';
3)查詢出「高一年級」下面的全部班級裏面的男學生信息
分析:所用到的表有student,class,grade
方法:把這三個表進行聯合,而後找出高一年級及性別爲男的學生信息便可,即在上面的語句中再加入一個條件s1.sex = '男'
語句:
略
4)查詢出小於等於90分的學生姓名、性別、科目名稱、分數
分析:所用到的表有student--(姓名,性別),score--分數,course--科目名稱
方法:把三個表進行聯合後,找出小於等於90分的學生的相關信息便可,score.score<=90
語句:
略
5)查詢高二年級下全部數學成績小於90分的同窗的學號和姓名以及分數
分析:所用到的表有student--學號和姓名,score--分數,grade--高二年級,course--數學,class--經過此表與grade表進行聯合
方法:把5個表進行聯合後,從grade表中找出高二年級(grade.name='高二年級'),從course中找出數學課程(course.name='數學'),從score表中找出分數小於90(score.score<90),而後顯示出該同窗的學號,姓名及分數便可
語句:略
6)查詢成績表沒有成績的學生學號,姓名
分析:所用的表有student,score
方法:首先找出有成績的學生的學號,而後跟學生表中的學號進行比對,找出再也不學生表中的學號便可
語句:
select id,name from student where id not in(select student_id from score);
7)按年級分組統計每一個年級下有多少班級
分析:所用的表有class--統計班級數,grade--獲取年級名稱
方法:兩表聯合後,經過對class表中的grade_id進行分組,而後統計出每一個年級的班級數就能夠了
語句:
select s2.name,count(*) as '班級個數' from class s1,grade s2 where s1.grade_id = s2.id group by s2.id;
8)按年級分組統計每一個年級下有多少學生
分析:所用的表有student--統計學生數,class--經過此表按年級分組,grade--找出年級的名稱
方法:把三表聯合後,按年級分組(group by grade),統計出學生的數目便可(count(*))。
語句:
select s3.name,count(*) from student s1,class s2,grade s3 where s1.class_id = s2.id and s2.grade_id = s3.id group by s3.id;
三、表的結構以下:
圖書(圖書號,圖書名,做者編號,出版社,出版日期);
做者(做者姓名,做者編號,年齡,性別);
要求:用SQL語句查詢年齡小於平均年齡的做者姓名、圖書名,出版社。
分析:所用的表有圖書及做者兩個表
方法:把兩表聯合後,找出做者表中的小於平均年齡avg(年齡)的相關信息
注意:這裏的平均年齡由於是個動態的值,不能直接用年齡 <avg(年齡)進行比較,要先經過「select avg(年齡) from 做者」獲得平均年齡後,才能進行比較
語句:
select s1.做者姓名,s2.圖書名,s2.出版社
from 做者 s1,圖書 s2
where s1.做者編號 = s2.做者編號
and 年齡 < (select avg(年齡) from 做者);