1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tài liệu Ôn thi cơ sở dữ liệu

49 170 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 49
Dung lượng 60,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu ôn thi, mẫu các bài tập môn cơ sở dữ liệu

Trang 1

Tao cac bang trong sv

Bang lop

create table lop

( malop char(10) primary key,

tenlop nvarchar(50))

-xem cau truc

exec sp_help lop

xoa bang lop

drop table lop

tu dinh nghia ten RBTV

create table lop

( malop char(10) constraint p_lop primarykey(malop),

tenlop nvarchar(50))

create table sinhvien(

masv char(10) constraint p_sinhvien primarykey(masv),

malop char(10) foreign key (malop)

Trang 2

madt char(10) constraint p_detai1 primarykey(madt),

tendt nvarchar(30),

kp float

check (kp between 5000000 and 10000000),

GVhd nvarchar(30), namtk int)

tao tt

create table tt(

madt char(10) not null,

masv char(10) not null,

ntt nvarchar(50),

kqtt float check(kqtt >=0 and kqtt<=10),

constraint p_tt primary key(madt, masv),

constraint f1_tt foreign key(madt)

sua doi cau truc bang

1 tao them cot gt, kqht vao bang sinhvien

alter table sinhvien add gt bit check(gt in (1,0))

alter table sinhvien add kqht float

2 doi kieu du lieu cua gr thanh nvarchar(3)

alter table sinhvien

drop constraint CK sinhvien gt 1DE57479 alter table sinhvien

Trang 3

alter column gt nvarchar(3)

3 xoa cot

alter table sinhvien

drop column gt

4 them rang buoc tren cot kqht

alter table sinhvien

add constraint c_kqht

check (kqht between 0 and 10)

exec sp_helpconstraint sinhvien

5 Xoa rang buoc tren cot kqht

alter table sinhvien

drop constraint c_kqht

bai 22 truy van va cap nhat

22.1 Cap nhat

22.1.1 nhap du lieu, (bo sung du lieu)

select * from detai

exec sp_helpconstraint detai

chen 1 ban ghi

insert into detai1(MAdt, tendt,gvhd, kp, namtk)

values ('dt05', 'Thiết kế ccc', 'M', 5000000,2000 )insert into detai1(MAdt, tendt,gvhd, kp, namtk)

values ('dt06', 'Thiết kế mmm', 'T', 6000000, 2003)insert into detai1(MAdt, tendt,gvhd, kp, namtk)

values ('dt07', 'Thiết kế ttt', 'G', 9000000, 2004) chen nhieu ban ghi từ bảng khác sang

bang dt1 co cau truc gan giong dt

(số cột của bang dt1>= số cột của dt)

insert into detai(madt, tendt, GVhd, kp)

Trang 4

select madt, tendt, gvhd, kp

from detai1

select * from detai

22.1.2.sua du lieu

select * from detai

sua kp cua dt01 thành 10 triệu

lay 2 cot trong sv:

hien thi thong tin cua sv gom: masv, ht

Select masv, ht into svtam

from SV

Trang 5

select * from svtam

hien thi thong tin cua sv: masv, ht, tuoi

select masv, ht, 'tuoi'=(year(GETDATE()) namsinh)

-from sv

sap xep tuoi tang dan

select masv, ht, 'tuoi'=(year(GETDATE()) namsinh)

-from sv

order by (year(GETDATE()) - namsinh) desc

-Hien thi sv: masv, ht, 'tuoi' co tuoi >=24

select masv, ht, 'tuoi'=(year(GETDATE()) namsinh)

-from sv

where (year(GETDATE()) - namsinh) >=24

order by (year(GETDATE()) - namsinh) desc

muon luu kq truy van vao 1 bang moi

select * from svmoi

select masv, ht into svtam

from SV

Trang 6

-select * from svtam

truy van co cot moi

Thong tin cua sv: masv, ht, tuoi ( là côt mới)

select masv, ht, namsinh)

Trang 7

Hien thi thong tin cua cac de tai co kp tu 6t den7t

in (not in)

