Bài viết này giải thích cho các toán tử SQL Union và so với Union All. Chúng ta cũng sẽ khám phá sự khác biệt giữa các toán tử này cùng với các trường hợp sử dụng.

Bạn đang xem : liên hợp và liên kết tất cả trong sql

Bài viết này giải thích các toán tử SQL Union và so sánh với Tất cả các toán tử trong SQL Server. Chúng ta cũng sẽ khám phá sự khác biệt giữa hai toán tử này cùng với các trường hợp sử dụng khác nhau.

Tổng quan về toán tử SQL Union

Trong cơ sở dữ liệu quan hệ, chúng tôi đã lưu trữ dữ liệu vào các bảng SQL. Đôi khi chúng ta cần Chọn dữ liệu từ nhiều bảng và kết hợp tập hợp kết quả của tất cả các câu lệnh Chọn. Chúng tôi sử dụng toán tử SQL Union để kết hợp hai hoặc nhiều tập kết quả câu lệnh Chọn.

Cú pháp cho toán tử SQL Union

1

2

3

CHỌN

column1

,

Cột 2

.

.

.

Cột

< p class = "crayon-sy"> (

N

)

TỪ

tableA

ĐOÀN KẾT

CHỌN

column1

,

Cột 2

.

.

.

Cột

(

N

)

TỪ

tableB

;

Chúng ta cần lưu ý những điểm sau để viết một truy vấn với SQL Union Operator.

  • Cả hai câu lệnh Chọn phải có cùng số cột
  • Các cột trong cả câu lệnh Chọn phải có kiểu dữ liệu tương thích
  • Thứ tự cột cũng phải khớp trong cả câu lệnh Chọn
  • Chúng ta có thể xác định mệnh đề Nhóm Theo với mỗi câu lệnh Chọn. Không thể sử dụng chúng với tập kết quả
  • Chúng tôi không thể sử dụng mệnh đề Đặt hàng theo với câu lệnh Chọn riêng lẻ. Chúng tôi có thể sử dụng nó với tập kết quả được tạo từ Liên minh của cả hai câu lệnh Chọn

Trong ảnh chụp màn hình sau, chúng ta có thể hiểu toán tử SQL UNION bằng cách sử dụng biểu đồ Venn.

  • Bảng A có các giá trị 1,2,3,4
  • 1

    2

    3

    4

    5

    6

    TẠO

    BẢNG

    BảngA

    (

    ID

    INT

    )

    ; < / p>

    Tiếp tục

    CHÈN

    VÀO

    BảngA

    GIÁ TRỊ

    (

    1

    )

    ,

    (

    2

    )

    ,

    (

    3

    )

    ,

    (

    4

    )

    ;

  • Bảng B có các giá trị 3,4,5,6
  • 1

    2

    3

    4

    5

    6

    TẠO

    BẢNG

    BảngB

    (

    ID

    INT

    )

    ; < / p>

    Bắt đầu

    CHÈN

    VÀO

    BảngB

    GIÁ TRỊ

    (

    3

    )

    ,

    (

    4

    )

    ,

    (

    5

    )

    ,

    (

    6

    )

    ;

Nếu chúng ta sử dụng toán tử SQL Union giữa hai bảng này, chúng ta sẽ nhận được kết quả sau.

1

2

3

4

5

CHỌN

ID

TỪ

TableA

ĐOÀN KẾT

CHỌN

ID

TỪ

TableB

;

Đầu ra: 1, 2, 3,4,5,6

Trong ví dụ của tôi, TableA và TableB đều chứa giá trị 3 và 4. Trong đầu ra, chúng tôi không nhận được các giá trị trùng lặp. Chúng tôi chỉ nhận được một hàng cho mỗi giá trị trùng lặp. Nó thực hiện thao tác DISTINCT trên tất cả các cột trong tập kết quả.

Hãy xem xét điều này với một ví dụ khác. Đối với ví dụ này, tôi đã tạo hai bảng Employee_F Employee_M trong cơ sở dữ liệu mẫu AdventureWorks2017.

