Mục lục
Cách xem thuộc tính của cột (Column properties)

Tên cột
Tên của cột đã chọn.Kiểu dữ liệu
Hiện thị kiểu dữ liệu của cột đã chọn.Chỉ mục (Index – IX)
Chỉ mục dùng để truy vấn nhanh hơn, giúp giảm số lượng trang dữ liệu cần được đọc để truy vấn dữ liệu trong một câu lệnh SQL.Một số các ràng buộc (Constraints) được ứng dụng vào các cột hoặc các bảng
- Giá trị không tồn tại hoặc không xác định (NULL)
- Giá trị duy nhất (UNIQUE)
- Khóa chính (PRIMARY KEY)
- Khóa ngoại (FOREIGN KEY)
- Kiểm tra (CHECK)
- DEFAULT
- Tạo chỉ mục (CREATE INDEX)
Kiểu dữ liệu trong SQL Server (Data type)
Một số kiểu dữ liệu thường gặp:Dữ liệu dạng số.
Dữ liệu dạng số xấp xỉ
- FLOAT(N): Định dạng dữ liệu được sử dụng để lưu trữ các số thực.
- REAL: Được sử dụng để lưu trữ số thực, ít chính xác hơn FLOAT().
Dữ liệu dạng số chính xác
- DECIMAL(p,s): Được sử dụng để lưu trữ số thập phân có độ chính xác cố định.
- NUMERIC(p,s): Kiểu dữ liệu số nguyên
Giải thích câu lệnh truy vấn:- SELECT: Hiển thị kết quả truy vấn.
- INT, BIGINT, SMALLINT, TINYINT đều lưu trữ kiểu dữ liệu số nguyên, tuy nhiên sẽ khác nhau về dung lượng và khoảng số nguyên.

Dữ liệu dạng ký tự
Dữ liệu dạng chuỗi ký tự
- CHAR[( n | max)]: Lưu trữ chuỗi ký tự có kích thước cố định, tương ứng n.
- VARCHAR [( n | max)]: Dữ liệu chuỗi có kích thước linh hoạt, kích thước tương ứng n hoặc max.
- TEXT: Lưu trữ các chuỗi ký tự lớn, định dạng TEXT không có tham biến, nhưng sẽ lưu trữ tối đa trong phạm vi khoảng 2GB, trong khi đó VARCHAR có thể lưu trữ với phạm vi ngắn khoảng 8000 byte.
Dữ liệu dạng chuỗi nhị phân
- BINARY: Dùng để lưu trữ các dãy byte có độ dài cố định.
Dữ liệu dạng ký tự Unicode
N được viết ở đầu mỗi định dạng cho phép lưu trữ ký tự Unicode.- NCHAR [( n | max)]: Lưu trữ chuỗi có độ dài cố định, có kích thước tương ứng n hoặc max và cho phép lưu trữ dưới dạng Unicode.
- NVARCHAR [( n | max)]: Lưu trữ chuỗi ký tự có độ dài linh hoạt, có kích thước tương ứng n hoặc max, cho phép Unicode.
- NTEXT: Chuỗi ký tự có độ dài linh hoạt, tối đa lưu trữ khoảng 1073741823 byte, cho phép Unicode.
Dữ liệu dạng ngày & giờ

