Hướng dẫn can we use where clause in joins in mysql? - chúng ta có thể sử dụng mệnh đề where trong phép nối trong mysql không?

Bạn cần đặt nó vào mệnh đề join, không phải where:

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON 
    user_category_subscriptions.category_id = categories.category_id
    and user_category_subscriptions.user_id =1

Xem, với một inner join, đặt một mệnh đề trong join hoặc where là tương đương. Tuy nhiên, với outer join, chúng rất khác nhau.

Như một điều kiện join, bạn chỉ định các hàng mà bạn sẽ tham gia vào bảng. Điều này có nghĩa là nó đánh giá

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
1 trước và lấy tập hợp con
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
2 với
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
3 của
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
4 để tham gia vào tất cả các hàng trong
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
5. Điều này sẽ cung cấp cho bạn tất cả các hàng trong
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
5, trong khi chỉ
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
5 mà người dùng cụ thể này đã đăng ký sẽ có bất kỳ thông tin nào trong các cột
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
2. Tất nhiên, tất cả các
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
5 khác sẽ được điền với
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
0 trong các cột
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
2.

Ngược lại, mệnh đề where thực hiện tham gia, và sau đó giảm các hàng. Vì vậy, điều này thực hiện tất cả các lần nối và sau đó loại bỏ tất cả các hàng trong đó

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
3 không bằng
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1
4. Bạn còn lại một cách không hiệu quả để có được inner join.

Hy vọng rằng điều này sẽ giúp!

Bắt đầu từ đây? Bài học này là một phần của hướng dẫn đầy đủ trong việc sử dụng SQL để phân tích dữ liệu. Kiểm tra sự khởi đầu. This lesson is part of a full-length tutorial in using SQL for Data Analysis. Check out the beginning.

Trong bài học này, chúng tôi sẽ bao gồm:

  • Lọc trong mệnh đề trên
  • Lọc trong mệnh đề WHERE
  • Thực hành vấn đề

Lọc trong mệnh đề trên

Lọc trong mệnh đề WHERE

Thực hành vấn đề

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 ORDER BY 1

Thông thường, lọc được xử lý trong mệnh đề

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6 một khi hai bảng đã được tham gia. Có thể, mặc dù bạn có thể muốn lọc một hoặc cả hai bảng trước khi tham gia chúng. Ví dụ: bạn chỉ muốn tạo các trận đấu giữa các bảng trong một số trường hợp nhất định.except for the row for which
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1
0 is
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1
1:

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1

Sử dụng dữ liệu Crunchbase, chúng ta hãy xem xét ví dụ

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
7 từ một bài học trước đó [lần này chúng ta sẽ thêm một điều khoản
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
8]:

Lọc trong mệnh đề WHERE

Thực hành vấn đề

Thông thường, lọc được xử lý trong mệnh đề
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6 một khi hai bảng đã được tham gia. Có thể, mặc dù bạn có thể muốn lọc một hoặc cả hai bảng trước khi tham gia chúng. Ví dụ: bạn chỉ muốn tạo các trận đấu giữa các bảng trong một số trường hợp nhất định.

Sử dụng dữ liệu Crunchbase, chúng ta hãy xem xét ví dụ

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
7 từ một bài học trước đó [lần này chúng ta sẽ thêm một điều khoản
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
8]:

So sánh truy vấn sau với bảng trước và bạn sẽ thấy rằng mọi thứ trong bảng
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
9 đã được tham gia ngoại trừ hàng mà
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1
0 là
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1
1:

Điều xảy ra ở trên là tuyên bố có điều kiện

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1
2 được đánh giá trước khi tham gia. Bạn có thể nghĩ về nó như một điều khoản
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6 chỉ áp dụng cho một trong các bảng. Bạn có thể nói rằng điều này chỉ xảy ra trong một trong các bảng vì Permalink 1000Mories vẫn được hiển thị trong cột kéo từ bảng khác:

Nếu bạn di chuyển cùng một bộ lọc đến mệnh đề

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6, bạn sẽ nhận thấy rằng bộ lọc xảy ra sau khi các bảng được nối. Kết quả là hàng 1000memories được nối với bảng gốc, nhưng sau đó nó được lọc hoàn toàn [trong cả hai bảng] trong mệnh đề
SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6 trước khi hiển thị kết quả.

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1

Bạn có thể thấy rằng dòng 1000memories không được trả về [nó sẽ nằm giữa hai dòng được tô sáng bên dưới]. Cũng lưu ý rằng việc lọc trong mệnh đề

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6 cũng có thể lọc các giá trị null, vì vậy chúng tôi đã thêm một dòng bổ sung để đảm bảo bao gồm các null.

Làm sắc nét các kỹ năng SQL của bạn

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
 WHERE acquisitions.company_permalink != '/company/1000memories'
    OR acquisitions.company_permalink IS NULL
 ORDER BY 1

Bạn có thể thấy rằng dòng 1000memories không được trả về [nó sẽ nằm giữa hai dòng được tô sáng bên dưới]. Cũng lưu ý rằng việc lọc trong mệnh đề

SELECT companies.permalink AS companies_permalink,
       companies.name AS companies_name,
       acquisitions.company_permalink AS acquisitions_permalink,
       acquisitions.acquired_at AS acquired_date
  FROM tutorial.crunchbase_companies companies
  LEFT JOIN tutorial.crunchbase_acquisitions acquisitions
    ON companies.permalink = acquisitions.company_permalink
   AND acquisitions.company_permalink != '/company/1000memories'
 ORDER BY 1
6 cũng có thể lọc các giá trị null, vì vậy chúng tôi đã thêm một dòng bổ sung để đảm bảo bao gồm các null.

Làm sắc nét các kỹ năng SQL của bạn

Chúng ta có thể sử dụng mệnh đề ở đâu trong tham gia không?

Để sử dụng mệnh đề WHERE để thực hiện cùng một lần tham gia khi bạn thực hiện bằng cú pháp nối bên trong, hãy nhập cả điều kiện nối và điều kiện lựa chọn bổ sung trong mệnh đề WHERE. Các bảng được tham gia được liệt kê trong mệnh đề từ, cách nhau bởi dấu phẩy. Truy vấn này trả về đầu ra giống như ví dụ trước.. The tables to be joined are listed in the FROM clause, separated by commas. This query returns the same output as the previous example.

Chúng ta có thể sử dụng mệnh đề ở đâu thay vì tham gia bên trong không?

Nếu bạn muốn sử dụng một tham gia khác ngoài một tham gia bên trong nói rằng nó rõ ràng làm rõ những gì đang xảy ra.Tham gia vào mệnh đề nơi có thể bị nhầm lẫn vì đây không phải là mục đích điển hình.Nó thường được sử dụng để lọc dữ liệu.JOINing in the WHERE clause can be confusion since this is not it's typical purpose. It is most often used to filter the data.

Tôi có thể sử dụng mệnh đề ở đâu trong tham gia bên ngoài không?

Giới thiệu.Mặc dù một mệnh đề ON là bắt buộc cho mỗi thao tác trong một tham gia bên ngoài trong mệnh đề từ mệnh đề, một tham gia bên ngoài cũng có thể bao gồm một mệnh đề WHERE.Bất kỳ hạn chế nào trong mệnh đề nơi chỉ được áp dụng cho bảng là kết quả cuối cùng của tham gia bên ngoài.an outer join can itself also include a WHERE clause. Any restriction in the WHERE clause is applied only to the table that is the final result of the outer join.

Chúng ta có thể sử dụng mệnh đề ở đâu với tham gia tự nhiên không?

Ví dụ này sử dụng cú pháp tham gia tự nhiên để hợp nhất các cột được chỉ định từ khách hàng và bảng bán hàng.Bộ kết quả được lọc với một mệnh đề WHERE.The result set is filtered with a WHERE clause.

Bài Viết Liên Quan

Chủ Đề