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

Chuyển đổi Đại số quan hệ thành Truy vấn SQL tương ứng

Có một số cách mà bạn có thể xem xét điều này. Tùy chọn đầu tiên có thể dễ dàng hơn nếu bạn quen thuộc hơn với cơ sở dữ liệu sau đó là đại số quan hệ, trong khi tùy chọn thứ hai sẽ dễ dàng hơn (và chính xác hơn đối với các vấn đề phức tạp hơn) nếu bạn đã quen thuộc với đại số quan hệ.

Bàn đầu tiên:

Bắt đầu bằng cách tìm ra sự tham gia của bạn. Bạn biết rằng bạn có ba bộ (bảng) Guest , ReservationRoom , cả ba với đều được nối tự nhiên (liên kết bên trong). Vì vậy, bạn có thể bắt đầu viết truy vấn của mình như sau:

SELECT *
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_
    INNER JOIN Room r
        ON res._roomId_ = r._roomId_;

Sau khi hoàn tất, hãy áp dụng các điều kiện của bạn:

SELECT *
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_
    INNER JOIN Room r
        ON res._roomId_ = r._roomId_
WHERE g.age < 20;

Ngoài ra, bạn có thể đặt điều kiện cho g.age tham gia Reservation , nhưng nên đặt các điều kiện trong WHERE mệnh đề cho INNER JOIN .

Cuối cùng, bạn điền SELECT của mình :

SELECT g._guestId_,
    res._roomId_,
    r.price
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_
    INNER JOIN Room r
        ON res._roomId_ = r._roomId_
WHERE g.age < 20;

Thứ tự hoạt động

Đối với điều này, bạn viết truy vấn của mình bằng cách sử dụng thứ tự các thao tác. Vì vậy, mọi thứ bên trong dấu ngoặc đơn sẽ được thực thi đầu tiên. Làm theo cách này, bạn bắt đầu bằng cách viết truy vấn đối với Guest :

SELECT g._guestId_
FROM Guest g
WHERE g.age < 20;

Tập hợp tiếp theo sẽ là Reservation và điều đó được kết hợp tự nhiên:

SELECT g._guestId_,
    res._roomId_
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_;

Cuối cùng, bạn đến Room thiết lập, một lần nữa được tham gia tự nhiên:

SELECT g._guestId_,
    res._roomId_,
    r.price
FROM Guest g
    INNER JOIN Reservation res
        ON g._guestId_ = res._guestId_
    INNER JOIN Room r
        ON res._roomId_ = r._roomId_
WHERE g.age < 20;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql quá chậm đối với truy vấn đơn giản giữa hai bảng

  2. pip3 cài đặt mysql-python không thành công với mã lỗi 1 trong / tmp / pip-install-4nev4id4 / mysql-python /

  3. Cách tạo DDL cho tất cả các bảng trong cơ sở dữ liệu trong MySQL

  4. Thay đổi hành vi Session.delete () của SQLAlchemy

  5. Kết nối MySQL với Visual Studio C #