Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

sql tham gia dưới dạng biểu đồ venn

Tôi đồng ý với Cade về những hạn chế của biểu đồ Venn ở đây. Một hình ảnh đại diện tổng hợp hơn có thể là cái này.

Bảng

CHỌN A.Colour, B.Colour TỪ MỘT CROSS JOIN B SQL Fiddle

Phép nối chéo (hoặc tích cacte) tạo ra kết quả với mọi sự kết hợp của các hàng từ hai bảng. Mỗi bảng có 4 hàng nên kết quả là 16 hàng.

CHỌN A.Colour, B.Colour TỪ A INNER THAM GIA B TRÊN A.Colour =B.Colour SQL Fiddle

Phép nối bên trong trả về một cách hợp lý tất cả các hàng từ phép nối chéo khớp với điều kiện nối. Trong trường hợp này, năm làm.

CHỌN A.Colour, B.Colour TỪ A INNER JOIN B ON A.Colour NOT IN ('Green', 'Blue') SQL Fiddle

Điều kiện nối bên trong không nhất thiết phải là điều kiện bình đẳng và nó không cần tham chiếu đến các cột từ cả hai (hoặc thậm chí một trong hai) bảng. Đánh giá A.Colour NOT IN ('Green','Blue') trên mỗi hàng của kết nối chéo trả về.

Điều kiện kết hợp bên trong của 1=1 sẽ đánh giá thành true cho mọi hàng trong phép nối chéo để hai hàng tương đương nhau ( SQL Fiddle ).

CHỌN A.Colour, B.Colour TỪ TRÁI RA NGOÀI THAM GIA B TRÊN A.Colour =B.Colour SQL Fiddle

Các phép nối bên ngoài được đánh giá một cách logic giống như các phép nối bên trong ngoại trừ việc nếu một hàng từ bảng bên trái (đối với phép nối bên trái) không liên kết với bất kỳ hàng nào từ bảng bên phải thì nó sẽ được giữ nguyên trong kết quả với NULL giá trị cho các cột bên phải.

CHỌN A.Colour, B.Colour TỪ TRÁI RA NGOÀI THAM GIA B TRÊN A.Colour =B.Colour WHERE B.Colour IS NULL SQL Fiddle

Điều này chỉ hạn chế kết quả trước đó chỉ trả về các hàng có B.Colour IS NULL . Trong trường hợp cụ thể này, đây sẽ là các hàng được giữ nguyên vì chúng không khớp trong bảng bên phải và truy vấn trả về một hàng màu đỏ duy nhất không khớp trong bảng B . Đây được gọi là tham gia chống bán.

Điều quan trọng là chọn một cột cho IS NULL kiểm tra không thể nullable hoặc điều kiện kết hợp đảm bảo rằng bất kỳ NULL nào các giá trị sẽ bị loại trừ để mẫu này hoạt động chính xác và tránh chỉ đưa trở lại các hàng có NULL giá trị cho cột đó ngoài các hàng chưa khớp.

CHỌN A.Colour, B.Colour TỪ MỘT NGƯỜI NGOÀI PHẢI THAM GIA B TRÊN A.Colour =B.Colour SQL Fiddle

Các phép nối bên ngoài bên phải hoạt động tương tự như các phép nối bên ngoài bên trái ngoại trừ chúng giữ nguyên các hàng không khớp với bảng bên phải và null mở rộng các cột bên trái.

CHỌN A.Colour, B.Colour TỪ TOÀN BỘ NGOÀI RA THAM GIA B TRÊN A.Colour =B.Colour SQL Fiddle

Các phép nối bên ngoài đầy đủ kết hợp hành vi của các phép nối bên trái và bên phải và bảo toàn các hàng không khớp từ cả bảng bên trái và bên phải.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm mức lương cao thứ 2 theo cách tốt nhất có thể

  2. Cách cài đặt MySQL 8 mới nhất trên Debian 10

  3. SQLSTATE [HY000] [1045] Quyền truy cập bị từ chối đối với người dùng 'tên người dùng' @ 'localhost' bằng CakePHP

  4. Tạo bản sao lưu vật lý của Cơ sở dữ liệu MariaDB hoặc MySQL của bạn

  5. Viết hoa chữ cái đầu tiên. MySQL