Trường hợp mysql khi chọn

Đôi khi, bạn có thể muốn liệt kê các bản ghi trong một bảng hoặc truy vấn các bản ghi trong một hoặc nhiều bảng khác để cấu hình thành một bộ nhiều bản ghi - list bao gồm tất cả các bản ghi từ hai hoặc nhiều bảng. Đây là mục đích của một truy vấn hợp tác trong Access

Để hiểu được truy vấn hợp tác một cách hiệu quả, trước hết bạn sẽ làm quen với việc thiết kế truy vấn lựa chọn cơ bản trong Access. Để tìm hiểu thêm thông tin về thiết kế truy vấn lựa chọn, hãy xem mục Tạo truy vấn lựa chọn đơn giản

Lưu ý. Nội dung trong bài viết này được sử dụng với cơ sở dữ liệu máy tính Access. Bạn không thể tạo hoặc sử dụng truy vấn hợp tác trong cơ sở dữ liệu web Access hoặc ứng dụng web Access

Nghiên cứu ví dụ truy vấn hoạt động

Nếu bạn chưa bao giờ tạo một truy vấn hợp tác trước đó, bạn có thể thấy hữu ích khi nghiên cứu một ví dụ hoạt động trong mẫu Northwind Access trước tiên. Bạn có thể tìm kiếm mẫu Northwind mẫu trên trang bắt đầu của Access bằng cách nhấn vào Tệp > Mới hoặc có thể trực tiếp tải xuống bản sao từ vị trí này. Mẫu Northwind

Sau khi Truy cập mở cơ sở dữ liệu Northwind, hãy bỏ qua biểu mẫu hộp thoại đăng nhập xuất hiện tiêu đề, sau đó bung rộng Ngăn dẫn hướng. Bấm vào phần trên cùng của Chặn dẫn hướng, sau đó chọn Loại đối tượng để sắp xếp tất cả các đối tượng cơ sở dữ liệu theo loại. Tiếp theo, mở rộng nhóm Truy vấn và bạn sẽ thấy một truy vấn có tên là Giao dịch sản phẩm

Truy vấn hợp rất dễ phân biệt với các đối tượng truy vấn khác vì có biểu tượng đặc biệt giống như hai vòng tròn cuộn vào nhau đại diện cho một bộ liên kết từ hai bộ

Không giống như truy vấn lựa chọn và hành động thông thường, các bảng không liên quan nhau trong truy vấn hợp hợp, có nghĩa là không thể sử dụng trình thiết kế truy vấn đồ họa Truy cập để xây dựng hoặc chỉnh sửa truy vấn hợp hợp. Bạn sẽ gặp vấn đề này nếu mở một truy vấn hợp tác từ Chặn dẫn hướng; . Bên dưới lệnh Xuyến xem trên tab Trang đầu, bạn sẽ nhận thấy rằng Xuyến xem thiết kế sẽ không sẵn dùng khi làm việc với truy vấn hợp tác. Bạn chỉ có thể chuyển đổi giữa Mở rộng xem biểu dữ liệu và Mở rộng xem SQL khi làm việc với truy vấn hợp nhất

Để tiếp tục nghiên cứu về ví dụ truy vấn hợp tác này, hãy nhấn vào Trang đầu > Khám phá > Khám phá SQL để xem cú pháp SQL xác thực truy vấn. Trong hình minh họa này, chúng tôi đã thêm một số giãn cách thừa trong SQL để bạn có thể dễ dàng thấy nhiều phần khác nhau tạo nên một truy vấn hợp nhất

Hãy cùng nghiên cứu chi tiết cú pháp SQL của truy vấn hợp tác này từ cơ sở dữ liệu Northwind

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
2

Phần đầu tiên và phần thứ ba của câu lệnh SQL này cơ bản là hai truy vấn lựa chọn. Các truy vấn này truy xuất hai bộ ghi khác nhau;

Phần thứ hai trong câu lệnh SQL này là từ khóa UNION báo cho Access rằng truy vấn này sẽ kết hợp hai bộ bản ghi

