-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathQuanLyGiaoVu.sql
872 lines (796 loc) · 62.3 KB
/
QuanLyGiaoVu.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
CREATE DATABASE QuanLyGiaoVu
GO
USE QuanLyGiaoVu
GO
-- Tạo bảng KHOA
CREATE TABLE KHOA
(
MAKHOA VARCHAR(4),
TENKHOA VARCHAR(40),
NGTLAP SMALLDATETIME,
TRGKHOA CHAR(4)
CONSTRAINT PK_KHOA PRIMARY KEY (MAKHOA)
)
GO
-- Tạo bảng MONHOC
CREATE TABLE MONHOC
(
MAMH VARCHAR(10),
TENMH VARCHAR(40),
TCLT TINYINT,
TCTH TINYINT,
MAKHOA VARCHAR(4),
CONSTRAINT PK_MONHOC PRIMARY KEY (MAMH),
)
GO
-- Tạo bảng DIEUKIEN
CREATE TABLE DIEUKIEN
(
MAMH VARCHAR(10),
MAMH_TRUOC VARCHAR(10),
CONSTRAINT PK_DIEUKIEN PRIMARY KEY (MAMH, MAMH_TRUOC)
)
GO
-- Tạo bảng GIAOVIEN
CREATE TABLE GIAOVIEN
(
MAGV CHAR(4),
HOTEN VARCHAR(40),
HOCVI VARCHAR(10),
HOCHAM VARCHAR(10),
GIOITINH VARCHAR(3),
NGSINH SMALLDATETIME,
NGVL SMALLDATETIME,
HESO NUMERIC(4,2),
MUCLUONG MONEY,
MAKHOA VARCHAR(4)
CONSTRAINT PK_GIAOVIEN PRIMARY KEY (MAGV)
)
GO
-- Tạo bảng HOCVIEN
CREATE TABLE HOCVIEN
(
MAHV CHAR(5),
HO VARCHAR(40),
TEN VARCHAR(10),
NGSINH SMALLDATETIME,
GIOITINH VARCHAR(3),
NOISINH VARCHAR(40),
MALOP CHAR(3),
CONSTRAINT PK_HOCVIEN PRIMARY KEY (MAHV)
)
GO
-- Tạo bảng LOP
CREATE TABLE LOP
(
MALOP CHAR(3),
TENLOP VARCHAR(40),
TRGLOP CHAR(5),
SISO TINYINT,
MAGVCN CHAR(4)
CONSTRAINT PK_LOP PRIMARY KEY (MALOP)
)
GO
-- Tạo bảng GIANGDAY
CREATE TABLE GIANGDAY
(
MALOP CHAR(3),
MAMH VARCHAR(10),
MAGV CHAR(4),
HOCKY TINYINT,
NAM SMALLINT,
TUNGAY SMALLDATETIME,
DENNGAY SMALLDATETIME
CONSTRAINT PK_GIANGDAY PRIMARY KEY (MALOP, MAMH),
)
GO
-- Tạo bảng KETQUATHI
CREATE TABLE KETQUATHI
(
MAHV CHAR(5),
MAMH VARCHAR(10),
LANTHI TINYINT,
NGTHI SMALLDATETIME,
DIEM NUMERIC(4,2),
KQUA VARCHAR(10)
CONSTRAINT PK_KETQUATHI PRIMARY KEY (MAHV, MAMH, LANTHI)
)
GO
-- Nhập dữ liệu cho KHOA --
insert into KHOA values('KHMT','Khoa hoc may tinh','6/7/2005','GV01')
insert into KHOA values('HTTT','He thong thong tin','6/7/2005','GV02')
insert into KHOA values('CNPM','Cong nghe phan mem','6/7/2005','GV04')
insert into KHOA values('MTT','Mang va truyen thong','10/20/2005','GV03')
insert into KHOA values('KTMT','Ky thuat may tinh','12/20/2005','')
-- Nhập dữ liệu cho GIAOVIEN --
insert into GIAOVIEN values('GV01','Ho Thanh Son','PTS','GS','Nam','5/2/1950','1/11/2004',5.00,2250000,'KHMT')
insert into GIAOVIEN values('GV02','Tran Tam Thanh','TS','PGS','Nam','12/17/1965','4/20/2004',4.50,2025000,'HTTT')
insert into GIAOVIEN values('GV03','Do Nghiem Phung','TS','GS','Nu','8/1/1950','9/23/2004',4.00,1800000,'CNPM')
insert into GIAOVIEN values('GV04','Tran Nam Son','TS','PGS','Nam','2/22/1961','1/12/2005',4.50,2025000,'KTMT')
insert into GIAOVIEN values('GV05','Mai Thanh Danh','ThS','GV','Nam','3/12/1958','1/12/2005',3.00,1350000,'HTTT')
insert into GIAOVIEN values('GV06','Tran Doan Hung','TS','GV','Nam','3/11/1953','1/12/2005',4.50,2025000,'KHMT')
insert into GIAOVIEN values('GV07','Nguyen Minh Tien','ThS','GV','Nam','11/23/1971','3/1/2005',4.00,1800000,'KHMT')
insert into GIAOVIEN values('GV08','Le Thi Tran','KS','','Nu','3/26/1974','3/1/2005',1.69,760500,'KHMT')
insert into GIAOVIEN values('GV09','Nguyen To Lan','ThS','GV','Nu','12/31/1966','3/1/2005',4.00,1800000,'HTTT')
insert into GIAOVIEN values('GV10','Le Tran Anh Loan','KS','','Nu','7/17/1972','3/1/2005',1.86,837000,'CNPM')
insert into GIAOVIEN values('GV11','Ho Thanh Tung','CN','GV','Nam','1/12/1980','5/15/2005',2.67,1201500,'MTT')
insert into GIAOVIEN values('GV12','Tran Van Anh','CN','','Nu','3/29/1981','5/15/2005',1.69,760500,'CNPM')
insert into GIAOVIEN values('GV13','Nguyen Linh Dan','CN','','Nu','5/23/1980','5/15/2005',1.69,760500,'KTMT')
insert into GIAOVIEN values('GV14','Truong Minh Chau','ThS','GV','Nu','11/30/1976','5/15/2005',3.00,1350000,'MTT')
insert into GIAOVIEN values('GV15','Le Ha Thanh','ThS','GV','Nam','5/4/1978','5/15/2005',3.00,1350000,'KHMT')
-- Nhập dữ liệu cho MONHOC --
insert into MONHOC values('THDC','Tin hoc dai cuong',4,1,'KHMT')
insert into MONHOC values('CTRR','Cau truc roi rac',5,0,'KHMT')
insert into MONHOC values('CSDL','Co so du lieu',3,1,'HTTT')
insert into MONHOC values('CTDLGT','Cau truc du lieu va giai thuat',3,1,'KHMT')
insert into MONHOC values('PTTKTT','Phan tich thiet ke thuat toan',3,0,'KHMT')
insert into MONHOC values('DHMT','Do hoa may tinh',3,1,'KHMT')
insert into MONHOC values('KTMT','Kien truc may tinh',3,0,'KTMT')
insert into MONHOC values('TKCSDL','Thiet ke co so du lieu',3,1,'HTTT')
insert into MONHOC values('PTTKHTTT','Phan tich thiet ke he thong thong tin',4,1,'HTTT')
insert into MONHOC values('HDH','He dieu hanh',4,0,'KTMT')
insert into MONHOC values('NMCNPM','Nhap mon cong nghe phan mem',3,0,'CNPM')
insert into MONHOC values('LTCFW','Lap trinh C for win',3,1,'CNPM')
insert into MONHOC values('LTHDT','Lap trinh huong doi tuong',3,1,'CNPM')
-- Nhập dữ liệu cho LOP --
insert into LOP values('K11','Lop 1 khoa 1','K1108',11,'GV07')
insert into LOP values('K12','Lop 2 khoa 1','K1205',12,'GV09')
insert into LOP values('K13','Lop 3 khoa 1','K1305',12,'GV14')
-- Nhập dữ liệu cho HOCVIEN --
insert into HOCVIEN values('K1101','Nguyen Van','A','1/27/1986','Nam','TpHCM','K11')
insert into HOCVIEN values('K1102','Tran Ngoc','Han','3/1/1986','Nu','Kien Giang','K11')
insert into HOCVIEN values('K1103','Ha Duy','Lap','4/18/1986','Nam','Nghe An','K11')
insert into HOCVIEN values('K1104','Tran Ngoc','Linh','3/30/1986','Nu','Tay Ninh','K11')
insert into HOCVIEN values('K1105','Tran Minh','Long','2/27/1986','Nam','TpHCM','K11')
insert into HOCVIEN values('K1106','Le Nhat','Minh','1/24/1986','Nam','TpHCM','K11')
insert into HOCVIEN values('K1107','Nguyen Nhu','Nhut','1/27/1986','Nam','Ha Noi','K11')
insert into HOCVIEN values('K1108','Nguyen Manh','Tam','2/27/1986','Nam','Kien Giang','K11')
insert into HOCVIEN values('K1109','Phan Thi Thanh','Tam','1/27/1986','Nu','Vinh Long','K11')
insert into HOCVIEN values('K1110','Le Hoai','Thuong','2/5/1986','Nu','Can Tho','K11')
insert into HOCVIEN values('K1111','Le Ha','Vinh','12/25/1986','Nam','Vinh Long','K11')
insert into HOCVIEN values('K1201','Nguyen Van','B','2/11/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1202','Nguyen Thi Kim','Duyen','1/18/1986','Nu','TpHCM','K12')
insert into HOCVIEN values('K1203','Tran Thi Kim','Duyen','9/17/1986','Nu','TpHCM','K12')
insert into HOCVIEN values('K1204','Truong My','Hanh','5/19/1986','Nu','Dong Nai','K12')
insert into HOCVIEN values('K1205','Nguyen Thanh','Nam','4/17/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1206','Nguyen Thi Truc','Thanh','3/4/1986','Nu','Kien Giang','K12')
insert into HOCVIEN values('K1207','Tran Thi Bich','Thuy','2/8/1986','Nu','Nghe An','K12')
insert into HOCVIEN values('K1208','Huynh Thi Kim','Trieu','4/8/1986','Nu','Tay Ninh','K12')
insert into HOCVIEN values('K1209','Pham Thanh','Trieu','2/23/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1210','Ngo Thanh','Tuan','2/14/1986','Nam','TpHCM','K12')
insert into HOCVIEN values('K1211','Do Thi','Xuan','3/9/1986','Nu','Ha Noi','K12')
insert into HOCVIEN values('K1212','Le Thi Phi','Yen','3/12/1986','Nu','TpHCM','K12')
insert into HOCVIEN values('K1301','Nguyen Thi Kim','Cuc','6/9/1986','Nu','Kien Giang','K13')
insert into HOCVIEN values('K1302','Truong Thi My','Hien','3/18/1986','Nu','Nghe An','K13')
insert into HOCVIEN values('K1303','Le Duc','Hien','3/12/1986','Nam','Tay Ninh','K13')
insert into HOCVIEN values('K1304','Le Quang','Hien','4/18/1986','Nam','TpHCM','K13')
insert into HOCVIEN values('K1305','Le Thi','Huong','3/27/1986','Nu','TpHCM','K13')
insert into HOCVIEN values('K1306','Nguyen Thai','Huu','3/30/1986','Nam','Ha Noi','K13')
insert into HOCVIEN values('K1307','Tran Minh','Man','5/28/1986','Nam','TpHCM','K13')
insert into HOCVIEN values('K1308','Nguyen Hieu','Nghia','4/8/1986','Nam','Kien Giang','K13')
insert into HOCVIEN values('K1309','Nguyen Trung','Nghia','1/18/1987','Nam','Nghe An','K13')
insert into HOCVIEN values('K1310','Tran Thi Hong','Tham','4/22/1986','Nu','Tay Ninh','K13')
insert into HOCVIEN values('K1311','Tran Minh','Thuc','4/4/1986','Nam','TpHCM','K13')
insert into HOCVIEN values('K1312','Nguyen Thi Kim','Yen','9/7/1986','Nu','TpHCM','K13')
-- Nhập dữ liệu cho GIANGDAY --
insert into GIANGDAY values('K11','THDC','GV07',1,2006,'1/2/2006','5/12/2006')
insert into GIANGDAY values('K12','THDC','GV06',1,2006,'1/2/2006','5/12/2006')
insert into GIANGDAY values('K13','THDC','GV15',1,2006,'1/2/2006','5/12/2006')
insert into GIANGDAY values('K11','CTRR','GV02',1,2006,'1/9/2006','5/17/2006')
insert into GIANGDAY values('K12','CTRR','GV02',1,2006,'1/9/2006','5/17/2006')
insert into GIANGDAY values('K13','CTRR','GV08',1,2006,'1/9/2006','5/17/2006')
insert into GIANGDAY values('K11','CSDL','GV05',2,2006,'6/1/2006','7/15/2006')
insert into GIANGDAY values('K12','CSDL','GV09',2,2006,'6/1/2006','7/15/2006')
insert into GIANGDAY values('K13','CTDLGT','GV15',2,2006,'6/1/2006','7/15/2006')
insert into GIANGDAY values('K13','CSDL','GV05',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K13','DHMT','GV07',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K11','CTDLGT','GV15',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K12','CTDLGT','GV15',3,2006,'8/1/2006','12/15/2006')
insert into GIANGDAY values('K11','HDH','GV04',1,2007,'1/2/2007','2/18/2007')
insert into GIANGDAY values('K12','HDH','GV04',1,2007,'1/2/2007','3/20/2007')
insert into GIANGDAY values('K11','DHMT','GV07',1,2007,'2/18/2007','3/20/2007')
-- NHẬP DỮ LIỆU CHO DIEUKIEN --
insert into DIEUKIEN values('CSDL','CTRR')
insert into DIEUKIEN values('CSDL','CTDLGT')
insert into DIEUKIEN values('CTDLGT','THDC')
insert into DIEUKIEN values('PTTKTT','THDC')
insert into DIEUKIEN values('PTTKTT','CTDLGT')
insert into DIEUKIEN values('DHMT','THDC')
insert into DIEUKIEN values('LTHDT','THDC')
insert into DIEUKIEN values('PTTKHTTT','CSDL')
-- Nhập dữ liệu cho KETQUATHI --
insert into KETQUATHI values('K1101','CSDL',1,'7/20/2006',10.00,'Dat')
insert into KETQUATHI values('K1101','CTDLGT',1,'12/28/2006',9.00,'Dat')
insert into KETQUATHI values('K1101','THDC',1,'5/20/2006',9.00,'Dat')
insert into KETQUATHI values('K1101','CTRR',1,'5/13/2006',9.50,'Dat')
insert into KETQUATHI values('K1102','CSDL',1,'7/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1102','CSDL',2,'7/27/2006',4.25,'Khong Dat')
insert into KETQUATHI values('K1102','CSDL',3,'8/10/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1102','CTDLGT',1,'12/28/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1102','CTDLGT',2,'1/5/2007',4.00,'Khong Dat')
insert into KETQUATHI values('K1102','CTDLGT',3,'1/15/2007',6.00,'Dat')
insert into KETQUATHI values('K1102','THDC',1,'5/20/2006',5.00,'Dat')
insert into KETQUATHI values('K1102','CTRR',1,'5/13/2006',7.00,'Dat')
insert into KETQUATHI values('K1103','CSDL',1,'7/20/2006',3.50,'Khong Dat')
insert into KETQUATHI values('K1103','CSDL',2,'7/27/2006',8.25,'Dat')
insert into KETQUATHI values('K1103','CTDLGT',1,'12/28/2006',7.00,'Dat')
insert into KETQUATHI values('K1103','THDC',1,'5/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1103','CTRR',1,'5/13/2006',6.50,'Dat')
insert into KETQUATHI values('K1104','CSDL',1,'7/20/2006',3.75,'Khong Dat')
insert into KETQUATHI values('K1104','CTDLGT',1,'12/28/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1104','THDC',1,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1104','CTRR',1,'5/13/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1104','CTRR',2,'5/20/2006',3.50,'Khong Dat')
insert into KETQUATHI values('K1104','CTRR',3,'6/30/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1201','CSDL',1,'7/20/2006',6.00,'Dat')
insert into KETQUATHI values('K1201','CTDLGT',1,'12/28/2006',5.00,'Dat')
insert into KETQUATHI values('K1201','THDC',1,'5/20/2006',8.50,'Dat')
insert into KETQUATHI values('K1201','CTRR',1,'5/13/2006',9.00,'Dat')
insert into KETQUATHI values('K1202','CSDL',1,'7/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1202','CTDLGT',1,'12/28/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTDLGT',2,'1/5/2007',5.00,'Dat')
insert into KETQUATHI values('K1202','THDC',1,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','THDC',2,'5/27/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTRR',1,'5/13/2006',3.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTRR',2,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1202','CTRR',3,'6/30/2006',6.25,'Dat')
insert into KETQUATHI values('K1203','CSDL',1,'7/20/2006',9.25,'Dat')
insert into KETQUATHI values('K1203','CTDLGT',1,'12/28/2006',9.50,'Dat')
insert into KETQUATHI values('K1203','THDC',1,'5/20/2006',10.00,'Dat')
insert into KETQUATHI values('K1203','CTRR',1,'5/13/2006',10.00,'Dat')
insert into KETQUATHI values('K1204','CSDL',1,'7/20/2006',8.50,'Dat')
insert into KETQUATHI values('K1204','CTDLGT',1,'12/28/2006',6.75,'Dat')
insert into KETQUATHI values('K1204','THDC',1,'5/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1204','CTRR',1,'5/13/2006',6.00,'Dat')
insert into KETQUATHI values('K1301','CSDL',1,'12/20/2006',4.25,'Khong Dat')
insert into KETQUATHI values('K1301','CTDLGT',1,'7/25/2006',8.00,'Dat')
insert into KETQUATHI values('K1301','THDC',1,'5/20/2006',7.75,'Dat')
insert into KETQUATHI values('K1301','CTRR',1,'5/13/2006',8.00,'Dat')
insert into KETQUATHI values('K1302','CSDL',1,'12/20/2006',6.75,'Dat')
insert into KETQUATHI values('K1302','CTDLGT',1,'7/25/2006',5.00,'Dat')
insert into KETQUATHI values('K1302','THDC',1,'5/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1302','CTRR',1,'5/13/2006',8.50,'Dat')
insert into KETQUATHI values('K1303','CSDL',1,'12/20/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1303','CTDLGT',1,'7/25/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1303','CTDLGT',2,'8/7/2006',4.00,'Khong Dat')
insert into KETQUATHI values('K1303','CTDLGT',3,'8/15/2006',4.25,'Khong Dat')
insert into KETQUATHI values('K1303','THDC',1,'5/20/2006',4.50,'Khong Dat')
insert into KETQUATHI values('K1303','CTRR',1,'5/13/2006',3.25,'Khong Dat')
insert into KETQUATHI values('K1303','CTRR',2,'5/20/2006',5.00,'Dat')
insert into KETQUATHI values('K1304','CSDL',1,'12/20/2006',7.75,'Dat')
insert into KETQUATHI values('K1304','CTDLGT',1,'7/25/2006',9.75,'Dat')
insert into KETQUATHI values('K1304','THDC',1,'5/20/2006',5.50,'Dat')
insert into KETQUATHI values('K1304','CTRR',1,'5/13/2006',5.00,'Dat')
insert into KETQUATHI values('K1305','CSDL',1,'12/20/2006',9.25,'Dat')
insert into KETQUATHI values('K1305','CTDLGT',1,'7/25/2006',10.00,'Dat')
insert into KETQUATHI values('K1305','THDC',1,'5/20/2006',8.00,'Dat')
insert into KETQUATHI values('K1305','CTRR',1,'5/13/2006',10.00,'Dat')
-- Tạo khóa ngoại
ALTER TABLE LOP ADD CONSTRAINT FK_TRGLOP FOREIGN KEY (TRGLOP) REFERENCES HOCVIEN(MAHV)
ALTER TABLE LOP ADD CONSTRAINT FK_MAGVCN FOREIGN KEY (MAGVCN) REFERENCES GIAOVIEN(MAGV)
ALTER TABLE HOCVIEN ADD CONSTRAINT FK_LOP FOREIGN KEY (MALOP) REFERENCES LOP(MALOP)
ALTER TABLE GIAOVIEN ADD CONSTRAINT FK_MAKHOA FOREIGN KEY (MAKHOA) REFERENCES KHOA(MAKHOA)
ALTER TABLE GIANGDAY ADD CONSTRAINT FK_MAMH FOREIGN KEY (MAMH) REFERENCES MONHOC(MAMH)
ALTER TABLE KHOA ADD CONSTRAINT FK_MAGV FOREIGN KEY (MAGV) REFERENCES GIAOVIEN(MAGV)
ALTER TABLE MONHOC ADD CONSTRAINT FK_MAKHOA_2 FOREIGN KEY (MAKHOA) REFERENCES KHOA(MAKHOA)
ALTER TABLE DIEUKIEN ADD CONSTRAINT FK_MAMH_TRUOC FOREIGN KEY (MAMH_TRUOC) REFERENCES MONHOC(MAMH)
ALTER TABLE DIEUKIEN ADD CONSTRAINT FK_MAMH_2 FOREIGN KEY (MAMH) REFERENCES MONHOC(MAMH)
ALTER TABLE KETQUATHI ADD CONSTRAINT FK_MAHV FOREIGN KEY (MAHV) REFERENCES HOCVIEN(MAHV)
-- Thêm vào 3 thuộc tính GHICHU, DIEMTB, XEPLOAI cho quan hệ HOCVIEN
ALTER TABLE HOCVIEN ADD GHICHU VARCHAR(50), DIEMTB NUMERIC(4,2), XEPLOAI VARCHAR(10)
-- I.2 Mã học viên là một chuỗi 5 ký tự, 3 ký tự đầu là mã lớp, 2 ký tự cuối cùng là số thứ tự học viên trong lớp
CREATE TRIGGER trg_ins_upd_HOCVIEN
ON HOCVIEN
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @SISO INT, @MAHV VARCHAR(5), @MALOP VARCHAR(3)
SELECT @MAHV = MAHV, @MALOP = MALOP FROM INSERTED
SELECT @SISO = SISO FROM LOP WHERE LOP.MALOP = @MALOP
IF LEFT(@MAHV,3) <> @MALOP
BEGIN
PRINT('3 ki tu dau cua MAHV phai la MALOP')
ROLLBACK TRANSACTION
END
ELSE IF CAST(RIGHT(@MAHV, 2) AS INT) NOT BETWEEN 1 AND @SISO
BEGIN
PRINT('2 ki tu cuoi cua MAHV phai la so thu tu hoc vien trong lop')
ROLLBACK TRANSACTION
END
END
-- I.3 Thuộc tính GIOITINH chỉ có giá trị là “Nam” hoặc “Nu”
ALTER TABLE HOCVIEN ADD CONSTRAINT CHECK_GTHV CHECK (GIOITINH IN ('Nam', 'Nu'))
ALTER TABLE GIAOVIEN ADD CONSTRAINT CHECK_GTGV CHECK (GIOITINH IN ('Nam', 'Nu'))
-- I.4 Điểm số của một lần thi có giá trị từ 0 đến 10 và cần lưu đến 2 số lẽ (VD: 6.22)
ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_DIEM CHECK
(
DIEM BETWEEN 0 AND 10
AND RIGHT(CAST(DIEM AS VARCHAR), 3) LIKE '.__'
)
-- I.5 Kết quả thi là “Dat” nếu điểm từ 5 đến 10 và “Khong dat” nếu điểm nhỏ hơn 5
ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_KETQUA CHECK
(
(KQUA = 'Dat' AND DIEM BETWEEN 5 AND 10)
OR (KQUA = 'Khong dat' AND DIEM < 5)
)
-- I.6 Học viên thi một môn tối đa 3 lần
ALTER TABLE KETQUATHI ADD CONSTRAINT CHECK_LANTHI CHECK (LANTHI <= 3)
-- I.7 Học kỳ chỉ có giá trị từ 1 đến 3
ALTER TABLE GIANGDAY ADD CONSTRAINT CHECK_HOCKY CHECK (HOCKY BETWEEN 1 AND 3)
-- I.8 Học vị của giáo viên chỉ có thể là “CN”, “KS”, “Ths”, ”TS”, ”PTS”
ALTER TABLE GIAOVIEN ADD CONSTRAINT CHECK_HOCVI CHECK (HOCVI IN ('CN', 'KS', 'Ths', 'TS', 'PTS'))
-- I.9 Lớp trưởng của một lớp phải là học viên của lớp đó
CREATE TRIGGER trg_ins_udt_LopTruong ON LOP
FOR INSERT, UPDATE
AS
BEGIN
IF NOT EXISTS (SELECT * FROM INSERTED I, HOCVIEN HV
WHERE I.TRGLOP = HV.MAHV AND I.MALOP = HV.MALOP)
BEGIN
PRINT 'Error: Lop truong cua mot lop phai la hoc vien cua lop do'
ROLLBACK TRANSACTION
END
END
CREATE TRIGGER trg_del_HOCVIEN ON HOCVIEN
FOR DELETE
AS
BEGIN
IF EXISTS (SELECT * FROM DELETED D, INSERTED I, LOP L
WHERE D.MAHV = L.TRGLOP AND D.MALOP = L.MALOP)
BEGIN
PRINT 'Error: Hoc vien hien tai dang la truong lop'
ROLLBACK TRANSACTION
END
END
-- I.11 Học viên ít nhất là 18 tuổi
ALTER TABLE HOCVIEN ADD CONSTRAINT CHECK_TUOI CHECK (YEAR(GETDATE()) - YEAR(NGSINH) >= 18)
-- I.12 Giảng dạy một môn học ngày bắt đầu (TUNGAY) phải nhỏ hơn ngày kết thúc (DENNGAY)
ALTER TABLE GIANGDAY ADD CONSTRAINT CHECK_GIANGDAY CHECK (TUNGAY < DENNGAY)
-- I.13 Giáo viên khi vào làm ít nhất là 22 tuổi
ALTER TABLE GIAOVIEN ADD CONSTRAINT CHECK_TUOILAM CHECK (YEAR(NGVL) - YEAR(NGSINH) >= 22)
-- I.14 Tất cả các môn học đều có số tín chỉ lý thuyết và tín chỉ thực hành chênh lệch nhau không quá 3
ALTER TABLE MONHOC ADD CONSTRAINT CHECK_TINCHI CHECK (ABS(TCLT - TCTH) <= 3)
-- II.1 Tăng hệ số lương thêm 0.2 cho những giáo viên là trưởng khoa
UPDATE GIAOVIEN
SET HESO = 0.2 + HESO
WHERE MAGV IN (SELECT TRGKHOA FROM KHOA)
-- II.2 Cập nhật giá trị điểm trung bình tất cả các môn học (DIEMTB) của mỗi học viên (tất cả các môn học đều có hệ số 1 và nếu học viên thi một môn nhiều lần, chỉ lấy điểm của lần thi sau cùng)
UPDATE HocVien
SET DiemTB =
(
SELECT AVG(Diem)
FROM KetQuaThi
WHERE LanThi = (SELECT MAX(LanThi) FROM KetQuaThi KQ WHERE MaHV = KetQuaThi.MaHV GROUP BY MaHV)
GROUP BY MaHV
HAVING MaHV = HocVien.MaHV
)
-- II.3 Cập nhật giá trị cho cột GHICHU là “Cam thi” đối với trường hợp: học viên có một môn bất kỳ thi lần thứ 3 dưới 5 điểm
UPDATE HOCVIEN
SET GHICHU = 'Cam thi'
WHERE MAHV IN
(
SELECT MAHV
FROM KETQUATHI
WHERE LANTHI = 3 AND DIEM < 5
)
-- II.4 Cập nhật giá trị cho cột XEPLOAI trong quan hệ HOCVIEN như sau:
-- Nếu DIEMTB >= 9 thì XEPLOAI = ”XS”
-- Nếu 8 <= DIEMTB < 9 thì XEPLOAI = “G”
-- Nếu 6.5 <= DIEMTB < 8 thì XEPLOAI = “K”
-- Nếu 5 <= DIEMTB < 6.5 thì XEPLOAI = “TB”
-- Nếu DIEMTB < 5 thì XEPLOAI = ”Y”
UPDATE HOCVIEN
SET XEPLOAI =
(
CASE
WHEN DIEMTB >= 9 THEN 'XS'
WHEN DIEMTB >= 8 AND DIEMTB < 9 THEN 'G'
WHEN DIEMTB >= 6.5 AND DIEMTB < 8 THEN 'K'
WHEN DIEMTB >= 5 AND DIEMTB < 6.5 THEN 'TB'
WHEN DIEMTB < 5 THEN 'Y'
END
)
-- III.1 In ra danh sách (mã học viên, họ tên, ngày sinh, mã lớp) lớp trưởng của các lớp
SELECT
MaHV, (Ho+Ten) HoTen, NgSinh, HocVien.MaLop
FROM
HocVien, Lop
WHERE
HocVien.MaHV = Lop.TrgLop
-- III.2 In ra bảng điểm khi thi (mã học viên, họ tên , lần thi, điểm số) môn CTRR của lớp “K12”, sắp xếp theo tên, họ học viên
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen, LanThi, Diem
FROM
KetQuaThi, HocVien
WHERE
KetQuaThi.MaHV = HocVien.MaHV
AND MaMH = 'CTRR'
AND MaLop = 'K12'
ORDER BY
Ten, Ho
-- III.3 In ra danh sách những học viên (mã học viên, họ tên) và những môn học mà học viên đó thi lần thứ nhất đã đạt
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen, TenMH
FROM
KetQuaThi, MonHoc, HocVien
WHERE
KetQuaThi.MaMH = MonHoc.MaMH
AND KetQuaThi.MaHV = HocVien.MaHV
AND LanThi = 1 AND KQua = 'Dat'
-- III.4 In ra danh sách học viên (mã học viên, họ tên) của lớp “K11” thi môn CTRR không đạt (ở lần thi 1)
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaLop = 'K11'
AND MaMH = 'CTRR'
AND KQua = 'Khong Dat'
AND LanThi = 1
-- III.5 Danh sách học viên (mã học viên, họ tên) của lớp “K” thi môn CTRR không đạt (ở tất cả các lần thi)
SELECT DISTINCT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaLop like 'K%'
AND MaMH = 'CTRR'
AND NOT EXISTS
(SELECT * FROM KetQuaThi
WHERE
KQua = 'Dat'
AND MaMH = 'CTRR'
AND MaHV = HocVien.MaHV)
-- III.6 Tìm tên những môn học mà giáo viên có tên “Tran Tam Thanh” dạy trong học kỳ 1 năm 2006
SELECT DISTINCT TenMH
FROM
MonHoc, GiaoVien, GiangDay
WHERE
MonHoc.MaMH = GiangDay.MaMH
AND GiaoVien.MaGV = GiangDay.MaGV
AND HoTen = 'Tran Tam Thanh'
AND HocKy = 1 AND Nam = 2006
-- III.7 Tìm những môn học (mã môn học, tên môn học) mà giáo viên chủ nhiệm lớp “K11” dạy trong học kỳ 1 năm 2006
SELECT DISTINCT
MonHoc.MaMH, TenMH
FROM
MonHoc, Lop, GiangDay
WHERE
GiangDay.MaMH = MonHoc.MaMH
AND GiangDay.MaGV = Lop.MaGVCN
AND Lop.MaLop = 'K11'
AND HocKy = 1 AND Nam = 2006
-- III.8 Tìm họ tên lớp trưởng của các lớp mà giáo viên có tên “Nguyen To Lan” dạy môn “Co So Du Lieu”
SELECT DISTINCT
(HO+' '+TEN) HOTEN
FROM
HocVien, Lop, GiaoVien, GiangDay, MonHoc
WHERE
Lop.TrgLop = HocVien.MaHV
AND GiangDay.MaLop = Lop.MaLop
AND GiangDay.MaGV = GiaoVien.MaGV
AND GiangDay.MaMH = MonHoc.MaMH
AND HoTen = 'Nguyen To Lan'
AND TenMH = 'Co So Du Lieu'
-- III.9 In ra danh sách những môn học (mã môn học, tên môn học) phải học liền trước môn “Co So Du Lieu”
SELECT
MonHocTruoc.MaMH, MonHocTruoc.TenMH
FROM
MonHoc, MonHoc AS MonHocTruoc, DieuKien
WHERE
MonHoc.MaMH = DieuKien.MaMH
AND MonHocTruoc.MaMH = DieuKien.MaMH_Truoc
AND MonHoc.TenMH = 'Co So Du Lieu'
-- III.10 Môn “Cau Truc Roi Rac” là môn bắt buộc phải học liền trước những môn học (mã môn học, tên môn học) nào
SELECT
MonHoc.MaMH, MonHoc.TenMH
FROM
MonHoc, MonHoc AS MonHocTruoc, DieuKien
WHERE
MonHoc.MaMH = DieuKien.MaMH
AND MonHocTruoc.MaMH = DieuKien.MaMH_Truoc
AND MonHocTruoc.TenMH = 'Cau Truc Roi Rac'
-- III.11 Tìm họ tên giáo viên dạy môn CTRR cho cả hai lớp “K11” và “K12” trong cùng học kỳ 1 năm 2006
SELECT HoTen
FROM
GiaoVien, GiangDay
WHERE
GiaoVien.MaGV = GiangDay.MaGV
AND MaLop = 'K11'
AND HocKy = 1 AND Nam = 2006
INTERSECT
(SELECT HoTen
FROM
GiaoVien, GiangDay
WHERE
GiaoVien.MaGV = GiangDay.MaGV
AND MaLop = 'K12' AND HocKy = 1 AND Nam = 2006)
-- III.12 Tìm những học viên (mã học viên, họ tên) thi không đạt môn CSDL ở lần thi thứ 1 nhưng chưa thi lại môn này
SELECT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaMH = 'CSDL' AND LanThi = 1 AND KQua = 'Khong Dat'
AND NOT EXISTS (SELECT * FROM KetQuaThi WHERE LanThi > 1 AND KetQuaThi.MaHV = HocVien.MaHV)
-- III.13 Tìm giáo viên (mã giáo viên, họ tên) không được phân công giảng dạy bất kỳ môn học nào
SELECT MaGV, HoTen
FROM GiaoVien
WHERE MaGV NOT IN (SELECT MaGV FROM GiangDay)
-- III.14 Tìm giáo viên (mã giáo viên, họ tên) không được phân công giảng dạy bất kỳ môn học nào thuộc khoa giáo viên đó phụ trách
SELECT MaGV, HoTen
FROM GiaoVien
WHERE NOT EXISTS
(
SELECT *
FROM MonHoc
WHERE MonHoc.MaKhoa = GiaoVien.MaKhoa
AND NOT EXISTS
(
SELECT *
FROM GiangDay
WHERE GiangDay.MaMH = MonHoc.MaMH
AND GiangDay.MaGV = GiaoVien.MaGV
)
)
-- III.15 Tìm họ tên các học viên thuộc lớp “K11” thi một môn bất kỳ quá 3 lần vẫn “Khong dat” hoặc thi lần thứ 2 môn CTRR được 5 điểm
SELECT DISTINCT
(Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaLop = 'K11'
AND ((LanThi = 2 AND Diem = 5)
OR HocVien.MaHV IN
(
SELECT DISTINCT MaHV
FROM KetQuaThi
WHERE KQua = 'Khong Dat'
GROUP BY MaHV, MaMH
HAVING COUNT(*) > 3
))
-- III.16 Tìm họ tên giáo viên dạy môn CTRR cho ít nhất hai lớp trong cùng một học kỳ của một năm học
SELECT HoTen
FROM
GiaoVien, GiangDay
WHERE
GiaoVien.MaGV = GiangDay.MaGV
AND MaMH = 'CTRR'
GROUP BY
GiaoVien.MaGV, HoTen, HocKy
HAVING
COUNT(*) >= 2
-- III.17 Danh sách học viên và điểm thi môn CSDL (chỉ lấy điểm của lần thi sau cùng)
SELECT
HocVien.*, Diem AS 'Điểm thi CSDL sau cùng'
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND MaMH = 'CSDL'
AND LanThi =
(
SELECT MAX(LanThi)
FROM KetQuaThi
WHERE MaMH = 'CSDL' AND KetQuaThi.MaHV = HocVien.MaHV
GROUP BY MaHV
)
-- III.18 Danh sách học viên và điểm thi môn “Co So Du Lieu” (chỉ lấy điểm cao nhất của các lần thi)
SELECT
HocVien.*, Diem AS 'Điểm thi CSDL cao nhất'
FROM
HocVien, KetQuaThi, MonHoc
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND KetQuaThi.MaMH = MonHoc.MaMH
AND TenMH = 'Co So Du Lieu'
AND Diem =
(
SELECT MAX(Diem)
FROM KetQuaThi, MonHoc
WHERE
KetQuaThi.MaMH = MonHoc.MaMH
AND MaHV = HocVien.MaHV
AND TenMH = 'Co So Du Lieu'
GROUP BY MaHV
)
-- III.19 Khoa nào (mã khoa, tên khoa) được thành lập sớm nhất
SELECT MaKhoa, TenKhoa
FROM Khoa
WHERE NgTLap = (SELECT MIN(NgTLap) FROM Khoa)
-- III.20 Có bao nhiêu giáo viên có học hàm là “GS” hoặc “PGS”
SELECT COUNT(*) 'Số giáo viên có học hàm GS hoặc PGS'
FROM GiaoVien
WHERE HocHam IN ('GS', 'PGS')
-- III.21 Thống kê có bao nhiêu giáo viên có học vị là “CN”, “KS”, “Ths”, “TS”, “PTS” trong mỗi khoa.
SELECT MaKhoa, HocVi, COUNT(*) 'Số giáo viên'
FROM GiaoVien
GROUP BY MaKhoa, HocVi
ORDER BY MaKhoa
-- III.22 Mỗi môn học thống kê số lượng học viên theo kết quả (đạt và không đạt).
SELECT MaMH, KQua, COUNT(*) 'Số học viên'
FROM KetQuaThi
GROUP BY MaMH, KQua
ORDER BY MAMH
-- III.23 Tìm giáo viên (mã giáo viên, họ tên) là giáo viên chủ nhiệm của một lớp, đồng thời dạy cho lớp đó ít nhất một môn học.
SELECT DISTINCT
GiaoVien.MaGV, HoTen
FROM
GiaoVien, Lop, GiangDay
WHERE
GiangDay.MaLop = Lop.MaLop
AND GiangDay.MaGV = GiaoVien.MaGV
AND GiaoVien.MaGV = Lop.MaGVCN
-- III.24 Tìm họ tên lớp trưởng của lớp có sỉ số cao nhất
SELECT
Ho+' '+Ten AS 'Họ tên lớp trưởng của lớp có sỉ số cao nhất'
FROM
HocVien, Lop
WHERE
HocVien.MaHV = Lop.TrgLop
AND Lop.SiSo = (SELECT MAX(SiSo) FROM Lop)
-- III.25 Tìm họ tên những LOPTRG thi không đạt quá 3 môn (mỗi môn đều thi không đạt ở tất cả các lần thi)
SELECT Ho + ' ' + Ten 'Họ tên trưởng lớp thi không đạt quá 3 môn'
FROM
HocVien, Lop, KetQuaThi
WHERE
HocVien.MAHV = Lop.TrgLop
AND HocVien.MaHV = KetQuaThi.MaHV
AND KQua = 'Khong Dat'
GROUP BY
TrgLop, Ho, Ten
HAVING
COUNT(*) > 3
-- III.26 Tìm học viên (mã học viên, họ tên) có số môn đạt điểm 9,10 nhiều nhất.
-- Cách 1:
SELECT TOP 1 WITH TIES
HocVien.MaHV, (Ho+' '+Ten) AS HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND Diem >= 9
GROUP BY
HocVien.MaHV, Ho, Ten
ORDER BY
COUNT(*) DESC
-- Cách 2:
SELECT
HocVien.MaHV, Ho+' '+Ten AS HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND Diem >= 9
GROUP BY
HocVien.MaHV, Ho, Ten
HAVING
COUNT(*) >= ALL(SELECT COUNT(*) FROM KetQuaThi WHERE Diem >= 9 GROUP BY MaHV)
-- III.27 Trong từng lớp, tìm học viên (mã học viên, họ tên) có số môn đạt điểm 9,10 nhiều nhất.
SELECT
MaLop, MaHV, HoTen
FROM
(
SELECT
MaLop, HocVien.MaHV, (Ho+' '+Ten) HoTen, COUNT(*) SoLuongDiem, RANK() OVER (PARTITION BY MaLop ORDER BY COUNT(*) DESC) AS XepHang
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND Diem >= 9
GROUP BY
MaLop, HocVien.MaHV, Ho, Ten
) AS A
WHERE
A.XepHang = 1
-- III.28 Trong từng học kỳ của từng năm, mỗi giáo viên phân công dạy bao nhiêu môn học, bao nhiêu lớp.
SELECT MaGV, COUNT(DISTINCT MaMH) 'Số môn học', COUNT(DISTINCT MALOP) 'Số lớp'
FROM GiangDay
GROUP BY MaGV
-- III.29 Trong từng học kỳ của từng năm, tìm giáo viên (mã giáo viên, họ tên) giảng dạy nhiều nhất.
SELECT HocKy, Nam, A.MaGV, HoTen
FROM GiaoVien,
(
SELECT
HocKy, Nam, MaGV, RANK() OVER (PARTITION BY HocKy, Nam ORDER BY COUNT(*) DESC) AS XepHang
FROM GiangDay
GROUP BY HocKy, Nam, MaGV
) AS A
WHERE
A.MAGV = GiaoVien.MAGV
AND XepHang = 1
ORDER BY
Nam, HocKy
-- III.30 Tìm môn học (mã môn học, tên môn học) có nhiều học viên thi không đạt (ở lần thi thứ 1) nhất.
-- Cách 1:
SELECT TOP 1 WITH TIES
MonHoc.MaMH, TenMH
FROM
MonHoc, KetQuaThi
WHERE
MonHoc.MaMH = KetQuaThi.MaMH
AND LanThi = 1
AND KQua = 'Khong Dat'
GROUP BY
MonHoc.MaMH, TenMH
ORDER BY
COUNT(*) DESC
-- Cách 2:
SELECT
MonHoc.MaMH, TenMH
FROM
MonHoc, KetQuaThi
WHERE
MonHoc.MaMH = KetQuaThi.MaMH
AND LanThi = 1
AND KQua = 'Khong Dat'
GROUP BY
MonHoc.MaMH, TenMH
HAVING
COUNT(*) >= ALL (SELECT COUNT(*) FROM KetQuaThi WHERE LanThi = 1 AND KQua = 'Khong Dat' GROUP BY MAMH)
-- III.31 Tìm học viên (mã học viên, họ tên) thi môn nào cũng đạt (chỉ xét lần thi thứ 1)
SELECT DISTINCT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND NOT EXISTS
(
SELECT *
FROM KetQuaThi
WHERE LanThi = 1
AND KQua = 'Khong Dat'
AND MaHV = HocVien.MaHV
)
-- III.32 Tìm học viên (mã học viên, họ tên) thi môn nào cũng đạt (chỉ xét lần thi sau cùng).
SELECT DISTINCT
HocVien.MaHV, (Ho+' '+Ten) HoTen
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND NOT EXISTS
(
SELECT *
FROM KetQuaThi
WHERE LanThi = (SELECT MAX(LanThi) FROM KetQuaThi WHERE MaHV = HocVien.MaHV GROUP BY MaHV)
AND KQua = 'Khong Dat'
AND MaHV = HocVien.MaHV
)
-- III.33 Tìm học viên (mã học viên, họ tên) đã thi tất cả các môn đều đạt (chỉ xét lần thi thứ 1)
SELECT MaHV, (Ho+' '+Ten) HoTen
FROM HocVien
WHERE NOT EXISTS
(
SELECT *
FROM MonHoc
WHERE NOT EXISTS
(
SELECT *
FROM KetQuaThi
WHERE
KetQuaThi.MaMH = MonHoc.MaMH
AND KetQuaThi.MaHV = HocVien.MaHV
AND LanThi = 1 AND KQua = 'Dat'
)
)
-- III.35 Tìm học viên (mã học viên, họ tên) có điểm thi cao nhất trong từng môn (lấy điểm ở lần thi sau cùng).
SELECT MaMH, MaHV, HoTen
FROM
(
SELECT
MaMH, HocVien.MaHV, (Ho+' '+Ten) HoTen, RANK() OVER (PARTITION BY MaMH ORDER BY MAX(Diem) DESC) AS XepHang
FROM
HocVien, KetQuaThi
WHERE
HocVien.MaHV = KetQuaThi.MaHV
AND LanThi = (SELECT MAX(LanThi) FROM KetQuaThi WHERE MaHV = HocVien.MaHV GROUP BY MaHV)
GROUP BY
MaMH, HocVien.MaHV, Ho, Ten
) AS A
WHERE XepHang = 1