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 trong 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ỉ 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  Chèn dữ liệu vào bảng ví dụ - mã python để chèn dữ liệu vào mysql

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,
  khóa học.name

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, 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õ về 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 trong sql

SQL Three Table Join Examples

  • Tác giả: Brian Finnegan
  • Ngày đăng: 2014-04-18
  • Đánh giá: 4 ⭐ ( 9699 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Worked example of a SQL join involving more than two tables

Lấy Dữ Liệu Từ 3 Bảng Trong Sql Join: Các Loại Join Trong Sql

  • Tác giả: remonster.vn
  • Đánh giá: 3 ⭐ ( 2495 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tìm hiểu và cách sử dụng kết bảng: Kết bằng (EquiJoin), Kết không bằng (Non EquiJoin), Kết với chính mình (Self Join), Kết bằng mệnh đề Join Các loại phép kếtKết bằng (EquiJoin)Kết không bằng (Non EquiJoin)Kết với chính mình (Self Join)Kết bằng mệnh đề JoinPhép kết bằngSử dụng điều kiện kết bằng trong mệnh đề WHERENếu xuất hiện tên cột trùng nhau trong nhiều bảng thì bắt buộc phải sử dụng tên bảng hoặc bí danh bảng trước tên cột, SELECT bang1

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

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

Khóa học SQL cho người mới bắt đầu - Truy vấn dữ liệu với SQL

  • Tác giả: gitiho.com
  • Đánh giá: 4 ⭐ ( 3757 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khóa học Ứng dụng SQL trong xử lý dữ liệu được thiết kế chuyên biệt cho người đi làm đặc biệt dành cho những người xử lý và phân tích dữ liệu lớn (big data) trên SQL server …Nội dung đào tạo mang tính ứng dụng cao, giúp học viên dễ dàng chuyển hóa kiến thức cơ bản nhất để ứng dụng trong hầu hết các tình huống thực tế. Giảng viên giàu kinh nghiệm thực tế trong việc vận dụng SQL trong xử lý dữ liệu lớn tại công ty đa quốc gia.

Tham số OUTPUT của Stored Procedure trong SQL Server

  • Tác giả: vi-magento.com
  • Đánh giá: 4 ⭐ ( 2613 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á: 4 ⭐ ( 1738 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

Mô tả về cách sử dụng tham gia trong Microsoft query

  • Tác giả: support.microsoft.com
  • Đánh giá: 5 ⭐ ( 5596 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Thảo luận về cách sử dụng các kiểu kết hợp khác nhau trong Microsoft query.

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