Phần cuối của câu lệnh SQL này xác nhận thứ tự của các bản ghi được kết hợp bằng cách sử dụng câu lệnh ORDER BY. Trong ví dụ này, Access sẽ xếp thứ tự tất cả các bản ghi theo trường Ngày đặt hàng theo thứ tự giảm dần

Lưu ý. Truy vấn hợp lệ luôn ở trạng thái chỉ đọc trong Access;

Tạo một truy vấn hợp nhất bằng cách tạo và kết hợp các truy vấn được chọn

Ngay cả khi có thể tạo truy vấn hợp nhất bằng cách viết trực tiếp cú pháp SQL ở dạng xem SQL, bạn cũng có thể thấy dễ dàng hơn khi xây dựng truy vấn một số phần với truy vấn chọn. Sau đó, bạn có thể sao chép và dán các phần SQL vào một truy vấn đã được kết hợp

Nếu bạn muốn bỏ qua việc đọc các bước và thay vào đó là xem ví dụ, hãy xem mục tiếp theo,

  1. Trên tab Tạo, trong nhóm Truy vấn, nhấn Thiết kế Truy vấn

  2. Nhấp đúp vào bảng có các trường mà bạn muốn nhập. Thêm bảng vào cửa sổ thiết kế truy vấn

  3. Trong cửa sổ thiết kế truy vấn, hãy nhấp đúp vào từng trường mà bạn muốn bao gồm. Khi bạn chọn trường, hãy đảm bảo rằng bạn thêm cùng một số trường, trong cùng một thứ tự mà bạn thêm vào truy vấn lựa chọn khác. Hết sức chú ý đến kiểu dữ liệu của trường và chắc chắn rằng chúng có kiểu dữ liệu tương thích với trường trong cùng một vị trí, trong truy vấn khác mà bạn đang kết hợp. Ví dụ. Nếu truy vấn lựa chọn đầu tiên của bạn có năm trường, trường đầu tiên chứa dữ liệu ngày/thời gian, hãy đảm bảo rằng mỗi truy vấn lựa chọn khác mà bạn đang kết hợp cũng có năm trường, trường đầu tiên chứa dữ liệu ngày/ . v

  4. Bạn có thể tùy chọn thêm tiêu chí vào các trường của mình bằng cách nhập biểu thức phù hợp vào hàng tiêu chí của lưới trường

  5. Sau khi đã hoàn tất việc thêm trường và tiêu chí trường, bạn nên chạy truy vấn đã chọn và xem lại đầu ra của truy vấn đó. Trên tab Thiết kế, trong nhóm Kết quả, nhấn vào Chạy

  6. Chuyển truy vấn sang định dạng xem Thiết kế

  7. Lưu lựa chọn truy vấn và để truy vấn mở

  8. lặp lại thủ tục này cho mỗi truy vấn lựa chọn mà bạn muốn kết hợp