hien thi thong tin cua sv co nam sinh

la mot trong cac nam: 1980,1986, 1989

select * from sv

where namsinh in (1980,1986, 1989)

select * from sv

where namsinh not in (1980,1986, 1989)

where namsinh = 1980 or namsinh=1986 ornamsinh= 1989

select 8*9

-truy van tren nhieu bang

c1: hien thi thong tin gom: masv, ht, kqht, kqtt

Trang 8

from SV inner join tt on SV.MASV=tt.masv

-vd23: hien thi thong tin cua sv co kqht>kqtt,

thong tin gom: sv.masv, ht, kqht, kqtt

desc asc hien thi thong tin gom: masv, ht, namsinh

cua cac sv thuoc nhung lop dai hoc

select masv, ht, namsinh, lop.malop

Trang 9

select masv, ht from svmoi

25.2 truy van long

Hien thi thong tin gom:

Masv, ht, namsinh cua cac sv thuoc lop: 'DAIHOC K1'

Trang 10

select Masv, ht, namsinh

Phu định của exists là not exists

vd2 : hien thi thong tin cua cac sv tre tuoi nhat

Trang 11

- vd3: hien thi thong tin cua cac sv TUOI CAO NHAT

-vi du truy van con co toan tu : any, some, all

hien thi thong tin: masv, ht cua cac sv co kqht cao nhat

Trang 12

where lop.malop=sv.malop and

sv.masv =tt.masv and kqtt=

( select MAX(kqtt)

from tt

)

Toan tu some

select madt, tendt, kp from dt

where kp>=any (select kp from dt wherekp=7000000)

-distinct

select madt, tendt, kp from dt

Trang 13

where kp ! < some (select kp from dt wherekp=7000000)

-tuong duong

select madt, tendt, kp from dt

where kp <> (select distinct kp from dt wherekp=7000000)

-BAI 28

VD1:dem so luong sv trong csdl

select count(masv) from sv

select count(QQ) from sv

DEM XEM Co bao nhieu tinh khácn nhau có trong cột qq

select count(distinct QQ) from sv

SELECT * FROM SV

SELECT COUNT (distinct NAMSINH) FROM SVselect distinct malop from sv

vd2:ket qua ht cao nhat

select MAX(kqht) from sv

select MAX(kqht) as kqmax, min(kqht) as kqmin, 'kqtb'=avg(kqht), 'tongkq'=sum(kqht) from sv

tuoi trung binh cua tat ca cac sv

select AVG(YEAR(getdate())-namsinh) from sv

select MIN(hiredate), MAX(hiredate)

from humanresources.Employee

select * from humanresources.Employee

-v4 : cho biet tong kinh phi cap cho tat ca cac dt

select SUM(kp) from dt

Trang 14

6700000+6700000+7700000+8700000+7000000+6+7000000+6000000+6000000

28.2 gom nhom

vd1: dem so luong sv cua moi lop

: malop, TENLOP, slsv (đây là tt tự đặt)

1

select LOP.MALOP,TENLOP,count(masv) as slsvfrom SV, LOP

group by LOP.MALOP,TENLOP

3

select LOP.MALOP,TENLOP, count(masv) as slsvfrom LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

group by LOP.MALOP,TENLOP

-4 hien thi malop, slsv

select LOP.malop, count(masv) as slsv

from LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

group by LOP.malop

Trang 15

vd2: dem so lương sv tham gia moi de tai: madt, tendt, slsvtg

select dt.madt, tendt, 'slsvtg'=COUNT(masv)

from dt left join tt on dt.MAdt=tt.madt

group by dt.madt, tendt

-Hien thi thong tin cua cac dt chưa co sv nao tg C1:

from dt left join tt on dt.MAdt=tt.madt

group by dt.madt, tendt, gvhd, kp

having COUNT(masv)=0

vd3:DEM slsv cua lop co ma 'tk1', 'tk4'

th1: malop, slsv

select LOP.malop, count(masv) as slsv

from LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

where lop.malop in('tk1', 'tk4')

Trang 16

from LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

