Cách nối 3 bảng (hoặc nhiều hơn) trong SQL – tham gia 3 bảng sql

Bạn đã bao giờ tự hỏi làm thế nào để nối ba bảng trong SQL? Thật dễ dàng khi bạn biết những điều cơ bản. Tham gia ba bảng có thể dễ dàng như tham gia hai bảng.

Bạn đang xem : nối 3 bảng sql

Sử dụng JOIN trong SQL không có nghĩa là bạn chỉ có thể nối hai bảng. Bạn có thể tham gia 3, 4, hoặc thậm chí nhiều hơn! Khả năng là vô hạn.

Nếu bạn mới học JOIN s trong SQL, bạn có thể nghĩ rằng nó bị giới hạn trong hai bảng. Điều đó không có gì đáng ngạc nhiên – khái niệm này có thể khó hiểu và ý tưởng rằng JOIN có thể phức tạp hơn nữa có thể thực sự đáng sợ lúc đầu. Sự thật là bạn có thể dễ dàng mở rộng ý tưởng này đến ba bảng hoặc thậm chí nhiều hơn. Xem truy vấn bên dưới:

LỰA CHỌN
  student.first_name,
  student.last_name,
  tên khóa học
TỪ sinh viên
THAM GIA student_course
  TRÊN student.id = student_course.student_id
THAM GIA khóa học
  ON course.id = student_course.course_id;

Chúng tôi chỉ cần lặp lại mệnh đề JOIN và kết hợp ba bảng. Chúng ta sẽ tìm hiểu sâu hơn về truy vấn và các bảng trong phần tiếp theo.

Nhưng trước khi tiếp tục, tôi thực sự khuyên bạn nên hiểu đầy đủ về SQL JOIN s. Khái niệm tôi sắp giải thích dựa rất nhiều vào kiến ​​thức cơ bản. Nếu bạn chưa ở cấp độ đó, hãy xem khóa học SQL JOIN tại LearnSQL.com .

Tìm hiểu dữ liệu

Đầu tiên, hãy giới thiệu một vài bảng. Đây là giản đồ:

Trong biểu đồ mối quan hệ thực thể (ERD) ở trên, bạn có thể thấy các bảng, các cột của chúng, các kiểu dữ liệu của cột và các tham chiếu giữa các bảng. Ví dụ: có một tham chiếu giữa bảng student student_course – mỗi học sinh có thể được liên kết với nhiều hàng trong bảng student_course . Để biết thêm thông tin về cách đọc giản đồ, hãy xem bài viết Crow’s Foot Notation trên Blog Vertabelo .

Dữ liệu mẫu của chúng tôi được lưu trữ trong bốn bảng. Ngay bây giờ, chúng tôi sẽ tập trung vào ba bảng đầu tiên:

  • sinh viên – Chứa thông tin về sinh viên:
    • id – ID của sinh viên.
    • first_name – Tên của học sinh.
    • last_name – Họ của học sinh.
  • student_course – Chứa thông tin về những sinh viên sẽ theo học những khóa học nào:
    • student_id – ID của sinh viên.
    • course_id – ID của khóa học.
  • khóa học – Chứa thông tin về các khóa học:
    • id – ID của khóa học.
    • name – Tên của khóa học.
    • teacher_id – ID của giáo viên cho khóa học đó.

Chúng tôi sẽ sử dụng bảng teacher sau trong khóa học trong các truy vấn nâng cao hơn. Tôi sẽ giải thích nó sau đó. Trong khi đó, hãy xem dữ liệu ví dụ từ ba bảng sau:

sinh viên

idfirst_namelast_name

1ShreyaBain

2RiannaFoster

3YosefNaylor

student_course

student_idcourse_id

12

13

21

22

23

31

khóa học

idnameteacher_id

1Thiết kế cơ sở dữ liệu1

Văn học tiếng Anh2

3Python lập trình1

Bảng nối

Điều quan trọng cần lưu ý là bảng student_course bảng nối . Mục đích duy nhất của bảng này là để kết nối các bảng student course với nhau.