Giờ đây, bạn đã tạo các truy vấn lựa chọn của mình, đã đến lúc kết hợp các truy vấn đó. Trong bước này, bạn tạo truy vấn hợp nhất bằng cách sao chép và dán các câu lệnh SQL

  1. Trên tab Tạo, trong nhóm Truy vấn, nhấn Thiết kế Truy vấn

  2. Trên tab Thiết kế, trong nhóm Truy vấn, nhấn vào Kết hợp. Truy cập ẩn cửa sổ thiết kế truy vấn và hiển thị tab đối tượng dạng xem SQL. Lúc này, dạng tab đối tượng xem SQL trống

  3. Vui lòng nhấn vào tab để truy vấn lựa chọn đầu tiên mà bạn muốn kết hợp trong truy vấn hợp tác

  4. Trên tab Trang đầu, nhấp vào Xem dưới dạng > Xem dưới dạng SQL

  5. Sao chép câu lệnh SQL để truy vấn lựa chọn. Bấm vào tab dành để truy vấn tổng hợp bạn đã bắt đầu tạo trước đó

  6. Dán câu lệnh SQL cho truy vấn chọn vào tab đối tượng dạng xem SQL của truy vấn hợp lệ

  7. Xóa bỏ dấu chấm phẩy [;] ở cuối câu lệnh SQL của truy vấn lựa chọn

  8. Nhấn phím Enter để di chuyển con trỏ xuống một dòng, sau đó nhập UNION vào dòng mới

  9. Vui lòng nhấn vào tab để truy vấn lựa chọn tiếp theo mà bạn muốn kết hợp trong truy vấn hợp tác

  10. lặp lại từ bước 5 đến bước 10 cho đến khi bạn đã sao chép và dán tất cả câu lệnh SQL để truy vấn chọn trong cửa sổ dạng xem SQL của truy vấn hợp nhất. Không xóa dấu chấm than hoặc nhập bất kỳ ký tự nào sau câu lệnh SQL để truy vấn cuối cùng được chọn

  11. Trên tab Thiết kế, trong nhóm Kết quả, nhấn Chạy

Kết quả của cuộc truy vấn hợp nhất sẽ xuất hiện trong màn hình xem biểu dữ liệu

Xem ví dụ về cách xây dựng truy vấn hợp tác

Đây là ví dụ bạn có thể tạo lại trong cơ sở dữ liệu mẫu Northwind. Truy vấn này thu thập tên người từ bảng Khách hàng và kết hợp với tên người từ bảng Nhà cung cấp. Nếu bạn muốn làm theo, hãy thực hiện các bước này trong bản sao cơ sở dữ liệu mẫu Northwind của mình

Đây là những bước cần thiết để xây dựng ví dụ này

  1. Tạo hai truy vấn được chọn có tên là Truy vấn_1 và Truy vấn_2 với các bảng Khách hàng và Nhà cung cấp tương ứng theo thứ tự làm nguồn dữ liệu. Tên trường sử dụng và họ làm giá trị hiển thị

  2. Tạo một truy vấn mới có tên là Truy vấn_3 không có nguồn dữ liệu ban đầu, sau đó nhấn vào lệnh Kết hợp trên tab Thiết kế để đưa truy vấn này vào Truy vấn hợp hợp

  3. Sao chép và dán các câu lệnh SQL từ Truy vấn_1 và Truy vấn_2 vào Truy vấn_3. Bảo đảm loại bỏ dấu chấm thừa và thêm vào từ khóa UNION. Sau đó, bạn có thể kiểm tra kết quả của mình ở dạng xem biểu dữ liệu

  4. Thêm mệnh đề xếp thứ tự vào một trong các truy vấn, sau đó dán câu lệnh ORDER BY vào dạng xem truy vấn hợp hợp SQL. Lưu ý rằng trong Truy vấn_3, truy vấn hợp hợp, khi thứ tự xếp hạng được gắn thêm, trước tiên, các dấu chấm phẩy, sau đó là bảng tên sẽ bị loại khỏi tên trường

  5. SQL cuối cùng sẽ kết hợp và sắp xếp các tên được sử dụng cho ví dụ truy vấn này là như sau

    SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    UNION
    
    SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    3

Nếu bạn viết cú pháp SQL một cách rất dễ dàng, bạn có thể chắc chắn viết trực tiếp câu lệnh SQL của riêng mình để truy vấn hợp vào dạng xem SQL. Tuy nhiên, bạn có thể thấy hữu ích khi thực hiện theo phương pháp tiếp cận sao chép và dán SQL từ các đối tượng truy vấn khác. Từng truy vấn có thể phức tạp hơn nhiều so với các ví dụ truy vấn chọn đơn giản được sử dụng tại đây. Đây có thể là lợi thế của bạn khi tạo và kiểm tra từng truy vấn một cách cẩn thận trước khi kết hợp các truy vấn trong truy vấn hợp tác. Nếu truy vấn hợp không chạy, bạn có thể điều chỉnh từng truy vấn riêng lẻ cho đến khi thành công, sau đó xây dựng lại truy vấn hợp của mình bằng cú pháp đúng