Thực thi tập lệnh sau cho bảng Employee_F

1

2

3

4

5

6

7

8

9

CHỌN

ĐẦU

5

[

NationalIDNumber

]

,

[

LoginID

]

,

< / p>

[

JobTitle

]

,

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

VÀO

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Emplo yee_F

]

TỪ

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Nhân viên

]

WHERE

MaritalStatus

=

‘S’

;

Thực thi tập lệnh sau cho bảng Employee_M

1

2

3

4

5

6

7

8

9

CHỌN

ĐẦU

5

[

NationalIDNumber

]

,

[

LoginID

]

,

< / p>

[

JobTitle

]

,

[

Ngày sinh

]

< p class = "crayon-sy">,

[

MaritalStatus

< p class = "crayon-sy">]

,

[

< p class = "crayon-i"> Giới tính

]

VÀO

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Employee_M

]

TỪ

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Nhân viên

]

WHERE < / p>

MaritalStatus

=

‘M’

;

Cả hai bảng không chứa bất kỳ hàng trùng lặp nào trong các bảng khác. Hãy để chúng tôi thực hiện câu lệnh UNION sau đây.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

< p class = "crayon-i"> HumanResources

]

.

[

Employee_M

]

UNION

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Chim thDate

]

,

< / p>

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_F

]

;

CÔNG ĐOÀN

CHỌN

[

Mã số quốc gia

]

, < / p>

[

LoginID

]

,

[

JobTitle

]

< / p>

,

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_Temp

]

Cả hai bảng không có hàng trùng lặp. Do đó, chúng tôi nhận được tất cả các bản ghi từ cả hai bảng trong đầu ra của toán tử SQL Union. Nó chứa mười bản ghi trong đầu ra.

Hãy để chúng tôi tạo một bảng khác có chứa các hàng trùng lặp từ cả hai bảng.

1

2

3

4

5

6

7

8

9

CHỌN

ĐẦU

5

[

NationalIDNumber

]

,

[

LoginID

]

,

< / p>

[

JobTitle

]

,

[

Ngày sinh

]

< p class = "crayon-sy">,

[

MaritalStatus

< p class = "crayon-sy">]

,

[

< p class = "crayon-i"> Giới tính

]

VÀO

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Employee_All

]

TỪ

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Nhân viên

]

;

Bây giờ, chúng ta sẽ sử dụng toán tử SQL UNION giữa ba bảng. Chúng tôi vẫn sẽ nhận được mười bản ghi vì [Employee_All] chứa các bản ghi đã tồn tại trong bảng Employee_M Employee_F .

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

< p class = "crayon-i"> HumanResources

]

.

[

Employee_M

]

UNION

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Bir thDate

]

,

< / p>

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_F

]

UNION

CHỌN

[

NationalIDNumber

] < / p>

,

[

LoginID < / p>

]

,

[< / p>

JobTitle

]

,

[

Ngày sinh

]

,

< p class = "crayon-h">

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

HumanResources < / p>

]

.

[

Employee_All

]

Trong hình ảnh sau đây, bạn có thể thấy một UNION trong ba bảng này không chứa bất kỳ giá trị trùng lặp nào.

Tổng quan về tất cả toán tử của SQL Union

Toán tử SQL Union All kết hợp kết quả của hai hoặc nhiều câu lệnh Chọn tương tự như toán tử SQL Union với sự khác biệt. Sự khác biệt duy nhất là nó không loại bỏ bất kỳ hàng trùng lặp nào khỏi đầu ra của câu lệnh Select.

Cú pháp cho toán tử SQL Union All

1

2

3

CHỌN

column1

,

Cột 2

.

.

.

Cột

< p class = "crayon-sy"> (

N

)

TỪ

tableA

Liên minh

Tất cả

CHỌN

column1

,

Col umn2

.

.

< p class = "crayon-sy">.

Cột

(

N

)

TỪ

