You are on page 1of 27

Cài đặt SQL Server:

Chọn phần Custom

Cách Save File:


1/ Chọn Save with Encoding (để save lại script)

2/ Chọn Unicode (UTF-8 without signature)

6 từ khóa (keyword) tạo thành 1 cấu trúc SQL hoàn chỉnh:


SELECT -> count, max, min…., SQL con (dở)

FROM -> SQL con (dở)

WHERE -> count, max, min…., SQL con

GROUP BY X

HAVING -> count, max,min…., SQL con

ORDER BY X
Hàm Disdint Count:

1/ Từ khóa để tạo một cái gì đó: CREATE


- Tạo Database: Create Database Tên
- Tạo Table: Create Table Tên

2/ Muốn viết code trong Database nào thì sử dụng từ khóa: USE
- Use tên_database

3/ Tạo Field (Column) trong Table:


- Tất cả Field được tạo phải nằm trong dấu ()

Tên Field LoạiDataType


4/ Cách vừa tạo Database, vừa tạo Table trong cùng 1 Query:
- Lưu ý: phải có từ khóa GO để chạy câu lệnh ở bên trên

5/ Từ khóa xóa một cái gì đó: DROP


- Xóa Table:

DROP Table Tên_Table

6/ Từ khóa xóa Nội Dung của Table: TRUNCATE TABLE Tên_Table


TRUNCATE TABLE dbo.HocSinh
GO

7/ Từ khóa chỉnh sửa một cái gì đó: ALTER


VD: Thêm 1 Field (cột) trong Table:

8/ Chỉnh sửa nội dung trong 1 Table:


8.1/ Insert 1 record:
Dùng từ khóa INSERT TênTable

Lưu ý nếu nội dung là text thì phải nằm trong cặp dấu ‘ ‘

Nếu là Date thì phải nằm trong cặp dấu ‘ ‘


INSERT dbo.HocSinh
(
MaHS,
NAME,
NgaySinh
)
VALUES
( 'HS004', -- MaHS - varchar(10)
N'Hột É', -- NAME - nvarchar(50)
'20140606' -- NgaySinh - date
)

8.2/ Xóa dữ liệu:


8.2.1/ Xóa toàn bộ dữ liệu của Table:
DELETE TênTable

8.2.2/ Xóa có điều kiện:


DELETE TênTable WHERE TênField = điều_kiện
DELETE dbo.HocSinh WHERE MaHS = 'HS004'

*Kết hợp nhiều điều kiện, dùng từ khóa AND hoặc OR:
DELETE dbo.HocSinh WHERE MaHS = 'HS004' AND NgaySinh ='20140606'

8.3/ Update dữ liệu trong 1 hoặc nhiều field:


8.3.1/ Update 1 Field:
Dùng từ khóa UPDATE và SET.

UPDATE Tên_Table SET Tên_Field = data mới (không có điều kiện)


UPDATE dbo.GiaoVien SET Salary = 15000

VD: Update lương của 1 người tên É thành 15,000:


UPDATE Tên_Table SET Tên_Field = data mới WHERE Tên_Field = điều_kiện (không có điều kiện)
UPDATE dbo.GiaoVien SET Salary = 15000 WHERE NAME = 'É'

8.3.2/ Update nhiều Field:


Thêm dấu phẩy (,) sau mỗi tên Field
UPDATE dbo.GiaoVien SET Salary = 15000, NAME = 'HEO'