Trạng thái NULL của dữ liệu
NULL là dữ liệu không xác định hoặc dữ liệu không có sẵn, NULL không được coi là giá trị.Bất cứ một phép toán nào thực hiện với NULL đều sẽ trả ra NULL. Khi lấy NULL để so sánh với các toán tử như “>”, “<”, “=”, kết quả sẽ trả về kết quả false.
Giải thích câu lệnh truy vấn:NULL là trạng thái đáng chú ý của dữ liệu do nó có thể gây ra sai lệnh trong tính toán.Sử dụng * kết hợp giữa NULL và giá trị nhất định sẽ trả ra NULL.Sử dụng toán tử + kết hợp giữa NULL và giá trị nhất định sẽ trả ra NULL.Kiểm tra kiểu dữ liệu của cột trong bảng
Bạn có thể kiểm tra kiểu dữ liệu trong bảng bằng cách ấn chuột vào thư mục Columns, bạn sẽ thấy định dạng dữ liệu được lưu trữ ở bên góc tay trái.
Hoặc bạn có thể sử dụng cú pháp sau để kiểm tra kiểu dữ liệu:SELECTCol_name,…FROM INFORMATION_SCHEMA.COLUMNSĐể để kiểm tra kiểu dữ liệu trong bảng SalesOrderHeader thuộc bộ dữ liệu AdventureworksFULL. Ta sử dụng câu truy vấn sau:
Giải thích câu lệnh truy vấn:- FROM INFORMATION_SCHEMA.COLUMNS: Bảng mà cần truy vấn
- WHERE (TABLE_SCHEMA = ‘Sales’) AND (TABLE_NAME = ‘SalesOrderHeader’): Là điều kiện để lọc dữ liệu. Điều kiện ở đây là truy vấn thông tin có trong bảng SalesOrderHeader thuộc lược đồ Sales.
- ORDER BY DATA_TYPE: Kết quả sẽ được sắp xếp theo DATA_TYPE thứ tự từ A-Z.
Các hàm làm việc tương ứng kiểu dữ liệu
Các hàm chuyển đổi kiểu dữ liệu
Một số loại kiểu hàm chuyển đổi dữ liệu chính trong SQL.
Trong quá trình truy vấn dữ liệu, bạn sẽ thường xuyên phải update kiểu dữ liệu (Data types). Dưới đây là một số hàm giúp chuyển đổi kiểu dữ liệu:Hàm chuyển đổi kiểu dữ liệu
- Hàm CAST
CAST(Col/Expression AS Data type)
- Col/Expression: Cột/biểu thức cần chuyển đổi kiểu dữ liệu.
- Data type: Kiểu dữ liệu mà bạn muốn chuyển Col/Expression thành.
Giải thích câu lệnh truy vấn:CAST(20 AS REAL) ép kiểu của giá trị 20 thành REAL.CAST(‘2023/08/23 20:14:30’ AS DATE) chuyển từ định dạng ngày/tháng/năm thời gian thành định dạng ngày.- Hàm CONVERT
CONVERT(target_data_type, expression, style)
- Target_data_type: Kiểu dữ liệu mà bạn muốn chuyển đổi giá trị/biểu thức cần chuyển đổi.
- Expression: Giá trị hoặc biểu thức cần chuyển đổi.
- Style (Không bắt buộc): Thường áp dụng cho các chuyển đổi liên quan đến ngày tháng. Nó xác định cách định dạng ngày tháng được hiển thị hoặc chấp nhận.

- Kiểu dữ liệu muốn chuyển đổi thành kiểu VARCHAR.
- Giá trị cần chuyển đổi là thời gian của ngày hiện tại, ta sử dụng hàm GETDATE() để lấy ngày hiện tại (23/09/2023)
- Chuyển đổi dưới định dạng tháng/ngày/năm.
Giải thích câu lệnh truy vấn:- CAST(ProductNumber AS INT): Chuyển đổi kiểu dữ liệu của ProductNumber thành định dạng INT.
Giải thích câu lệnh truy vấn:- TRY_CAST(ProductNumber AS INT): Chuyển đổi kiểu dữ liệu của ProductNumber thành định dạng INT.
TRY_CONVERT(expression AS data_type)
- Expression: Giá trị hoặc biểu thức mà bạn muốn chuyển đổi sang kiểu dữ liệu mới.
- Data_type: Kiểu dữ liệu mà bạn muốn chuyển đổi.
Giải thích câu lệnh truy vấn:- CONVERT(): Dùng để chuyển kiểu định dạng của 20.7 thành INT.
- TRY_CONVERT: Dùng để chuyển kiểu định dạng của ‘abc’ thành INT.
- Định dạng chỉ ngày.

- Định dạng chỉ thời gian:

- Định dạng chỉ ngày & giờ.

