Hôm nay chúng ta sẽ tìm hiểu về biểu thức Bảng chung là một tính năng mới được giới thiệu trong máy chủ SQL 2005 và cũng có sẵn trong các phiên bản sau.
Biểu thức bảng chung: - Biểu thức bảng chung có thể được định nghĩa là tập kết quả tạm thời hoặc nói cách khác, nó là sự thay thế các khung nhìn trong SQL Server. Biểu thức bảng chung chỉ có giá trị trong lô câu lệnh được xác định và không thể được sử dụng trong các phiên khác.
Cú pháp khai báo CTE (Biểu thức bảng chung): -
with [Name of CTE]
as
(
Body of common table expression
)
Hãy lấy một ví dụ: -
CREATE TABLE Employee([EID] [int] IDENTITY(10,5) NOT NULL,[Name] [varchar](50) NULL)
insert into Employee(Name) values('Neeraj')
insert into Employee(Name) values('dheeraj')
insert into Employee(Name) values('shayam')
insert into Employee(Name) values('vikas')
insert into Employee(Name) values('raj')
CREATE TABLE DEPT(EID INT,DEPTNAME VARCHAR(100))
insert into dept values(10,'IT')
insert into dept values(15,'Finance')
insert into dept values(20,'Admin')
insert into dept values(25,'HR')
insert into dept values(10,'Payroll')
Tôi đã tạo hai nhân viên bảng và Phòng và chèn 5 hàng vào mỗi bảng. Bây giờ tôi muốn tham gia các bảng này và tạo một tập kết quả tạm thời để sử dụng nó thêm.
With CTE_Example(EID,Name,DeptName)
as
(
select Employee.EID,Name,DeptName from Employee
inner join DEPT on Employee.EID =DEPT.EID
)
select * from CTE_Example
Hãy lần lượt lấy từng dòng của câu lệnh và hiểu.
Để định nghĩa CTE, chúng ta viết mệnh đề "with", sau đó chúng ta đặt tên cho biểu thức bảng, ở đây tôi đã đặt tên là "CTE_Example"
Sau đó, chúng tôi viết "As" và đặt mã của chúng tôi trong hai dấu ngoặc (---), chúng tôi có thể tham gia nhiều bảng trong ngoặc đơn kèm theo.
Trong dòng cuối cùng, tôi đã sử dụng "Chọn * từ CTE_Example", chúng tôi đang đề cập đến biểu thức Bảng chung trong dòng mã cuối cùng, vì vậy chúng tôi có thể nói rằng nó giống như một khung nhìn, trong đó chúng tôi đang xác định và sử dụng chế độ xem trong một lô và CTE không được lưu trữ trong cơ sở dữ liệu dưới dạng đối tượng vĩnh viễn. Nhưng nó hành xử như một quan điểm. chúng ta có thể thực hiện xóa và cập nhật câu lệnh trên CTE và điều đó sẽ có tác động trực tiếp đến bảng được tham chiếu đang được sử dụng trong CTE. Hãy lấy một ví dụ để hiểu thực tế này.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
Trong tuyên bố trên, chúng tôi đang xóa một hàng khỏi CTE_Example và nó sẽ xóa dữ liệu khỏi bảng tham chiếu "DEPT" đang được sử dụng trong CTE.