Học SQL: Nối nhiều bảng – tham gia nhiều bảng trong sql

Nếu bạn muốn nhận được điều gì đó có ý nghĩa từ dữ liệu, bạn hầu như luôn cần phải kết hợp nhiều bảng.

Bạn đang xem : nối nhiều bảng trong sql

Nếu bạn muốn nhận được điều gì đó có ý nghĩa từ dữ liệu, bạn hầu như luôn cần phải kết hợp nhiều bảng. Trong bài viết này, chúng tôi sẽ chỉ ra cách thực hiện điều đó bằng cách sử dụng các loại liên kết khác nhau. Để đạt được điều đó, chúng tôi sẽ kết hợp các THAM GIA BÊN TRONG và
THAM GIA TRÁI. Vì vậy, hãy bắt đầu.

Mô hình

Trong hình bên dưới, bạn có thể thấy mô hình hiện có. Nó bao gồm 6 bảng và chúng tôi đã có, dù ít hay nhiều,
đã mô tả nó trong các bài viết trước.

Tuy nhiên, ngay cả khi không mô tả, nếu cơ sở dữ liệu được mô hình hóa và trình bày theo cách tốt (chọn tên một cách khôn ngoan,
sử dụng quy ước đặt tên, tuân theo các quy tắc giống nhau trong toàn bộ mô hình, các dòng / quan hệ trong lược đồ không trùng lặp nhiều hơn mức cần thiết), bạn sẽ có thể kết luận nơi bạn có thể tìm thấy dữ liệu mình cần. Điều này rất quan trọng vì trước khi nối nhiều bảng, bạn cần xác định các bảng này trước.

Chúng ta sẽ nói về quy ước đặt tên và lời khuyên về cách suy nghĩ khi bạn viết truy vấn SQL, ở phần sau của loạt bài này. Cho đến nay, chúng ta hãy sống với thực tế rằng mô hình này khá đơn giản và chúng ta có thể thực hiện nó khá dễ dàng.

Chúng ta biết gì cho đến nay?

Trong loạt bài này, chúng tôi đã đề cập đến:

Chúng tôi sẽ sử dụng kiến ​​thức từ cả hai bài viết này và kết hợp chúng để viết các câu lệnh SELECT phức tạp hơn sẽ
tham gia nhiều bảng.

Tham gia nhiều bảng bằng INNER JOIN

Ví dụ đầu tiên chúng tôi sẽ phân tích là cách truy xuất dữ liệu từ nhiều bảng chỉ bằng cách sử dụng INNER JOIN. Đối với mỗi ví dụ, chúng tôi sẽ đi với định nghĩa của vấn đề chúng tôi phải giải quyết và truy vấn thực hiện công việc. Vì vậy, hãy bắt đầu với vấn đề đầu tiên.

# 1 Chúng tôi cần liệt kê tất cả các cuộc gọi với thời gian bắt đầu và thời gian kết thúc của chúng. Đối với mỗi cuộc gọi, chúng tôi muốn hiển thị
kết quả cũng như họ và tên của nhân viên đã thực hiện cuộc gọi đó. Chúng tôi sẽ sắp xếp các cuộc gọi của mình theo thời gian bắt đầu
thời gian tăng dần.

Trước khi viết truy vấn, chúng tôi sẽ xác định các bảng mà chúng tôi cần sử dụng. Để làm được điều đó, chúng ta cần xác định bảng nào chứa dữ liệu chúng ta cần và đưa chúng vào. Ngoài ra, chúng ta nên bao gồm tất cả các bảng dọc theo cách giữa các bảng này –
các bảng không chứa dữ liệu cần thiết nhưng đóng vai trò là mối quan hệ giữa các bảng có (trường hợp này không xảy ra).

Truy vấn thực hiện công việc được đưa ra bên dưới:

1

2

3

4

5

CHỌN

nhân viên

.

first_name

,

nhân viên

.

last_name

,

gọi

.

start_time

,

gọi

.

end_time

,

call_outcome

.

results_text

TỪ

< p class = "crayon-i"> nhân viên

INNER

THAM GIA

gọi điện

BẬT

gọi

.

worker_id

=

nhân viên

.

id

INNER

THAM GIA

call_outcome

BẬT

< / p>

gọi

.

call_outcome_id

=

call_outcome

.

id

ĐẶT HÀNG

BY

gọi

.

start_time

ASC

;

Kết quả truy vấn được đưa ra dưới đây:

Có một số điều tôi muốn chỉ ra ở đây:

  • Các bảng chúng tôi đã tham gia ở đây vì dữ liệu chúng tôi cần nằm trong 3 bảng này
  • Mỗi lần tôi đề cập đến bất kỳ thuộc tính nào từ bất kỳ bảng nào, tôi đang sử dụng định dạng table_name.attribute_name (ví dụ:
    staff.first_name ). Mặc dù điều đó là không cần thiết, nhưng đó là một phương pháp hay vì đôi khi 2 hoặc nhiều bảng trong cùng một truy vấn có thể sử dụng các tên thuộc tính giống nhau và điều đó sẽ dẫn đến lỗi
  • Chúng tôi đã sử dụng INNER JOIN 2 lần để tham gia 3 bàn. Điều này sẽ dẫn đến việc chỉ trả về các hàng có các cặp trong một bảng khác
  • Khi bạn chỉ sử dụng INNER JOIN để tham gia nhiều bảng, thứ tự của các bảng này trong các phép nối không quan trọng.
    Điều quan trọng duy nhất là bạn sử dụng các điều kiện tham gia thích hợp sau khi “BẬT” (tham gia bằng khóa ngoại)
Xem Thêm  Cách căn giữa mọi thứ bằng CSS - Căn chỉnh Div, Text, v.v. - cách căn giữa các từ css

Vì tất cả các cuộc gọi đều có nhân viên và kết quả cuộc gọi liên quan, chúng tôi sẽ nhận được cùng một kết quả nếu chúng tôi đã sử dụng LEFT JOIN thay thế
của INNER JOIN.

Tham gia nhiều bảng bằng LEFT JOIN

Viết truy vấn sử dụng THAM GIA TRÁI không khác biệt nhiều so với viết truy vấn bằng THAM GIA TRONG. Tất nhiên, kết quả sẽ khác (ít nhất là trong trường hợp một số bản ghi không có một cặp trong các bảng khác).

Đây là vấn đề chúng tôi muốn giải quyết.

# 2 Liệt kê tất cả các quận và khách hàng có liên quan đến các quốc gia này. Đối với mỗi quốc gia hiển thị tên của quốc gia đó bằng tiếng Anh,
tên của khách hàng ở thành phố cũng như tên của khách hàng đó. Trở lại ngay cả những nước không có
các thành phố và khách hàng liên quan.

Các bảng chứa dữ liệu chúng ta cần có trong hình bên dưới:

Trước tiên, hãy nhanh chóng kiểm tra nội dung của 3 bảng này là gì.

Chúng ta có thể nhận thấy hai điều quan trọng:

  • Mặc dù mỗi thành phố có một quốc gia liên quan, nhưng không phải tất cả các quốc gia đều có các thành phố liên quan
    (Tây Ban Nha & amp; Nga không có chúng)
  • Tương tự là viết tắt cho khách hàng. Mỗi khách hàng có giá trị city_id được xác định,
    nhưng chỉ có 3 thành phố đang được sử dụng (Berlin, Zagreb & amp; New York)

Đầu tiên chúng ta hãy viết ra truy vấn bằng cách sử dụng INNER JOIN:

1

2

3

4

CHỌN

country

.

country_name_eng

,

thành phố

.

city_name

,

customer

.

customer_name

< p class = "crayon-line" id = "urvanov-cú pháp-highlighter-62ce45534d602134955606-2">

TỪ

country

INNER

THAM GIA

thành phố

BẬT

c ity

.

country_id

< p class = "crayon-o"> =

country

.

id

INNER

THAM GIA

khách hàng

BẬT

khách hàng

.

city_id

=

thành phố

.

id

< p class = "crayon-sy">;

Kết quả truy vấn được hiển thị trong hình dưới đây:

Chúng tôi có 7 quận và 6 thành phố trong cơ sở dữ liệu của mình, nhưng truy vấn của chúng tôi chỉ trả về 4 hàng. Đó là kết quả của việc chúng tôi chỉ có 4 khách hàng trong cơ sở dữ liệu của mình. Mỗi 4 điều này đều liên quan đến thành phố của nó và thành phố có liên quan đến quốc gia. Vì vậy, INNER JOIN đã loại bỏ tất cả các quốc gia và thành phố không có khách hàng này. Nhưng làm thế nào để bao gồm cả những thứ này trong kết quả?

Để làm điều đó, chúng tôi sẽ sử dụng LEFT JOIN. Chúng tôi sẽ chỉ thay thế tất cả “INNER” bằng “LEFT”, do đó, truy vấn của chúng tôi như sau:

1

2

3

4

CHỌN

country < / p>

.

country_name_eng

,

thành phố

.

city_name

,

khách hàng

.

customer_name

FROM

country

TRÁI

THAM GIA

thành phố

BẬT

thành phố

.

country_id

=

< p class = "crayon-h">

country

.

id

TRÁI

THAM GIA

khách hàng

BẬT

khách hàng

.

city_id

=

thành phố

.

id

;

Kết quả được hiển thị trong hình dưới đây:

Bạn có thể dễ dàng nhận thấy rằng bây giờ chúng tôi có tất cả các quốc gia, ngay cả những quốc gia không có bất kỳ thành phố nào liên quan (Nga & amp; Tây Ban Nha),
cũng như tất cả các thành phố, ngay cả những thành phố không có khách hàng (Warsaw, Belgrade & amp; Los Angeles). 4 hàng còn lại giống như trong truy vấn sử dụng INNER JOIN.

Xem Thêm  Tổng quan về cột ALTER TABLE trong SQL Server - ms sql server thay đổi bảng thêm cột

THAM GIA TRÁI – Thứ tự các bảng quan trọng

Mặc dù thứ tự của các JOIN trong INNER JOIN không quan trọng, nhưng điều tương tự không áp dụng cho LEFT JOIN. Khi chúng ta sử dụng LEFT
THAM GIA để tham gia nhiều bảng, điều quan trọng cần nhớ là phép nối này sẽ bao gồm tất cả các hàng từ bảng ở phía TRÁI của THAM GIA. Hãy sắp xếp lại truy vấn trước đó:

1

2

3

4

CHỌN

country

.

country_name_eng

,

thành phố

.

city_name

,

customer

.

customer_name

< p class = "crayon-line" id = "urvanov-cú pháp-highlighter-62ce45534d609417501810-2">

TỪ

khách hàng

TRÁI

THAM GIA

thành phố

BẬT

c ustomer

.

city_id

< p class = "crayon-o"> =

thành phố

.

id

TRÁI

THAM GIA

country

BẬT

thành phố

.

country_id

=

country

.

id

< p class = "crayon-sy">;

Lúc đầu, bạn có thể dễ dàng nói rằng truy vấn này và truy vấn trước giống nhau (điều này đúng khi sử dụng INNER
THAM GIA). Chúng tôi đã sử dụng cùng một bảng, LEFT JOIN, và cùng một điều kiện kết hợp. Trước tiên, hãy xem kết quả đầu ra:

Vì vậy, những gì đã xảy ra ở đây? Tại sao chúng ta có 4 hàng (giống 4 hàng mà chúng ta đã có khi sử dụng INNER JOIN)?

Câu trả lời rất đơn giản và nó liên quan đến cách hoạt động của LEFT JOIN. Nó chiếm bảng đầu tiên ( khách hàng )
và nối tất cả các hàng của nó (4 trong số chúng) với bảng tiếp theo ( thành phố ). Kết quả của điều này là 4 hàng vì khách hàng chỉ có thể thuộc về 1 thành phố. Sau đó, chúng tôi nối 4 hàng này với bảng tiếp theo ( quốc gia ),
và một lần nữa chúng ta có 4 hàng vì thành phố có thể chỉ thuộc về 1 quốc gia.

Lý do tại sao chúng tôi không kết hợp 3 bảng này theo cách này được đưa ra bởi văn bản của ví dụ số 2. Truy vấn được viết theo cách như vậy, nó trả về 4 hàng sẽ là câu trả lời cho câu hỏi sau: Trả lại tên của tất cả khách hàng cũng như các thành phố và quốc gia mà họ đang ở. Trả lại ngay cả những khách hàng không có thành phố và quốc gia liên quan.

  • Lưu ý: Khi bạn đang sử dụng LEFT JOIN, thứ tự của các bảng trong câu lệnh đó rất quan trọng và truy vấn sẽ trả về một kết quả khác nếu bạn thay đổi thứ tự này. Thứ tự thực sự phụ thuộc vào kết quả bạn muốn trả lại.

Tham gia nhiều bảng bằng cả hai – INNER JOIN & amp; THAM GIA TRÁI

Điều này cũng có thể. Hãy cùng xem một ví dụ.

# 3 Trả lại danh sách tất cả các quốc gia và thành phố có cặp (loại trừ các quốc gia không được tham chiếu bởi bất kỳ
thành phố). Đối với những cặp như vậy trả lại tất cả các khách hàng. Trả lại các cặp thậm chí không có một khách hàng nào.

Truy vấn thực hiện công việc là:

1

2

3

4

5

CHỌN

country

.

country_name_eng

,

thành phố

.

city_name

,

customer

.

customer_name

< p class = "crayon-line" id = "urvanov-cú pháp-highlighter-62ce45534d60c102342041-2">

TỪ

country

INNER

THAM GIA

thành phố

BẬT

c ity

.

country_id

< p class = "crayon-o"> =

country

.

id

TRÁI

THAM GIA

khách hàng

BẬT

khách hàng

.

city_id

=

thành phố

.

id

< p class = "crayon-sy">;

Kết quả của truy vấn được đưa ra trong hình dưới đây:

Bạn có thể dễ dàng nhận thấy rằng chúng tôi không có các quốc gia không có bất kỳ thành phố nào liên quan (đó là Tây Ban Nha & amp; Nga). Các
INNER JOIN đã loại bỏ những hàng này. Tuy nhiên, chúng tôi vẫn có các trích dẫn mà không có bất kỳ khách hàng nào (Belgrade, Los Angeles & amp;
Warsaw). Đây là kết quả của việc chúng tôi đã sử dụng LEFT JOIN giữa các bảng thành phố
khách hàng .

Kết luận

Khi bạn cần tham gia nhiều bảng , bạn có INNER & amp; LEFT JOIN theo ý của bạn (RIGHT JOIN hiếm khi được sử dụng và có thể dễ dàng thay thế bằng LEFT JOIN). Việc tham gia nào bạn sẽ sử dụng phụ thuộc trực tiếp vào nhiệm vụ bạn cần giải quyết và bạn sẽ có được cảm giác trong suốt quá trình. Trong các bài viết sắp tới, chúng ta sẽ thảo luận về cách suy nghĩ và sắp xếp bản thân khi bạn cần viết các truy vấn phức tạp hơn.

Xem Thêm  Hướng dẫn PHP từng bước cho người mới bắt đầu - Tạo chương trình PHP của bạn TỪ SCRATCH: Xác thực cơ bản, chức năng thành viên và CRUD - hướng dẫn php cho người mới bắt đầu

Mục lục


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

How to Query Multiple Tables with JOINs

  • Tác giả: CBT Nuggets
  • Ngày đăng: 2021-07-22
  • Đánh giá: 4 ⭐ ( 4455 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Start learning cybersecurity with CBT Nuggets. https://courses.cbt.gg/security

    In this video, CBT Nuggets trainer Garth Schulte covers querying multiple tables with the many join operators available in SQL.

    SQL provides you with many different approaches to querying multiple tables. Garth covers inner joins, three kinds of outer joins, cross-joins, and self-joins. After all that, he’ll give a few tips for making your multi-table queries efficient and more useful.

    📁 Download the Ultimate Sysadmin Cert Guide: https://blog.cbt.gg/os93

    ⬇️ 4-Week Study Plan: MD-100 & MD-101: https://blog.cbt.gg/q92d

    Start learning with CBT Nuggets:

    • Microsoft MCSA: SQL 2016 Database Development (70-761 & 70-762) | https://courses.cbt.gg/mze
    • Oracle Database SQL Certified Associate (1Z0-071) | https://courses.cbt.gg/7iq
    • Microsoft MCSA: SQL Server 2012/2014 | https://courses.cbt.gg/d5g

Stored Procedure trong SQL Server

  • Tác giả: comdy.vn
  • Đánh giá: 5 ⭐ ( 5126 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tìm hiểu mọi thứ bạn cần biết về stored procedure trong SQL Server để tạo và lưu trữ các truy vấn phức tạp.

Truy Vấn Nhiều Bảng Với Join Trong Sql Join: Các Loại Join Trong Sql

  • Tác giả: l2r.vn
  • Đánh giá: 4 ⭐ ( 8586 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: JOIN là phép kết nối dữ liệu từ nhiều bảng lại với nhau. Khi bạn cần truy vấn các cột dữ liệu từ nhiều bảng khác nhau để trả về trong cùng một tập kết quả,

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

  • Tác giả: nguyenvanhieu.vn
  • Đánh giá: 4 ⭐ ( 7650 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 ..

Tham gia SQL (Trong Postgres)

  • Tác giả: helpex.vn
  • Đánh giá: 3 ⭐ ( 4694 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Ngôn ngữ truy vấn có cấu trúc yêu quý của chúng ta có thể là ngôn ngữ phổ biến cho cơ sở dữ liệu quan hệ – nhưng giống như nhiều ngôn ngữ, SQL đang ở trong trạng thái phát triển liên tục.…

Liên kết nhiều bảng trong SQL như thế nào?

  • Tác giả: diendan.congdongcviet.com
  • Đánh giá: 4 ⭐ ( 4563 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Em có 4 bảng hanghoa{mahang*, tenhang,donvitinh,giamua,soluong} , chitietdonhang{ madh* mahang, soluong, giaban, thanhtien}, khachhang{ makh*, hodem,ten, diachi, ngaysinh, gioitinh }, donhang { madh*,makh,ngaydh}
    câu hỏi là : xây dựng thủ tục cho phép hiển thị thông tin của 1 đơn hàng nào đó bao gồm mã đơn hàng, họ tên khách hàng, địa chỉ, tên hàng. số lượng , giá bán ?
    anh chị nào giúp em với ạ!!!
    thanks anh chị nhiều!!

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 ⭐ ( 2655 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

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