Tải bản đầy đủ (.docx) (5 trang)

Bài giải Bài Thực hành số 03 SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (68.28 KB, 5 trang )

A. Tạo cơ sở dữ liệu

CREATE DATABASE THUC_HANH_SQL_3;
PRINT 'THUC_HANH_SQL_3'
GO
USE THUC_HANH_SQL_3
CREATE TABLE TACPHAM (
NT int NOT NULL,
tua varchar(500),
tacgia varchar(500),
PRIMARY KEY (NT)
);
CREATE TABLE DOCGIA (
ND int NOT NULL PRIMARY KEY,
ho varchar(500),
ten varchar(500),
dchi varchar(500),
tel varchar(500)
);
CREATE TABLE SACH (
NS int NOT NULL PRIMARY KEY,
nxb varchar(500),
NT int FOREIGN KEY REFERENCES TACPHAM(NT)
);
CREATE TABLE MUON (
NS int not null,
ngaymuon date NOT NULL,
hantra date,
ngaytra date,
PRIMARY KEY (NS, ngaymuon),
FOREIGN KEY (NS) REFERENCES SACH(NS),


ND int FOREIGN KEY REFERENCES DOCGIA(ND)
);
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO
INTO
INTO
INTO

TACPHAM
TACPHAM
TACPHAM
TACPHAM
TACPHAM
TACPHAM
TACPHAM

INSERT
INSERT
INSERT
INSERT

INSERT

INTO
INTO
INTO
INTO
INTO

DOCGIA
DOCGIA
DOCGIA
DOCGIA
DOCGIA

VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES

VALUES
VALUES
VALUES
VALUES
VALUES