Ví dụ: “Shreya Bain” (sinh viên có id = 1 ) được kết nối với “Văn học Anh” (khóa học với id = 2 ) và “Python lập trình ”(khóa học với id = 3 ). Làm sao chúng ta biết được điều này? Hãy xem hai hàng đầu tiên trong bảng student_course . Hàng đầu tiên cho biết sinh viên có ID bằng 1 (cột student_id ) được kết nối với một khóa học có ID bằng 2 (cột course_id ). Từ hàng thứ hai, chúng ta thấy rằng sinh viên có ID bằng 1 được kết nối với khóa học có ID bằng 3. Sau đó, nhìn vào bảng student , chúng ta có thể đọc rằng Shreya Bain có ID bằng 1. Cuối cùng, nhìn vào bảng course , chúng ta có thể đọc rằng tài liệu tiếng Anh và lập trình Python có ID bằng 2 và 3, tương ứng.

Mối quan hệ giữa bảng student course được gọi là nhiều-nhiều mối quan hệ. Một sinh viên có thể tham gia nhiều khóa học (tức là nhiều hàng có cùng student_id có thể nằm trong bảng student_course ) và một khóa học có thể được tham gia bởi nhiều sinh viên (tức là nhiều hàng trong bảng student_course có thể có cùng một course_id ).

Chúng tôi đã thấy việc sử dụng bảng nối. Hãy xem lại mã:

LỰA CHỌN
  student.first_name,
  student.last_name,
  tên khóa học
TỪ sinh viên
THAM GIA student_course
  TRÊN student.id = student_course.student_id
THAM GIA khóa học
  ON course.id = student_course.course_id;

Như bạn có thể thấy, chúng tôi đang sử dụng bảng student trong mệnh đề FROM . Sau đó, chúng tôi sẽ kết hợp nó với bảng student_course và cuối cùng, với bảng course . Bằng cách này, chúng tôi có thể hiển thị họ và tên của từng sinh viên cùng với các khóa học mà họ đang tham dự. Mã vẫn còn khó hiểu? Đừng sợ – chúng tôi sẽ giải thích cặn kẽ trong phần tiếp theo.

Xem Thêm  36 hiệu ứng di chuột CSS hàng đầu nên thử vào năm 2022 - hoạt ảnh di chuột qua hình ảnh css

Kết quả của truy vấn này sẽ giống như sau:

first_namelast_namename

ShreyaBain Văn học tiếng Anh

Lập trình ShreyaBainPython

RiannaFosterDatabase thiết kế

RiannaFosterTài liệu tiếng Anh

Lập trình RiannaFosterPython

YosefNaylorDatabase thiết kế

Nếu bạn muốn viết các truy vấn của riêng mình để kết hợp nhiều bảng, bạn cần hiểu đầy đủ những gì đang xảy ra trong truy vấn này. Hãy chia câu hỏi của chúng ta thành các bước.

Kết hợp 3 bảng bằng cách sử dụng một bảng nối

Bước 1

Bước đầu tiên là xem lược đồ và chọn các cột chúng tôi muốn hiển thị. Vì chúng tôi muốn hiển thị các sinh viên cùng với các khóa học của họ, chúng tôi sẽ cần ba cột: student.first_name , student.last_name course.name .

Điều quan trọng là sử dụng tên bảng khi liệt kê các cột của bạn. Bằng cách đó, bạn sẽ không bị lạc trong các tên cột khác nhau và ngay lập tức bạn sẽ biết cột nào thuộc bảng nào.

Tại thời điểm này, truy vấn của chúng tôi sẽ giống như sau:

LỰA CHỌN
  student.first_name,
  student.last_name,
  tên khóa học

Bước 2

Bước tiếp theo là xác định bảng nào sẽ cần thiết cho truy vấn. Có hai cái rõ ràng: student course . Tuy nhiên, chúng tôi sẽ phải tìm cách tham gia các bảng này. Nhìn vào lược đồ cơ sở dữ liệu, chúng ta thấy rằng student_course là một bảng nối giữa hai thứ này. Vì vậy, chúng tôi cũng sẽ cần bảng đó.

Bước 3