tableB

;

Hãy để chúng tôi chạy lại các ví dụ trước với toán tử SQL Union All.

1

2

3

4

5

CHỌN

ID

TỪ

TableA

ĐOÀN KẾT

Tất cả

CHỌN

ID

TỪ

TableB

;

Trong hình ảnh sau, bạn có thể thấy Đầu ra của cả hai toán tử SQL Union và Union All. SQL Union Tất cả trả về kết quả đầu ra của cả hai câu lệnh Chọn. Nó không loại bỏ bất kỳ hàng chồng chéo nào.

Nếu các bảng không có bất kỳ hàng chồng chéo nào, thì đầu ra SQL Union All tương tự như toán tử SQL Union.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

< p class = "crayon-i"> HumanResources

]

.

[

Employee_M

]

ĐOÀN KẾT

Tất cả

< / p>

CHỌN

[

Mã số quốc gia

]

,

[

LoginID

]

,

[

JobTitle

]

,

< / p>

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

< p class = "crayon-i"> Employee_F

]

Chúng ta có thể thấy đầu ra sau đây của SQL Union Tất cả đầu ra của bảng Employee_M Employee_F .

Bây giờ, hãy chạy lại truy vấn với ba bảng Employee_M và các bảng Employee_F Employee_All . Chúng tôi nhận được 10 bản ghi đầu ra của SQL Union giữa ba bảng này. Mỗi bảng chứa 5 bản ghi. Chúng ta sẽ nhận được 15 hàng trong đầu ra của toán tử Union All trên các bảng này.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

< p class = "crayon-i"> HumanResources

]

.

[

Employee_M

]

ĐOÀN KẾT

Tất cả

< / p>

CHỌN

[

Mã số quốc gia

]

,

[

LoginID

]

,

[

JobTitle

]

,

< / p>

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

CHỌN

[< / p>

NationalIDNumber

]

,

< / p>

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_All

]

SQL Union Vs Union All Operator

Liên minh

Liên minh tất cả

Nó kết hợp tập hợp kết quả từ nhiều bảng với loại bỏ các bản ghi trùng lặp

Nó kết hợp tập hợp kết quả từ nhiều bảng mà không loại bỏ các bản ghi trùng lặp

Nó thể hiện sự khác biệt trên tập kết quả.

Nó không hoạt động khác biệt trên tập kết quả

Chúng tôi cần chỉ định nhà điều hành Union

Chúng tôi cần chỉ định Union All Operator

SQL Union All mang lại hiệu suất tốt hơn trong việc thực thi truy vấn so với SQL Union

Nó mang lại hiệu suất tốt hơn so với SQL Union Operator

Sự khác biệt về kế hoạch thực thi trong toán tử SQL Union và Union All

Chúng tôi nhận được hiệu suất truy vấn tốt hơn khi chúng tôi kết hợp tập hợp kết quả của câu lệnh Chọn với toán tử SQL Union All. Chúng ta có thể xem xét sự khác biệt khi sử dụng các kế hoạch thực thi trong SQL Server.

Lưu ý : Trong bài viết này, tôi đang sử dụng ApexSQL Plan , một mục tiêu Trình xem kế hoạch thực thi truy vấn SQL để tạo kế hoạch thực thi các câu lệnh Chọn.

Kế hoạch thực thi cho SQL Union Operator

Chúng ta có thể nhấp vào toán tử Sắp xếp và nó hiển thị Phân biệt – Đúng .

  1. Nó nhận được câu lệnh Chọn riêng lẻ dữ liệu
  2. SQL Server thực hiện một Kết nối cho tất cả dữ liệu được trả về bởi các câu lệnh Chọn
  3. Nó thực hiện một toán tử riêng biệt để loại bỏ các hàng trùng lặp

Kế hoạch thực thi cho toán tử SQL Union All