Xem lại các mục còn lại của bài viết này để tìm hiểu thêm các mẹo và thủ thuật về cách sử dụng truy vấn hợp tác

Kết hợp ba hoặc nhiều bảng hoặc truy vấn trong một truy vấn hợp nhất

Trong ví dụ ở mục trước đó sử dụng cơ sở dữ liệu Northwind, chỉ kết hợp dữ liệu được lấy từ hai bảng. Tuy nhiên, bạn có thể kết hợp ba hoặc nhiều bảng rất dễ dàng trong một truy vấn hợp hợp. Ví dụ. build on ví dụ trước, bạn có thể cũng muốn đính kèm theo tên của nhân viên khi bắt đầu truy vấn. Bạn có thể thực hiện nhiệm vụ đó bằng cách thêm một truy vấn thứ ba và kết hợp với câu lệnh SQL trước đó với từ khóa UNION bổ sung như thế này

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
4

Khi bạn xem kết quả ở dạng xem biểu dữ liệu, tất cả nhân viên sẽ được liệt kê cùng tên công ty mẫu, vốn không thể rất hữu ích. Nếu bạn muốn trường đó biết một người là nhân viên nội bộ, từ nhà cung cấp hoặc từ khách hàng, bạn có thể đưa vào giá trị cố định thay cho tên công ty. This is the SQL interface

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
5

Đây là kết quả giao diện sẽ xuất hiện ở dạng xem biểu dữ liệu. Access will show the year of the write ví dụ này

Công việc

Họ

Mười

Nội bộ

Freehafer

Nancy

Nội bộ

Giussani

Laura

Nhà cung cấp

thủy tinh

Stuart

khách hàng

Goldschmidt

Đa-ni-ên

khách hàng

Gratacos Solsona

antonio

Truy vấn bên trên có thể giảm thậm chí nhiều hơn vì Access chỉ đọc tên của trường bắt đầu từ truy vấn đầu tiên trong truy vấn hợp tác. Tại đây, bạn thấy chúng ta đã loại bỏ đầu ra khỏi truy vấn thứ hai và thứ ba

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
6

Lọc trong truy vấn hợp tác

Trong truy vấn hợp tác, chỉ cho phép xếp thứ tự một lần nhưng mỗi truy vấn có thể được lọc riêng biệt. Việc xây dựng trên truy vấn hợp nhất của mục trước, dưới đây là ví dụ về vị trí chúng ta đã lọc từng truy vấn bằng cách bổ sung mệnh đề WHERE

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
7

Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy kết quả có định dạng như sau

Công việc

Họ

Mười

Nhà cung cấp

Andersen

Elizabeth A

Nội bộ

Freehafer

Nancy

khách hàng

Hasselberg

Jonas

Nội bộ

Hellung-Larsen

Anne

Nhà cung cấp

Hernandez-Echevarria

Amaya

khách hàng

chùm ngây

Sven

Nhà cung cấp

Sandberg

Mikael

Nhà cung cấp

Sousa

Luis

Nội bộ

Thorpe

steven

Nhà cung cấp

người đánh cá

ngô đồng

Nội bộ

Zare

Robert

Mixed data type

Nếu các truy vấn cần kết hợp tất cả các loại dữ liệu rất khác nhau, bạn có thể gặp phải một vấn đề là trường đầu ra phải kết hợp dữ liệu của các loại dữ liệu khác nhau. Nếu vậy, truy vấn hầu hết như thường lệ sẽ trả về kết quả dưới dạng loại dữ liệu văn bản do loại dữ liệu có thể lưu giữ cả văn bản và số

Để tìm hiểu cách truy vấn hoạt động này, chúng ta sẽ sử dụng truy vấn hợp tác Giao dịch sản phẩm trong cơ sở dữ liệu mẫu Northwind. Mở cơ sở dữ liệu mẫu đó, sau đó mở truy vấn Giao dịch sản phẩm ở dạng xem biểu dữ liệu. Cuối cùng của bản ghi phải tương tự như đầu ra này