Trong phần cuối cùng, chúng ta sẽ phải nối tất cả các bảng lại với nhau. Nhiệm vụ đầu tiên là chọn bảng sẽ đi trong mệnh đề FROM . Về lý thuyết, nó có thể là bất kỳ bảng nào chúng tôi đang sử dụng. Cá nhân tôi, tôi thích bắt đầu với một bảng không phải là một bảng nối. Trong trường hợp này, hãy chuyển sang bảng student .

LỰA CHỌN
  student.first_name,
  student.last_name,
  tên khóa học
TỪ sinh viên

Hiện tại, chúng tôi chưa thể tham gia bảng course . Không có kết nối trực tiếp giữa hai bảng này. Do đó, chúng ta sẽ phải đi với bảng student_course . Chúng ta chỉ cần kết nối hai bảng này với nhau bằng câu lệnh JOIN… ON… . Mã của chúng tôi thành hình:

LỰA CHỌN
  student.first_name,
  student.last_name,
  tên khóa học
TỪ sinh viên
THAM GIA student_course
  TRÊN student.id = student_course.student_id

Trước khi chuyển sang thêm bảng cuối cùng, chúng ta nên nghĩ về những gì chúng ta đã đạt được. Lưu ý rằng trong khi viết mệnh đề JOIN , chúng tôi không bị giới hạn ở các cột trong mệnh đề SELECT - chúng tôi có quyền truy cập vào tất cả các cột! Vì vậy, sau đó, truy vấn của chúng tôi trông giống như sau:

LỰA CHỌN
  student.first_name,
  student.last_name,
  thẻ học sinh,
  student_course.student_id,
  student_course.course_id
TỪ sinh viên
THAM GIA student_course
  ON student.id = student_course.student_id;

Truy vấn này hiển thị hầu hết tất cả các cột mà chúng ta có thể sử dụng khi viết câu lệnh JOIN tiếp theo. (Tôi đã xóa cột student_course.id , vì chúng tôi không cần nó.) Hãy xem dữ liệu mà chúng tôi đang làm việc:

first_namelast_nameidstudent_idcourse_id

ShreyaBain112

ShreyaBain113

RiannaFoster221

RiannaFoster222

RiannaFoster223

YosefNaylor331

Đây là cách dữ liệu của chúng tôi trông giữa chừng. Thường thì tốt khi nghĩ về dữ liệu tại thời điểm này . Đôi khi, bạn có thể muốn xem xét việc viết một truy vấn như vậy theo thời gian chỉ để phân tích các hàng và cột.

Kết quả ở trên sẽ hiển thị rõ ràng những gì cần làm tiếp theo. Chúng tôi có các sinh viên được kết nối với ID của các khóa học mà họ đang tham gia. Điều duy nhất chúng tôi cần thêm là thông tin khóa học. Chúng tôi biết rằng cột course_id nằm trong bảng student_course . Chúng ta phải nối nó với cột id từ bảng course . Truy vấn kết quả trông giống như sau:

LỰA CHỌN
  student.first_name,
  student.last_name,
  tên khóa học
TỪ sinh viên
THAM GIA student_course
  TRÊN student.id = student_course.student_id
THAM GIA khóa học
  ON course.id = student_course.course_id;

Và chúng tôi đã làm được điều đó! Đó là câu hỏi mà chúng tôi muốn viết. Đừng quên dấu chấm phẩy ở cuối mã của bạn.

Trong ví dụ này, chúng tôi đã phân tích cách viết một truy vấn với JOIN - chúng tôi đang sử dụng bình đẳng trong các điều kiện tham gia của chúng tôi. Đây là loại JOIN phổ biến nhất. Tuy nhiên, bạn cũng có thể sử dụng các JOIN không tương đương. Nếu bạn không biết thuật ngữ này, tôi khuyên bạn nên xem Hướng dẫn minh họa cho SQL Non-Equi Join trên blog LearnSQL.com .

Kết hợp các bảng SQL mà không cần một bảng nối

Khi bạn tham gia nhiều hơn hai bảng, không phải lúc nào bạn cũng có một bảng nối. Nhưng trước khi chúng tôi phân tích một truy vấn mẫu cho kỹ thuật này, hãy kiểm tra bảng cuối cùng trong lược đồ của chúng tôi.

  • giáo viên - Chứa thông tin về giáo viên:
    • id - ID của giáo viên.
    • first_name - Tên của giáo viên.
    • last_name - Họ của giáo viên.