Trong kế hoạch thực thi của cả SQL Union và Union All, chúng ta có thể thấy sự khác biệt sau.

  • SQL Union chứa toán tử Sắp xếp có chi phí là 53,7% trong các toán tử lô tổng thể
  • Toán tử sắp xếp có thể đắt hơn nếu chúng ta làm việc với các tập dữ liệu lớn

Mệnh đề Order By trong SQL Union so với mệnh đề Union All

Chúng ta không thể sử dụng mệnh đề Order by với mỗi câu lệnh Select. SQL Server chỉ có thể thực hiện sắp xếp trong tập kết quả cuối cùng.

Hãy thử sử dụng Đặt hàng theo từng câu lệnh Chọn.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

< p class = "crayon-num"> 19

20

21

22

23

24

25

26

27

28

< p class = "crayon-num"> 29

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

< p class = "crayon-i"> HumanResources

]

.

[

Employee_M

]

Đặt hàng

bởi

< p class = "crayon-h">

[

JobTitle

]

ĐOÀN KẾT

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

< p class = "crayon-i"> AdventureWorks2017

]

.

[

HumanResources

]

.

[

Employee_F

]

< / p>

Đặt hàng

bởi

[

JobTitle

]

UNION < / p>

CHỌN

[

NationalIDNumber < / p>

]

,

[< / p>

LoginID

]

,

< / p>

[

JobTitle

]

,

[

Ngày sinh

]

,

[

MaritalStatus

]

,

< p class = "crayon-h">

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_All

]

Đặt hàng

bởi

[

JobTitle

]

Chúng tôi nhận được thông báo lỗi sau. Nó đưa ra một thông báo lỗi “cú pháp không chính xác”.

Truy vấn hợp lệ để sắp xếp kết quả bằng mệnh đề Order by trong SQL Union như sau.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_M

]

UNION

CHỌN

[

NationalIDNumber < / p>

]

,

[< / p>

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

< p class = "crayon-sy">.

[

Employee_F

]

UNION

CHỌN

[

NationalIDNumber

]

,

[

LoginID

< p class = "crayon-sy">]

,

[

< p class = "crayon-i"> JobTitle

]

,

< p class = "crayon-sy"> [

Ngày sinh

]

,

[

MaritalStatus

]

,

[

Giới tính

< p class = "crayon-sy">]

TỪ

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Employee_All

]

ĐẶT HÀNG

THEO

[

JobTitle

]

;

Chúng tôi nhận được kết quả đầu ra sau với tập hợp kết quả được sắp xếp theo JobTitle cột.

Sự kết hợp của SQL Union với Union All trong một câu lệnh Chọn

Chúng ta có thể sử dụng SQL Union so với Union All trong một câu lệnh Chọn. Giả sử chúng ta muốn thực hiện các hoạt động sau trên các bảng mẫu của mình.

  • Tập hợp kết quả

    A = UNION

    giữa

    [Employee_F]

    [Employee_All]

  • Kết quả

    Đặt = Kết hợp Tất cả

    giữa

    [Employee_M]

    Tập kết quả A

Trong truy vấn sau, chúng tôi sử dụng dấu ngoặc đơn để thực hiện Liên kết giữa các bảng [Employee_F] và [Employee_All]. SQL Server chạy truy vấn bên trong dấu ngoặc đơn và sau đó thực hiện Union All giữa tập hợp kết quả và bảng [Employee_M].

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

, < / p>

[

MaritalStatus

] < / p>

,

[

Giới tính < / p>

]

TỪ

[

AdventureWorks2017

]

.

[

< p class = "crayon-i"> HumanResources

]

.

[

Employee_M

]

ĐOÀN KẾT

Tất cả

< / p>

