Professional Documents
Culture Documents
Ví dụ: Tạo bảng Docgia gồm các thuộc tính: maDG, tenDG,
diachi, tuoi (lưu ý: maDG, tenDG, diachi thuộc kiểu
nvarchar(100); tuoi thuộc kiểu int)
2.3.2. Ngôn ngữ điều khiển dữ liệu
(Data control language-DML)
Lệnh Grant
Lệnh Grant
Ví dụ
Lệnh Revoke
2.3.3. Ngôn ngữ thao tác dữ liệu
(Data manipulation - DML)
Ví dụ
2.3.4. Cú pháp của T-SQL
- Các đối tượng trong database (table, view, store procedure,
trigger, …) được xác định thông qua tên đối tượng (hay
identifier) là duy nhất trong mỗi database. Có 2 loại
identifier:
- Reguler identifier: loại thông thường
- Delimited identifier: loại này thường trùng với từ khóa,
hoặc có chứa khoảng trắng, có dấu. Loại này phải được đặt
trong: “” hoặc []
Ví dụ: Select * From “My table” Where [sum] = 10
2.3.4. Cú pháp của T-SQL
- Nếu trong một câu lệnh SQL có liên quan đến cột trùng tên
trong các bảng khác nhau thì bắt buộc phải chỉ định thêm
tên bảng sau đó chấm rồi mới đến tên cột.
- Ví dụ:
2.3.5. Các kiểu dữ liệu trong SQL
2.3.6. 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.6. Biến – Variables
2.3.6. 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.6. 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
2.3.7. Hàm – function
Có hai loại hàm:
-Built -in: được xây dựng sẵn trong SQL
-User-defined: do người dùng định nghĩa. Được tạo ra
bởi câu lệnh CREATE FUNCTION và phần body
thường được đặt trong cặp lệnh BEGIN...END
Built in: gồm 3 nhóm
Rowset Function: Loại này thường trả về là một object và được
đối xử như Table. Ví dụ hàm OPENQUERY sẽ trả về một
recordset và có thể đứng vị trí của một table trong câu lệnh Select.
Aggregate Functions: Loại này làm việc trên một số giá trị và trả
về một giá trị đơn hay là các giá trị tổng. Ví dụ như hàm AVG sẽ
trả về giá trị trung bình của một cột.
Scalar Functions: Loại này làm việc trên một giá trị đơn và trả về
một giá trị đơn. Trong loại này lại chia làm nhiều loại nhỏ như các
hàm về toán học, về thời gian, xử lý kiểu dữ liệu String....Ví dụ
như hàm MONTH('2002-09-30') sẽ trả về tháng 9.
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ự)
Nhóm hàm User-Defined
Scalar Function: Loại này trả về một giá trị đơn
bằng câu lệnh RETURN.
Table Function: Loại này trả về một Table
CREATE FUNCTION [schema_name.]function_name
( [ @parameter [ AS ] [type_schema_name.] datatype
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
2.3.8. 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.9. 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.10. Chú thích
2.3.11. 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.11. 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
BÀI TẬP
Tạo CSDL: QLnhanvien gồm các bảng sau:
Thêm dữ liệu cho các bảng
Sử dụng câu lệnh truy vấn đưa ra các
thông tin sau:
1. Đưa ra Hoten, Congviec, Luong của tất cả các nhân viên.
2. Đưa ra toàn bộ công việc của các nhân viên, các giá trị không
trùng nhau.
3. Đưa ra Hoten, LuongQuy của tất cả các nhân viên, với
LuongQuy= Luong*3.
4. Đưa ra Hoten, Luong sắp xếp theo thứ tự tăng dần/ giảm dần của
Luong.
5. Đưa ra Hoten, Luong của các nhân viên có Luong>300.
6. Đưa ra Hoten, Luong của các nhân viên có Luong>300 và làm
công việc là Giáo viên.
7. Đưa ra những nhân viên có lương hoặc 200, 300, 600.
8. Đưa ra những nhân viên có Lương trong khoảng 300 đến 600.
9. Đưa ra Hoten, Congviec của các nhân viên có Họ tên bắt đầu bằng
chữ ‘Hoàng’.