1. oracle練習。用sql語句建表
(1)
create table customer(
"客戶編號" number(8),
"客戶名稱" varchar2(40),
"客戶電話" varchar2(20)
);
(2)
insert into customer values(1,'客戶1','13900000001');
insert into customer values(2,'客戶2','13900000002');
insert into customer values(3,'客戶3','13900000003');
insert into customer values(4,'客戶4','13900000004');
insert into customer values(5,'客戶5','13900000005');
insert into customer values(6,'客戶6','13900000006');
insert into customer values(7,'客戶7','13900000007');
insert into customer values(8,'客戶8','13900000008');
insert into customer values(9,'客戶9','13900000009');
insert into customer values(10,'客戶10','13900000010');
(3)
select * from customer where rownum>=4 and rownum<=6;
2. SQL資料庫練習題
1. SQL Server 2000是典型的關系型資料庫產品。 ( 1 )
2. 在一台計算機上可以同時運行多個版本的SQL Server。 ( 1 )
3. 在SQL Server中日誌文件是維護資料庫完整性的重要工具。 ( 0 )
4. 在定義數據表時,定義某列為標識列的關鍵字是Identity。 ( 1 )
5. 浮點數據類型的優點是能夠存儲范圍非常大的數字,但容易發生誤差。 ( 0 )
6. 資料庫完整性的目的是為了防止錯誤信息輸入和輸出。 ( 0 )
7. 在Update語句中,一次可以更新多個表。 ( 0)
8. 盡量使用Select * ,可以加快查詢速度。 ( 0 )
9. 在SQL Server 2000中表示注釋可以用類似C語言的/*...*/和//。 ( 0 )
10. 在SQL Server中,RTRIM函數刪除字元串右邊的空白字元。 ( 1 )
11. 一個表只能有一個聚集索引(簇索引)。 ( 1 )
12. SQL查詢語言中,如果沒有指定排序方式,則默認是升序方式。 ( 1 )
13. 在SQL Server 2000中ntext類型的欄位不能進行排序操作。 ( 0 )
14. 在SQL Server 2000中bit類型的欄位不能建立索引。 ( 1 )
15. 在被定義為唯一索引的列上的數據不能有重復的值。 ( 1 )
16. 在被定義為唯一索引的列上的數據不允許空。 ( 0可以的但是只能有一個null值 )
17. 在SQL Server中,每張表都應該建立一個索引,以提高查詢速度。 ( 0 )
18. 視圖在SQL Server中是一張虛擬表。 ( 1 )
19. 當一個視圖由2個以上基本表構成時,不能進行刪除視圖中的數據。 ( 0 )
20. 在SQL Server中,觸發器是一種特殊的存儲過程。 ( 1 )
21. 由於存儲過程是解釋執行,所以每次執行時都要檢查是否有語法錯誤。 ( 0 )
22. 可以在用戶正在使用的資料庫上執行資料庫恢復操作。 ( 0 )
1表示正確
3. 寫出創建如下三張數據表的SQL語句。
在SSMS中,用【創建表】來設計,包括約束;然後保存,選中該新表,右鍵【編寫表腳本】,SQL就有了
項目」表結構:項目號:普通編碼定長字元類型,長度為10,主鍵。項目寫出創建如下三張表的sQL語句。
按照要求用SQL語句創建表格:選課表:表名——SC屬性:Sno字元型,最大7個字元表示學生學號。
Cno字元型,最大4個字元表示課程號。Grade整型表示成績。約束:主碼——Sno,Cno;Sno,Cno均為外碼)
4. SQL、關系代數練習
一、
--1.建立學生表Student,其中以學號為主碼,以系號為外碼,姓名不可以為空值,性別取值為「男」或「女」
CREATETABLEStudent
(
Sno INT,
Name VARCHAR(20) NOTNULL,
Gender CHAR(2),
Class VARCHAR(20),
Major VARCHAR(20),
Dno CHAR(2)
CONSTRAINTpk_Student_SnoPRIMARYKEY(Sno),
CONSTRAINTfk_Student_DnoFOREIGNKEY(Dno)REFERENCESDept(Dno),
CONSTRAINTchk_Student_GenderCHECK(GenderIN('男','女'))
)
--2.檢索與「王強」在同一個班級的學生的學號、姓名、性別
SELECTSno,Name,Gender
FROMStudent
WHEREClass=(='王強')
--3.檢索管理學院沒有選修「電子商務」課程的學生的學號、姓名、班級、專業
SELECTS1.Sno,Name,Class,Major
FROMStudentS1
JOINDeptD
ONS1.Dno=D.Dno
WHEREDname='管理學院'
ANDSnoNOTIN
( SELECTS2.SnoFROMStudyS2
JOINCourseC
ONS2.Cno=C.Cno
WHERESubject='電子商務')
--4.檢索選修了「C語言」且C語言考試成績高於這門課平均成績的學生的學號、姓名
SELECTS1.Sno,Name
FROMStudentS1
JOINStudyS2
ONS1.Sno=S2.Sno
JOINCourseC1
ONS2.Cno=C1.Cno
WHERESubject='C語言'
ANDScore>( SELECTAVG(Score)
FROMStudyS3
WHERES3.Cno=S2.Cno)
--5.在院系表(Dept)中插入一條記錄,系號為06,系名為「物理系」,電話為8470660
INSERTINTODempVALUES('06','物理系','84706600')
--6.將「資料庫原理」課程的學時改為64,學分改為4
UPDATECourse
SETTime=64,
Credit=4
WHERESubject='資料庫原理'
--7.建立由班級、學號、姓名、課程號、課程名、學分、成績七個數據項組成的視圖
CREATEVIEWVW_SC
AS
SELECTClass,Sno,Name,Cno,Subject,Credit,Score
FROMStudentS1
JOINStudyS2
ONS1.Sno=S2.Sno
JOINCourseC
ONS2.Cno=C.Cno
二、
2.
5. 我想練習sql語句,請問如何做呢
安裝一個資料庫伺服器,建立一個庫。
然後先做這些練習吧,語句都加了注釋了
/*
建立一個由3個文件組成的資料庫,資料庫名稱為test。
主數據文件邏輯名稱為test_data,物理文件名c:\test_data.mdf;
輔助數據文件邏輯名稱為test_data2,物理文件名c:\test_data2.ndf;
日至文件邏輯名稱為test_log,物理文件名c:\test_log.ldf;
所有文件初始尺寸為3mb,可以自動增長,最大尺寸為15mb。
*/
create database test on
primary
(
name=test_data,
filename='c:\test_data.mdf',
size=3mb,
maxsize=15mb,
filegrowth=1mb
),
(
name=test_data2,
filename='c:\test_data2.ndf',
size=3mb,
maxsize=15mb,
filegrowth=1mb
)
log on
(
name=test_log,
filename='c:\test_log.ldf',
size=3mb,
maxsize=15mb,
filegrowth=1mb
)
/*
創建一個名為employees的表,該表由5個欄位組成:emp_id(員工編號)、ename(員工名稱)、
age(年齡)、title(職務)、salary(薪水)。其中emp_id為該表的主鍵。該表存放在主文件組。
*/
use test
go
CREATE TABLE employees(
emp_id char (4) primary key,
ename nvarchar (10) NOT NULL,
age tinyint NOT NULL,
title nvarchar (10) NULL,
salary money NULL,
) ON [PRIMARY]
--向employees表插入部分數據
insert into employees values('0001','楊建新','22','經理','3000')
insert into employees values('0002','楊建新','23','職員','4000')
insert into employees values('0003','楊建新','24','總經理','5000')
insert into employees values('0004','楊建新','26','職員','2000')
--創建備份設備test_bak,其位置為c:\backup\test_bak.bak
sp_admpdevice 'disk','test_bak','c:\backup\test_bak.bak'
--建立資料庫test的完整備份到備份設備test_bak,並命名為test_full_bak1
backup database test to test_bak with name='test_full_bak1'
--向employees表插入新數據
insert into employees values('0005','王建新','24','總經理','1000')
insert into employees values('0006','劉建新','26','職員','2000')
--執行test資料庫的事務日誌備份,該備份追加到備份設備test_bak,命名為test_log_bak1
backup log test to test_bak with name='test_log_bak1'
--截斷employees表,清空內容(記錄此時的時間)
truncate table employees
--備份資料庫的尾部日誌
use master
go
backup log test to test_bak with name='test_log_recovery',norecovery
--恢復資料庫的完整備份,並且不要執行還原進程(norecovery)
restore database test from test_bak with file=1,norecovery
--恢復第一個日誌備份,如果此時執行recovery,將得到所有數據
restore log test from test_bak with file=2,recovery
--如果執行上述語句時,使用norecovery選項,則可以繼續恢復第二個日誌備份,即尾部日誌
restore log test from test_bak with file=2,norecovery
restore log test from test_bak with file=3,recovery
--如果按照上述操作,則恢復完成後employees表中沒有任何數據,因為尾部日誌中包含清空表的操作
--若要恢復所有數據,也可以恢復到時間點到清空時間之前
restore log test from test_bak with file=3,stopat='2008-11-16 11:25:00'
--添加一個名為mike,密碼為123456的login賬戶,該賬戶的默認資料庫為northwind
sp_addlogin 'mike','123456','northwind'
--切換到northwind資料庫
use northwind
go
--將登錄賬戶mike映射為當前資料庫中的用戶
sp_grantdbaccess 'mike','mike' --或:sp_adser 'mike','mike'
--建立資料庫角色accessdata
sp_addrole tablecreate
--為資料庫角色tablecreate賦予創建表的許可權
grant create table to tablecreate
--將用戶mike加入到角色tablecreate中
sp_addrolemember 'tablecreate','mike'
--賦予用戶mike對procts表的插入數據許可權
grant insert on procts to mike
--撤銷用戶mike對procts表的許可權
revoke insert on procts from mike
--察看角色信息
sp_helprole tablecreate
--察看角色包括的成員
sp_helprolemember tablecreate
--在角色tablecreate中刪除成員mike
sp_droprolemember 'tablecreate','mike'
--刪除角色tablecreate
sp_droprole tablecreate
--刪除資料庫用戶賬戶
sp_revokedbaccess 'mike'
--刪除登錄帳號
sp_droplogin 'mike'
6. sql練習:查詢所有課程成績小於60 分的同學的學號、姓名;
(2)這么寫坑定不對,這么寫得出的答案是「上過那個老師的課程的學生」而不是「上過那個老師所有課程的學生」,而且那個答案效率太低,還不如這個:
select sno,sname from student
where sno in(select sno from sc
where cno in (select cno from course
where tno in (select tno from teacher where tname='諶燕')));