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

Khi nào sử dụng phép nối bên trái?

Các phép nối được sử dụng để kết hợp hai bảng có liên quan với nhau.

Trong ví dụ của bạn, bạn có thể kết hợp bảng Nhân viên và bảng Phòng ban, như sau:

SELECT FNAME, LNAME, DNAME
FROM
EMPLOYEE INNER JOIN DEPARTMENT ON EMPLOYEE.DNO=DEPARTMENT.DNUMBER

Điều này sẽ dẫn đến một tập bản ghi như:

FNAME   LNAME   DNAME
-----   -----   -----
John    Smith   Research
John    Doe     Administration

Tôi đã sử dụng INNER JOIN bên trên. INNER JOIN s kết hợp hai bảng để chỉ các bản ghi có kết quả phù hợp trong cả hai bảng được hiển thị và chúng được tham gia trong trường hợp này, trên số phòng ban (trường DNO trong Nhân viên, DNUMBER trong bảng Phòng ban).

LEFT JOIN s cho phép bạn kết hợp hai bảng khi bạn có bản ghi trong bảng đầu tiên nhưng có thể không có bản ghi trong bảng thứ hai. Ví dụ:giả sử bạn muốn có danh sách tất cả nhân viên, cộng với bất kỳ người phụ thuộc nào:

SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_first, DEPENDENT.LNAME as dependent_last
FROM
EMPLOYEE LEFT JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN

Vấn đề ở đây là nếu một nhân viên không có người phụ thuộc, thì bản ghi của họ sẽ không hiển thị - bởi vì không có bản ghi nào phù hợp trong bảng PHỤ THUỘC.

Vì vậy, bạn sử dụng một left phép kết hợp giữ tất cả dữ liệu ở "bên trái" (tức là bảng đầu tiên) và lấy bất kỳ dữ liệu phù hợp nào ở "bên phải" (bảng thứ hai):

SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_first, DEPENDENT.LNAME as dependent_last
FROM
EMPLOYEE LEFT JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN

Bây giờ chúng tôi nhận được tất cả của hồ sơ nhân viên. Nếu không có (các) người phụ thuộc phù hợp cho một nhân viên nhất định, thì dependent_firstdependent_last các trường sẽ trống.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để có một tập lệnh Shell tiếp tục sau khi khởi động lại?

  2. Quầy khách Laravel

  3. mysql quên ai đã đăng nhập:lệnh bị từ chối đối với người dùng '' @ '%'

  4. MySQL có thể được thay thế liền mạch bằng MariaDB hay có những thứ cần thay đổi trong trường hợp này?

  5. Giá trị cột chọn bên ngoài trong truy vấn con đã tham gia?