Xử lý dữ liệu dạng chuỗi
a. Hàm CONCATHàm CONCAT được sử dụng để kết hợp nhiều chuỗi lại với nhau và tạo ra một chuỗi duy nhất.Cùng là kết hợp, tuy nhiên khi kết hợp nhiều chuỗi bao gồm cả NULLHàm CONCAT sẽ vấn kết hợp chuỗi và bỏ qua NULL.Một cách làm khác để kết hợp chuỗi là sử dụng dấu “+”.Cú pháp của hàm CONCAT:CONCAT(string1, string2, …)
- string1, string2: Các tham số là chuỗi hoặc biểu thức chuỗi muốn nối lại với nhau.
Hàm CONCAT và toán tử “+” được sử dụng để kết hợp 2 cột FirstName, LastName với nhau.b. Hàm CONCAT_WSTương tự như hàm CONCAT, hàm CONCAT_WS sẽ kết hợp nhiều chuỗi bằng cách sử dụng một phân tách thành một chuỗi duy nhất. Ngoài ra, khi kết hợp các cột có NULL, hàm CONCAT_WS sẽ vấn kết hợp chuỗi và bỏ qua NULL.Cú pháp của hàm CONCAT_WS:CONCAT_WS(separator, col_1, col_2, …)
- separator: Chuỗi phân tách mà bạn muốn sử dụng để ngăn cách các chuỗi với nhau.
- col_1, col_2: Các tham số là chuỗi hoặc biểu thức chuỗi mà bạn muốn nối với nhau sau khi được phân tách.
Thay vì phải điền các chuỗi phân tách như hàm CONCAT, bạn chỉ cần điều chuỗi phân tách 1 lần trong hàm CONCAT_WS.c. Hàm LENHàm LEN được sử dụng dùng để tính độ dài của chuỗi ký tự.Cú pháp của hàm LEN:LEN(string)
- string: chuỗi ký tự mà bạn muốn tính độ dài.
Hàm LEN tính toán độ dài của tên khách hàng.d. Hàm LEFT & RIGHTHàm LEFT dùng để trích xuất một số ký tự cụ thể từ bên trái của ký tự.Hàm RIGHT dùng để trích xuất một số ký tự cụ thể từ bên phải của ký tự.Cú pháp của hàm LEFT và hàm RIGHT:LEFT/RIGHT(string, num_characters)
- string: Chuỗi ký tự mà bạn muốn trích xuất từ bên trái/phải.
- length: Số lượng ký tự mà bạn muốn trích xuất từ phía trái/phải của chuỗi.
Giải thích câu lệnh truy vấn.- SELECT: Hiển thị kết quả truy vấn.
REPLICATE(string, n_times)
- string: Chuỗi hoặc ký tự muốn lặp lại.
- n_times: Số lần lặp lại chuỗi hoặc ký tự.
Hàm REPLICATE lặp lại giá trị của cột LastName 2 lần.f. Hàm REPLACEHàm REPLACE thay thế một chuỗi ký tự trong chuỗi ký tự gốc.Cú pháp hàm REPLACE:REPLACE(string, to_replace, replacement)
- string: Chuỗi ký tự gốc.
- to_replace: Chuỗi ký tự được thay thế trong ký tự gốc.
- replacement: Chuỗi ký tự thay thế.
g. Hàm UPPERHàm UPPER cho phép chuyển đổi chữ cái sang dạng viết hoaCú pháp của hàm UPPER:UPPER(nvarchar)
h. Hàm LOWERHàm LOWER cho phép chuyển đổi chữ cái sang dạng viết thườngCú pháp của hàm LOWER:LOWER(nvarchar)
Ví dụ: Bạn muốn viết hoa FirstName, viết thường Middle Name.
Giải thích câu lệnh truy vấn:Hàm UPPER chuyển đổi FirstName thành chữ cái viết hoa.Hàm LOWER chuyển đổi MiddleName thành chữ cái viết thường.i. Hàm CHARINDEX:CHARINDEX được dùng để tìm kiếm chuỗi ký tự trong chuỗi ký tự gốc và trả về vị trí đầu tiên của chuỗi khớp nếu có. Ngược lại, nếu không tìm thấy chuỗi ký tự con trong chuỗi ký tự gốc, hàm CHARINDEX sẽ trả về NULL.Cú pháp của CHARINDEX:CHARINDEX(substr, str, [start_location])
- substr: Chuỗi ký tự tìm kiếm trong chuỗi gốc.
- str: Chuỗi gốc.
- start_location: Vị trí bắt đầu tìm kiếm (Nếu có).
Giải thích câu lệnh truy vấn:Hàm CHARINDEX đếm vị trí của ‘@’ trong chuỗi ký tự EmailAddress.k. Hàm SUBSTRINGHàm SUBSTRING dùng để trích xuất một phần của chuỗi ký tự từ một vị trí bắt đầu và độ dài cụ thể.Cú pháp của SUBSTRING:SUBSTRING(input_string, start_position, length)
- input_string: Chuỗi ký tự cần trích xuất.
- start_position: Vị trí bắt đầu trích xuất.
- length: Độ dài phần cần trích xuất.

