Professional Documents
Culture Documents
GIÁO TRÌNH ĐÀO TẠO NỘI BỘ CHO SINH VIÊN THỰC TẬP - QuangLM
GIÁO TRÌNH ĐÀO TẠO NỘI BỘ CHO SINH VIÊN THỰC TẬP - QuangLM
2. Mục đích:
- Giúp Sinh viên nắm vững hơn về kiến thức cơ bản.
- Tiếp cận các bài toán và thuật toán thực tế.
Tables
Views
Procedured
Functions
Trigger
...
Name Nvarchar(128)
Code Varchar(24)
Name Nvarchar(128)
Name Nvarchar(128)
Unit Nvarchar(24)
WarehouseCod
e Varchar(24)
ItemCode Varchar(24)
Quantity Numeric(18, 5)
Amount Numeric(18, 2)
DocId Varchar(16) Duy nhất, dùng để liên kết với bàng DocDetail
DocDate Date
DocNo Nvarchar(24)
CustomerCode Varchar(24)
WarehouseCod
e Varchar(24)
Description Nvarchar(128)
ItemCode Varchar(24)
Quantity Numeric(18, 5)
UnitCost Numeric(18, 5)
Amount Numeric(18, 2)
SIGN(X) 1- Số dương, 0- Số 0; -1 Số âm
RAND() Trả về số ngẫu nhiên
3. Hàm chuỗi:
REPLACE(Chuỗi 1, Chuỗi 2,
Chuỗi 3) Thay thế chuỗi 2 bằng chuỗi 3 ở chuỗi 1
STUFF(Chuỗi 1, vị trí, chiều Chèn Chuỗi 2 vào Chuỗi 1 từ "vị trí" và xóa bỏ số ký tự bằng
dài, Chuỗi 2) "chiều dài" Chuỗi 1
Trả về giá trị độ dài chuỗi 1, không bao gồm dấu cách phía bên
LEN("Chuỗi 1") phải
BUỔI 3: HÀM NGÀY THÁNG
1. Hàm ngày tháng:
DATENAME(DatePart, Ngày) Trả về giá trị DatePart của Ngày nhưng là kiểu chuỗi
Trong đó, giá trị của DatePart được liệt kê như sau:
GROUP BY: Sau khi xử lý WHERE. (Sẽ có buổi chi tiết về phần này)
HAVING: Điều kiện sau khi đã GROUP BY (Sẽ có buổi chi tiết về phần này)
ORDER BY: Sắp xếp kết quả sau khi đã xử lý các mệnh đề trên. (Sẽ có buổi chi tiết về phần này)
AND, OR Kết hợp điều kiện hoặc là loại trừ điều kiện.
% Đại diện cho nhiều ký tự đằng trước hoặc sau. Ký tự ‘_’ đại
LIKE kết hợp với ‘%’ hoặc ‘ _’
diện 1 ký tự
IS NULL Không dung giá trị kiểm tra = NULL mà phải dùng IS NULL
Không dung giá trị kiểm tra <> NULL mà phải dùng IS NOT
IS NOT NULL
NULL
INNER JOIN: Lấy thông tin chung nhau giữa bảng A và bảng B
LEFT JOIN: Lấy toàn bộ thông tin bên trái và dữ liệu bên phải có trong bên trái
RIGHT JOIN: Lấy toàn bộ thông tin bên phải và dữ liệu bên trái có trong bên
phải
FULL JOIN: Lấy toàn bộ thông tin 2 bên (đầy đủ các trường của 2 bảng) Cẩn thận, ít dùng
Kết nối kiểu FROM Table1, Table2: Giống như INNER JOIN
CROSS APPLY và OUTER APPLY: Giống INNER JOIN và LEFT nhưng có thể
liên kết với 1 hàm, hoặc cần lấy TOP.
https://www.c-sharpcorner.com/UploadFile/f0b2ed/cross-apply-and-outer-apply-
in-sql-server/
Ví dụ minh họa
BUỔI 5: CÁC HÀM TẬP HỢP VÀ GROUP BY VÀ ORDER BY
1. Hàm tập hợp:
AVG(Tên cột) Trả về trung bình cộng của các giá trị trong Cột
SUM(Tên cột) Trả về tổng của các giá trị trong cột
ORDER BY: Sắp xếp kết quả sau khi đã xử lý các mệnh đề trên.
Mệnh đề: ROLLUP (dùng với mệnh đề GROUP BY): Chèn dòng tổng cho từng dòng chi tiết của
trường đầu tiên và dòng tổng cộng
FROM Table
WITH ROLLUP
Mệnh đề: CUBE (dùng với mệnh để GROUP BY): Kết quả trả về giống ROLLUP
nhưng thêm toàn bộ dòng tổng cộng của từng trường.
Mệnh đề sắp xếp: ORDER BY (ASC: Tăng dần (mặc định), DESC: Giảm dần)
UNION ALL: Lấy toàn bộ dữ liệu các bảng (Sẽ lấy độ rộng lớn nhất của trường
trong bảng kết nối)
UNION: Tập hợp loại trừ dữ liệu giữa các bảng giống nhau Câu lệnh chậm
INTERSECT: Giao nhau. được dùng để trả về các bản ghi nằm trong cả 2 bộ
dữ liệu hoặc lệnh SELECT. Nếu một bản ghi chỉ có trong một truy vấn chứ
không có trong truy vấn còn lại, nó sẽ bị loại bỏ khỏi bộ kết quả của
INTERSECT.
EXCEPT: Loại trừ. Toán tử EXCEPT trong SQL Server được dùng để trả về
các hàng trong lệnh SELECT đầu tiên mà không trả về trong lệnh SELECT thứ
hai. Mỗi lệnh SELECT sẽ có một bộ dữ liệu. Toán tử EXCEPT lấy bản ghi từ bộ
thứ 1 và bỏ các kết quả từ bộ 2.
2. Bảng tạm:
- Là bảng có tên có ký tự # ở đầu ví dụ: #BangKeChungTu, #SochitietTK…
- Bảng tạm có 2 loại: Bảng tạm 1 # và bảng tạm 2 # (##).
Bảng tạm #: Session A không thể truy vấn bảng # thuộc session B.
Bảng tạm ##: Session A có thể truy vấn bảng ## thuộc session B.
Cách viết câu lệnh của bảng tạm cũng giống như với bảng thường tuy nhiên trước khi tạo
bảng cần viết câu lệnh kiểm tra tồn tại của bảng để nếu có thì xóa đi:
IF OBJECT_ID(‘tempdb..#TenBangTam’) IS NOT NULL DROP TABLE #TenBangTam.
DROP TABLE IF EXISTS #TenBangTam’;
- Ứng dụng của bảng tạm dùng rất nhiều trong thực tế giúp việc xử lý trung gian dữ liệu được
thuận lợi hơn.
- Câu lệnh: INSERT INTO Tên bảng (Ds trường) SELECT và INSERT INTO Tên bảng (Ds trường)
…. VALUES(….)
BUỔI 7: CÁC HÀM CHUYỂN KIỂU VÀ KIỂM TRA
1. Hàm chuyển kiểu và kiểm tra
Chuyển đổi dữ liệu. Ứng dụng các hàm này để chuyển đổi kiểu hoặc
CAST (<Biểu thức> AS
tạo ra 1 cột trong câu lệnh SELECT CAST (‘’ AS NVARHAR(16)) AS
<Kiểu dữ liệu>)
TenCot
Chuyển đổi dữ liệu theo định dạng (hay sử dụng cho dữ liệu kiểu
CONVERT(<Kiểu dữ ngày) VD: Chuyển kiểu ngày sang chuỗi:
liệu>, <Biểu thức> [, CONVERT(VARCHAR(10),GETDATE(),110)
<Định dạng>]) Ứng dụng các hàm này để chuyển đổi kiểu hoặc tạo ra 1 cột trong câu
lệnh SELECT CAST (‘’ AS NVARHAR(16)) AS TenCot
STR(<Số>,<Số_Ký_Tự
> [,<Số lẻ>]): Chuyển dữ liệu số sang kiểu chuỗi
DATEFROMPARTS( ye Thông qua giá trị năm, tháng, ngày, trả về kiểu ngày.
ar, month, day ) SELECT DATEFROMPARTS(2020, 5, 6)
ISNULL() Kiểm tra giá trị là null hay không thì trả về giá trị mặc định
3. PIVOT, UNPIVOT
PIVOT cho phép phân tích bảng chéo (cross tabulation) chuyển dữ liệu từ bảng này sang bảng khác, tức
là lấy kết quả tổng hợp rồi chuyển từ dòng thành cột.
SELECT cot_dautien AS <bidanh_cot_dautien>,
[giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n]
FROM
(<bang_nguon>) AS <bidanh_bang_nguon>
PIVOT
(
ham_tong (<cot_tong>)
FOR <cot_chuyen>
IN ([giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n])
) AS <bidanh_bang_chuyen>;
SELECT pvt.ProductId
, pvt.CUS001 AS Col1, pvt.CUS002 AS Col2, pvt.CUS003 AS Col3, pvt.CUS004 AS Col4
FROM
(SELECT ProductId, CustomerCode, Amount
FROM #Tmp) AS t1
PIVOT
(
SUM (AMOUNT) FOR CustomerCode IN (CUS001, CUS002, CUS003, CUS004)
) AS pvt
ORDER BY ProductId