where lop.malop in('tk1', 'tk4')

group by tenlop

th3: malop, tenlop, slsv

select LOP.malop,tenlop, count(masv) as slsv

from LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

where lop.malop in('tk1', 'tk4')

group by LOP.malop, tenlop

having lop.malop in('tk1', 'tk4')

vd4: hien thi thong tin ve cac dt co slsv thsm

gia>=2

thong tin gom: madt, tendt, slsvtg

select dt.madt, tendt, 'slsvtg'=COUNT(masv)

from dt left join tt on dt.MAdt=tt.madt

group by dt.madt, tendt

having COUNT(masv)>=2

vd5: dt co svtg dong nhat

select dt.madt, tendt, 'slsvtg'=COUNT(masv)

from dt left join tt on dt.MAdt=tt.madt

group by dt.madt, tendt

Trang 17

-vd4 dem so luong sv cua moi lop, sv co que ohy

select LOP.malop, Tenlop, count(masv) as slsv

from LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

select sv.MASV, ht, round(avg(kqtt),1)as kqtttb

from sv left join tt on sv.MASV=tt.masv

select sv.MASV, ht, sum(kqtt) as tongkqtt

from sv left join tt on sv.MASV=tt.masv

where malop in('tk1','tk4')

group by sv.MASV, ht

vd7:hien thi thông tin cua cac lớp có sl sv>=2

select LOP.malop, Tenlop, count(masv) as slsv

Trang 18

from LOP LEFT JOIN sv ONLOP.MALOP=SV.MALOP

group by LOP.malop, Tenlop

-28.3.truy van con o mênh đề from

hien thi thong tin cua lop có

sinh vien tên là 'Nguyen Mai Anh'

Trang 19

-select * from svtam2

where upper(gt)='NU' and lower(qq)='hy'

Thong tin lay tu >=2 bang

c1

sinhvien.masv,hoten,year(ngaysinh) as namsinhfrom lop inner join sinhvien onlop.malop=sinhvien.malop

select s.masv, s.ht, m.tenmon, d.diem

from sv s, monhoc m, bdiem d

where s.masv=d.masv and d.mamon=m.mamon and year(s.ns) between 1987 and 1990

Trang 20

masv='sv02' or masv='sv08'

cach2

where masv not in ('sv02','sv04','sv08')

order by masv desc

Dem so luong sv cua moi lop: malop, slsv:tt

select lop.malop, tenlop, 'slsv'=count(masv)

from lop left join sinhvien onlop.malop=sinhvien.malop

group by lop.malop, tenlop

Dem so luong sv cua moi lop: malop, tenlop, slsv:tt tu dat

cac lop co so luong sv>3

select lop.malop, tenlop, 'slsv'=count(masv)

from lop left join sinhvien onlop.malop=sinhvien.malop

group by lop.malop, tenlop

having count(masv) >3

lop nhieu scv nhat

select lop.malop, tenlop, 'slsv'=count(masv)

from lop left join sinhvien onlop.malop=sinhvien.malop

group by lop.malop, tenlop

having count(masv) >=all

Trang 21

(select COUNT(masv) from sinhvien group bymalop)

-dem xem lop tk38 co bai nhieu sv

select lop.malop, tenlop, 'slsv'=count(masv)

from lop left join sinhvien onlop.malop=sinhvien.malop

group by all lop.lopid

Dua ra thong tin cua cac lop co slsv>=4:malop,tenlop, slsv

select lop.lopid,lop.tenlop, slsv=count(sv.masv) from sv, lop

where lop.lopid=sv.lopid

group by all lop.lopid,lop.tenlop

having count(sv.masv)>=4

thong tin sv co tuoi cao nhat

select masv, hoten, noisinh,

'tuoi' =DATEDIFF(yy, ngaysinh, GETDATE())

from sinhvien

where DATEDIFF(yy, ngaysinh, GETDATE())>=all(select DATEDIFF(yy, ngaysinh, GETDATE())

Trang 22

from sinhvien where noisinh is not null)

thong tin sv chua tham gia mon hoc nao

