Tổng hợp các đoạn SQL ứng dụng thực tế trong công việc, bao gồm các chủ đề chính:
1. Cơ sở dữ liệu
2. Bảng
3. Bảng tạm
4. Chỉ mục và ràng buộc
5. Chuẩn hóa dữ liệu
6. Thao tác CRUD
7. Kết nối bảng
8. Nhóm và sắp xếp
9. Ký tự đại diện
10. View
11. Procedure và transaction
12. Con trỏ
13. Trigger
14. Công việc định kỳ
Dưới đây là các ví dụ cụ thể:
**1. Cơ sở dữ liệu**
Tạo cơ sở dữ liệu:
Xóa cơ sở dữ liệu:
**2. Bảng**
Tạo bảng người dùng:
Tạo bảng sản phẩm:
Tạo bảng đơn hàng:
Xóa bảng:
Xóa dữ liệu bảng:
**3. Bảng tạm**
Ví dụ in danh sách tên nhân viên:
Xem cấu trúc bảng:
**4. Chỉ mục và ràng buộc**
Tạo chỉ mục cụm:
Tạo chỉ mục phi cụm:
Thêm ràng buộc:
**5. Chuẩn hóa dữ liệu**
- **1NF**: Đảm bảo mỗi trường chứa giá trị nguyên tử và có khóa chính
- **2NF**: Tất cả trường phải phụ thuộc toàn phần vào khóa chính
- **3NF**: Không tồn tại mối phụ thuộc gián tiếp giữa các trường
Ví dụ: Thông tin khách hàng nên được chia thành bảng tỉnh/thành, quận/huyện, đường phố riêng biệt khi cần phân tích theo địa lý.
Nội dung chi tiết sẽ tiếp tục ở phần sau. Đón đọc bài viết tiếp theo: Tổng hợp SQL thường dùng trong công việc, Phần thực hành (tiếp theo).
USE master
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'DonHangDB')
DROP DATABASE DonHangDB
CREATE DATABASE DonHangDB
ON
(
NAME='DonHangDB_data',
FILENAME='D:\DB\DonHangDB_data.mdf',
SIZE=10,
FILEGROWTH=15%
)
LOG ON
(
NAME='DonHangDB_log',
FILENAME='D:\DB\DonHangDB_log.ldf',
SIZE=3,
FILEGROWTH=10%
)
DROP DATABASE DonHangDB
IF OBJECT_ID('NhanVien') IS NOT NULL
DROP TABLE NhanVien
CREATE TABLE NhanVien
(
MaNV INT IDENTITY(1,1),
TaiKhoan NVARCHAR(64) NOT NULL,
HoTen NVARCHAR(64),
PRIMARY KEY (TaiKhoan)
)
IF OBJECT_ID('SanPham') IS NOT NULL
DROP TABLE SanPham
CREATE TABLE SanPham
(
MaSP VARCHAR(64) NOT NULL,
TenSP NVARCHAR(256) NOT NULL,
Gia DECIMAL(18,2) NOT NULL,
SoLuong INT NOT NULL,
PRIMARY KEY (MaSP)
)
IF OBJECT_ID('DonHang') IS NOT NULL
DROP TABLE DonHang
CREATE TABLE DonHang
(
MaDH VARCHAR(64) NOT NULL,
MaNV INT NOT NULL,
MaSP VARCHAR(64) NOT NULL,
SoLuong INT NOT NULL,
ThoiGian DATETIME NOT NULL,
PRIMARY KEY (MaDH),
FOREIGN KEY (MaNV) REFERENCES NhanVien(TaiKhoan),
FOREIGN KEY (MaSP) REFERENCES SanPham(MaSP)
)
DROP TABLE NhanVien
TRUNCATE TABLE NhanVien -- Đặt lại IDENTITY DELETE FROM NhanVien -- Giữ nguyên IDENTITY
CREATE TABLE #DanhSach
(
STT INT IDENTITY(1,1),
Ten NVARCHAR(64) NOT NULL
)
INSERT INTO #DanhSach(Ten) VALUES(N'Nguyễn Văn A'),(N'Trần Thị B'),(N'Lê Văn C')
DECLARE @Dem INT = 0, @Tong INT = (SELECT COUNT(*) FROM #DanhSach)
WHILE @Dem < @Tong
BEGIN
SELECT TOP 1 @Dem = STT, Ten FROM #DanhSach
ORDER BY STT OFFSET @Dem ROWS FETCH NEXT 1 ROWS ONLY
SET @Dem += 1
END
DROP TABLE #DanhSach
EXEC SP_HELP NhanVien
CREATE UNIQUE CLUSTERED INDEX [PK_NV_Ma] ON [dbo].[NhanVien](MaNV ASC) WITH (PAD_INDEX = OFF, FILLFACTOR = 90)
CREATE NONCLUSTERED INDEX [IX_NV_Ten] ON [dbo].[NhanVien](HoTen ASC) INCLUDE (TaiKhoan)
ALTER TABLE NhanVien ADD CONSTRAINT CK_Ten CHECK (LEN(HoTen) > 5), CONSTRAINT CK_Email CHECK (HoTen LIKE '%@%')