Và đây là bảng teacher trông như thế nào:

idfirst_namelast_name

1TaylahBooker

2Sarah-LouiseBlake

Bây giờ, với dữ liệu, chúng tôi muốn hiển thị từng giáo viên với học sinh của họ. Mỗi cặp giáo viên - học sinh chỉ nên được hiển thị một lần (ví dụ: nếu một giáo viên có nhiều khóa học với một học sinh, thì giáo viên chỉ nên được hiển thị một lần với học sinh trong kết quả).

Truy vấn này khá giống với truy vấn trước. Do đó, chúng tôi sẽ thực hiện theo các bước tương tự như trước đây.

Bước 1

Đầu tiên, chúng tôi chọn các cột: teacher.first_name , teacher.last_name , student.first_name student.last_name . Sau đó, chúng tôi chọn các bảng cần thiết. Lần này, đó sẽ là tất cả các bảng từ giản đồ của chúng tôi: student , student_course , < strong> khóa học giáo viên .

Bước 2

Bây giờ, chúng ta phải tham gia tất cả các bảng. Như tôi đã nói trước đây, chúng ta có thể bắt đầu với bất kỳ bàn nào, nhưng tôi thích bắt đầu từ một trong hai bên. Lần trước, chúng tôi đã đặt bảng student trong mệnh đề FROM . Lần này, chúng tôi sẽ sử dụng bảng teacher . Trước khi viết bất kỳ JOIN nào, truy vấn của chúng ta sẽ giống như bên dưới. (Lưu ý từ khóa DISTINCT ; vì chúng tôi muốn hiển thị các cặp giáo viên - học sinh khác biệt, nên từ khóa này cực kỳ quan trọng.)

CHỌN KHÁC BIỆT
  teacher.first_name,
  giáo viên.last_name.
  student.first_name,
  student.last_name
TỪ giáo viên

Bước 3

Bây giờ, việc tham gia các bảng không khác nhiều so với ví dụ trước. Chúng ta chỉ cần sử dụng mệnh đề JOIN một lần nữa. Tuy nhiên, trước khi làm như vậy, hãy xem dữ liệu sau khi tham gia bảng teacher course :

LỰA CHỌN
  teacher.first_name,
  teacher.last_name,
  giáo viên.id,
  course.teacher_id,
  tên khóa học,
  Mã khóa học
TỪ giáo viên
THAM GIA khóa học
  ON teacher.id = course.teacher_id;

first_namelast_nameidteacher_idnameid

TaylahBooker11Thiết kế cơ sở dữ liệu1

TaylahBooker11Python lập trình3

Sarah-LouiseBlake22Văn học tiếng Anh2

Bạn có thể coi nó như một bảng. Trên thực tế, nó là một phiên bản mở rộng của bảng course .

Việc kết hợp hai bảng bổ sung gần giống với quy trình chúng tôi đã sử dụng trước đó. Bạn chỉ cần thêm hai JOIN giống như trước đây. Bạn chỉ cần lưu ý rằng các JOIN phải được viết theo đúng thứ tự. Trong khi tham gia, bạn không thể sử dụng các cột từ các bảng chưa được giới thiệu.

CHỌN KHÁC BIỆT
  teacher.first_name,
  giáo viên.last_name.
  student.first_name,
  student.last_name
TỪ giáo viên
THAM GIA khóa học
  ON teacher.id = course.teacher_id
THAM GIA student_course
  TRÊN student.id = student_course.student_id
THAM GIA sinh viên
  ON student_course.course_id = course.id;
THAM GIA student_course
  ON course.id = student_course.student_id
THAM GIA sinh viên
  ON student_course.course_id = student.id;

Trong phần bị gạch bỏ, tôi đã sao chép một số mã từ truy vấn đầu tiên mà chúng tôi đã nối ba bảng. Trong trường hợp này, mã đã sai; mặc dù các điều kiện đã chính xác, chúng tôi đang sử dụng các bảng chưa được giới thiệu. Ví dụ: trong khi tham gia bảng student_course , chúng tôi đã sử dụng bảng student , được giới thiệu sau.