Xử lý và thao tác với dữ liệu dạng ngày (Date manipulations)
Xử lý và thao tác với dữ liệu dạng ngày là một trong những việc phổ biến khi truy vấn dữ liệu.Hàm DATEDIFFHàm DATEDIFF được sử dụng để tính khoảng thời gian giữa hai thời điểm thời gian. Hàm này trả về một giá trị số nguyên, đại diện cho sự khác biệt giữa các ngày hoặc thời điểm dựa trên một đơn vị thời gian cụ thể (Ví dụ: ngày, tháng, năm).Cú pháp của DATEDIFFDATEDIFF(date_part, start_date, end_date)
- Date_part: Đơn vị thời gian mà bạn muốn tìm khoảng các, có thể là năm , tháng, ngày,…
- Start_date: Ngày hoặc thời điểm bắt đầu khoảng thời gian.
- End_date: Ngày hoặc thời điểm kết thúc khoảng thời gian.
Giải thích câu lệnh truy vấn:- FROM: Dữ liệu được truy vấn từ bảng SalesLT.SalesOrderHeader.
- SELECT: Truy vấn các cột SalesOrderID, OrderDate, ShipDate, Khoảng cách thời gian Order và Shipping theo ngày/tuần/tháng.
Xử lý các dữ liệu không tồn tại hoặc dữ liệu không có sẵn (NULL)
Sau đây ta cùng tìm hiểu một số các hàm xử lý NULL.a. Hàm ISNULLHàm ISNULL trả về một giá trị được chỉ định nếu biểu thức là NULL. Nếu biểu thức không phải là NULL, hàm này trả về chính biểu thức đó.Cú pháp hàm ISNULL:ISNULL(expression, value)
- expression: Biểu thức cần kiểm tra là NULL hay không
- value: Giá trị sẽ được trả về nếu biểu thức là NULL.
b. Hàm COALESCEHàm COALESCE là được sử dụng để trả về giá trị đầu tiên không phải NULL từ một danh sách các biểu thức.Cú pháp hàm COALESCE:COALESCE(expression1, expression2, …)
- expression1, expression2: Danh sách các biểu thức bạn muốn kiểm tra và trả về giá trị đầu tiên không phải là NULL.
- expression1: Giá trị bạn muốn so sánh.
- expression2: Giá trị mà bạn muốn so sánh với expression1.
Giải thích câu lệnh truy vấn:Hàm NULLIF trả về NULL khi 2 giá trị so sánh bằng nhau.Hàm NULLIF trả về giá trị đầu tiên khi 2 giá trị so sánh khác nhau.Nhóm hàm định dạng dữ liệu (Formatting data)
Định dạng ngày (Date formats)
Hầu hết cơ sở dữ liệu sẽ có hàm (Function) để giúp định dạng ngày. Cần thống nhất định dạng ngày (Date formats) để đảm bảo tính nhất quán trong cơ sở dữ liệu.Ví dụ: Định dạng ngày của Việt Nam và Mỹ:- Việt Nam: DD/MM/YYYY
- Mỹ: MM/DD/YYYY
FORMAT(col_name, format, [ culture])
- col_name: giá trị cần định dạng.
- format: Dạng fomat mà bạn muốn áp dụng, có thể là định dạng thời gian hoặc định dạng số.
- culture (tùy chọn): Mã vùng để xác định cách định dạng, mặc định là ‘NULL’.
Giải thích câu lệnh truy vấn:FORMAT(2023-09-24, ‘dd/MM/yyyy’) giá trị ngày tháng năm được định dạng lại dưới format ngày/tháng/năm.FORMAT(20.3, ‘P’) giá trị 20.3 được định dạng dưới format phần trăm.FORMAT(2023-09-24, ‘dd/MM/yyyy’, ‘fr-FR’) giá trị ngày tháng năm được định dạng lại dưới format ngày/tháng/năm, không bao gồm giờ, phút, giây sử dụng mã vùng là ‘fr-FR’ (tiếng Pháp – Pháp).Làm tròn số (Rounding)
Một số hàm làm tròn số trong trong SQL:- ROUND(): Làm tròn tới chứ số thập phân (Float).
- CEILING(): Làm tròn lên.
- FLOOR(): Làm tròn xuống.
Giải thích câu lệnh truy vấn:- Hàm ROUND: Làm tròn StandardCost tới chữ số thập phân thứ 3.
- Hàm CEILING: Làm tròn StandardCost lên.
- Hàm FLOOR: Làm tròn StandardCost xuống.
Click vào ảnh bên dưới để kết nối với cộng đồng Data Analytics bạn nhé.

Data Analyst


