nht_cntt

De1

Dec 27th, 2015
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 5.20 KB | None | 0 0
  1. CREATE DATABASE De01
  2.  
  3. DROP DATABASE De01
  4.  
  5. USE De01
  6.  
  7. SET DATEFORMAT DMY
  8.  
  9. CREATE TABLE TACGIA
  10. (
  11.     MATG CHAR(5) PRIMARY KEY,
  12.     HOTEN VARCHAR(20),
  13.     DIACHI VARCHAR(50),
  14.     NGSINH SMALLDATETIME,
  15.     SODT VARCHAR(15)
  16. )
  17. CREATE TABLE SACH
  18. (
  19.     MASACH CHAR(5) PRIMARY KEY,
  20.     TENSACH VARCHAR(25),
  21.     THELOAI VARCHAR(25)
  22. )
  23. CREATE TABLE TACGIA_SACH
  24. (
  25.     MATG CHAR(5),
  26.     MASACH CHAR(5),
  27.     CONSTRAINT PK_TGS PRIMARY KEY (MATG,MASACH),
  28.     CONSTRAINT FK_TG FOREIGN KEY (MATG) REFERENCES TACGIA(MATG),
  29.     CONSTRAINT FK_SACH FOREIGN KEY (MASACH) REFERENCES SACH(MASACH)
  30. )
  31. CREATE TABLE PHATHANH
  32. (
  33.     MAPH CHAR(5) PRIMARY KEY,
  34.     MASACH CHAR(5) REFERENCES SACH(MASACH),
  35.     NGAYPH SMALLDATETIME,
  36.     SOLUONG INT,
  37.     NHAXUATBAN VARCHAR(20)
  38. )
  39.  
  40. /* Nhap du lieu */
  41.  
  42. INSERT TACGIA(MaTG, HoTen, DiaChi, NgSinh, SoDT) VALUES ('001','Tac Gia 1','So 1 Duong 1 Tp 1','1/1/2001','011111')
  43. INSERT TACGIA(MaTG, HoTen, DiaChi, NgSinh, SoDT) VALUES ('002','Tac Gia 2','So 2 Duong 2 Tp 2','2/2/2002','022222')
  44. INSERT TACGIA(MaTG, HoTen, DiaChi, NgSinh, SoDT) VALUES ('003','Tac Gia 3','So 3 Duong 3 Tp 3','3/3/2001','033333')
  45.  
  46. INSERT SACH(MaSach,TenSach, TheLoai) VALUES ('s01','Sach 1','Van Hoc')
  47. INSERT SACH(MaSach,TenSach, TheLoai) VALUES ('s02','Sach 2','GIAOKHOA')
  48. INSERT SACH(MaSach,TenSach, TheLoai) VALUES ('s03','Sach 3','Van Hoc')
  49. INSERT SACH(MaSach,TenSach, TheLoai) VALUES ('s04','Sach 4','Van Hoc')
  50.  
  51. INSERT TACGIA_SACH(MaTG, MaSach) VALUES ('001','s01')
  52. INSERT TACGIA_SACH(MaTG, MaSach) VALUES ('002','s02')
  53. INSERT TACGIA_SACH(MaTG, MaSach) VALUES ('002','s03')
  54. INSERT TACGIA_SACH(MaTG, MaSach) VALUES ('003','s04')
  55.  
  56. INSERT PHATHANH(MaPH, MaSach, NgayPH, SoLuong, NhaXuatBan) VALUES ('ph01','s01','01/01/2011',111,'TRE')
  57. INSERT PHATHANH(MaPH, MaSach, NgayPH, SoLuong, NhaXuatBan) VALUES ('ph02','s02','02/02/2012',111,'GIAODUC')
  58. INSERT PHATHANH(MaPH, MaSach, NgayPH, SoLuong, NhaXuatBan) VALUES ('ph03','s03','03/03/2013',111,'GIAODUC')
  59. INSERT PHATHANH(MaPH, MaSach, NgayPH, SoLuong, NhaXuatBan) VALUES ('ph04','s04','03/03/2013',111,'GIAODUC')
  60.  
  61. --Ngay phat hanh sach phai lon hon ngay sinh cua tac gia
  62. CREATE TRIGGER CK_PH ON PHATHANH
  63. FOR UPDATE, INSERT
  64. AS IF UPDATE(NGAYPH)
  65. BEGIN
  66.     DECLARE @NPH SMALLDATETIME, @NS SMALLDATETIME,@MATG CHAR(5)
  67.     SET @NPH = (SELECT NGAYPH FROM INSERTED)
  68.     SET @NS = (SELECT NGSINH FROM TACGIA,TACGIA_SACH,INSERTED WHERE TACGIA.MATG=TACGIA_SACH.MATG AND TACGIA_SACH.MASACH=INSERTED.MASACH)
  69.     IF (@NPH<@NS)
  70.         BEGIN
  71.         PRINT 'NGAY PHAT HANH PHAI LON HON NGAY SINH CUA TAC GIA'
  72.         ROLLBACK TRAN
  73.         END
  74. END
  75.  
  76. -- Kiem tra trigger
  77. INSERT PHATHANH(MaPH, MaSach, NgayPH, SoLuong, NhaXuatBan) VALUES ('ph05','s01','03/03/2003',111,'GIAODUC')
  78.  
  79. UPDATE phathanh
  80. SET ngayph = '03/03/2009'
  81. WHERE maph = 'ph05' AND masach = 's01'
  82.  
  83. SELECT * FROM PHATHANH
  84.  
  85. -- Ghi chu: Sinh vien tu viet trigger update tren bang TACGIA
  86.  
  87. --THE LOAI GIÁO KHOA DO NSX GIÁO DỤC
  88. CREATE TRIGGER CK_TL ON PHATHANH
  89. FOR UPDATE, INSERT
  90. AS IF UPDATE(NHAXUATBAN)
  91. BEGIN
  92.     DECLARE @TL VARCHAR(25), @NXB VARCHAR(20),@MASACH CHAR(5)
  93.     SET @TL = (SELECT THELOAI FROM SACH,INSERTED WHERE SACH.MASACH=INSERTED.MASACH)
  94.     SET @NXB = (SELECT NHAXUATBAN FROM INSERTED)
  95.     IF (@TL='GIAOKHOA' AND @NXB<>'GIAODUC')
  96.         BEGIN
  97.         PRINT 'SACH GIAO KHOA CHI DO NXB GIAO DUC PHAT HANH'
  98.         ROLLBACK TRAN
  99.         END
  100. END
  101.  
  102. -- Kiem tra trigger
  103. INSERT PHATHANH(MaPH, MaSach, NgayPH, SoLuong, NhaXuatBan) VALUES ('ph06','s02','03/03/2003',111,'GIAODUC')
  104.  
  105. UPDATE PHATHANH
  106. SET NHAXUATBAN = 'TRE'
  107. WHERE MAPH = 'PH02' AND MASACH = 'S02'
  108.  
  109. --Tìm tác giả (MaTG,HoTen,SoDT) của những quyển sách thuộc thể loại “Văn học”
  110. --do nhà xuất bản Trẻ phát hành.
  111. SELECT TACGIA.MATG, HOTEN, SODT
  112. FROM TACGIA, SACH, PHATHANH, TACGIA_SACH
  113. WHERE TACGIA.MATG=TACGIA_SACH.MATG AND
  114.         TACGIA_SACH.MASACH=SACH.MASACH AND
  115.         SACH.MASACH = PHATHANH.MASACH AND
  116.         SACH.THELOAI='VAN HOC' AND
  117.         PHATHANH.NHAXUATBAN='TRE'
  118.        
  119. --Tìm nhà xuất bản phát hành nhiều thể loại sách nhất
  120. SELECT NHAXUATBAN,COUNT(DISTINCT THELOAI)
  121. FROM PHATHANH, SACH
  122. WHERE PHATHANH.MASACH=SACH.MASACH
  123. GROUP BY NHAXUATBAN
  124. HAVING COUNT(DISTINCT THELOAI)>=ALL(SELECT COUNT(DISTINCT THELOAI)
  125.                                     FROM SACH, PHATHANH
  126.                                     WHERE PHATHANH.MASACH=SACH.MASACH
  127.                                     GROUP BY NHAXUATBAN)
  128.  
  129. --Trong mỗi nhà xuất bản, tìm tác giả (MaTG,HoTen) có số lần phát hành nhiều sách nhất.                             
  130. -- Tao view: trong moi nha xuat ban, thong ke so lan phat hanh cua tung tac gia
  131.  
  132.  
  133. SELECT * FROM PHATHANH
  134.  
  135. SELECT * FROM TACGIA
  136.  
  137. SELECT * FROM SACH
  138.  
  139. SELECT * FROM TACGIA_SACH
  140.  
  141. CREATE VIEW NXB_TG_SLPH
  142. AS
  143.     SELECT a.NhaXuatBan, b.MaTG, COUNT(a.MaPH) [LanXB]
  144.     FROM PHATHANH a INNER JOIN TACGIA_SACH b ON a.MaSach = b.MaSach
  145.     GROUP BY a.NhaXuatBan, b.MaTG
  146.  
  147. -- Xem du lieu cua view
  148. SELECT * FROM NXB_TG_SLPH
  149.  
  150. -- Tao view: trong moi nha xuat ban, thong ke so lan phat hanh lon nhat
  151. CREATE VIEW NXB_TG_SLPHLonNhat
  152. AS
  153.     SELECT NhaXuatBan, MAX(LanXB) [LanXB]
  154.     FROM NXB_TG_SLPH
  155.     GROUP BY NhaXuatBan
  156.  
  157. -- Xem du lieu cua view
  158. SELECT * FROM NXB_TG_SLPHLonNhat
  159.  
  160. SELECT a.NhaXuatBan, a.MaTG, c.HoTen, a.LanXB
  161. FROM NXB_TG_SLPH a, NXB_TG_SLPHLonNhat b, TACGIA c
  162. WHERE a.NhaXuatBan = b.NhaXuatBan AND
  163.       a.LanXB = b.LanXB AND
  164.       a.MaTG = c.MaTG
Advertisement
Add Comment
Please, Sign In to add comment