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 : sql cách nối 3 bảng

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ỉ 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à 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 . 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 là một 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 gia. Có phải 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  Phương pháp mảng danh sách sắp xếp trong Python - Tăng dần và giảm dần được giải thích với các ví dụ - sắp xếp mảng trong python

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 đủ điều 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ị 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à bạn sẽ biết ngay 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 cái bàn không phải là một cái bàn 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 khóa học . 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ách sử dụ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ị gần như 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 vào 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 ta 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 bằng các JOIN - chúng tôi đang sử dụng sự bình đẳng trong các điều kiện tham gia của mình. Đâ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 cho từng giáo viên xem 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 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 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ừ lược đồ của chúng ta: 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
  TRÊN 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 đã đúng, 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 THAM GIA 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 đó, bằng cách 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 nếu bạn xem xét giữa các 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 ở JOIN s 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ủ đề sql cách tham gia 3 bàn

Tự học Database và SQL Cơ Bản siêu nhanh trong 10 phút

  • Tác giả: Phạm Huy Hoàng
  • Ngày đăng: 2022-02-15
  • Đánh giá: 4 ⭐ ( 6880 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Như đã hứa với anh em, qua Tết mình lại tiếp tục series Học Full Snack trong vòng 3 tiếng. Hôm nay, tụi mình sẽ cùng học SQL Cơ Bản siêu nhanh trong 15 phút nha.

    Link SQL TryItEditor: https://bit.ly/codedaosql

    Danh sách khoá học của Cybersoft: https://bit.ly/codedao-cyber
    Tư vấn khoá học free Cybersoft: https://fb.com/lophocviet
    Nhớ nói được anh Hoàng giới thiệu hoặc dùng mã cybercodedao để được nhận ưu đãi nhé hihi.

    Timestamps:
    00:00 - Giới thiệu vlog
    00:25 - SQL là gì, tại sao phải học SQL
    01:55 - Relational Database lưu dữ liệu như thế nào?
    02:40 - Dùng SQL TryIt Editor để tập viết SQL query
    03:29 - 1. Lấy dữ liệu với câu lệnh SELECT
    04:02 - 2. Lọc dữ liệu với câu lệnh WHERE
    05:29 - 3. Sắp xếp dữ liệu với ORDER BY
    06:36 - 4. Lấy dữ liệu từ nhiều bảng bằng lệnh JOIN
    08:34 - 5. Gom nhóm dữ liệu bằng GROUP BY
    09:34 - Bonus: Cách dùng subquery
    10:30 - Học xong cơ bản thì học những gì nâng cao?
    12:30 - Kết thúc vlog

    Nhớ subscribe cho mình nhe: https://bit.ly/codedaotube

    Channel Tôi Đi Code Dạo là nơi mình chia sẻ những kiến thức, kinh nghiệm về ngành lập trình mà mình đạt được trong quá trình làm việc. Những kiến thức này sẽ biến các bạn từ một coder trở thành developer - lập trình viên thứ thiệt.
    Nhớ ghé thăm và subscribe channel để xem clip mới vào 8H TỐI T3 hàng tuần nha!

    Ghé thăm mình tại:
    Blog: https://toidicodedao.com/
    Fanpage: https://www.facebook.com/toidicodedao/

    sql_sieu_toc full_snack_3_tieng code_cung_code_dao

Hướng dẫn thêm dữ liệu vào bảng trong SQL Server

  • Tác giả: giasutinhoc.vn
  • Đánh giá: 5 ⭐ ( 6437 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á: 4 ⭐ ( 5596 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 ,…

Các toán tử số học trong SQL

  • Tác giả: shareprogramming.net
  • Đánh giá: 3 ⭐ ( 3525 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chúng ta có thể sử dụng các toán tử số học khác nhau trên dữ liệu được lưu trữ trong các bảng.

Tổng hợp những câu lệnh SQL cơ bản

  • Tác giả: topdev.vn
  • Đánh giá: 4 ⭐ ( 8254 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,.. Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..

Bài tập sql cơ bản

  • Tác giả: nguyenvanhieu.vn
  • Đánh giá: 5 ⭐ ( 3171 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Dưới đây là tất cả các dạng bài tập cơ bản của SQL Sever, mình nghĩ là sau khi làm được hết những câu hỏi này thì các bạn đã nắm được cách ..

PageDocument/Bai_Tap_don_Gian_3.sql at master · khuongsatou/PageDocument

  • Tác giả: github.com
  • Đánh giá: 3 ⭐ ( 5741 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Slide And Template. Contribute to khuongsatou/PageDocument development by creating an account on GitHub.

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

By ads_php