ID Sản phẩm

Ngày đặt hàng

ty name

giao dịch

Number

77

22/01/2006

Nhà cung cấp B

Mua

60

80

22/01/2006

Nhà cung cấp D

Mua

75

81

22/01/2006

Nhà cung cấp A

Mua

125

81

22/01/2006

Nhà cung cấp A

Mua

200

7

20/01/2006

Công ty D

Lệnh cấm

10

51

20/01/2006

Công ty D

Lệnh cấm

10

80

20/01/2006

Công ty D

Lệnh cấm

10

34

15/01/2006

AA Company

Lệnh cấm

100

80

15/01/2006

AA Company

Lệnh cấm

25

Hãy giả định rằng bạn muốn trường Số lượng chia tách hai - Mua và Bán. Cũng hãy giả định rằng bạn muốn có giá trị không cố định vì trường không có giá trị. Đây là giao diện của SQL đối với truy vấn này

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
8

Nếu bạn chuyển đổi sang dạng xem biểu dữ liệu, bạn sẽ thấy mười bản ghi cuối cùng giờ đây được hiển thị giống như sau

ID Sản phẩm

Ngày đặt hàng

ty name

giao dịch

Mua

Lệnh cấm

74

22/01/2006

Nhà cung cấp B

Mua

31

0

77

22/01/2006

Nhà cung cấp B

Mua

60

0

80

22/01/2006

Nhà cung cấp D

Mua

75

0

81

22/01/2006

Nhà cung cấp A

Mua

125

0

81

22/01/2006

Nhà cung cấp A

Mua

200

0

7

20/01/2006

Công ty D

Lệnh cấm

0

10

51

20/01/2006

Công ty D

Lệnh cấm

0

10

80

20/01/2006

Công ty D

Lệnh cấm

0

10

34

15/01/2006

AA Company

Lệnh cấm

0

100

80

15/01/2006

AA Company

Lệnh cấm

0

25

Tiếp tục ví dụ này, điều gì sẽ xảy ra nếu bạn muốn các trường có số không trống?

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
9

Tuy nhiên, khi bạn có thể quan sát việc chuyển đổi sang dạng xem biểu dữ liệu, lúc này bạn đã có một kết quả không mong muốn. Trong cột Mua, mỗi trường đều bị xóa

ID Sản phẩm

Ngày đặt hàng

ty name

giao dịch

Mua

Lệnh cấm

74

22/01/2006

Nhà cung cấp B

Mua

77

22/01/2006

Nhà cung cấp B

Mua

80

22/01/2006

Nhà cung cấp D

Mua

81

22/01/2006

Nhà cung cấp A

Mua

81

22/01/2006

Nhà cung cấp A

Mua

7

20/01/2006

Công ty D

Lệnh cấm

10

51

20/01/2006

Công ty D

Lệnh cấm

10

80

20/01/2006

Công ty D

Lệnh cấm

10

34

15/01/2006

AA Company

Lệnh cấm

100

80

15/01/2006

AA Company

Lệnh cấm

25

Lý do mà điều này xảy ra là do Truy cập xác định loại dữ liệu của các trường từ truy vấn đầu tiên. Trong ví dụ này, Null không phải là một số

Vì vậy, điều gì sẽ xảy ra nếu bạn tìm cách và chèn một chuỗi trống cho giá trị của các trường trống?

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
0

Khi bạn chuyển đổi sang dạng xem biểu dữ liệu, bạn sẽ thấy rằng Access truy xuất các giá trị Mua nhưng đã chuyển các giá trị này thành văn bản. Bạn có thể biết đây là giá trị của văn bản vì được căn cứ ở dạng xem biểu dữ liệu. Chuỗi trống trong truy vấn đầu tiên không phải là số vì bạn đã thấy kết quả này. Bạn cũng sẽ thấy rằng các giá trị Bán cũng được chuyển đổi thành văn bản vì các bản ghi mua có chứa chuỗi trống

