T SQL

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

--

--drop DATABASE qlbanhang


CREATE DaTaBASE Qlbanhang
GO
USE qlbanhang
CREATE TABLE ktra
(
A INT,
B INT
)
GO
SELECT * FROM ktra
--Sẽ bị báo lỗi

--Xem phiên bản cài đặt


SELECT phienban=@@VERSION
SELECT @@SERVERNAME
SELECT @@CPU_BUSY
--vd1: Khai báo @t1, gán giá trị 15 cho @t1
--và in kq ra màn hình
--Khai báo
DECLARE @t1 tinyint
-- thiết lập giá trị cho @t1
SET @t1=15--SELECT @T1=15
--in kết quả
SELECT @T1
PRINT @T1
PRINT N'Giá trị của biến t1 là: '+CAST(@t1 AS char(2))
PRINT N'Giá trị của biến t1 là: '+CONVERT(char(2), @T1)
GO

--vd2 in ten khoa có mã CNTT (QLSV)


USE QLSV206
DECLARE @tk NVARCHAR(50)
-- Thiết lập giá trị cho biến
SELECT @tk=TENKHOA
FROM KHOA
WHERE MAKHOA='CNTT'
--IN Kết quả
PRINT N'Tên khoa là: '+@TK
GO
SELECT * FROM SINHVIEN

--VD4 in số tc nhỏ nhất, lớn nhất của các môn học trong bảng Monhoc
USE QLSV206
DECLARE @Minsotc tinyINT, @Maxsotc tinyINT
SELECT @Minsotc=MIN(Sotc), @MaXsotc=MAX(Sotc)
FROM monhoc
PRINT N'Số tín chỉ thấp nhất là : '
PRINT @MinSotc
PRINT N'Số tín chỉ cao nhất là : ' + CONVERT(CHAR(2), @Maxsotc)
go
SELECT * FROM MONHOC

--Thuộc tính identity dùng để tự sinh stt tự động


create table thu6
(t1 int identity(1,1) primary key,
t2 CHAR(1) )
--
SELECT *
FROM THU6
--
INSERT INTO THU6 (t2)
VALUES('A'),
('B'),
('C')
select * from thu6

---Ví dụ về kiểu dữ liệu TABLE


Declare @B1 TABLE
(
b1 int,
b2 char(1)
)
SELECT * FROM @B1
INSERT INTO @B1
SELECT * FROM THU6
SELECT * FROM @B1
--VD4 Toán tử
SELECT 6+10
SELECT 6-10
SELECT 20/10
SELECT 20%10

print 6+10
print 6-10
print 20/10
print 20%10

SELECT * FROM SINHVIEN


---vd6 Hiện thị thông tin của sv mã 'SV01 ' và 'SV02 '
SELECT S.malop, S.masv, S.Hoten, S.gioitinh, S.ngaysinh, S.quequan
FROM SINHVIEN S
WHERE S.masv ='SV01' OR S.masv ='SV02'
--WHERE S.masv IN ('SV01','SV02')
--
SELECT *
FROM SINHVIEN
WHERE MASV='SV01 ' OR MASV='SV02 '
--C2
SELECT *
FROM SINHVIEN
WHERE MASV IN ('SV01' ,'SV02')
--VD7 Hiển thị thông tin của sinh viên có tên là 'Trang'
SELECT s.Masv, s.Hoten, s.Ngaysinh, s.Gioitinh, s.Quequan
FROM SINHVIEN s
WHERE s.hoten LIKE N'% Trang'
--VD8 hiển thị thông tin về môn học có số tc lớn nhất

--C1
SELECT *
FROM MONHOC
WHERE SOTC >=ALL (SELECT SOTC FROM MONHOC )
---c2
SELECT *
FROM MONHOC
WHERE SOTC =(SELECT MAX(SOTC) FROM MONHOC )
--C3
SELECT TOP 1 WITH TIES *
FROM MONHOC
ORDER BY SOTC DESC

SELECT *
FROM MONHOC
WHERE SOTC <=ALL (SELECT SOTC FROM MONHOC )

--vd8'Hiển thị thông tin của các sinh viên đã học các môn có sotc>=4--
--DISTINCT
SELECT DISTINCT s.*
FROM SINHVIEN s inner Join bangdiem d ON S.Masv =d.Masv
inner join MONHOC m ON m.MaMH =d.MaMH
WHERE m.SoTC >= 4
---C2
SELECT s.Masv, s.Hoten, s.Ngaysinh, s.Gioitinh, s.Quequan
FROM SINHVIEN s
WHERE masv IN (SELECT Masv FROM BANGDIEM
WHERE MAMH IN
(SELECT MAMH FROM
MONHOC
WHERE SoTC >= 4 ))
--vd8'' Hiển thị thông tin về các lớp có sinh viên quê ở Hưng Yên
--c1
SELECT distinct l.Makhoa, l.Malop, l.Tenlop, l.GVCN
FROM LOP l inner join SINHVIEN s ON l.Malop = s.Malop
WHERE s.QueQuan = N'Hưng Yên'
--C2
SELECT l.Makhoa, l.Malop, l.Tenlop, l.GVCN
FROM LOP L
WHERE MALOP IN (SELECT malop
FROM SINHVIEN S
WHERE
S.Quequan=N'Hưng Yên')