select * from sinhvien

where masv not in (select masv from diemthi)

c2

select * from sinhvien

where not exists (select * from diemthi

where sinhvien.masv=diemthi.masv)

dem so luong mon hoc

select count(mamon)as slmh

from monhoc

-tinh diem trung binh lan 1 cho cac sv

'dtb'=round(SUM(diemthi.diemlan1*monhoc.sotc)/SUM(monhoc.sotc),2)

from sinhvien s, diemthi, monhoc

diemthi.mamon=monhoc.mamon

group by s.masv, hoten

-dua ra mon hoc co sotc dung thu 2

select mamon, tenmon, sotc

- tao ra bang moi

select masv, ht, ns, qq into svtam

Trang 23

from sv

drop table svtam

exec sp_helpconstraint svtam

select * from svtam

delete from svtam

declare @tam table

exec sp_help svtam

DECLARE @moi table (

ma nchar(20),

ht nvarchar(100), ngaysinh datetime,

que nvarchar(80))

delete from svtam

output deleted.* into @moi

-Hien thi thong tin gom: lopid, tenlop

cua cac sinh vien co que o 'Hy' va diem>= 8

c1

select distinct lop.lopid,lop.tenlop

from lop, sv, bdiem

where (lop.lopid=sv.lopid) and

(sv.masv=bdiem.masv) and (bdiem.diem>=8)

and (sv.qq='Hy')

Trang 24

c2:select lopid,tenlop

from lop

where lopid in (select lopid

from sv where

(qq='Hy' )and masv in

(select masv from bdiem

where diem>=8))

sinh vien co tuoi cao nhat

select masv, ht, tuoi =2008- year(ns)

select * from lop

where not exists (select *

from sv

where lop.lopid=sv.lopid)

Tinh diem trung binh cho moi sv

select sv.masv, sv.ht, sv.ns,

Trang 25

insert into sv2 values('sv13','Nguyen thanh')

insert into sv2 values('sv16','Nguyen Lan')

constraint pk_SachMuon primary key(masach,madocgia),

constraint fk_Sach_SachMuon foreignkey(masach)

references Sach(masach),constraint fk_Docgia_sachmuon foreignkey(madocgia)

Trang 26

references Docgia(madocgia)) Sach cua tac gia “nguyen van a”

select *from Sach where tacgia='nguyen van A'

create table Sach(masach varchar(15)primarykey not null,tensach nvarchar(100),tacgianvarchar(100))

ngay muon

drop proc sp_Ngaymuon

end else

print 'Khong ton tai doc gia nay' return -1

exec sp_Ngaymuon 'dg01','s01'

Tao view

drop View Vsachmuon

create View Vsachmuon as

(select

Docgia.madocgia,docgia.tendocgia,sach.tensach,sachmuon.ngaymuon

From docgia,sach,sachmuon

Trang 27

where (docgia.madocgia=sachmuon.madocgiaand sach.masach=sachmuon.masach and

tendocgia='nguyen thi bac'))

select * from Vsachmuon

Để tìm một khóa của lược đồ chúng ta có thể làm như sau:

Bước 2: Lần lượt xét các thuộc tính của siêu khóa K,

giả sử xét thuộc tính A thuộc K, ta sẽ tính bao đóng của tập (K\A), nếu (K\A) + = U thì ta sẽ gán K =K\A Và khi xét đến thuộc tính cuối cùng trong K, giá trị K cuối cùng nhận được chính là một khóa của lược đồ.

Minh họa cụ thể như sau:

Trang 28

+ Xét A, tính bao đóng của (K\A), (K\A) + = (CDGH) + =

A.

+ Xét C, tính bao đóng của (K\C), (K\C) + = (ADGH) + =

vậy loại C ra khỏi K, tức là K = ADGH.

+ Xét D, tính bao đóng của (K\D), (K\D) + = (AGH) + =

K.

+ Xét G, tính bao đóng của (K\G), (K\G) + = (ADH) + =

loại G ra khỏi K K= ADH

+ Xét H, tính bao đóng của (K\H), (K\H) + = (AD) + = AD