ID Sản phẩm

Ngày đặt hàng

ty name

giao dịch

Mua

Lệnh cấm

74

22/01/2006

Nhà cung cấp B

Mua

31

77

22/01/2006

Nhà cung cấp B

Mua

60

80

22/01/2006

Nhà cung cấp D

Mua

75

81

22/01/2006

Nhà cung cấp A

Mua

125

81

22/01/2006

Nhà cung cấp A

Mua

200

7

20/01/2006

Công ty D

Lệnh cấm

10

51

20/01/2006

Công ty D

Lệnh cấm

10

80

20/01/2006

Công ty D

Lệnh cấm

10

34

15/01/2006

AA Company

Lệnh cấm

100

80

15/01/2006

AA Company

Lệnh cấm

25

Vật thì bạn giải quyết vấn đề này như thế nào?

Giải pháp là buộc truy vấn có giá trị trường là một số. Điều đó có thể được thực hiện bằng biểu thức

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
1

Điều kiện để kiểm tra, Sai, sẽ không bao giờ là Đúng, làm như vậy biểu thức sẽ luôn trả về Null nhưng Access vẫn đánh giá cả hai tùy chọn đầu ra và quyết định đầu ra là số hoặc Null

Đây là cách chúng ta có thể sử dụng biểu thức này trong ví dụ hoạt động của mình

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
2

Lưu ý rằng không cần thiết phải chỉnh sửa truy vấn thứ hai

Nếu bạn chuyển đổi sang dạng xem biểu dữ liệu, lúc này bạn sẽ thấy kết quả mà chúng ta mong muốn

ID Sản phẩm

Ngày đặt hàng

ty name

giao dịch

Mua

Lệnh cấm

74

22/01/2006

Nhà cung cấp B

Mua

31

77

22/01/2006

Nhà cung cấp B

Mua

60

80

22/01/2006

Nhà cung cấp D

Mua

75

81

22/01/2006

Nhà cung cấp A

Mua

125

81

22/01/2006

Nhà cung cấp A

Mua

200

7

20/01/2006

Công ty D

Lệnh cấm

10

51

20/01/2006

Công ty D

Lệnh cấm

10

80

20/01/2006

Công ty D

Lệnh cấm

10

34

15/01/2006

AA Company

Lệnh cấm

100

80

15/01/2006

AA Company

Lệnh cấm

25

Phương pháp thay thế để đạt được cùng một kết quả là thêm các truy vấn trong truy vấn hợp tác với một truy vấn khác

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
3

Đối với từng trường, Access trả về các giá trị cố định của loại dữ liệu bạn xác định. Tất nhiên, bạn không muốn bắt đầu truy vấn vấn đề này gây trở ngại cho kết quả, do đó bí quyết để tránh điều này được thêm vào định mệnh WHERE to False

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
4

Đây là một mẹo nhỏ vì kết quả luôn sai và sau đó truy vấn không trả về bất kỳ giá trị nào. Kết hợp câu lệnh này với SQL hiện có và chúng ta có câu lệnh được hoàn thành như sau

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
5

Lưu ý. Truy vấn đã được kết hợp ở đây trong ví dụ này, sử dụng cơ sở dữ liệu Northwind trả về 100 bản ghi, trong khi hai truy vấn riêng lẻ trả về 58 và 43 bản ghi có tổng cộng là 101 bản ghi. Nguyên nhân về sự không thống nhất này là do hai bản ghi không phải là duy nhất. Vui lòng xem mục, để tìm hiểu cách giải quyết vấn đề này bằng cách sử dụng UNION ALL

Add tổng hợp vào truy vấn

Một trường hợp đặc biệt về truy vấn hợp nhất là kết hợp một bộ các bản ghi có một bản ghi chứa tổng của một hoặc nhiều trường