(1,
(2,

(3,
(4,
(5,
(6,
(7,

(1,
(2,
(3,
(4,
(5,

'Tac
'Tac
'Tac
'Tac
'Tac
'Tac
'Tac

pham
pham
pham
pham
pham
pham
pham

'Nguyen
'Nguyen

'Nguyen
'Nguyen
'Nguyen

1',
2',
3',
4',
5',
6',
8',

Van',
Van',
Van',
Van',
Van',

'Tac
'Tac
'Tac
'Tac
'Tac
'Tac
'Tac

gia
gia
gia
gia

gia
gia
gia

1');
2');
3');
4');
5');
5');
3');

'A', 'Can Tho', '0987654321');
'B', 'Can Tho', '0987654321');
'C', 'Can Tho', '0987654321');
'D', 'Can Tho', '0987654321');
'E', 'Can Tho', '0987654321');


INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT

INTO

INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO

SACH
SACH
SACH
SACH
SACH
SACH
SACH
SACH
SACH

VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES

(1,

(2,
(3,
(4,
(5,
(6,
(7,
(8,
(9,

'Nha
'Nha
'Nha
'Nha
'Nha
'Nha
'Nha
'Nha
'Nha

xuat
xuat
xuat
xuat
xuat
xuat
xuat
xuat
xuat

ban

ban
ban
ban
ban
ban
ban
ban
ban

1',
2',
3',
4',
5',
5',
5',
5',
4',

1);
2);
3);
4);
5);
4);
4);
4);
3);

--CONVERT(target_type, expression, date_style) date_style: 110 (MM-DDYYYY)

INSERT INTO MUON VALUES (1, CONVERT(datetime,'10-23-2021', 110),
CONVERT(datetime,'10-28-2021', 110), null, 1);
INSERT INTO MUON VALUES (2, CONVERT(datetime,'10-21-2021', 110),
CONVERT(datetime,'10-26-2021', 110), null, 2);
INSERT INTO MUON VALUES (3, CONVERT(datetime,'10-22-2021', 110),
CONVERT(datetime,'10-27-2021', 110), null, 3);
INSERT INTO MUON VALUES (4, CONVERT(datetime,'10-23-2021', 110),
CONVERT(datetime,'10-28-2021', 110), null, 4);
INSERT INTO MUON VALUES (5, CONVERT(datetime,'10-24-2021', 110),
CONVERT(datetime,'10-29-2021', 110), null, 5);
INSERT INTO MUON VALUES (6, CONVERT(datetime,'10-20-2021', 110),
CONVERT(datetime,'10-25-2021', 110), null, 5);
INSERT INTO MUON VALUES (6, CONVERT(datetime,'10-20-2020', 110),
CONVERT(datetime,'10-25-2020', 110), null, 2);
INSERT INTO MUON VALUES (6, CONVERT(datetime,'10-21-2020', 110),
CONVERT(datetime,'10-26-2020', 110), null, 2);

B. Truy vấn
--1. Xem dữ liệu tất cả các bảng
select * from TACPHAM
select * from SACH
select * from MUON
select * from DOCGIA
select * from DOCGIA join MUON on DOCGIA.ND = MUON.ND join SACH on
MUON.NS = SACH.NS join TACPHAM on SACH.NT = TACPHAM.NT;
--2. Vẽ sơ đồ liên thơng. -> Xem hình diagram.jpg


--3. Các tác phẩm (NT, tựa) của tác giả 'Guy de Maupassant'
select NT, tua as tựa from TACPHAM where tua = 'Guy de Maupassant';

--4. Các độc giả sống ở địa chỉ '32 rue des Alouettes, 75003 Paris'.
select ho +' '+ ten as ho_ten from DOCGIA where dchi = '32 rue des Alouettes,
75003 Paris'
--5. Tìm tên nhà xuất bản các tác phẩm bao gồm từ 'Fleur'
select nxb as nha_xuat_ban from SACH s join TACPHAM tp on s.NT = tp.NT
where tp.tua = 'Fluer';
--6. Tìm tên các tác phẩm bắt đầu bằng 'Le'
select tua from TACPHAM where tua like 'Le';
--7.Tìm tên các độc giả có mượn sách trong trong khoảng thời gian từ ngày
15/9/2007 đến 20/09/2007
-- 103: dd/mm/yyy
select ho +' '+ ten as ho_ten from DOCGIA dg join MUON m on dg.ND = m.ND
where m.ngaymuon > CONVERT(datetime,'15/9/2007', 103) and m.ngaymuon <
CONVERT(datetime,'20/9/2007', 103)
--8.Nhà xuất bản của tác phẩm tiêu đề 'Germinal'.
select s.nxb from SACH s join TACPHAM tp on s.NT = tp.NT where tp.tua =
'Germianl';
--9.Tên độc giả đã mượn tác phẩm 'Poésie'
select dg. ho + ' ' + dg.ten as ho_ten from DOCGIA dg join MUON m on dg.ND =
m.ND join SACH s on m.NS = s.ns join TACPHAM tp on s.nt = tp.NT
where tp.tua = 'Poésie';
--10.Những độc giả nào mượn tác phẩm Les 'Fleurs du mal'
select dg. ho + ' ' + dg.ten as ho_ten from DOCGIA dg join MUON m on dg.ND =
m.ND join SACH s on m.NS = s.ns join TACPHAM tp on s.nt = tp.NT
where tp.tua = 'Les Fleurs du mal';
--14.Những độc giả và các tác phẩm nượn năm 2007
select dg. ho + ' ' + dg.ten as ho_ten, tp.tua from DOCGIA dg join MUON m on
dg.ND = m.ND join SACH s on m.NS = s.ns join TACPHAM tp on s.nt = tp.NT
where Year(m.ngaymuon) = '2007'



--15. Tính số tác phẩm có trong thư viện
select count(tua) as tong_so_tac_pham from TACPHAM
--16. Tựa của tác phẩm có ít nhất hai quyển sách
select tua from TACPHAM where NT in (select Q1.NT from (select NT, count(*) as
tong from SACH Group by NT) Q1 where tong >= 2)
--17.Tính số tác phẩm của mỗi tác giả
select tacgia, count(*) as so_tac_pham from TACPHAM Group by tacgia
--18.Tính số sách của mỗi tác phẩm
select tp.tua, Q1.tong_so_sach from TACPHAM tp join (select NT, count(*) as
tong_so_sach from SACH Group by NT) Q1 on tp.NT = Q1.NT
--19.Tính số lần mượn sách của mượn sách của mỗi độc giả theo năm
select Q1.Nam, dg. ho +' '+ dg.ten as ho_ten, Q1.so_lan_muon from DOCGIA dg
right outer join (select Year(ngaymuon) as Nam, ND, count(*) as so_lan_muon from
MUON Group by year(ngaymuon), ND) Q1 on dg.ND = q1.ND order by Q1.Nam
--20.Tìm tên tác phẩm có ít nhất 3 sách
select tua as ten_tac_pham from TACPHAM where NT in (select Q1.NT from (select
NT, count(*) as tong from SACH Group by NT) Q1 where tong >= 3)
--21.Tên tác phẩm có nhiều sách nhất
select tua from TACPHAM where NT = (select Q1.NT from (select NT, count(*) as
tong from SACH Group by NT) Q1 where Q1.tong = (select max(Q1.tong) from
(select NT, count(*) as tong from SACH Group by NT) Q1))
--22.Tên nhà xuất bản xuất bản nhiều sách nhất
select Q1.nxb from (select nxb, count(NS) as tong from SACH Group by nxb) Q1
where Q1.tong = (select max(Q1.tong) from (select nxb, count(NS) as tong from
SACH Group by nxb) Q1)
--23. Tính số tác giả có ít nhất 2 tác phẩm
select Count(Q1.tacgia) as so_tac_gia from (select tacgia, count(NT) as tong from
TACPHAM Group by tacgia) Q1 where Q1.tong >= 2
--24.Tìm tựa tác phẩm có nhiều người mượn nhất

select tp.tua as tua_tac_pham_co_nhieu_nguoi_muon_nhat
from TACPHAM tp
join (select NS, NT from SACH where NS in (select Q1.NS from (select NS, count(NS)
as tong from MUON Group by NS) Q1 where Q1.tong = (select max(Q1.tong) from
(select NS, count(NS) as tong from MUON Group by NS) Q1))) Q2 on tp.NT = Q2.NT
--25. Tìm tựa tác phẩm có ít người mượn nhất
select tp.tua as tua_tac_pham_co_it_nguoi_muon_nhat
from TACPHAM tp


join (select NS, NT from SACH where NS in (select Q1.NS from (select NS, count(NS)
as tong from MUON Group by NS) Q1 where Q1.tong = (select min(Q1.tong) from
(select NS, count(NS) as tong from MUON Group by NS) Q1))) Q2 on tp.NT = Q2.NT
--26. Tìm độc giả mnượn nhiều tác phẩm nhất
select dg.ho + ' ' + dg.ten as ten_doc_gia_muon_nhieu_tac_pham_nhat
from DOCGIA dg
join ( select Q1.ND from (select ND, count(NS) as tong from MUON Group by ND) Q1
where Q1.tong = (select max(Q1.tong) from (select ND, count(NS) as tong from
MUON Group by ND) Q1)) Q2 on dg.ND = Q2.ND
--27. Tìm tên độc giả mượn ít tác phẩm nhất
select dg.ho + ' ' + dg.ten as ten_doc_gia_muon_it_tac_pham_nhat
from DOCGIA dg
join ( select Q1.ND from (select ND, count(NS) as tong from MUON Group by ND) Q1
where Q1.tong = (select min(Q1.tong) from (select ND, count(NS) as tong from
MUON Group by ND) Q1)) Q2 on dg.ND = Q2.ND
--30. Họ tên độc giả chưa mượn quyển sách nào
select dg.ho + ' ' + dg.ten as ten_doc_gia_chua_muon_quyen_nao
from DOCGIA dg
where dg.nd not in ( select distinct m.ND from MUON m)




×