Bài 1: Introduction to SQL Server
1. Tại sao học SQL Server?
SQL Server là hệ quản trị cơ sở dữ liệu hàng đầu của Microsoft:
- 🏢 Enterprise-grade - Được dùng bởi Fortune 500 companies
- 📊 Tích hợp BI - SQL Server Reporting Services, Analysis Services
- 🔒 Bảo mật cao - Row-level security, encryption, auditing
- ☁️ Azure ready - Dễ dàng migrate lên cloud
SQL Server vs Các RDBMS khác
| Feature | SQL Server | MySQL | PostgreSQL |
|---|---|---|---|
| Vendor | Microsoft | Oracle | Open Source |
| Cost | Express Free / Enterprise $$$ | Free / Enterprise | Free |
| BI Tools | SSRS, SSAS, SSIS | Limited | Limited |
| T-SQL | ✅ Full support | ❌ | ❌ |
| Window Functions | ✅ Advanced | ✅ Basic | ✅ Advanced |
| Azure Integration | ✅ Native | 🔸 Partial | 🔸 Partial |
2. Cài đặt môi trường
2.1 SQL Server Express (Free)
-
Download SQL Server 2022 Express
Truy cập SQL Server Downloads và tải Express edition (miễn phí).
-
Cài đặt với Basic mode
Chọn "Basic" installation để cài đặt nhanh với cấu hình mặc định.
-
Download SQL Server Management Studio (SSMS)
Tải SSMS - công cụ GUI để làm việc với SQL Server.
2.2 Restore AdventureWorks Database
AdventureWorks là database mẫu chính thức của Microsoft, mô phỏng công ty sản xuất xe đạp với dữ liệu HR, Sales, Production, Purchasing.
Download: AdventureWorks2022.bak
Các bước restore:
1-- 1. Copy file .bak vào thư mục backup của SQL Server2-- Mặc định: C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup34-- 2. Restore database bằng T-SQL5RESTORE DATABASE AdventureWorks20226FROM DISK = 'C:\...\AdventureWorks2022.bak'7WITH MOVE 'AdventureWorks2022' TO 'C:\...\AdventureWorks2022.mdf',8 MOVE 'AdventureWorks2022_log' TO 'C:\...\AdventureWorks2022_log.ldf';Hoặc dùng SSMS GUI: Right-click "Databases" → "Restore Database..." → Chọn file .bak
3. Khám phá AdventureWorks
3.1 Cấu trúc Schemas
AdventureWorks sử dụng Schemas để tổ chức tables:
1┌─────────────────────────────────────────────────────────────┐2│ AdventureWorks Database │3├─────────────────────────────────────────────────────────────┤4│ │5│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │6│ │ HumanRe- │ │ Sales │ │ Production │ │7│ │ sources │ │ │ │ │ │8│ │ • Employee │ │ • Customer │ │ • Product │ │9│ │ • Department│ │ • SalesOrder│ │ • WorkOrder │ │10│ │ • Shift │ │ • Territory │ │ • BillOf │ │11│ │ • JobCandi- │ │ • Store │ │ Materials │ │12│ │ date │ │ • Currency │ │ • Location │ │13│ └─────────────┘ └─────────────┘ └─────────────┘ │14│ │15│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │16│ │ Purchasing │ │ Person │ │ dbo │ │17│ │ │ │ │ │ │ │18│ │ • Vendor │ │ • Person │ │ • Error- │ │19│ │ • Purchase │ │ • Address │ │ Log │ │20│ │ Order │ │ • Email │ │ • Database │ │21│ │ • ShipMethod│ │ • Phone │ │ Log │ │22│ └─────────────┘ └─────────────┘ └─────────────┘ │23│ │24└─────────────────────────────────────────────────────────────┘3.2 Tables quan trọng nhất
| Schema | Table | Mô tả | Rows ước tính |
|---|---|---|---|
| HumanResources | Employee | Thông tin nhân viên | ~290 |
| HumanResources | Department | Các phòng ban | ~16 |
| Person | Person | Thông tin cá nhân | ~19,000 |
| Sales | Customer | Khách hàng | ~19,000 |
| Sales | SalesOrderHeader | Đơn hàng | ~31,000 |
| Sales | SalesOrderDetail | Chi tiết đơn hàng | ~121,000 |
| Production | Product | Sản phẩm | ~500 |
| Production | ProductCategory | Danh mục sản phẩm | ~4 |
4. Truy vấn SQL đầu tiên
4.1 SELECT Statement
Cú pháp cơ bản nhất để lấy dữ liệu:
1SELECT column1, column22FROM schema.table_name;Ví dụ với AdventureWorks:
1-- Lấy tất cả departments2SELECT *3FROM HumanResources.Department;Kết quả:
1DepartmentID | Name | GroupName2-------------|-------------------------|----------------------------------31 | Engineering | Research and Development42 | Tool Design | Research and Development53 | Sales | Sales and Marketing64 | Marketing | Sales and Marketing75 | Purchasing | Inventory Management8...1-- Lấy columns cụ thể2SELECT 3 Name,4 GroupName5FROM HumanResources.Department;4.2 Column Alias (AS)
Đổi tên cột trong kết quả:
1SELECT 2 Name AS DepartmentName,3 GroupName AS Division4FROM HumanResources.Department;4.3 DISTINCT - Loại bỏ trùng lặp
1-- Các Division khác nhau trong công ty2SELECT DISTINCT GroupName3FROM HumanResources.Department;Kết quả:
1GroupName2----------------------------------3Executive General and Administration4Inventory Management5Manufacturing6Quality Assurance7Research and Development8Sales and Marketing5. WHERE - Lọc dữ liệu
5.1 Comparison Operators
1-- Products có giá > 10002SELECT 3 Name,4 ListPrice5FROM Production.Product6WHERE ListPrice > 1000;1-- Employees được thuê sau 20102SELECT 3 BusinessEntityID,4 JobTitle,5 HireDate6FROM HumanResources.Employee7WHERE HireDate >= '2010-01-01';5.2 Logical Operators (AND, OR, NOT)
1-- Products là Bikes VÀ có giá > 10002SELECT 3 p.Name,4 p.ListPrice,5 pc.Name AS Category6FROM Production.Product p7JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID8JOIN Production.ProductCategory pc ON ps.ProductCategoryID = pc.ProductCategoryID9WHERE pc.Name = 'Bikes'10 AND p.ListPrice > 1000;1-- Employees là Manager HOẶC Engineer2SELECT 3 BusinessEntityID,4 JobTitle5FROM HumanResources.Employee6WHERE JobTitle LIKE '%Manager%'7 OR JobTitle LIKE '%Engineer%';5.3 IN, BETWEEN, LIKE
1-- Products trong các màu cụ thể2SELECT Name, Color, ListPrice3FROM Production.Product4WHERE Color IN ('Black', 'Red', 'Silver');1-- Products có giá trong khoảng2SELECT Name, ListPrice3FROM Production.Product4WHERE ListPrice BETWEEN 500 AND 1500;1-- Tìm Products có tên chứa 'Mountain'2SELECT Name, ListPrice3FROM Production.Product4WHERE Name LIKE '%Mountain%';56-- Tìm Products bắt đầu bằng 'Road'7SELECT Name, ListPrice8FROM Production.Product9WHERE Name LIKE 'Road%';5.4 NULL Handling
1-- Products KHÔNG có Color (NULL)2SELECT Name, Color, ListPrice3FROM Production.Product4WHERE Color IS NULL;56-- Products CÓ Color7SELECT Name, Color, ListPrice8FROM Production.Product9WHERE Color IS NOT NULL;6. ORDER BY - Sắp xếp kết quả
6.1 Single Column Sort
1-- Products sắp xếp theo giá (thấp → cao)2SELECT Name, ListPrice3FROM Production.Product4WHERE ListPrice > 05ORDER BY ListPrice ASC;67-- Products sắp xếp theo giá (cao → thấp)8SELECT Name, ListPrice9FROM Production.Product10WHERE ListPrice > 011ORDER BY ListPrice DESC;6.2 Multiple Column Sort
1-- Sắp xếp theo Color, rồi theo ListPrice2SELECT Name, Color, ListPrice3FROM Production.Product4WHERE Color IS NOT NULL5ORDER BY Color ASC, ListPrice DESC;6.3 TOP - Giới hạn kết quả
1-- Top 10 Products đắt nhất2SELECT TOP 103 Name,4 ListPrice5FROM Production.Product6ORDER BY ListPrice DESC;78-- Top 5% Orders lớn nhất9SELECT TOP 5 PERCENT10 SalesOrderID,11 TotalDue12FROM Sales.SalesOrderHeader13ORDER BY TotalDue DESC;7. Thực hành
Sử dụng AdventureWorks database, viết các truy vấn sau:
Exercise 1: Basic SELECT
1-- Liệt kê tất cả Departments (Name, GroupName)2-- từ bảng HumanResources.Department34-- YOUR CODE HERE💡 Xem đáp án
1SELECT 2 Name,3 GroupName4FROM HumanResources.Department;Exercise 2: WHERE with conditions
1-- Tìm Products có ListPrice > 20002-- Chỉ lấy Name và ListPrice3-- Sắp xếp theo giá giảm dần45-- YOUR CODE HERE💡 Xem đáp án
1SELECT 2 Name,3 ListPrice4FROM Production.Product5WHERE ListPrice > 20006ORDER BY ListPrice DESC;Exercise 3: LIKE pattern matching
1-- Tìm tất cả Employees có JobTitle chứa 'Engineer'2-- Hiển thị BusinessEntityID, JobTitle, HireDate34-- YOUR CODE HERE💡 Xem đáp án
1SELECT 2 BusinessEntityID,3 JobTitle,4 HireDate5FROM HumanResources.Employee6WHERE JobTitle LIKE '%Engineer%'7ORDER BY HireDate;Exercise 4: Combining conditions
1-- Tìm Products:2-- - Có ListPrice từ 500 đến 15003-- - Color là 'Black' hoặc 'Red'4-- - Hiển thị Name, Color, ListPrice5-- - Sắp xếp theo Color, rồi ListPrice67-- YOUR CODE HERE💡 Xem đáp án
1SELECT 2 Name,3 Color,4 ListPrice5FROM Production.Product6WHERE ListPrice BETWEEN 500 AND 15007 AND Color IN ('Black', 'Red')8ORDER BY Color, ListPrice;8. Tổng kết
Trong bài này, bạn đã học:
| Concept | Syntax | Ví dụ |
|---|---|---|
| SELECT | SELECT columns FROM schema.table | SELECT Name FROM Production.Product |
| WHERE | WHERE condition | WHERE ListPrice > 100 |
| Operators | =, <>, >, <, >=, <= | WHERE Qty >= 10 |
| AND/OR | WHERE cond1 AND cond2 | WHERE A = 1 AND B = 2 |
| IN | WHERE col IN (...) | WHERE Color IN ('Red','Blue') |
| BETWEEN | WHERE col BETWEEN a AND b | WHERE Price BETWEEN 100 AND 500 |
| LIKE | WHERE col LIKE pattern | WHERE Name LIKE '%Bike%' |
| NULL | IS NULL, IS NOT NULL | WHERE Color IS NOT NULL |
| ORDER BY | `ORDER BY col [ASC | DESC]` |
| TOP | TOP n | SELECT TOP 10 * |
Bài tiếp theo: Aggregate Functions (COUNT, SUM, AVG, GROUP BY)