Đây là một ví dụ khác mà bạn có thể tạo ra trong cơ sở dữ liệu mẫu Northwind để minh họa cách nhận tổng trong truy vấn hợp tác

  1. Tạo một truy vấn đơn giản mới để xem phần mua bia [ID Sản phẩm=34 trong cơ sở dữ liệu Northwind] bằng cú pháp SQL sau đây

    SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    UNION
    
    SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    6
  2. Chuyển đổi sang dạng xem biểu dữ liệu và bạn sẽ thấy bốn sản phẩm mua

    Ngày nhận

    Number

    22/01/2006

    100

    22/01/2006

    60

    04/04/2006

    50

    05/04/2006

    300

  3. Để có được tổng hợp, hãy tạo một truy vấn tổng hợp đơn giản bằng SQL sau đây

    SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    UNION
    
    SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    7
  4. Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ chỉ thấy một bản ghi

    Ngày nhận_tối_đa

    Tổng_số_lượng

    05/04/2006

    510

  5. Kết hợp hai truy vấn này vào một truy vấn hợp lệ để bổ sung bản ghi có tổng số lượng vào các bản ghi mua

    SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    UNION
    
    SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    8
  6. Chuyển đổi sang dạng xem biểu dữ liệu và bạn sẽ thấy bốn sản phẩm mua được tổng của từng sản phẩm kèm theo là một bản ghi tổng số lượng

    Ngày nhận

    Number

    22/01/2006

    60

    22/01/2006

    100

    04/04/2006

    50

    05/04/2006

    300

    05/04/2006

    510

Bài viết đó đề cập đến những thông tin cơ bản về cách tổng hợp thêm vào một truy vấn hợp tác. Bạn cũng có thể muốn đưa vào các giá trị cố định trong cả hai truy vấn có giới hạn như “Chi tiết” và “Tổng” để phân tách trực tiếp tổng số ghi từ các bản ghi khác nhau. Bạn có thể xem lại các giá trị cố định đang được sử dụng trong mục

Làm việc với các bản ghi riêng biệt trong truy vấn hợp tác bằng UNION ALL

Các truy vấn hợp tác trong Access theo mặc định chỉ bao gồm các bản ghi riêng biệt. Nhưng điều gì sẽ xảy ra nếu bạn muốn bao gồm tất cả các bản ghi?

Trong mục trước đó, chúng tôi chỉ cho bạn cách tạo tổng trong truy vấn hợp tác. Sửa đổi truy vấn SQL đó để có ID Sản phẩm= 48

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
9

Chuyển đổi sang dạng xem biểu dữ liệu và bạn sẽ thấy kết quả hơi sai một chút

Ngày nhận

Number

22/01/2006

100

22/01/2006

200

Tất nhiên, một bản ghi sẽ không trả về hai lần tổng số

Lý do bạn thấy kết quả này là bởi vì trong một ngày cùng một lượng sôcôla đã được bán hai lần - như được ghi lại trong bảng Chi tiết đơn đặt hàng. Đây là kết quả của truy vấn chọn menu hiển thị cả hai bản ghi trong cơ sở dữ liệu mẫu Northwind

ID Đơn vị đặt hàng

Sản phẩm

Định lượng

100

Sô cô la Northwind Traders

100

92

Sô cô la Northwind Traders

100

Trong truy vấn hợp tác được ghi chú trước đó, bạn có thể thấy rằng ID trường Đơn hàng không được đưa vào và hai trường không tạo thành hai bản ghi riêng biệt

Nếu bạn muốn nhập tất cả các bản ghi vào, hãy sử dụng UNION ALL thay vì UNION trong SQL của mình. Điều này chủ yếu có thể sẽ gây ảnh hưởng đến việc sắp xếp kết quả, vì vậy bạn cũng có thể muốn đưa vào mệnh đề ORDER BY để xác định thứ tự sắp xếp. Đây là cách xây dựng SQL đã sửa đổi từ ví dụ trước đó

SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers

UNION

SELECT "In-house", [Last Name], [First Name]
FROM Employees

