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 nối ba 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
và 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
và 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
và 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ự. 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.
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
và course.name code >.
Đ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
và 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â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 span> 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
và 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
và 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
và 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. P >
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 tham gia ba bảng
Learn SQL in 1 Hour - SQL Basics for Beginners
- Tác giả: Joey Blue
- Ngày đăng: 2017-09-13
- Đánh giá: 4 ⭐ ( 9533 lượt đánh giá )
- Khớp với kết quả tìm kiếm: A crash course in SQL. How to write SQL from scratch in 1 hour.
In this video I show you how to write SQL using SQL Server and SQL Server Management Studio. We go through Creating a Database, Creating Tables, Inserting, Updating, Deleting, Selecting, Grouping, Summing, Indexing, Joining, and every basic you need to get starting writing SQL.
PREREQUISITES
You will need a database to practice on. The training uses SQL Server Developer Edition, but you can use MySQL, Oracle or any other relational database.Install SQL Server Developer Edition:
https://www.youtube.com/watch?v=05ZivSteGJgYou will also need a tool to write the SQL that you will send to the database. You can use SQL Server Management Studio (SSMS), Oracle Developer, TOAD, PHPMyAdmin, or any other tool you would like. I am using SSMS in this video.
Install SQL Server Management Studio (SSMS)
https://www.youtube.com/watch?v=CqpURYqK_wUTABLE OF CONTENTS
00:00 - Intro
00:48 - Overview
03:27 - Discuss Management Studio
05:10 - Create Database
07:26 - Create Table
10:29 - Insert Data
17:43 - Select Statement
19:00 - Where Clause
22:25 - Update Statement
24:33 - Delete Statement
27:41 - Adding Comments
29:33 - Adding Columns
32:38 - Drop Table
33:17 - Add Primary Key
36:00 - Create Products Table
38:54 - Create Orders Table
45:37 - Foreign Keys
50:30 - Joins
56:50 - Functions/Group ByREAD THE ORIGINAL ARTICLE WITH SQL SCRIPTS HERE
http://www.sqltrainingonline.com/learn-basic-sql-course/YOUTUBE NEWS UPDATES
http://www.youtube.com/user/sqltrainingonlineVISIT SQLTRAININGONLINE.COM FOR TONS MORE VIDEO NEWS & TIPS
http://www.sqltrainingonline.comSUBSCRIBE FOR OTHER SQL TIPS AND NEWS!
http://www.youtube.com/subscription_center?add_user=sqltrainingonlineSUBSCRIBE TO OUR EMAIL LIST!
http://www.sqltrainingonline.comLET'S CONNECT!
Facebook: http://facebook.com/SQLTrainingOnline
Twitter: http://twitter.com/sql_by_joey
Linkedin: http://linkedin.com/in/joeyblue
SQLTrainingOnline: http://www.sqltrainingonline.com
INSERT INTO câu lệnh chèn dữ liệu vào bảng trong SQL
- Tác giả: sangtaotrongtamtay.vn
- Đánh giá: 4 ⭐ ( 2804 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Câu lệnh INSERT INTO được sử dụng để chèn những bản ghi mới vào một bảng .
Mô phỏng bảng trong SQL
- Tác giả: vietjack.com
- Đánh giá: 4 ⭐ ( 4436 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Mô phỏng bảng trong SQL - Học SQL cơ bản nâng cao. Học SQL trực tuyến theo các bước từ Khái niệm về database, Cú pháp SQL, Truy vấn SELECT, Truy vấn INSERT, Lệnh DELETE, Truy vấn UPDATE, Ràng buộc (Constraint), Truy vấn DROP, Lệnh TRUNCATE, Từ khóa DISTINCT, Mệnh đề ORDER BY, Mệnh đề GROUP BY, Mệnh đề WHERE, Sử dụng Join, Sử dụng View, Sử dụng Sequence, Transaction, Hàm xử lý, Bảng tạm, Toán tử.
SQL bên trong tham gia với 3 bảng?
- Tác giả: qastack.vn
- Đánh giá: 5 ⭐ ( 6404 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 ,…
sql tham gia ba bảng bằng cách sử dụng liên kết bên trong
- Tác giả: vie.northmyrtlebeachwomansclub.com
- Đánh giá: 4 ⭐ ( 9845 lượt đánh giá )
- Khớp với kết quả tìm kiếm: trong cơ sở dữ liệu của tôi, tôi có 3 bảng có tên là các mục, nhà sản xuất và mục_sản xuất. nhà sản xuất có mối quan hệ CÓ: NHIỀU với các mặt hàng_ nhà sản xuất Bảng mặt hàng của tôi + --------------- + -------------- + -...
Hướng Dẫn Thêm Dữ Liệu Vào Bảng Trong Sql Server, Insert Into Chèn Dữ Liệu Vào Bảng Sql
- Tác giả: jdomain.vn
- Đánh giá: 3 ⭐ ( 6912 lượt đánh giá )
- Khớp với kết quả tìm kiếm: SQL không chỉ cung cấp các câu lệnh để thực thi những thao tác truy xuất dữ liệu mà bạn còn có thể chỉnh sửa cơ sở dữ liệu, Trong phạm vi bài viết này, BAC sẽ hướng dẫn các bạn cách thêm một bản ghi vào cơ sở dữ liệu với câu lệnh INSERT INTO
INSERT trong SQL Server
- Tác giả: comdy.vn
- Đánh giá: 4 ⭐ ( 7416 lượt đánh giá )
- Khớp với kết quả tìm kiếm: Tìm hiểu cách sử dụng câu lệnh INSERT trong SQL Server để thêm một hoặc nhiều bản ghi mới vào bảng.
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