≠ U , do vậy không loại H ra khỏi K

Kết luận: khóa của lược đồ là ADH.

b) Cho lược đồ quan hệ: =(U,F) với U=ABCDEGH

}, hãy tìm một khóa của lược đồ.

c) Cho lược đồ quan hệ =(U,F) với U=ABCDEGH

F={AG  CBE, AC  BCG, GDBA, ACHHE, CG  BDE } hãy tìm một khóa của lược đồ.

một khóa của lược đồ.

Bài 1.6:Bài tập về tìm tất cả các khóa của lược đồ

Yêu cầu chung: Với một lượt đồ quan hệ đã biết, hãy

áp dụng thuật toán để tìm ra tất cả các khóa của lược đồ.

Trang 29

Cho lược đồ quan hệ  = (U, F) để tìm tất cả các khoá

B1) Xác định I

nhất là I và kết thúc thuật toán Ngược lại I+  U thì chuyển sang bước tiếp theo.

B3) Xác định N={  ( R i -L i ) sao cho L i  I  }

- đặt N’=(I N) + \ I ( N’ N  )

- đặt B=U \N’ \ I

B4) Nếu | B |=2 (tập B chỉ gồm có hai thuộc tính), giả

sử B=B 1 B 2 khi đó lược đồ chỉ có hai khoá là IB 1 và

IB 2 , kết thúc thuật toán Ngược lại nếu | B |>2 thì chuyển sang bước tiếp theo.

B5) Tìm tất cả các tập con khác rỗng của B, ký hiệu các tập con đó là {B 1 , B 2 , B n } Tính (B i I  ) + (i=1 n), nếu (B i I  ) + = U thì đặt M i =B i I 

B6) Khi đó M= {M 1 , M 2 , …, M h } là họ tất cả các siêu khoá của lược đồ 

B7) Loại bỏ các siêu khoá không tối tiểu ra khỏi M, tức

là nếu M i M j (*) (  ij, i, j=) thì loại M j ra khỏi M Tập M thu được sau khi loại bỏ tất các phần tử thoả mãn biểu thức (*) chính là họ tất cả các khoá của lược đồ .

Nhận xét:

Trang 30

- Từ một tập B gồm n phần tử ta có thể lập lên 2 n -1 tập con khác rỗng của B Cho nên dù n là một số không

bài toán tìm tất cả các khoá của lược đồ quan hệ có thể coi là một bài toán khó (vì có độ phức tạp thuật toán là hàm mũ).

- Nếu I+ U và tập B chỉ gồm hai phần tử (giả sử B=B 1 B 2 ) thì suy ra lược đồ chỉ có hai khoá là I  B 1 và

I  B 2

Bài tập

a) Cho lược đồ quan hệ = (U, F) với U=ABCDEGH,

cả các khoá của lược đồ

N’=(I N) + \ I =(ABCDH) + \ ABC = DH  N 

B=U \ N \ I = ABCDEGH \ ABC \ DH =EG

B4) Do B có hai thuộc tính, mặt khác (I ) +  U nên lược

đồ đã cho có nhiều khoá, do vậy lược đồ này có hai khoá là I  E =ABCE và I   G= ABCG.

Trang 31

b) Cho lược đồ quan hệ  = (U, F) với

U=ABCDEGHQ,

F={ ABC ADH, ABGQEH, AEDG, CQEH} Hãy

tìm tất cả các khoá của lược đồ

N’=(I N) + \ I =(ABCDH) + \ ABC = DH  N 

B4) Do |B| >2 do vậy chúng ta sẽ chuyển sang bước 5 B5) Tập các tập con khác rỗng của B là {E, G, Q, EG,

Tương tự cho tập, ABCEG, ABCEQ, ABCGQ cũng

được thêm vào M.

B6) tập các siêu khóa của lược đồ là M = {ABCE,

ABCG, ABCQ, ABCEG, ABCEQ, ABCGQ}

Ngày đăng: 25/10/2018, 10:20

TỪ KHÓA LIÊN QUAN

w