9/ Primary Key:
9.1/ Cách tạo Primary Key bằng code:
Thêm từ khóa PRIMARY KEY
CREATE TABLE Product
(
ID_Product VARCHAR(4) PRIMARY KEY,
Name VARCHAR(40) NOT NULL UNIQUE,--Không được trống và không trùng
Price INT DEFAULT 1 -- Giá trị default = 1
9.2/ Tạo Primary Key sau khi đã tạo xong Table:
Tốt nhất nên tạo bằng cách vào Design Table

10/ Từ khóa SELECT …. WHERE ….:


10.1/ SELECT tất cả data trong 1 Table:
SELECT * FROM Tên_Table
SELECT * FROM dbo.BOMON

10.2/ SELECT một số Field trong 1 Table:


SELECT Tên_Field FROM Tên_Table
SELECT MABM,TENBM FROM dbo.BOMON

10.3/ SELECT một số Field và đổi tên Field trong 1 Table:


SELECT Tên_Field AS ‘Tên_Mới’ FROM Tên_Table
SELECT MABM AS 'MA_BM',
TENBM AS 'Ten_BM'
FROM dbo.BOMON

10.4/ SELECT một số Field và đổi tên Field trong 1 Table và Filter data 1 Field kết hợp với
WHERE:
SELECT Tên_Field AS ‘Tên_Mới’ FROM Tên_Table WHERE Tên_Field = ‘điều_kiện’
SELECT MABM AS 'MA_BM',TENBM FROM dbo.BOMON WHERE MABM ='CNTT'

10.5/ SELECT một số Field từ nhiều Table có mối quan hệ Relationship:


SELECT Date,dbo.RawData.Code, Revenue,Category FROM dbo.RawData,dbo.Product
WHERE RawData.Code = Product.Code

(Tạo ra 1 Table có các field Code, Revenue lấy từ table Raw Data, và field Category lấy từ table Product)

10.6/ Lấy ra data với điều kiện filter một vài ký tự cho trước, sử dụng SELECT, WHERE, LIKE:
SELECT * FROM dbo.Product --Xuất ra những sản phẩm có Code là CV
WHERE Code like N'CV%'
11/ Từ khóa SELECT …. INNER JOIN …. ON ….:
Từ khóa JOIN:

Tương đương, nhưng không dùng JOIN:

Có kết quả tương tự cụm từ khóa SELECT tên_Field FROM tên_Table, tên_Table WHERE
SELECT RawData.Code,Category, Revenue FROM dbo.RawData INNER JOIN dbo.Product
ON Product.Code = RawData.Code

12/ Từ khóa SELECT …. FULL OUTER JOIN …. ON ….:


Dùng trong trường hợp muốn xem doanh số những sản phẩm đã bán, và những sản phẩm nào không
bán được.
SELECT Product.Code, Revenue FROM dbo.RawData FULL OUTER JOIN dbo.Product
ON Product.Code = RawData.Code

13/ Từ khóa SELECT …. CROSS JOIN …. WHERE ….:


Tương tự như SELECT …. JOIN …. ON ….
SELECT Area, Revenue FROM dbo.Province CROSS JOIN dbo.RawData
WHERE RawData.Province = Province.Province

14/ Từ khóa SELECT …. LEFT/RIGHT JOIN …. ON ….:


Sẽ lấy bảng bên TRÁI/PHẢI làm bảng gốc:

SELECT Area, Revenue FROM dbo.Province LEFT JOIN dbo.RawData


ON RawData.Province = Province.Province

SELECT Product.Code, Revenue FROM dbo.RawData RIGHT JOIN dbo.Product


ON Product.Code = RawData.Code

14/ Từ khóa UNION:


Dùng để gộp 2 bảng từ 2 khóa SELECT, và chỉ chấp nhận số lượng Field bằng nhau, kết quả trả về là
Unique.
SELECT Code FROM dbo.RawData
UNION
SELECT Code FROM dbo.Product

Câu sau sẽ bị lỗi vì số lượng Field khác nhau:


SELECT Code FROM dbo.RawData -- 1 Field
UNION
SELECT Code, Category FROM dbo.Product -- 2 Field

15/ Từ khóa SELECT …. INTO ….:


Dùng để tạo ra 1 Table mới từ 1 Table cũ:
SELECT Code, Quantity,Revenue,Fiscal_Year,Province INTO Trans_Data
FROM dbo.RawData
WHERE Fiscal_Year = '150P' AND MONTH = 12

16/ INSERT INTO …. SELECT …. FROM ….:


Copy data từ 1 bảng vào 1 bảng khác:
INSERT INTO dbo.product SELECT * FROM dbo.[Product$]
17/ Truy Vấn Lồng: SELECT nằm trong SELECT khác:
TH1: Video 2018-09-26, 20:06, từ khóa IN, ALL, ANY, SOME

TH2: Video 2018-09-26, 23:28, từ khóa Exists:


TH3: Video 2018-09-26, 29:32

TH4: Video 2018-09-26, 1:01:18, từ khóa NOT EXISTS:

Hữu ích khi cần tìm một item của 1 Table không nằm trong 1 Table khác.
VD: Tìm sản phẩm nào có trong Master List mà không có trong file Transaction, tức là tìm sản phẩm nào
chưa bán được.

17.1/ Tìm tỉnh nào chưa có doanh số:


SELECT * FROM dbo.Province
WHERE Province NOT IN (SELECT Province FROM dbo.RawData)

17.2/ Tìm sản phẩm nào được lặp lại lớn hơn 10 record trong Table bán hàng:
SELECT * FROM dbo.Trans_Data AS BanHang
WHERE 10 < (SELECT COUNT(*) FROM dbo.Trans_Data WHERE Code =BanHang.Code)

18/ Từ Khóa GROUP BY:


Video: 2018-09-19, 01:12:00

VD1: Có bao nhiêu sản phẩm trong mỗi Category


SELECT Category ,COUNT(*) FROM dbo.Product
GROUP BY Category
VD2: Xuất ra Doanh số của từng Category
SELECT Category, SUM(Revenue) FROM dbo.Trans_Data, dbo.Product
WHERE Product.Code = Trans_Data.Code
GROUP BY Category

19/ Từ khóa HAVING (Phải có Group By mới có Having):


Video: 2018-09-19, 01:12:00
VD2: Xuất ra Category nào có Doanh số > 5,000,000,000
SELECT Category, SUM(Revenue) AS Revenue FROM dbo.Trans_Data, dbo.Product
WHERE Product.Code = Trans_Data.Code
GROUP BY Category HAVING SUM(Revenue) > 5000000000

20/ ID tăng tự động – Từ khóa IDENTITY:

21/ Cách tạo VIEW:


VD: Tạo 1 Table View tên View_BanHang, bao gồm 2 field Code và Revenue, tham chiếu từ
table Trans_Data, với ĐK là: Revenue > 200,000,000.

CREATE VIEW View_BanHang AS


SELECT Code, Revenue FROM dbo.Trans_Data
WHERE Revenue > 200000000

VD: Tạo 1 table View tên DoanhSo thể hiện doanh số bán CV-1% của tất cả các tỉnh:
CREATE VIEW DoanhSo AS
SELECT Province, SUM(Quantity) AS 'SoLuong' FROM dbo.RawData
WHERE Code LIKE 'CV-1%'
GROUP BY Province

SELECT * FROM DoanhSo


VD: Cách tạo tên View có dấu, có khoảng trắng: thêm cặp dấu [ ]:
CREATE VIEW [View Ngu Như Heo] AS
SELECT Code, Revenue FROM dbo.Trans_Data
WHERE Revenue > 200000000

22/ Cách xóa View:


DROP VIEW View_BanHang

23/ Cách sửa View:


VD: Thêm vào View_BanHang cột Province:
CREATE VIEW View_BanHang AS
SELECT Code, Revenue FROM dbo.Trans_Data
WHERE Revenue > 200000000

ALTER VIEW View_BanHang AS


SELECT Code, Province, Revenue FROM dbo.Trans_Data
WHERE Revenue > 200000000

24/ Từ khóa CHECK:


CHECK dùng để tạo ra điều kiện để nhập liệu trong Field.
VD: Tạo ra 1 bảng Nhân viên với điều kiện Lương > 1,000 và Lương < 9,000
CREATE TABLE Test_Check
(
ID INTEGER PRIMARY KEY IDENTITY,
Luong FLOAT CHECK (Luong >1000 AND Luong < 9000)
)

INSERT dbo.Test_Check
(
Luong
)
VALUES
(8000 -- Luong - float
)
25/ Tạo INDEX để tăng tốc độ truy vấn dữ liệu:
CREATE INDEX Bang_Index ON dbo.Trans_Data(Revenue)

SELECT * FROM dbo.Trans_Data


WHERE Revenue > 400000000

26/ Kiểu Data Type tự định nghĩa:


VD: Tạo 1 Data Type mới tên là TypeMoi_Name, có tính chất giống với nvarchar(400), not null:
EXEC sp_addtype 'TypeMoi_Name','nvarchar(400)', 'Not null'

Data Type mới được lưu trữ trong:


Database/Tên Database (VD: Business)/Programmability/Types/User-Defined Data Types

Khi xóa Data Type tự tạo, hoặc là click phải chọn Delete, hoặc chạy câu lệnh sau đây:
EXEC sp_droptype 'TypeMoi_Name'

27/ Tạo biến, dùng từ khóa DECLARE:


VD: Tạo 1 biến tên MaxSales để chứa sales cao nhất của một sản phẩm trong 1 đơn hàng

DECLARE @MaxSales FLOAT


SELECT @MaxSales = MAX(Revenue) FROM dbo.Trans_Data
SELECT Code FROM dbo.Trans_Data
WHERE Revenue =@MaxSales

VD: Tạo 1 biến điền tên mình vào, dùng từ khóa SET để gán giá trị cho biến
DECLARE @MyName CHAR
SET @MyName = 'Morgan'

Hoặc gán trực tiếp (còn gọi là giá trị mặc định của biến)
DECLARE @MyName CHAR = 'Morgan'

Chú ý: Muốn xuất xem giá trị của biến, dùng từ khóa PRINT

DECLARE @MaxSales FLOAT


SELECT @MaxSales = MAX(Revenue) FROM dbo.Trans_Data
PRINT @MaxSales

28/ Cấu trúc IF:


VD: Tính Doanh số bán các sản phẩm CV-1% của các tỉnh. Đưa vào bảng view tên là DoanhSo
Sau đó, nếu Hà Nội có doanh số > 10 thì là Good, không thì là Bad;

CREATE VIEW DoanhSo AS


SELECT Province, SUM(Quantity) AS 'SoLuong' FROM dbo.RawData
WHERE Code LIKE 'CV-1%'
GROUP BY Province
GO
SELECT * FROM DoanhSo

-- Bắt đầu xét điều kiện:


DECLARE @Tinh VARCHAR(50) = 'Ha Noi'
DECLARE @Sales FLOAT
SELECT @Sales = SoLuong FROM dbo.DoanhSo WHERE Province = @Tinh

IF @Sales > 10
BEGIN
PRINT @Tinh
PRINT @Sales
PRINT 'Good'
END
ELSE
BEGIN
PRINT @Tinh
PRINT @Sales
PRINT 'Bad'
END

29/ Vòng lặp WHILE:


WHILE (điều kiện để vòng lặp chạy)
BEGIN
-- Khối lệnh cần lặp
END

30/ Tạo danh sách dạng Cursor:


-- Sau khi có danh sách SalesCursor thì
-- tìm mã nào có doanh số >400 triệu thì sửa Tỉnh lại thành Big City, >300 triệu thì sửa
thành Medium City
OPEN SalesCursor
DECLARE @code VARCHAR(20)
DECLARE @sale FLOAT

FETCH NEXT FROM SalesCursor INTO @code, @sale


WHILE @@FETCH_STATUS = 0
BEGIN
IF @sale > 400000000
BEGIN
UPDATE dbo.Trans_Data SET Province = 'Big City'
WHERE Code = @code
END
ELSE
IF @sale > 300000000
BEGIN
UPDATE dbo.Trans_Data SET Province = 'Medium
City' WHERE Code = @code
END
FETCH NEXT FROM SalesCursor INTO @code, @sale
END
CLOSE SalesCursor
DEALLOCATE SalesCursor

31/ STORE procedure:


CREATE PROC first_proc -- Tạo 1 Store procedure
@Tinh nvarchar(255)--, @Vung nvarchar(255)
AS
BEGIN
SELECT * FROM dbo.Province
END
GO

EXEC first_proc @Tinh = N'' --Thực thi Store procedure

SELECT * FROM first_proc -- Lỗi: Store procedure không đi kèm với câu truy vấn
SELECT

DROP PROC first_proc -- Xóa Store procedure

32/ Tạo FUNCTION:


32.1/ Function không có tham số:
-- Tạo function tên Bang_DauTien
CREATE FUNCTION Bang_DauTien()
RETURNS TABLE
AS RETURN SELECT * FROM dbo.Province
GO

SELECT * FROM Bang_DauTien() --Sử dụng function trong câu truy vấn SELECT
32.2/ Function có tham số:
-- Tạo function SalesDoanhSo có tham số là tên code
CREATE FUNCTION SalesDoanhSo(@code varchar(20))
RETURNS FLOAT
AS
BEGIN
DECLARE @doanhso FLOAT
SELECT @doanhso = Revenue FROM dbo.Trans_Data WHERE Code = @code
RETURN @doanhso
END

SELECT dbo.SalesDoanhSo('CV-190') --Truy vấn 1 mã


SELECT dbo.SalesDoanhSo(code) FROM dbo.Trans_Data -- Truy vấn tất cả mã
32.3/ Chỉnh sửa function:
-- Chỉnh sửa function SalesDoanhSo từ truy vấn code thành truy vấn tỉnh
ALTER FUNCTION SalesDoanhSo(@Tinh varchar(20))
RETURNS float
AS
BEGIN
DECLARE @doanhso FLOAT
SELECT @doanhso = Revenue FROM dbo.Trans_Data WHERE Province = @Tinh
RETURN @doanhso
END

33/ TRIGGER:
https://www.youtube.com/watch?
v=0N_ZtUXnTj4&index=31&list=PL33lvabfss1xnFpWQF6YH11kMTS1HmLsw

34/ TRANSACTION:
https://www.youtube.com/watch?
v=q5YGcrrPZSE&list=PL33lvabfss1xnFpWQF6YH11kMTS1HmLsw&index=32

35/ Cách xuất code SQL ra file:


Click phải vào tên Database, chọn Task/Generate Scripts…./Next/Next

Chọn Advanced => Types of data to script => Chọn Schema and Data
Save to new query window => Next/Next

Finish => Save (Ctrl+S)


36/ Tạo ràng buộc – constraint:
Click phải chuột vào tên của Field, chọn Check Constraints
37/ Nhập dữ liệu data vào Table:
Click phải chuột vào tên Table, chọn Edit Top 200 Rows

38/ Cách tháo file Database ra khỏi Server:


Click chuột phải vào tên Database, chọn Detach….
39/ Gắn Database vào Server:
Click phải chuột vào Database, chọn Attach…
Click Add
40/ Cách xóa Database:
Click phải chuột vào tên Database, chọn Delete….

*NOTE:
SQL Function:
https://www.w3schools.com/sql/sql_ref_sqlserver.asp

http://vietjack.com/sql/ham_trong_sql.jsp
Cách Import file Excel:
Click phải vào Tên database => Tasks => Import Data => Data Source (Chọn Microsoft Excel), Excel
version (Chọn Microsoft Excel 97-2003) => Destination (Chọn SQL Server Native Client 11.0) => Copy
data from one or more tables or views => Edit Mappings (Chỉnh sửa Data Type cho phù hợp) => Next =>
Next (Chọn Run immediately) => Finish.

New Query:

Chạy script:
DELETE dbo.Table_Test -- Xóa Data cũ
INSERT INTO dbo.product SELECT * FROM dbo.[Product$]

Cách sắp xếp tăng dần:


SELECT * FROM dbo.Province
ORDER BY Province ASC

Cách sắp xếp giảm dần:


SELECT * FROM dbo.Trans_Data
ORDER BY Revenue DESC

Truy xuất danh sách Top:


SELECT TOP(4) * FROM dbo.Trans_Data
ORDER BY Revenue DESC

Tạo Pivot Table – Crosstab (SAI – Học lại):


VD1: Tên Tỉnh theo hàng, tên Year-Month theo cột (Year-Month cột ghép từ 2 cột Year và
Month):
TRANSFORM Sum(tbl_Transaction.Revenue) AS SumOfRevenue
-- Xếp theo hàng là tên Province
SELECT tbl_Province.Province
FROM tbl_Province LEFT JOIN tbl_Transaction ON tbl_Province.Province =
tbl_Transaction.Province
GROUP BY tbl_Province.Province
-- Xếp theo cột và tạo cột mới có dạng là Year-Month
PIVOT [Year] & '-' & [Month];
VD2: Tên Year theo hàng, tên Tỉnh theo cột:
TRANSFORM Sum(tbl_Transaction.Revenue) AS SumOfRevenue
-- Xếp theo hàng là các Year
SELECT tbl_Transaction.Year
FROM tbl_Province INNER JOIN tbl_Transaction ON tbl_Province.Province =
tbl_Transaction.Province
-- Xếp theo cột là tên Province
GROUP BY tbl_Transaction.Year
PIVOT tbl_Province.Province;

http://www.sqlviet.com/blog/crosstab-report-vs-pivot

Mẹo khắc phục lỗi:


1/ Không có quyền vào Diagram để tạo Table:
Click chuột phải vào tên Database, chọn Properties, chọn Files.
Phần Owner, gõ sa

2/ Bị lỗi không Save được:


Tools/Options/Designers: Bỏ chọn Prevent saving changes that require table re-creation

You might also like