<div class="article-source-link2222">
版權聲明:本文為博主轉載文章, 轉載自:<a href="https://blog.csdn.net/ghuiL/article/details/40981627">https://blog.csdn.net/ghuiL/article/details/40981627</a>
</div>
</span>
</div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css">
<div class="htmledit_views" id="content_views">
這里主要介紹幾道題目用以更加深入的了解SQL語句。在工作面試時乃至在考研時,很多時候都會考到SQL語句。如果這篇文章中的所有的題目都搞明白了,那么應付工作面試筆試或者考研筆試將會更加的游刃有余。
題目01
現有關系數據庫如下:學生(學號,姓名,性別,專業,獎學金)
課程(課程號,名稱,學分)
學習(學號,課程號,分數)
用SQL語言實現下列題目:
1. 檢索不學課程號為“C135”課程的學生信息,包括學號,姓名和專業。
-
select 學號, 姓名, 專業
-
from 學生
-
where 學號
NOT
IN (
-
select 學號
-
from 學習
-
where 課程號=
"C135");
2. 檢索至少學過課程號為“C135”和“C219”的學生信息,包括學號、姓名和專業。
-
select 學號, 姓名, 專業
-
from 學生
-
where 學號
IN (
-
select 學號
-
from 學習 x, 學習 y
-
where x.學號=y.學號
AND x.課程號=
'C135'
AND y.課程號=
'C219');
3. 從學生表中刪除成績出現過0分的所有學生信息。
-
delete
from 學生
-
where 學號
IN (
-
select 學號
-
from 學習
-
where 分數=
0);
4. 定義“英語”專業學生所學課程的信息視圖AAA,包括學號、姓名、課程號和分數。
-
create
view AAA(學號, 姓名, 課程號, 分數)
-
AS
-
select 學號, 姓名, 課程號, 分數
-
from 學生, 學習
-
where 學生.學號=學習.學號
AND 專業=
"英語";
題目02
學校有多名學生,財務處每年要收一次學費。為財務處收學費工作設計一個數據庫,包括兩個關系:學生(學號,姓名,專業,入學日期)
收費(學年,學號,學費,書費,總金額)
假設規定屬性的類型:學費、書費、總金額為數值型數據;學號、姓名、學年、專業為字符型數據;入學日期為日期型數據。列的寬度自定義。
試用SQL語句定義上述表的結構。(定義應包括主鍵子句和外鍵子句)。
-
create
table 學生(
-
學號
char(
8) primary
key,
-
姓名
char(
25),
-
專業
char(
50),
-
入學日期
date
-
);
-
create
table 收費(
-
學年
char(
10),
-
學號
char(
8),
-
學費
numeric(
4),
-
書費
numeric(
5,
2),
-
總金額
numeric(
7,
2),
-
primary
key(學號, 學年),
-
foreign
key(學號)
references 學生(學號)
-
);
題目03
設某公司數據庫中有關系模式如下:職工(職工號,職工名,性別,年齡)工作(職工號,公司號,工資)公司(公司號,公司名,地址)。1. 寫出查詢每個公司女職工的平均工資的SQL語句。(提示:求平均值用函數AVG())
-
select 公司號, 公司名,
AVG(工資)
-
from 職工, 工作, 公司
-
where 公司.公司號=工作.公司號
AND 職工.職工號=工作.職工號
AND 性別=
'女'
-
group
by 公司號;
2. 試用SQL語句寫出下列操作:超過50歲職工的工資增加200元。
-
update 工作
-
set 工資=工資+
200
-
where 職工號
IN (
-
select 職工號
-
from 職工
-
where 年齡>=
50);
3. 把對職工表的插入權限授給用戶A,並許諾他再將此權限授予其他用戶。
grant insert ON 職工 TO A WITH GRANT OPTION;
題目04
圖書出版管理數據庫中有兩個基本表:圖書 (書號,書名,作者編號,出版社,出版日期)
作者 (作者編號,作者名,年齡,地址)
試用SQL語句寫出下列查詢:
檢索年齡低於作者平均年齡的所有作者的作者名、書名和出版社。
-
select 作者名, 書名, 出版社
-
from 圖書, 作者
-
where 圖書.作者編號=作者.作者編號
AND 年齡 <= (
-
select
AVG(年齡)
-
from 作者);
題目05
現有關系數據庫如下:學生(學號,姓名,性別,專業,獎學金)課程(課程號,名稱,學分)學習(學號,課程號,分數)用SQL語言實現下列題目。
1. 檢索沒有獲得獎學金、同時至少有一門課程成績在95分以上的學生信息,包括學號、姓名和專業。
-
select 學號, 姓名, 專業
-
from 學生
-
where 獎學金<=
0
AND 學號
IN (
-
select 學號
-
from 學習
-
where 分數>=
95);
2. 檢索沒有任何一門課程成績在80分以下的所有學生的信息,包括學號、姓名和專業。
-
select 學號, 姓名, 專業
-
from 學生
-
where 學號
NOT
IN (
-
select 學號
-
from 學習
-
where 分數<
80);
3. 對成績得過滿分(100分)的學生,如果沒有獲得獎學金的,將其獎學金設為1000元。
-
update 學生
-
set 獎學金=
1000
-
where 獎學金<=
0
AND 學號
IN (
-
select 學號
-
from 學習
-
where 分數=
100);
4. 定義學生成績得過滿分(100分)的課程視圖 AAA,包括課程號、名稱和學分。
-
create
view AAA(課程號, 名稱, 學分)
-
AS
-
select 課程號, 名稱, 學分
-
from 課程
-
where 課程號
IN (
-
select 課程號
-
from 學習
-
where 分數=
100);
題目06
設有學生-課程關系數據庫,其數據庫關系模式為:學生Student(學號Sno,姓名Sname,所在系Sdept,年齡Sage,性別Ssex)課程Course(課程號Cno,課程名稱Cname,先修課號Cpno,學分Ccredit)學生選課SC(學號Sno,課程號Cno,成績Grade)試用SQL語言分別寫出下列查詢:1. 查詢選修了3號或6號課程的學生的學號。
-
select Sno
-
from SC
-
where Cno=
'3'
OR Cno=
'6';
2. 查詢至少選修了一門其直接先行課為8號課程的學生學號與姓名。
-
select Sno, Sname
-
from SC, Course, Student
-
where Course.Cno=SC.Cno
AND Student.Sno=SC.Sno
AND Cpno=
'8';
3. 查詢選修了全部課程的學生學號、姓名和年齡。
-
-- 查詢沒有一門課程是該學生沒有選的
-
select Sno, Sname, Sage
-
from Student
-
where
NOT
EXISTS (
-
select *
-
from Course
-
where
NOT
EXISTS (
-
select *
-
from SC
-
where Student.Sno=SC.Sno
AND Course.Cno=SC.Cno));
4. 查詢沒有選修2號課程的學生學號與姓名。
-
select Sno, Sname
-
from Student
-
where Sno
NOT
IN (
-
select Sno
-
from SC
-
where Cno=
'2');
5. 查詢選修了3門以上課程並且成績均及格的學生學號與其平均成績。
-
-- 本題未經驗證,未必正確
-
select Sno,
AVG(Grade)
-
from SC x
-
group
by Sno
-
having
COUNT(Cno)>
3
-
where
NOT
EXISTS (
-
select *
-
from SC y
-
x.Cno=y.Cno
AND Grade<
60);
6. 將計算機科學系(CS)全體學生的所有成績置為零。
-
update SC
-
set Grade=
0
-
where Sno
IN (
-
select Sno
-
from Student
-
where Sdept=
'CS');
題目07
設有學生-課程關系數據庫,其數據庫關系模式為:學生S(學號S#,姓名SN,所在系SD,年齡SA)課程C(課程號C#,課程名稱CN,先修課號PC#)學生選課SC(學號S#,課程號C#,成績G)試用SQL語言分別寫出下列查詢:1. 求學生'95001'(為學號)所選的成績為60以上的課程號。
-
select C#
-
from SC
-
where S#=
'95001'
AND G>=
60;
2. 求選讀了“數據庫概論”,並成績為80或90的學生學號和姓名。
-
select S#,SN
-
from S,SC,C
-
where C.C#=SC.C#
AND SC.S#=S.S#
AND C.CN=
'數據庫概論'
AND (G=
90
OR G=
80);
3. 求選修了全部課程的學生學號、姓名及其所在系名。
-
-- 沒有一門課程是該學生沒有選修的
-
select S#, SN, SD
-
from S
-
where
NOT
EXISTS (
-
select *
-
from C
-
where
NOT
EXISTS (
-
select *
-
from SC
-
where SC.C#= C.C#
AND SC.S#=S.S#
-
));
4. 找出沒有學生選修的課程號及課程名稱。
-
select C
#, CN
-
from C
-
where C.C
# NOT IN (
-
select SC.C
#
-
from SC);
5. 列出選課數超過3門的學生學號、其所修課程數及平均成績。
-
select S#,
count(C#),
AVG(G)
-
from SC
-
group
by S#
-
having
count(C#)>
3;
6. 刪除“數據結構”課程及所有對它的選課情況。
-
-- 首先刪除SC中的數據
-
delete
from SC
-
where SC.C#
IN (
-
select C.C#
-
from C
-
where CN=
'數據結構');
-
-- 其次刪除C的數據
-
delete
from C
-
where Cname=
'數據結構';
題目08
下表為數據表Register的相關信息,請寫出創建該表的語句(PK代表主鍵)。字段名數據類型長度允許空。Id(PK) int8
Username varchar20
Password varchar20
-
create
table
Register(
-
id
int(
8) primary
key,
-
username
varchar(
20),
-
password
varchar(
20)
-
);
題目09
根據下表完成任務:(PK代表主鍵)
| stuId(PK) | sName | classId | professional |
| IIIT001 | zhangsan | IIIT20501 | software |
| IIIT002 | lisi | IIIT20501 | software |
| IIIT003 | wangwu | IIIT20501 | software |
| IIIT004 | zhaoliu | IIIT20501 | software |
1. 請找出stuId為IIIT003的學生信息。
-
select *
-
from StudentInfo
-
where stuId=
"IIIT003";
2. 在字段stuId上創建索引。
create unique index stuIndex ON StudentInfo(stuId);
3. 創建視圖查詢學生的stuId和sName。
-
create
view StuView
-
AS
-
select stuId, sName
-
from StudentInfo;
4. 創建存儲過程,通過輸入stuId對應的學生id號碼,輸出sName(學生姓名)。
-
-- 創建存儲過程
-
CREATE
PROCEDURE pro_inid_out_sName
-
@stuIdvarchar(
10),sNamevachar(
10)
OUTPUT
-
As
-
Begin
-
Select @sName=sName
-
from StudentInfo
-
where stuId=@stuId
-
end
-
-- 調用存儲過程
-
declare @sNamevarchar(
10)
-
execute pro_inid_out_sName ‘IIIT001’,@sName
output
參考文獻
王珊. 數據庫系統概論,高等教育出版社.