Bên dưới mã bị gạch bỏ, bạn có thể thấy đơn đặt hàng JOIN chính xác. Trước tiên, chúng tôi tham gia student_course và các bảng khóa học. Sau đó, sử dụng bảng student_course , chúng ta có thể tham gia vào bảng student . Bằng cách này, chúng tôi giới thiệu từng bảng trước khi sử dụng nó trong một THAM GIA… BẬT điều kiện . Hãy luôn nhớ quy tắc quan trọng này!

Kết quả của truy vấn trên sẽ giống như sau:

first_namelast_namefirst_namelast_name

TaylahBookerShreyaBain

TaylahBookerRiannaFoster

TaylahBookerYosefNaylor

Sarah-LouiseBlakeShreyaBain

Sarah-LouiseBlakeRiannaFoster

Trong trường hợp này, chúng tôi đã sử dụng INNER JOIN . Điều này có nghĩa là nếu giáo viên không có bất kỳ học sinh nào, chúng sẽ không xuất hiện trong kết quả. Tất nhiên, bạn có thể thay thế INNER JOIN bằng bất kỳ loại JOIN nào khác, ví dụ: LEFT OUTER JOIN . Nếu bạn muốn đọc thêm về LEFT JOIN s, hãy xem Cách THAM GIA TRÁI Nhiều bảng trong SQL trên LearnSQL.com .

Kiến thức cơ bản là chìa khóa cho THAM GIA 3 chiều

Như bạn có thể thấy, việc nối ba bảng trong SQL không khó như bạn tưởng. Trên thực tế, bạn có thể tham gia bao nhiêu bảng tùy thích - ý tưởng đằng sau nó cũng giống như chỉ tham gia hai bảng.

Sẽ rất hữu ích khi xem xét giữa dữ liệu và tưởng tượng rằng các bảng bạn đã tham gia là một bảng.

Để thành công với các JOIN phức tạp, điều quan trọng là phải hiểu đầy đủ các JOIN cơ bản. Biết rõ chúng sẽ cho phép bạn viết các câu lệnh JOIN cực kỳ phức tạp. Và hãy nhớ - thực hành làm cho hoàn hảo. Nếu bạn cần thêm lời giải thích hoặc bài tập về JOIN s trong SQL, hãy xem Khóa học SQL JOINs tại LearnSQL.com .


Xem thêm những thông tin liên quan đến chủ đề tham gia 3 bảng sql

