You are on page 1of 41

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GTVT

Chương 2: Ngôn ngữ


truy vấn có cấu trúc SQL
Giảng viên hd: Th.s. Trần Thị Xuân Hương
Đơn vị: Tổ KHCB
2.3.4. Biến – Variables
Biến trong T – SQL cũng có chức năng tương tự như
trong các ngôn ngữ lập trình khác nghĩa là cần khai
báo trước loại dữ liệu trước khi sử dụng. Biến được
bắt đầu bằng dấu @ (Đối với các global variable thì có
hai dấu @@)
Gán giá trị cho biến
Xem giá trị hiện hành của
biến
2.3.4. Biến – Variables
2.3.4. Biến – Variables
- Biến hệ thống (Global Variables): thực chất là các
hàm có sẵn trong SQL Server
 Không thể gán giá trị cho biến
 Biến hệ thống (toàn cục) không có kiểu
 Tên biến bắt đầu bằng @@
- Các biến thông dụng:
 @@VERSION: trả về thông tin phiên bản của SQL
Server
 @@CONNECTIONS: trả về số lượng kết nối
2.3.4. Biến – Variables
 @@ROWCOUNT: trả về tổng số mẫu tin được tác động
của câu lệnh truy vấn gần nhất.
 @@IDENTITY: trả về số IDENTITY phát sinh sau
cùng.
 @@ERROR: trả về số thự tự lỗi của lệnh thực thi sau
cùng, nếu trả về 0 thì câu lệnh hoàn thành
 @@SERVERNAME: trả về tên SERVER
 @@FETCH_STATUS: trả về trạng thái của việc đọc dữ
liệu trong bảng theo cơ chế từng mẫu tin. Khi đọc dữ liệu
của mẫu tin thành công thì giá trị là 0
CREATE FUNCTION [schema_name.]function_name
( [ @parameter [ AS ] [type_schema_name.] datatype

2.3.5. Hàm - function


[ = default ] [ READONLY ]
, @parameter [ AS ] [type_schema_name.] datatype
[ = default ] [ READONLY ] ]
)

RETURNS return_datatype

[ WITH { ENCRYPTION
| SCHEMABINDING
| RETURNS NULL ON NULL INPUT
| CALLED ON NULL INPUT
| EXECUTE AS Clause ]

[ AS ]

BEGIN

[declaration_section]

executable_section

RETURN return_value

END;
Ví dụ: Funtion
Các hàm chuyển đổi kiểu
dữ liệu
Đổi một số thành chuỗi
STR (Số_thực, Số_ký_tự [, Số_lẻ])
Đổi kiểu dữ liệu
CAST (Biểu_thức AS Kiểu_dữ_liệu)
Đổi kiểu dữ liệu và định dạng
CONVERT (Kiểu_dữ_liệu, Biểu_thức [,
Định_dạng])
Các hàm ngày giờ
• Cộng ngày: DATEADD (Đơn_vị, Con_số, Ngày_chỉ_định)
• So sánh hai biến ngày: DATEDIFF (Đơn_vị, Ngày1, Ngày2)
• Lấy tên ngày, tháng, năm: DATENAME (Đơn_vị, Ngày)
• Thời điểm hiện hành: GETDATE()
• Lấy một thành phần ngày, giờ trong biến ngày
DATEPART (Đơn_vị, Ngày)
• Lấy ngày, tháng, năm của biến ngày
DAY (Ngày)
MONTH (Ngày)
YEAR (Ngày)
Các hàm toán học
• Lấy trị tuyệt đối: ABS (Biểu_thức_số)
• Hằng số Pi: PI()
• Luỹ thừa: POWER (Biểu_thức_số, Số_mũ)
• Lấy số ngẫu nhiên: RAND ([Số_nguồn])
• Làm tròn số: ROUND (Biểu_thức_số, Vtrí_làm_tròn)
• Dấu của kết quả biểu thức : SIGN (Biểu_thức_số)
• Lấy căn bậc 2 : SQRT (Biểu_thức_số)
Các hàm xử lý chuỗi
Hàm viết hoa, thường: UPPER (Chuỗi), LOWER (Chuỗi)
Hàm cắt chuỗi: LEFT (Chuỗi nguồn, Số_ktự)
RIGHT (Chuỗi nguồn, Số_ktự)
SUBSTRING (Chuỗi nguồn,Vị_trí,Số_ktự)
Hàm cắt khoảng trắng, cho chuỗi khoảng trắng
LTRIM (Chuỗi), RTRIM (Chuỗi), SPACE (N)
Hàm cho chuỗi lặp: REPLICATE (Chuỗi_lặp, N)
Chiều dài chuỗi: LEN (Chuỗi)
Đảo chuỗi: REVERSE (Chuỗi)
Tìm và thay thế chuỗi
REPLACE (Chuỗi nguồn, Chuỗi_tìm, Chuỗi_thay_thế)
Đổi từ số thành ký tự và ngược lại: CHAR (Số) , ASCII(Ký_tự)
2.3..6. Các toán tử
• Toán tử số học
Toán tử so sánh
Toán tử liệt kê
Toán tử like và các kí tự đại diện
Từ khoá LIKE (NOT LIKE) sử dụng trong câu lệnh
SELECT nhằm mô tả khuôn dạng của dữ liệu cần tìm kiếm.
Chúng thường được kết hợp với các ký tự đại diện sau đây:
2.3.7. Các thành phần điều khiển
BEGIN…END
Begin…End: được sử dụng để định nghĩa một khối
lệnh. Một khối lệnh bao gồm nhiều câu lệnh SQL được thực
thi để xử lý một bài toán nào đó

BEGIN
SELECT InvoiceId
FROM Invoice
WHERE Total > 100
 
IF @@ROWCOUNT = 0
PRINT 'No invoice with total greater than 100 found'
END
Khối: IF-ELSE
Khối: Whlie, break,
continue
-- Câu lện continue
-- Câu lệnh break.
 DECLARE @counter INT = 0;
 DECLARE @counter INT = 0;
 WHILE @counter < 5
 WHILE @counter <= 5
BEGIN
BEGIN
    SET @counter = @counter + 1;
    SET @counter = @counter + 1;
    IF @counter = 3
         BREAK;
        CONTINUE;
    PRINT @counter;
    PRINT @counter;
END
END
Khối: case…end
Dạng 1 Dạng 2
Khối: case…end
2.3.8. Chú thích
2.3.9. Giá trị null
Dữ liệu trong một cột cho phép NULL sẽ nhận giá trị
NULL trong các trường hợp sau:
•Nếu không có dữ liệu được nhập cho cột và không có mặc
định cho cột hay kiểu dữ liệu trên cột đó.
•Người sử dụng trực tiếp đưa giá trị NULL vào cho cột đó.
•Một cột có kiểu dữ liệu là kiểu số sẽ chứa giá trị NULL nếu
giá trị được chỉ định gây tràn số.
2.3.9. Giá trị null
Trong mệnh đề WHERE, để kiểm tra giá trị của một cột có giá
trị NULL hay không, ta sử dụng cách viết:
WHERE tên_cột IS NULL
hoặc:
WHERE tên_cột IS NOT NULL
Tạo CSDL QLCH gồm các
bảng sau
Sửa cấu trúc của bảng
a. Thêm một thuộc tính:
•Trong bảng KHACH, thêm một thuộc tính SoThich nhằm lưu
vào bảng KHACH sở thích của khách hàng.
•Trong bảng HANG, thêm hai thuộc tính
là NoiCungCap và NoiSanXuat nhằm lưu vào bảng HANG
thông tin về nơi cung cấp hàng hóa đó và nơi sản xuất chúng.
b. Thay đổi kiểu của một thuộc tính.
•Trong bảng KHACH, thay đổi kiểu dữ liệu cho trường
SoThich, từ kiểu Text thành kiểu Memo.
•Trong bang HANG, thay đổi kiểu dữ liệu cho trường
NoiCungCap, từ kiểu Text thành kiểu Number.
Sửa cấu trúc của bảng
c. Xóa một thuộc tính.
•Trong bảng HANG, hãy xóa 2 thuộc tính NoiCungCap và
NoiSanXuat.
•Trong bảng KHACH, hãy xóa thuộc tính SoThich.
Thêm giá trị vào các dòng của
bảng
* Xóa hàng
•Xóa một hàng có ma_hang = ‘H001’ trong bảng HANG.
•Xóa tất cả các khách hàng có Diachi_kh = ‘Đại học Thủy
Lợi ‘ trong bảng KHACH.
•Xóa khách hàng có tên là Trịnh Hồng Cường.
* Sửa đổi giá trị của một hàng.
•Sửa đổi địa chỉ của khách hàng thành địa chỉ mới là Đại
học Quốc Gia với ma_khach là K002.
•Sửa đổi tất cả các tên hàng là “Hoa lan” thành “Hoa phong
lan” và mô tả hàng là “Hàng nhập khẩu từ Đà Lạt”
Câu lệnh truy vấn
1. Hãy liệt kê những mặt hàng không có trong đơn hàng
2. Hãy liệt kê sodon, makh, tenkh, mahang, tenhang,
soluong, mota trong đơn hàng
Với mota như sau: khách hàng là kh001 là khách vip
khách hàng còn lại là khách thường
3. Hãy liệt kê những khách hàng mà có tên không bắt đầu
bằng chữ T hoặc chữ H
4. Hãy bổ sung thêm cột ngày sinh của khách hàng và tiến
hành nhập ngày sinh. Hãy đưa ra ds các khách hàng
gồm: makhach, tenkhach, ngaysinh, tuổi. Với tuổi được
Câu lệnh truy vấn
10. Đưa ra so_phieu, ma_hang, don_gia, soluonggi và
Thành tiền (don_gia*so_luong), sử dụng bí danh la
thanh_tien của tất cả các hàng trong bảng PHIEU_GIAO
.
11. Đưa ra tất cả giá trị của bảng HANG theo thứ tự giảm
dần của ma_hang.
12. Đưa ra tất cả các giá trị của bảng PHIEUGIAO theo thứ
tự tăng dần (giảm dần) của tổng tiền (tong_tien).
13. Đưa ra tất cả các khách hàng có địa chỉ là Đại học Quốc
Gia trong bảng KHACH.
14. Đưa ra So_phieu, Ma_khach trong bảng PHIEUGIAO
với điều kiện Tong_tien>=100.000, và sắp xếp theo điều
kiện giảm dần của Tong_tien.
Bài tập 2
Để quản lý Thực tập nghề nghiệp của sinh viên, người ta xây
dựng một cơ sở dữ liệu có tên là ThucTap gồm các sơ đồ quan hệ sau:
TBLKhoa(makhoa nvarchar(10), tenkhoa nvarchar(30), dienthoai
nvarchar(10))
TBLGiangVien(magv int, hotengv nvarchar(30), luong decimal(5,2),
makhoa nvarchar(10))
TBLSinhVien(masv int, hotensv nvarchar(30), makhoa nvarchar(10),
namsinh int, quequan nvarchar(30))
TBLDeTai(madt nvarchar(10), tendt nvarchar(30), kinhphi int,
NoiThucTap nvarchar(30))
TBLHuongDan(masv int, madt nvarchar(10), magv int, ketqua
decimal(5,2))
TBLDeTai TBLKhoa

Nhập dữ liệu cho các bảng

TBLGiangVi
en

TBLSinhVien

TBLHuongDan
Câu hỏi truy vấn:
Câu hỏi truy vấn:
Bài tập 3: Tạo CSDL sau
Dữ liệu:
Truy vấn
1. Liệt kê những dòng xe có số chỗ ngồi trên 5 chỗ
2. Liệt kê thông tin của các nhà cung cấp đã từng đăng ký cung cấp
những dòng xe thuộc hãng xe “Toyota” với mức phí có đơn giá là
15.000 VNĐ/km hoặc những dòng xe thuộc hãng xe “KIA” với mức
phí có đơn giá là 20.000 VNĐ/km
3. Liệt kê thông tin toàn bộ nhà cung cấp được sắp xếp tăng dần theo
tên nhà cung cấp và giảm dần theo mã số thuế
4. Đếm số lần đăng ký cung cấp phương tiện tương ứng cho từng nhà
cung cấp với yêu cầu chỉ đếm cho những nhà cung cấp thực hiện
đăng ký cung cấp có ngày bắt đầu cung cấp là “20/11/2015”
5. Liệt kê tên của toàn bộ các hãng xe có trong cơ sở dữ liệu với yêu
cầu mỗi hãng xe chỉ được liệt kê một lần
Truy vấn
1. Liệt kê MaDKCC, MaNhaCC, TenNhaCC, DiaChi, MaSoThue,
TenLoaiDV, DonGia, HangXe, NgayBatDauCC,
NgayKetThucCC của tất cả các lần đăng ký cung cấp phương
tiện với yêu cầu những nhà cung cấp nào chưa từng thực hiện
đăng ký cung cấp phương tiện thì cũng liệt kê thông tin những
nhà cung cấp đó ra
2. Liệt kê thông tin của các nhà cung cấp đã từng đăng ký cung
cấp phương tiện thuộc dòng xe “Hiace” hoặc từng đăng ký cung
cấp phương tiện thuộc dòng xe “Cerato”
3. Liệt kê thông tin của các nhà cung cấp chưa từng thực hiện
đăng ký cung cấp phương tiện lần nào cả.

You might also like