--vd8b: hiển thị thông tin của các sv gồm: Masv, hoten, diemtbl1
--thuộc kì 1 của các sv: diemtbl1=sum(dieml1*sotc)/sum (sotc)

SELECT s.masv, s.Hoten ,


ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2) as diemtbl1
FROM SINHVIEN s inner Join bangdiem d ON S.Masv =d.Masv
inner join MONHOC m ON m.MaMH =d.MaMH
WHERE Kihoc=1
GROUP BY s.masv, s.Hoten
--hiển thị thông tin của các môn học có sotc>=2 (>1) and sotc<=4(<5)
SELECT *
FROM MONHOC
WHERE SOTC>1 AND SOTC<5
--
SELECT *
FROM MONHOC
WHERE SOTC BETWEEN 2 AND 4
--vd8c hiển thị thông tin của các sv có diemtbl1 cao nhất gồm: Masv, hoten,
diemtbl1
--thuộc kì 1 của các sv: diemtbl1=sum(dieml1*sotc)/sum (sotc)
SELECT s.masv, s.Hoten ,
ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2) as diemtbl1
FROM SINHVIEN s inner Join bangdiem d ON S.Masv =d.Masv
inner join MONHOC m ON m.MaMH =d.MaMH
WHERE Kihoc=1
GROUP BY s.masv, s.Hoten
having ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2) >=all
(SELECT
ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2)
FROM SINHVIEN s inner Join bangdiem d
ON S.Masv =d.Masv
inner join MONHOC m ON m.MaMH
=d.MaMH
WHERE Kihoc=1
GROUP BY s.masv, s.Hoten)
--C2
SELECT TOP 1 WITH TIES s.masv, s.Hoten ,
ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2) as diemtbl1
FROM SINHVIEN s inner Join bangdiem d ON S.Masv =d.Masv
inner join MONHOC m ON m.MaMH =d.MaMH
WHERE Kihoc=1
GROUP BY s.masv, s.Hoten
ORDER BY ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2) DESC
--???TRUY vấn con ở mệnh đề from

--vd9 kiểm tra giá trị của biến @t


Declare @t int
set @t=-10
if (@t>0)
begin
print 'So duong'
print @t
end
else
print 'So am'
go

--VD9'kiểm tra sĩ số toàn trường


use QLSV206
declare @siso TINYint
select @siso = count (Masv) from sinhvien
if @siso >39
print N'Đông quá'
else
print N'ít quá, số lượng sv là: '+CAST (@siso as char(2))
go
select * from sinhvien
-
--vd10:tính số lượng sinh viên của bảng sinh viên
--kiểm tra nếu>40=>in: "sĩ số lớn hơn 40", <40=>in: "sĩ số nhỏ hơn 40"
--=40=> in: "sĩ số = 40"
DECLARE @SL tinyint
SELECT @SL=COUNT (MASV) FROM SINHVIEN
--Kiểm tra
IF @SL>40
PRINT N'sĩ số lớn hơn 40'
ELSE
IF @SL<40
PRINT N'sĩ số nhỏ hơn 40'
ELSE
PRINT N'sĩ số = 40'
--In kq
PRINT N'Tổng sl sv là: '+CAST(@SL AS CHAR(2))
GO
---xóa RB trên cột gioitinh CK__SINHVIEN__Gioiti__47DBAE45
ALTER TABLE SINHVIEN
DROP CONSTRAINT CK__SINHVIEN__Gioiti__47DBAE45
SELECT *
FROM SINHVIEN
---
---11.hien thi thong tin cua sv: masv, hoten, GT (1<- gioitinh='Nam' or 0<-
gioitinh= 'Nữ')
SELECT masv, hoten,
GT= CASE gioitinh
WHEN 'Nam' THEN 1
ELSE 0
END
FROM sinhvien
--c2
SELECT masv, hoten ,
gt=
case when gioitinh = N'Nam' then 1
else 0
end
FROM sinhvien
---
--vd12 hiển thị thông tin: masv, hoten, dtbl1, xeploai
select s.masv, s.hoten, d.tblan1, xeploai =
case
when d.tblan1 >=9 then N'xuất sắc'
when d.tblan1 >=8 then N'Giỏi'
when d.tblan1 >=7 then N'Khá'
when d.tblan1 >=6 then N'TB khá'
when d.tblan1 >=5 then N'TB'
else N'Kém'
end
from sinhvien s,
(
select s.masv ,
ROUND(SUM(d.Dieml1*m.sotc)/sum(m.sotc),2) as tblan1
FROM SINHVIEN s inner Join bangdiem d ON S.Masv =d.Masv
inner join MONHOC m ON m.MaMH =d.MaMH
group by s.masv
) as d
where d.masv = s.masv
---c2
SELECT sv.masv, hoten,
round(sum(bd.dieml1*mh.sotc)/sum(mh.sotc),2) as dtbLAN1,
xeploai = CASE
WHEN round(sum(bd.dieml1*mh.sotc)/sum(mh .sotc),1)
>=9 THEN N'Xuất sắc'
WHEN round(sum(bd.dieml1*mh.sotc)/sum(mh.sotc),1)
>=8 THEN N'Giỏi'
WHEN round(sum(bd.dieml1*mh.sotc)/sum(mH.sotc),1)
>=7 THEN N'Khá'
WHEN round(sum(bd.dieml1*mh.sotc)/sum(mH.sotc),1)
>=6 THEN N'TB khá'
WHEN round(sum(bd.dieml1*mh.sotc)/sum(mH.sotc),1)
>=5 THEN N'TB'
ELSE 'Kem'
END