[Khóa học sử dụng SQL server] - Bài 30: Function trong SQL| HowKteam

  • Tác giả: K team
  • Ngày đăng: 2017-03-23
  • Đánh giá: 4 ⭐ ( 8889 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Khóa học sử dụng SQL server] - Bài 30: Function trong SQL| HowKteam

    Nếu các bạn thấy hay thì hãy đăng ký theo dõi kênh, like, share cho mọi người cùng tham gia nhé.

    Muốn ủng hộ mình các bạn có thể nhấn vào quảng cáo hiện lên và load xong để mình được ít tiền duy trì nhé.
    Cảm ơn mọi người.

    Học thêm kiến thức hoặc tải tài liệu tại https://www.howkteam.com/
    Luyện tập trắc nghiệm mỗi ngày tại https://kquiz.vn/

    Bài trước:
    [Khóa học sử dụng SQL server] - Bài 29: Store trong SQL| HowKteam
    https://www.youtube.com/watch?v=ZUMc9x5da3Q&list=PL33lvabfss1xnFpWQF6YH11kMTS1HmLsw&index=29

    Bài sau:
    [Khóa học sử dụng SQL server] - Bài 31: Trigger trong SQL| HowKteam
    https://www.youtube.com/watch?v=0N_ZtUXnTj4&list=PL33lvabfss1xnFpWQF6YH11kMTS1HmLsw&index=31

    Tập hợp khóa học lập trình cơ bản đến nâng cao.
    Tham gia group để cập nhật thêm thông tin cũng như tham gia khóa học online miễn phí.

    Group FB: https://goo.gl/8T2krI
    Website: http://www.howkteam.com/

    Danh sách phát: https://goo.gl/0LIji0

    C++:
    Lập trình C++: https://goo.gl/8RCMte
    Bài toán kinh điển C++: https://goo.gl/7CszwZ

    C:
    Lập trình C: https://goo.gl/AhxyAI
    Lập trình C WinForms: https://goo.gl/dPbSm4
    Lập trình ASP.NET MVC: https://goo.gl/riqrzP

    Java:
    Lập trình Java: https://goo.gl/VoDbbs
    Lập trình Android: https://goo.gl/LyV3ZX

    Game:
    Lập trình Unity 3D: https://goo.gl/RcBi6c

    Office:
    Office Word 2016: https://goo.gl/GQUk5E
    Office Excel 2016: https://goo.gl/N3qdKs
    Office Power Point 2016: https://goo.gl/zegyVx

    Products:
    Game Caro C Winforms: https://goo.gl/bMuXEC
    Game Flappy Bird Unity 3D: https://goo.gl/K00l5y
    Game bắn Zombies Unity 3D: https://goo.gl/HUjWlt
    Game Doge Unity 3D: https://goo.gl/0pysFu
    App lập lịch C Winforms: https://goo.gl/xO0iX3
    App từ điển nói C Winforms: https://goo.gl/KgHNNn
    App quản lý quán Cafe C Winforms: https://goo.gl/FLZDDM
    App key logger C Winforms: https://goo.gl/qV93CV

    Stream:
    Kỹ thuật: https://goo.gl/tGtmwq
    Kinh nghiệm: https://goo.gl/VsQjkc

    Âm thanh:
    Two Step From Hell Colors Of Love
    http://fbl.me/TJB
    https://www.facebook.com/Thomas-Bergersen-147900228587129/
    https://www.facebook.com/fourformusic
    http://www.thomasbergersen.com/

NEW cách join 3 bảng trong sql – Bài 3: [Học SQL từ đầu] – Sữ dụng Inner Join, Left Join, Right Join, Full Outer Join, Union

  • Tác giả: leephan.com
  • Đánh giá: 4 ⭐ ( 9548 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Hỏi Về Lấy Dữ Liệu Từ 3 Bảng Trong Sql Server, Sql — Tham Gia Nhiều Bảng Trong Sql

  • Tác giả: ucozfree.com
  • Đánh giá: 5 ⭐ ( 3639 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cách truy vấn nhiều bảng, sử dụng các loại JOIN như LEFT JOIN, RIGHT JOIN, INNER JOIN trong SQL để lấy dữ liệu kết hợp Truy vấn nhiều bảng, Tự khớp nối các bảng Một trong nhưng lợi ích chính của SQL là khả năng kết hợp dữ liệu từ hai hay nhiều bảng lại với nhau, Việc kết hợp các bảng lại như vậy gọi là JOIN, SQL sẽ tạo ra một bảng tạm thời chứa dữ liệu kết quả từ JOIN

Hàm COUNT trong SQL Server

  • Tác giả: quantrimang.com
  • Đánh giá: 3 ⭐ ( 9643 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài viết này sẽ hướng dẫn chi tiết cho bạn cách sử dụng hàm xử lý số COUNT() trong SQL Server với cú pháp và những ví dụ cụ thể để dễ hình dung và nắm bắt hàm tốt hơn.

Câu Lệnh Inner Join 3 Bảng Trong Sql, Chủ Đề: Làm Sao Để Join Nhiều Bảng

  • Tác giả: nguthan.vn
  • Đánh giá: 3 ⭐ ( 8320 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1, Các loại Join trong SQLHôm nay mình chia sẻ thêm về các câu lệnh SQL Join, các loại Join trong SQLJOIN là phép kết nối dữ liệu từ nhiều bảng lại với nhau, nối 2 bảng, 3 bảng

Làm cách nào để THAM GIA 3 bảng này với nhau trong SQL?

  • Tác giả: vncodeblog.com
  • Đánh giá: 5 ⭐ ( 5180 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

SQL bên trong tham gia với 3 bảng?

  • Tác giả: qastack.vn
  • Đánh giá: 5 ⭐ ( 9011 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Bạn có thể làm như sau (tôi đoán trên các trường bảng, v.v.) SELECT s.studentname ,…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình