- Tạo 2 bảng lưu thông tin (GKN_Employee, GKN_SalaryHistory)
- Thêm dữ liệu vào 2 bảng vừa tạo
- Xem dữ liệu của 2 bảng
- Thực thiện truy vấn (query) từ 2 bảng dữ liệu vừa tạo
/* Tạo bảng lưu thông Nhân viên */
Create
table
GKN_Employee (ID
int
primary
key
,FullName nvarchar (200))
/* Tạo bảng lưu thông tin lương */
Create
table
GKN_SalaryHistory (
[
Index
]
int
primary
key
,
EmployeeID
int
foreign
key
REFERENCES
GKN_Employee(ID),
Salary
decimal
,
AppliedDate datetime)
/* Thêm thông tin nhân viên */
INSERT
INTO
GKN_Employee
VALUES
(1, N
'Nguyễn Khánh Hưng'
)
INSERT
INTO
GKN_Employee
VALUES
(2, N
'Đoàn Thanh Thúy'
)
INSERT
INTO
GKN_Employee
VALUES
(3, N
'Trần Xuân Vũ'
)
/* Thêm thông tin lương */
/* Nguyễn Khánh Hưng */
INSERT
INTO
GKN_SalaryHistory
VALUES
(1, 1, 500000,
'1/1/2009'
)
INSERT
INTO
GKN_SalaryHistory
VALUES
(2, 1, 700000,
'5/2/2009'
)
INSERT
INTO
GKN_SalaryHistory
VALUES
(3, 1, 1200000,
'5/2/2010'
)
/* Đoàn Thanh Thúy */
INSERT
INTO
GKN_SalaryHistory
VALUES
(4, 2, 200000,
'3/6/2009'
)
INSERT
INTO
GKN_SalaryHistory
VALUES
(5, 2, 900000,
'5/19/2009'
)
INSERT
INTO
GKN_SalaryHistory
VALUES
(6, 2, 1000000,
'12/22/2009'
)
/* Trần Xuân Vũ */
INSERT
INTO
GKN_SalaryHistory
VALUES
(7, 3, 4500000,
'4/6/2009'
)
INSERT
INTO
GKN_SalaryHistory
VALUES
(8, 3, 7000000,
'5/2/2010'
)
INSERT
INTO
GKN_SalaryHistory
VALUES
(9, 3, 12000000,
'10/2/2010'
)
/* Xem dữ liệu */
select
*
from
GKN_Employee
select
*
from
GKN_SalaryHistory
=> dữ liệu trả về
/* Tương ứng với mỗi nhân viên: */
/* 1. Lấy thông tin lương có ngày áp dụng lớn nhất */
SELECT E.*, S.*
FROM GKN_Employee AS E
INNER JOIN GKN_SalaryHistory AS S ON E.ID = S.EmployeeID
WHERE S.AppliedDate = (SELECT TOP 1 AppliedDate
FROM GKN_SalaryHistory
WHERE EmployeeID = S.EmployeeID
ORDER BY AppliedDate DESC)
/* 2. Lấy thông tin lương có ngày áp dụng nhỏ nhất */
SELECT E.*, S.*
FROM GKN_Employee AS E
INNER JOIN GKN_SalaryHistory AS S ON E.ID = S.EmployeeID
WHERE S.AppliedDate = (SELECT TOP 1 AppliedDate
FROM GKN_SalaryHistory
WHERE EmployeeID = S.EmployeeID
ORDER BY AppliedDate ASC)
/* 1. Lấy thông tin lương có ngày áp dụng lớn nhất */
SELECT E.*, S.*
FROM GKN_Employee AS E
INNER JOIN GKN_SalaryHistory AS S ON E.ID = S.EmployeeID
WHERE S.AppliedDate = (SELECT TOP 1 AppliedDate
FROM GKN_SalaryHistory
WHERE EmployeeID = S.EmployeeID
ORDER BY AppliedDate DESC)
/* 2. Lấy thông tin lương có ngày áp dụng nhỏ nhất */
SELECT E.*, S.*
FROM GKN_Employee AS E
INNER JOIN GKN_SalaryHistory AS S ON E.ID = S.EmployeeID
WHERE S.AppliedDate = (SELECT TOP 1 AppliedDate
FROM GKN_SalaryHistory
WHERE EmployeeID = S.EmployeeID
ORDER BY AppliedDate ASC)
=> kết quả thu được: phần trên trả về những record có giá trị ngày áp dụng lớn nhất của mỗi nhân viên, phần dưới giá trị nhỏ nhất.
Giải thích: 2 câu truy vấn (query) ở trên chỉ khác nhau về câu lệnh ORDER BY, nếu lấy theo giá trị lớn nhất thì dùng thuộc tính DESC, để sắp xếp ngày áp dụng giảm dần; ngược lại lấy theo giá trị nhỏ nhất thì dùng thuộc tính ASC, để sắp xếp ngày áp dụng tăng dần.
by: gockinhnghiem
0 nhận xét:
Post a Comment