FROM SINHVIEN sv inner Join bangdiem bd ON Sv.Masv =bd.Masv


inner join MONHOC mh ON mh.MaMH =bd.MaMH
GROUP BY sv.masv, hoten
--
--Ví dụ 2.11. Sử dụng cấu trúc TRY … CATCH để điều khiển lỗi chia cho 0.
BEGIN TRY
SELECT 10/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

--
BEGIN TRY
SELECT 10/0;
END TRY
BEGIN CATCH
RAISERROR (N'lỗi chia cho 0', 16, 1)
--PRINT N'lỗi chia cho 0'
--THROW 51000, 'Lỗi chia cho 0', 1
END CATCH;
--
USE tempdb;
GO
DELETE FROM dbo.TestRethrow
CREATE TABLE dbo.TestRethrow
( ID INT PRIMARY KEY
);
BEGIN TRY
INSERT dbo.TestRethrow(ID) VALUES(1)
---ERROR
INSERT dbo.TestRethrow(ID) VALUES(1)
END TRY
BEGIN CATCH
-- SELECT ERROR_NUMBER() AS ErrorNumber,
-- ERROR_SEVERITY() AS ErrorSeverity,
-- ERROR_MESSAGE() AS ErrorMessage
-- PRINT 'In catch block.';
THROW 51000, 'The record does not exist.', 1
-- THROW;

END CATCH

--vd14 in các số nguyên LẺ từ 1 đến 10


DECLARE @t Tinyint
SET @t=1
WHILE @t<11
BEGIN
PRINT @t
SET @t=@t+2
END
go
---
DECLARE @t Tinyint
SET @t=2
WHILE @t<11
BEGIN
PRINT @t
SET @t=@t+2
END
go
--
DECLARE @t Tinyint
SET @t=2
WHILE @t<11 BEGIN
PRINT @t
BREAK
SET @t=@t+2
END
GO
--
DECLARE @t Tinyint
SET @t=2
WHILE @t<11
BEGIN
PRINT @t
CONTINUE --Lặp vô hạn
SET @t=@t+2
END
GO
---
DECLARE @t Tinyint
SET @t=2
WHILE @t<11 BEGIN
PRINT @t
SET @t=@t+2
END
GO
---
DECLARE @t Tinyint
SET @t=2
WHILE @t<11
BEGIN
PRINT @t
SET @t=@t+2
CONTINUE
END
go
select newid()
select rand()

EXEC sp_help khoa

EXEC sp_helpindex sinhvien


DROP INDEX SINHVIEN.IDX_HOTEN, SINHVIEN.idx_IDHT
DROP INDEX SINHVIEN.idx_IDHT1

--VD15 tính tổng các số nguyên lẻ từ 1 đến 50


declare @s int, @t int
set @t=1
set @s=0
while @t<51
begin
set @s=@s+@t
set @t=@t+2
end
print @s
--VD tính tổng các số nguyên lẻ từ 1 đến 50 và chia hết cho 3

select AVG(SOTC) from monhoc

--vd16: tang so tin chi cua cac mon hoc lên 1


--trong khi tong so tin chi trung binh cua cac mon hoc
-- < 4 và chỉ tăng khi số tín chỉ lớn nhất <=7
se
SELECT * FROM MONHOC
---
USE QLSV
GO
WHILE (SELECT AVG(sotc) FROM monhoc) < 4
BEGIN
UPDATE monhoc
SET sotc = sotc + 1

IF (SELECT MAX(sotc) FROM MONHOC) > 7


BREAK
ELSE
CONTINUE
END
---?
Declare @a int, @t int
set @a=5
set @t=0
while @a<=10
begin
set @a=@a+1
set @t=@t+@a
print 'trong'
Print @a
print @t
end
print 'ngoai'
print @t --IN GÌ?

---bai tập 4_TH

CREATE TABLE T1(MA INT PRIMARY KEY, TEN NVARCHAR(30))


DECLARE @i INT, @ii NVARCHAR(20)
SET @i=1
WHILE @i<=20
BEGIN
SET @ii=N'Bản ghi thứ '+CONVERT(VARCHAR(3),@i)
INSERT T1(MA,TEN) VALUES (@i, @ii)
SET @i=@i+1
END
SELECT * FROM T1

You might also like