Sql語句基礎練習(一)

一、求1號課成績大於80分的學生的學號及成績,並按成績由高到低列出。(表名:成績表。字段名:課號,學號,成績。)
SELECT 學號,成績 FROM 成績表 WHERE 課號=1 AND 成績>80 ORDER BY 成績 DESC
 
二、列出非軟件專業學生的名單。(表名:學生表。字段名:學號,性別,姓名,專業。)
SELECT 姓名 FROM 學生表 WHERE  專業 not in ('軟件')
 
三、查詢成績在70~80分之間的學生選課得分狀況。(表名:選課表。字段名:課號,學號,成績。)
SELECT * FROM 選課表 WHERE 成績 BETWEEN 70 AND 80
 
四、列出選修1號課或3號課的全體學生的學號和成績。(表名:選課表。字段名:課號,學號,成績。)
方法一:SELECT 學號,成績 FROM 選課表 WHERE 課號=1 OR 課號=3
方法二:SELECT 學號,成績 FROM 選課表 WHERE 課號 IN (1,3)
 
五、列出全部98級學生的學生成績狀況。(表名:選課表。字段名:課號,學號,成績,班級。)
SELECT * FROM 選課表 WHERE 學號 LIKE "98%"
 
六、列出成績爲空值(或不爲空值)的學生的學號和課號。(表名:選課表。字段名:課號,學號,成績。)
答案一:SELECT 學號,課號 FROM 選課表 WHERE 成績 IS NULL
答案二:SELECT 學號,課號 FROM 選課表 WHERE 成績 IS NOT NULL
 
七、求出全部學生的總成績。(表名:選課表。字段名:課號,學號,成績。)
SELECT SUM(成績) AS 總成績 FROM 選課表
 
八、列出每一個學生的平均成績。(表名:選課表。字段名:課號,學號,成績。)
SELECT 學號,AVG(成績) AS 平均成績 FROM 選課表 GROUP BY 學號
 
九、列出各科的平均成績、最高成績、最低成績和選課人數。(表名:選課表。字段名:課號,學號,成績。)
SELECT 課號,AVG(成績) AS 平均成績,MAX(成績) AS 最高分,MIN(成績) AS 最低分,COUNT(課號) AS 選課人數
FROM 選課表 GROUP BY 課號
 
十、列出選修1號課的學生姓名及成績。【表名:學生表(字段名:學號,性別,姓名,專業。)】;【表名:成績表(字段名:課號,學號,成績。)】
SELECT 姓名,成績 FROM 學生表,成績表 WHERE 學生表.學號=成績表.學號 AND 課號=1
 
十一、列出選修1號課的學生的學號、姓名及成績。【表名:學生表(字段名:學號,性別,姓名,專業。)】;【表名:成績表(字段名:課號,學號,成績。)】
SELECT 學生表.學號,姓名,成績 FROM 學生表,成績表 WHERE 學生表.學號=成績表.學號 AND 課號=1
 
十二、求出總成績大於150的學生的學號、姓名及總成績。【表名:學生表(字段名:學號,性別,姓名,專業。)】;【表名:成績表(字段名:課號,學號,成績。)】
SELECT 學生表.學號,學生表.姓名,SUM(成績) AS 總成績 FROM 學生表,成績表
WHERE 學生表.學號=成績表.學號 GROUP BY 學生表.學號,學生表.姓名 HAVING SUM(成績)>150
 
1三、實戰基礎題一
Student(S#,Sname,Sage,Ssex) 學生表
Course(C#, Cname ,T#) 課程表
SC(S#, C#, score)成績表
Teacher (T#, Tname) 教師表
 
1,查詢平均成績大於60分的同窗的學號和平均成績;
select SC.s#,avg(SC.score)
from SC
group by SC.s#
having avg(SC.score)>60;
2,查詢全部同窗的學號,姓名,選課數,總成績;
     select d.s#,d.sname,count(distinct s.c#),sum(s.score)
    from Student d,SC s
     where d.s#=s.s#
      group by  d.s#, d.sname;
3,查詢全部課程成績小於60分的同窗的學號,姓名
SELECT stu.S#,stu.Sname FROM SC sc, student stu
 WHERE stu.S# = sc.S# GROUP BY stu.S# ,stu.Sname
 HAVING MAX(sc.score) < 60;
4,刪除學習'葉平'老師課的SC 表記錄;
DELETE  FROM  SC WHERE   S#
IN (
   SELECT DISTINCT sc.S# FROM SC sc, course c, teacher t
   WHERE sc.C# = c.C# AND c.T# = t.T#
   AND t.tname = '葉平');
delete from SC where C# in
(select C# from Course,Teacher where Course.T#=Teacher.T#
AND Tname='葉平' );
delete from SC where C# in
(SELECT C# from Course where T# in
(select T# FROM Teacher WHERE Tname='葉平' ) );

5,查詢各科成績最高和最低的分:以以下形式顯示:課程ID, 最高分,最低分。
select C# 課程ID, max(score) 最高分 ,min(score) 最低分
from SC
GROUP BY C#;
 
1四、實戰基礎題二
有兩張表: 部門表department 部門編號dept_id 部門名稱dept_name
員工表employee 員工編號emp_id 員工姓名emp_name 部門編號dept_id 工資emp_wage
根據下列題目寫出sql:
一、列出工資大於5000的員工所屬的部門名、員工id和員工工資
select a.dept_name,  b.emp_id , b.emp_wage
 from department a , employee b
 where a.dept_id= b.dept_id and b.emp_wage> 5000;
二、列出員工表中的部門id對應的名稱和員工id (左鏈接)
select   a.dept_id , b.dept_name,a.emp_id  from employee a
left join department b
on a.dept_id= b.dept_id;
三、列出員工大於等於2人的部門編號
select dept_id,count(emp_id) from employee group by dept_id having count(emp_id)>=2;
四、列出工資最高的員工姓名
select emp_name ,emp_wage
 from employee
 where emp_wage = (select max(emp_wage) from employee);
select  emp_name,max(emp_wage) 
from employee
group by emp_name
having max(emp_wage) = (select max(distinct emp_wage) from employee);
五、求各部門的平均工資
select a.dept_id,a.dept_name ,avg(emp_wage)
from department a,employee b 
where a.dept_id= b.dept_id
group by a.dept_id,a.dept_name;
六、求各部門的員工工資總額
select a.dept_id,a.dept_name ,sum(emp_wage)
from department a,employee b 
where a.dept_id= b.dept_id
group by a.dept_id,a.dept_name;
七、求每一個部門中的最大工資值和最小工資值,而且它的最小值小於5000,最大值大於10000
select dept_id , max(emp_wage) 最高工資, min(emp_wage) 最低工資
 from employee
group by dept_id
having  max(emp_wage)>10000 and min(emp_wage)<5000;
八、假如如今在庫中有一個和員工表結構相同的空表employee2,請用一條sql語句將employee表中的全部記錄插入到employee2 中。  insert into employee2 select * from employee;
相關文章
相關標籤/搜索