Oracle上機練習題(六)
試卷總分:100
答題時間:240分鐘
1.
編寫SQL語句
對於教學數據庫的三個基本表
學生 S(S#,SNAME,AGE,SEX)
學習 SC(S#,C#,GRADE)
課程 C(C#,CNAME,TEACHER)
試用SQL語句表示:檢索Liu同學學的課程號。[2分]
SELECT C# FROM C WHERE C# IN
(SELECT C# FROM SC WHERE S# IN
(SELECT S# FROM S WHERE SNAME = 'Liu'));
設有關係模式:
Employees(ssn, name, sex, age, department)
其中:ssn爲員工號,name爲姓名,sex爲性別,age爲年齡,department爲工作部門。
2.
用SQL語句的數據定義語句,建立Employees表。其中員工號不能爲空且其值是唯一的。[2分]
CREATE table Employees(
ssn number not null unique,
name char(10),
sex char(2),
age number,
department char(50));
3.
用SQL語句的插入語句,將一名新員工的員工信息進行記錄
(員工號:07216008,姓名:笑笑,性別:女,年齡:24,所在部門:CS)。[2分]
insert into Employees
values(07216008,'笑笑','女',24,'CS');
4.
用SQL語句的修改語句,將員工笑笑的年齡改爲26。[2分]
update Employees
set age = 26 where name='笑笑';
5.
用SQL語句的查詢語句,查詢全體員工的姓名、性別和所在的部門。[2分]
select name,sex,department from Employees;
6.
用SQL語句的控制語句,把對Employees表的查詢權限授予用戶simon。[2分]
grant select on table Employees to simo;
建立一個學生關係表Student,表中有5個字段:學號Sno(字符型)、姓名Sname(字符型)、性別Sex(字符型)、年齡Age(整型)、系別Dept(字符型),其中Sno是關係的碼;
建立一個學生選課關係表SC,表中有3個字段:學號Sno(字符型)、課程號Cno(字符型)、成績Grade(數值型),其中Sno、Cno是關係的碼,
用SQL語言完成下列功能:
7.
建立學生關係表Student和學生選課關係表SC。[2分]
create table Student (Sno CHAR(8) NOT NULL UNIQUE,
Sname CHAR(18),
Sex CHAR(2),
Age INT,
Dept CHAR(20);
create TABLE SC (Sno CHAR(5) NOT NULL UNIQUE,
Cno CHAR(5) NOT NULL,
Grade SMALLINT,
8.
查詢計算機系(’CS’)所有同學的姓名和各科成績。[2分]
SELECT Sname,Cno,Grade FROM Student,SC where Sdept = 'CS' and
Student.Sno = SC.Sno;
9.
添加一個學生記錄,學號爲20020003,姓名爲吳剛,性別爲男,年齡爲19歲,所在係爲計算機系。[2分]
INSERT INTO Student VALUES('20020003','吳剛','男'.19,'計算機系');
10.
邏輯刪除李江同學的相關記錄。[2分]
DELETE FROM STUDENT WHERE Sname = '李江';
表1部門表
表2 職員表1
11.
根據表1和表2,用SQL語句創建僱員表和部門表
假設有僱員關係表格,它的結構如下:
僱員(僱員編號,僱員姓名,年齡,受僱時間,薪水,電話號碼,部門編號)。僱員編號爲主鍵,部門編號爲外鍵。
部門(部門編號,部門名稱,部門所在地)主鍵是部門編號[2分]
Create table 部門表 (部門編號 char(4) not null primariy key,部門名稱 char(12),部門所在地 char(4));
create table 僱員表 (僱員編號 char(4) not null primary key,
僱員姓名 char(12),年齡 int,受僱時間 datetime,薪水 decimal(7,2),
電話號碼 char(6),部門編號 char(4)
foreign key references 部門(部門編號));
12.
以遞增的方式列出職工的部門號碼(不重複);[2分]
select distinct 部門編號 from 僱員表 order by 部門編號 asc;
13.
查找AGE年齡爲35歲的職工全部信息;[2分]
select * from 僱員表 where 年齡=35;
14.
查詢在部門20或者30工作的,工資大於1600,年齡大於35歲的職工信息。[2分]
select * from 僱員表 where (部門編號=20 or 部門編號=30)and 工資>1600 and 年齡>35;
15.
計算最高,最低和平均工資;[2分]
select max(工資),min(工資) avg(工資) from 僱員表;
16.
找處職工不足3人的部門及其相應的職工數;[2分]
select 部門編號,count(*) from 僱員表 group by 部門編號 having count(*)<3;
17.
將部門號爲10部門所有人員工資提高20%;[2分]
update 僱員表 set 工資=工資+0.2*工資 where 部門編號=10;
18.
從僱員中找出工資大於平均工資的職工信息;[2分]
select * from 僱員表 where 工資>(select avg(工資) from 僱員表);
19.
刪除在部門10的,工資大於2500的職工信息;[2分]
DELETE FROM 僱員表 where 工資>2500 and 部門編號=10;
20.
從僱員表僱員中選取工資大於150元職工的僱員編號,僱員姓名,工資和部門編號,構成一個僱員工資視圖;[2分]
create view 僱員工資 (僱員編號,僱員姓名,工資,部門編號) as select 僱員編號,僱員姓名,工資,部門編號 from 僱員表 where 工資>150;
21.
查詢馬克所在部門名稱;[2分]
select 姓名,部門名稱 from 僱員表,部門表 where 僱員表.部門編號=部門編號;
以下各小題題基於教學數據庫的三個基本表
學生 S(S#,SNAME,AGE,SEX)
學習 SC(S#,C#,GRADE)
課程 C(C#,CNAME,TEACHER)
22.
檢索年齡小於23歲的男[2分]
select SNAME FROM S WHERE AGE<23;
23.
檢索"王蘭"同學不學的課程的課程號。[2分]
SELECT C#,CNAME FROM C WHERE C# NOT IN
(SELECT SC.C# FROM SC WHERE S.S# = SC.S# WHERE S.SNAME = '王蘭');
24.
檢索全部學生都選修的課程的課程號與課程名。[2分]
SELECT C#,CNAME FROM C WHERE C# IN
(SELECT C# FROM SC GROUP BY C# HAVING GROUP(S#)=(SELECT MAX(S#)FROM S));
25.
把低於總平均成績的女同學成績提5%。[2分]
UPDATE SC SET SC.GRADE = SC.GRADE*1.05 FROM WHERE SC.GRADE<(SELECT AVG(SC.GRADE) FROM SC)AND S.SEX='0';
設有如下4個關係模式:
S(SN,SNAME,CITY)
P(PN,PNAME,COLOR,WEIGHT)
J(JN,JNAME,CITY)
SPJ(SN,PN,JN,QTY)
其中:
S表示供應商,SN爲供應商編碼,SNAME爲供應商名字,CITY爲供應商所在城市;
P表示零件,PN爲零件編碼,PNAME爲零件名字,COLOR爲零件顏色,WEIGHT爲零件重量;
J表示工程,JN爲工程編碼,JNAME爲工程名字,CITY爲工程所在城市;
SPJ表示供應關係,QTY表示提供的零件數量。
寫出實現以下各題功能的SQL語句:
26.
取出所有工程的全部細節。[2分]
SELECT * FROM J;
27.
取出所在城市爲南京的所有工程的全部細節。[2分]
SELECT * FROM J WHERE CITY='南京';
28.
取出爲所在城市爲上海的工程提供零件的供應商編碼。[2分]
select SIDTINCT SN
FROM SPJ
WHERE JN IN
(SELECT JN
FROM J
WHERE CITY='上海');
29.
取出爲所在城市爲上海或北京的工程提供紅色零件的供應商編碼。[2分]
select SN FROM SPJ
WHERE JN IN
(SELECT JN FROM J WHERE CITY='上海' OR CITY='北京')
and PN IN
(SELECT PN FROM P WHERE COLOR='紅');
30.
取出供應商與工程所在城市相同的供應商提供的零件編碼。[2分]
select SPJ.PN FROM S,J,SPJ WHERE S.SN=SPJ.SN AND J.JN=SPJ.JN AND S.CITY=J.CITY;
31.
取出至少由一個和工程不在同一城市的供應商提供零件的工程編碼。[2分]
SELECT DISTINCT SPJ.JN FROM S,J,SPJ WHERE S.SN = SPJ.SN AND J.JN AND S.CITY<>J.CITY;
32.
取出上海供應商不提供任何零件的工程編碼。[2分]
SELECT JN FROM J WHERE JN NOT IN
(SELECT DISTINCT JN FROM SPJ WHERE SN IN
(SELECT SN FROM S WHERE CITY='上海'));
33.
取出所有這樣的一些<CITY,CITY>二元組,使得第1個城市的供應商爲第2個城市的工程提供零件。[2分]
select S.CITY,J.CITY FROM S,J,SPJ
WHERE S.SN=SPJ.SN AND J.JN=SPJ.JN;
34.
設銷售數據模型如下:
廠家 S (SNO,SNAME,CITY )
產品 P (PNO,PNAME,COLOR,WEIGHT)
工程 J (JNO,JNAME,CITY)
銷售 SPJ (SNO,PNO,JNO,QTY)
用SQL完成查詢:與“長風”在同一城市的廠家名。[2分]
以下給出三個基本表:
Student(學生表)的字段按順序爲學號、姓名、性別、年齡、所屬院系;
Course(課程表)的字段按順序爲課程編號、課程名、先行課程、課程學分;
SC(選課表)的字段按順序爲學號、課程號、成績。
各表的記錄如下:
35.
查詢與“劉晨”在同一個系學習的學生的學號、學生姓名。[2分]
SELECT 學號,姓名 from Student s where
s.所屬院系 = (select 所屬院系 from Student where 姓名='劉晨');
36.
將一個新學生記錄(03020;陳冬;男;18;IS)插入Student表中。[2分]
insert into Student values('03020','陳東','男',18,'IS');
37.
將計算機科學系(CS)全體學生的成績置零。[2分]
update CS set 成績=0;
38.
創建信息系(IS)選修了1號課程的學生的視圖IS_S1,字段包括Sno、Sname、Grade。[2分]
create view IS as select Sno,Sname,Grade from SC,Student where
SC.Sno = Student.Sno and SC.課程號=1;
東方貨運公司數據庫的樣本數據如下。
表名稱:卡車
車號 |
貨運站編號 |
類型 |
總行程 |
購入日期 |
1001 |
501 |
1 |
59002.7 |
11/06/90 |
1002 |
502 |
2 |
54523.8 |
11/08/90 |
1003 |
503 |
2 |
32116.6 |
09/29/91 |
1004 |
504 |
2 |
3256.9 |
01/14/92 |
表名稱:貨運站
貨運編號 |
地址 |
電話 |
經理 |
501 |
北京市東城區花市大街111號 |
010—67301234 |
何東海 |
502 |
北京市海淀花園路101號 |
010—64248892 |
吳明君 |
表名稱:型號
類型 |
汽車型號 |
1 |
DJS130 |
2 |
DLS121 |
根據數據庫的表結構和內容:
39.
指出每個表的主碼和外碼。如果沒有外碼,則寫“無”。[2分]
表名稱 主碼 外碼
卡車 車號 貨運站編號,類型
貨運站 貨運站編號 無
型號 類型 無
40.
卡車表存在實體完整性和參照完整性嗎?請詳細說明。[2分]
實體完整性:在主碼車號的這列中不存在空值
參照完整性:外碼“貨運站編號”這列中的值都是貨運站表中:貨運站編號"這列中的值,
外碼“類型”這列中的值都是型號表中“型號”這列中的值
41.
具體說明卡車表與運貨站表之間存在着什麼關係?[2分]
貨運站表和卡車表之間存在着一對多的關係,即每一個貨運站可以有多輛車。
42.
卡車表中包含多少個實體?[2分]
卡車表中包括4個實體,即表中每個元組(行)對應一個實體,每個實體就是一輛車。
43.
簡述比較表和視圖二者間的異同? [3分]
區別:
1、視圖是已經編譯好的sql語句;而表不是。
2、視圖沒有實際的物理記錄;而表有。
3、視圖是窗口;表是內容
4、標緻用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在;表可以即使對它修改,但視圖只能有創建的語句來修改。
5、表示內模式,視圖是外模式。
6、視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些sql語句的集合。從安全的角度來說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
聯繫:
視圖是在基本表之上建立的表,它的結構(即所有定義列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關係。
44.
簡述drop table和truncate table及delete from的區別?[5分]
1、delete是DML語言,可以回退,可以有空間的刪除
2、truncate table 是DDL語言,無法回退,默認所有的表的內容都刪除,刪除速度比delete 快
3、drop table 用於刪除表(表的結構,屬性以及索引也會被刪除)
45.
比較子查詢和連接查詢的異同?[3分]
1、子查詢就如遞歸函數一樣,有時侯使用起來能達到事半功倍之效,只是其執行效率同樣較低,有時用自身連接可代替某些子查詢,另外,某些相關子查詢也可改寫成非相關子查詢。
2、表連接都可以用子查詢,但不是所有子查詢都能用表連接替換,子查詢比較靈活,方便,形式多樣,適合用於作爲查詢的篩選條件,而表連接更適合與查看多表的數據。
3、子查詢是一種常用計算機語言SELECT-SQL語言中嵌套查詢下層的程序模塊。當一個查詢是另一個查詢的條件時,稱之爲子查詢。
4、子查詢是本質上就是一個完整 的SELECT 語句,它可以使一個 SELECT、SELECT...INTO 語句、INSERT...INTO 語句、DELETE 語句、或 UPDATE 語句或嵌套在另一子查詢中。子查詢的輸出可以包括一個單獨的值(單行子查詢)、幾行值(多行子查詢)、或者多列數據(多列子查詢)。
5、連接查詢是關係數據庫中最主要的查詢,主要包括內連接、外連接和交叉連接等。通過連接運算符可以實現多個表查詢。連接是關係數據庫模型的主要特點,也是它區別於其它類型數據庫管理系統的一個標誌。
46.
簡述事務的四大特性?[5分]
1、原子性
事務是數據庫的邏輯工作單位,事務中包含的各操作要麼都做,要麼都不做 。
2、隔離性
一個事務的執行不能其它事務干擾。即一個事務內部的操作及使用的數據對其它併發事務是隔離的,併發執行的各個事務之間不能互相干擾。
3、一致性
事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。比如,當數據庫只包含成功事務提交的結果時,就說數據庫處於一致性狀態。如果數據庫系統在運行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處於一種不正確的狀態,或者說是不一致的狀態。
4、持續性
指一個事務一旦提交,它對數據庫中的數據的改變就應該是永久性的。接下來的其它操作或故障不應該對其執行結果有任何影響。