Mỗi kết quả từ một hoạt động SQL là một bảng mới, cho dù nó được lưu trữ trên đĩa hay trong bộ nhớ
Chức năng của phép nối là "Nối" hai bảng lại với nhau thành bảng thứ ba tổng hợp (thường) chỉ tồn tại trong bộ nhớ trong suốt thời gian nó xuất ra ứng dụng.
Lý do để sử dụng phép nối là để giảm sự bất thường của dữ liệu , bằng cách đảm bảo rằng dữ liệu xuất hiện ở một và chỉ một nơi trong cơ sở dữ liệu.
Hãy xem xét những điều sau đây:
Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)
Ở đây, bất cứ khi nào chính phủ thay đổi mã zip (điều này xảy ra quá thường xuyên đối với thị hiếu của nhà phát triển cơ sở dữ liệu * thì bảng người sẽ cần được cập nhật sao cho tất cả các mã zip cũ thuộc đúng thành phố và mã zip mới.
Trong trường hợp này, cùng một mã zip nằm trong nhiều bộ dữ liệu của bảng và nếu bảng có thể chỉnh sửa theo cách thủ công, sẽ phải chịu sự bất thường cập nhật nghiêm trọng khi các kết hợp mã thành phố / mã zip mới được nhập mà không có toàn bộ cơ sở dữ liệu được cập nhật.
Thay vào đó, có ba bảng, chúng tôi nhận được cùng một dữ liệu, nhưng với độ linh hoạt và độ tin cậy cao hơn (với chi phí của một số hiệu suất, mặc dù các câu hỏi về "không chuẩn hóa phù hợp" là một chủ đề cho một loạt câu trả lời khác.)
Person ( PersonID Integer Primary Key, FName String, LName String)
City ( CityID Integer Primary Key, City String, State String, ZipCode String )
Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`
Và chúng ta có thể lấy một "bảng" duy nhất ở trên thông qua truy vấn sau:
SELECT Fname, Lname, AddressLine1, City, State, ZipCode
FROM Person
INNER JOIN Address USING (PersonID)
INNER JOIN City USING (CityID)
Điều này cho phép chúng tôi cập nhật các bảng riêng lẻ bất cứ khi nào một cái gì đó cụ thể về chúng thay đổi, mà không làm hỏng phần còn lại của dữ liệu liên quan.
An INNER JOIN
là loại tham gia mặc định. Nói một cách đơn giản, nó lưu ý: "kết hợp các bộ dữ liệu trong đó bản ghi này từ bảng a khớp với bản ghi này từ bảng b" Các loại liên kết khác là OUTER JOINS
và những gì được gọi là a CARTESIAN PRODUCT
. Một kết nối bên ngoài là "Lấy mọi thứ từ bảng bên trái hoặc bên phải (như được chỉ định) và nơi bảng khác khớp với nhau, tham gia vào nó. Nếu không khớp, hãy điền vào đó bằng null" Và một sản phẩm cartesian (không đi vào đại số quan hệ là: Lấy mọi sự kết hợp có thể của các bộ dữ liệu trong cả hai bảng và xuất chúng thành một bảng, mà không khớp với bất cứ thứ gì.
* Hơn bao giờ hết, đặc biệt là trong trường hợp di chuyển các ranh giới của mã zip vì sự vui vẻ