ORDER BY [Last Name], [First Name];
0

Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy tất cả các chi tiết bên ngoài dưới dạng cuối cùng của bản ghi

Ngày nhận

Total

Number

22/01/2006

100

22/01/2006

100

22/01/2006

Total cộng

200

Sử dụng truy vấn hợp tác để lọc các bản ghi trên biểu mẫu thông qua tổ hợp điều khiển hộp

Biến sử dụng phổ biến về truy vấn hợp đóng vai trò chơi là nguồn ghi cho hộp điều khiển tổ hợp trên biểu mẫu. Bạn có thể sử dụng tổ hợp hộp đó để chọn một giá trị cần lọc các bản ghi của biểu mẫu. Ví dụ. lọc bản ghi nhân viên theo thành phố

Để xem cách hoạt động, đây là một ví dụ khác mà bạn có thể tạo trong cơ sở dữ liệu mẫu Northwind để minh họa bản kịch bản này

  1. Tạo truy vấn chọn đơn giản bằng cú pháp SQL này

    SELECT "Customer" As Employment, [Last Name], [First Name]
    FROM Customers
    
    UNION
    
    SELECT "Supplier", [Last Name], [First Name]
    FROM Suppliers
    
    UNION
    
    SELECT "In-house", [Last Name], [First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    1
  2. Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy kết quả như sau

    thành phố

    filter

    Seattle

    Seattle

    Bellevue

    Bellevue

    Redmond

    Redmond

    kirkland

    kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Đang xem kết quả mà bạn không thể thấy nhiều giá trị. Bung rộng truy vấn toàn bộ và biến đổi thành truy vấn hợp lý bằng cách sử dụng SQL sau đây

    SELECT "Customer" As Employment, [Last Name], [First Name]
    FROM Customers
    
    UNION
    
    SELECT "Supplier", [Last Name], [First Name]
    FROM Suppliers
    
    UNION
    
    SELECT "In-house", [Last Name], [First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    2
  4. Chuyển đổi sang định dạng xem biểu dữ liệu và bạn sẽ thấy kết quả như sau

    thành phố

    filter

    *

    Bellevue

    Bellevue

    kirkland

    kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access sẽ thực hiện kết hợp chín bản ghi, được hiển thị trước đó, có các giá trị cố định là và "*".

    Vì mệnh đề kết hợp này không bao gồm UNION ALL, nên Access sẽ chỉ trả về các bản ghi riêng biệt có nghĩa là từng thành phố chỉ được trả về một lần với các giá trị cố định giống nhau

  5. Lúc này, bạn có một truy vấn hợp nhất đã hoàn thành hiển thị mỗi tên thành phố chỉ một lần, cùng với một tùy chọn sẽ chọn tất cả các thành phố theo một cách hiệu quả, bạn có thể sử dụng truy vấn này làm nguồn gốc . Sử dụng ví dụ về công cụ này để làm mô hình, bạn có thể tạo tổ hợp hộp điều khiển trên biểu mẫu, đặt truy vấn này làm nguồn ghi, đặt thuộc tính Chiều rộng cột của Bộ lọc thành 0 [số không] để ẩn . Trong thuộc tính Bộ lọc của bản thân biểu mẫu, bạn có thể thêm vào mã giả hạn như mã sau đây để kích hoạt bộ lọc biểu mẫu bằng giá trị của những gì đã được chọn trong tổ hợp hộp điều khiển

    SELECT "Customer" As Employment, [Last Name], [First Name]
    FROM Customers
    
    UNION
    
    SELECT "Supplier", [Last Name], [First Name]
    FROM Suppliers
    
    UNION
    
    SELECT "In-house", [Last Name], [First Name]
    FROM Employees
    
    ORDER BY [Last Name], [First Name];
    3

    Sau đó, người dùng của biểu mẫu có thể lọc các bản ghi biểu mẫu thành tên thành phố cụ thể hoặc chọn để liệt kê tất cả các bản ghi cho tất cả các thành phố

Chủ Đề