(

– Dấu ngoặc đơn

< p class = "crayon-k"> CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

, < / p>

[

JobTitle

]

,

[

Ngày sinh

]

,

< / p>

[

MaritalStatus

]

,

[

Giới tính

]

TỪ

[

AdventureWorks2017

]

.

[

Nguồn nhân lực

]

.

[

Employee_F

]

ĐOÀN KẾT

CHỌN

[

NationalIDNumber

]

,

[

LoginID

]

,

[

JobTitle

]

,

[

Ngày sinh

]

,

< / p>

[

MaritalStatus

]

,

[

Giới tính

]

< p class = "crayon-line" id = "urvanov-cú pháp-highlighter-62b13a9dce3c1074161218-24">

TỪ

[

AdventureWorks2017

]

.

[

HumanResources

]

.

[

Employee_All

]

)

Chúng ta có thể hiểu nó một cách dễ dàng với kế hoạch thực thi. Trong ảnh chụp màn hình sau, chúng ta có thể thấy kế hoạch Thực hiện Thực tế.

Bước 1 : Kết hợp dữ liệu (SQL Union) giữa bảng Employee_F Employee_All .

Bước 2 : Kết nối dữ liệu (SQL Union All) giữa đầu ra Employee_M và Bước 1.

Kết luận

Trong bài viết này, chúng tôi đã so sánh toán tử SQL Union với Union All và xem các ví dụ với các trường hợp sử dụng. Tôi hy vọng bạn thấy bài viết này hữu ích. Vui lòng cung cấp phản hồi trong phần bình luận bên dưới.


Xem thêm những thông tin liên quan đến chủ đề union và union tất cả trong sql

union vs union all in sql server | Union in SQL | Union All in SQL Server

  • Tác giả: Training2SQL MSBI
  • Ngày đăng: 2018-11-10
  • Đánh giá: 4 ⭐ ( 6615 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: This video talks about
    union vs union all in sql server
    Union in SQL
    Union All in SQL Server
    What is the difference between Union and Union All in SQL Server
    union vs union all in sql server
    Union examples in sql server
    Union All Examples in Sql server

    Part of
    Sql Interview Questions
    Sql questions and answers
    SQL FAQ
    SQL Tutorial
    Sql for beginners

Lập Trình .NET: Sự khác nhau giữa Union và Union all trong SQL

  • Tác giả: www.hanhtranglaptrinh.com
  • Đánh giá: 5 ⭐ ( 6362 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

So sánh sự khác biệt giữa các thuật ngữ tương tự – Công Nghệ – 2022

  • Tác giả: vi.strephonsays.com
  • Đánh giá: 4 ⭐ ( 6420 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Sự khác biệt chính giữa liên minh và liên minh tất cả trong máy chủ SQL là liên minh cung cấp tập dữ liệu kết quả mà không có hàng trùng lặp trong khi liên minh tất cả cung cấp res

Sự khác biệt giữa union và union trong SQL là gì?

  • Tác giả: presbyteryofstockton.org
  • Đánh giá: 3 ⭐ ( 7100 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lệnh UNION ALL bằng với lệnh UNION, ngoại trừ UNION ALL chọn tất cả các giá trị. Sự khác biệt giữa Union và Union all là Union all sẽ không loại bỏ các hàng trùng lặp, thay vào đó, nó chỉ kéo tất cả các hàng từ tất cả các bảng phù hợp với đặc điểm truy vấn của bạn và kết hợp chúng thành một bảng.

Toán tử UNION trong SQL

  • Tác giả: laptrinhtudau.com
  • Đánh giá: 5 ⭐ ( 8259 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Toán tử UNION trong SQL – Lập Trình Từ Đầu 2 Câu Lệnh SQL

Sự khác biệt giữa Union và Union All in SQL Server (Công nghệ)

  • Tác giả: vi.sawakinome.com
  • Đánh giá: 5 ⭐ ( 7574 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Sự khác biệt chính giữa union và union all trong máy chủ SQL là union cung cấp tập dữ liệu kết quả mà không có hàng trùng lặp trong khi union đều cung cấp độ phân giải

Sự khác biệt giữa Union và Union All in SQL Server

  • Tác giả: vi.classicfoxvalley.com
  • Đánh giá: 3 ⭐ ( 8631 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  request/request: Simplified HTTP request client. - wrapper class là gì

By ads_php