Hướng dẫn tham gia SQL: Làm việc với cơ sở dữ liệu – cách nối hai truy vấn trong máy chủ sql

Tìm hiểu cách làm chủ các phép nối trong hướng dẫn phép nối SQL. Học cách sử dụng các phép nối bên trong, bên trái, bên phải và bên ngoài trong khi phân tích dữ liệu sổ dữ liệu của CIA.

Bạn đang xem : cách kết hợp hai truy vấn trong máy chủ sql

Cơ sở dữ liệu Factbook

Chúng tôi sẽ sử dụng phiên bản của cơ sở dữ liệu CIA World Factbook (Factbook) có hai bảng. Bảng đầu tiên được gọi là các dữ kiện và mỗi hàng đại diện cho một quốc gia từ Factbook. Đây là 5 hàng đầu tiên của bảng dữ kiện :

Tôi
mã số
Tên
diện tích
area_land
area_water
dân số
tăng trưởng dân số
tỉ lệ sinh
tỷ lệ tử vong
tỷ lệ di chuyển

1
af
Afghanistan
652230
652230

32564342
2,32
38,57
13,89
1.51

2
al
Albania
28748
27398
1350
3029278
0,30
12,92
6,58
3,30

3
ag
Algeria
2381741
2381741

39542166
1,84
23,67
4,31
0,92

4
một
Andorra
468
468

85580
0,12
8.13
6,96
0,00

5
áo dài
Angola
1246700
1246700

19625353
2,78
38,78
11.49
0,46

Ngoài bảng sự kiện là bảng thứ hai được gọi là thành phố chứa thông tin về các khu vực đô thị chính từ các quốc gia trong Factbook (dành cho phần còn lại của hướng dẫn này, chúng tôi sẽ sử dụng từ ‘thành phố’ có nghĩa giống như ‘các khu vực đô thị lớn’). Hãy xem vài hàng đầu tiên của bảng này và mô tả về những gì mỗi cột đại diện:

Tôi
Tên
dân số
thủ đô
sự kiện_id

1
Oranjestad
37000
1
216

2
Saint John’S
27000
1
6

3
Abu Dhabi
942000
1
184

4
Dubai
1978000

184

5
Sharjah
983000

184

  • id – Một ID duy nhất cho mỗi thành phố.
  • name – Tên của thành phố.
  • dân số – Dân số của thành phố.
  • capital – Cho dù thành phố là thủ đô: 1 nếu đúng, 0 nếu không phải là.
  • fact_id – ID của quốc gia, từ bảng fact .

Cột cuối cùng được chúng tôi đặc biệt quan tâm, vì đây là cột dữ liệu cũng tồn tại trong bảng sự kiện ban đầu của chúng tôi. Liên kết giữa các bảng này rất quan trọng vì nó được sử dụng để kết hợp dữ liệu trong các truy vấn của chúng tôi. Dưới đây là giản đồ hiển thị hai bảng trong cơ sở dữ liệu của chúng tôi, các cột bên trong chúng và cách hai bảng được liên kết.

Dòng trong biểu đồ lược đồ hiển thị rõ ràng liên kết giữa cột id trong bảng dữ kiện và cột fact_id trong bảng thành phố.

Nếu bạn muốn tải xuống cơ sở dữ liệu để theo dõi trên máy tính của riêng mình, bạn có thể tải xuống tập dữ liệu dưới dạng cơ sở dữ liệu SQLite .

Tham gia SQL đầu tiên của chúng tôi

Cách phổ biến nhất để kết hợp dữ liệu bằng SQL là sử dụng kết nối bên trong . Cú pháp cho liên kết bên trong là:

CHỌN [column_names] FROM [table_name_one]
INNER THAM GIA [table_name_two] ON [join_constraint];

Mệnh đề liên kết bên trong được tạo thành từ hai phần:

  • INNER JOIN , cho công cụ SQL biết tên của bảng bạn muốn tham gia trong truy vấn của mình và bạn muốn sử dụng một phép nối bên trong.
  • ON , cho công cụ SQL biết những cột nào cần sử dụng để kết hợp hai bảng.

Các phép nối thường được sử dụng trong một truy vấn sau mệnh đề FROM . Hãy xem một phép nối bên trong cơ bản, nơi chúng tôi kết hợp dữ liệu từ cả hai bảng của mình.

CHỌN * TỪ sự kiện
INNER THAM GIA các thành phố TRÊN city.facts_id = fact.id
GIỚI HẠN 5;

Hãy xem xét dòng truy vấn với phép nối trong đó:

  • INNER JOIN city : Điều này cho công cụ SQL biết rằng chúng tôi muốn tham gia bảng thành phố vào truy vấn của chúng tôi bằng cách sử dụng liên kết bên trong.
  • ON city.facts_id = fact.id : Điều này cho công cụ SQL biết cột nào sẽ sử dụng khi kết hợp dữ liệu, theo cú pháp table_name.column_name .

Bạn có thể cho rằng CHỌN * TỪ sự kiện sẽ có nghĩa là truy vấn chỉ trả về các cột từ bảng sự kiện , tuy nhiên ký tự đại diện * khi được sử dụng với một phép nối sẽ cung cấp cho bạn tất cả các cột từ cả hai bảng. Đây là kết quả của truy vấn này:

Tôi
mã số
Tên
diện tích
area_land
area_water
dân số
tăng trưởng dân số
tỉ lệ sinh
tỷ lệ tử vong
tỷ lệ di chuyển
Tôi
Tên
dân số
thủ đô
sự kiện_id

216
aa
Aruba
180
180

112162
1,33
12,56
8.18
8,92
1
Oranjestad
37000
1
216

6
AC
Antigua và Barbuda
442
442

92436
1,24
15,85
5,69
2,21
2
Saint John’S
27000
1
6

184
ae
các Tiểu Vương Quốc Ả Rập Thống Nhất
83600
83600

5779760
2,58
15.43
1,97
12,36
3
Abu Dhabi
942000
1
184

184
ae
các Tiểu Vương Quốc Ả Rập Thống Nhất
83600
83600

5779760
2,58
15.43
1,97
12,36
4
Dubai
1978000

184

184
ae
các Tiểu Vương Quốc Ả Rập Thống Nhất
83600
83600

5779760
2,58
15.43
1,97
12,36
5
Sharjah
983000

184

Truy vấn này cung cấp cho chúng tôi tất cả các cột từ cả hai bảng và mọi hàng trong đó có sự trùng khớp giữa cột id từ dữ kiện fact_id từ thành phố , giới hạn trong 5 hàng đầu tiên.

Hiểu các tham gia bên trong SQL

Bây giờ chúng tôi đã kết hợp hai bảng để cung cấp thêm thông tin về mỗi hàng ở thành phố . Chúng ta hãy xem xét kỹ hơn cách hoạt động của sự tham gia bên trong này.

Một phép nối bên trong hoạt động bằng cách chỉ bao gồm các hàng từ mỗi bảng có khớp như được chỉ định bằng cách sử dụng mệnh đề ON . Hãy xem sơ đồ về cách hoạt động của phép nối từ màn hình trước. Chúng tôi đã đưa vào một bộ sưu tập các hàng minh họa tốt nhất cho phép nối:

Tham gia nội bộ của chúng tôi sẽ bao gồm:

  • Các hàng từ bảng thành phố thành phố.facts_id khớp với fact.id từ dữ kiện .

Tham gia nội bộ của chúng tôi sẽ không bao gồm:

  • Các hàng từ bảng thành phố thành phố.facts_id không khớp với bất kỳ fact.id nào từ dữ kiện < / code>.
  • Các hàng từ bảng fact fact.id không khớp với bất kỳ city.facts_id nào từ thành phố < / code>.

Bạn có thể thấy điều này được biểu diễn dưới dạng biểu đồ Venn:

Chúng tôi đã biết cách sử dụng bí danh để chỉ định tên tùy chỉnh cho các cột, ví dụ:

CHỌN AVG (dân số) AS Average_population

Chúng tôi cũng có thể tạo bí danh cho tên bảng, giúp các truy vấn có phép nối dễ đọc và ghi hơn. Thay vì:

CHỌN * TỪ sự kiện
INNER THAM GIA các thành phố TRÊN city.facts_id = fact.id

Chúng tôi có thể viết:

CHỌN * TỪ sự kiện NHƯ f
INNER THAM GIA các thành phố NHƯ c TRÊN c.facts_id = f.id

Cũng giống như với tên cột, sử dụng AS là tùy chọn. Chúng ta có thể nhận được kết quả tương tự bằng cách viết:

CHỌN * TỪ sự kiện f
INNER THAM GIA các thành phố c TRÊN c.facts_id = f.id

Chúng tôi cũng có thể kết hợp bí danh với ký tự đại diện - ví dụ: sử dụng bí danh được tạo ở trên, c. * sẽ cung cấp cho chúng tôi tất cả các cột từ bảng thành phố .

Mặc dù truy vấn của chúng tôi từ màn hình trước đó bao gồm cả hai cột từ mệnh đề ON , chúng tôi không cần sử dụng một trong hai cột từ mệnh đề ON trong danh sách cuối cùng của chúng tôi cột. Điều này rất hữu ích vì nó có nghĩa là chúng tôi chỉ có thể hiển thị thông tin mà chúng tôi quan tâm, thay vì phải bao gồm hai cột nối mỗi lần.

Hãy sử dụng những gì chúng tôi đã học để xây dựng trên truy vấn ban đầu của chúng tôi. Chúng tôi sẽ:

  • Tham gia thành phố để sự thật bằng cách sử dụng INNER JOIN .

  • Sử dụng bí danh cho tên bảng.

  • Bao gồm, theo thứ tự:

    • Tất cả các cột từ thành phố .
    • Cột name từ dữ kiện được đặt bí danh cho country_name .
  • Chỉ bao gồm 5 hàng đầu tiên.

CHỌN
c. *,
f.name country_name
TỪ sự thật f
INNER THAM GIA các thành phố c BẬT c.facts_id = f.id
GIỚI HẠN 5;

Tôi
Tên
dân số
thủ đô
sự kiện_id
tên quốc gia

1
Oranjestad
37000
1
216
Aruba

2
Saint John'S
27000
1
6
Antigua và Barbuda

3
Abu Dhabi
942000
1
184
các Tiểu Vương Quốc Ả Rập Thống Nhất

4
Dubai
1978000

184
các Tiểu Vương Quốc Ả Rập Thống Nhất

5
Sharjah
983000

184
các Tiểu Vương Quốc Ả Rập Thống Nhất

Thực hành tham gia bên trong SQL

Hãy thực hành viết một truy vấn để trả lời một câu hỏi từ cơ sở dữ liệu của chúng tôi bằng cách sử dụng một phép nối bên trong. Giả sử chúng tôi muốn tạo một bảng các quốc gia và thành phố thủ đô của họ từ cơ sở dữ liệu của chúng tôi bằng cách sử dụng những gì chúng tôi đã học được cho đến nay. Bước đầu tiên của chúng tôi là nghĩ về những cột nào chúng tôi sẽ cần trong truy vấn cuối cùng của chúng tôi. Chúng tôi sẽ cần:

  • Cột name từ sự kiện
  • Cột name từ thành phố

Vì chúng tôi đã xác định rằng chúng tôi cần dữ liệu từ hai bảng, chúng tôi cần suy nghĩ về cách kết hợp chúng. Sơ đồ giản đồ trước đó chỉ ra rằng chỉ có một cột trong mỗi bảng liên kết chúng với nhau, vì vậy chúng tôi có thể sử dụng một liên kết bên trong với các cột đó để kết hợp dữ liệu.

Cho đến nay, khi suy nghĩ về câu hỏi của mình, chúng tôi đã có thể viết hầu hết truy vấn của mình (nó gần giống với truy vấn trước đây mà chúng tôi đã viết):

CHỌN
f.name,
c.name
TỪ các thành phố c
Sự thật về INNER JOIN f ON f.id = c.facts_id;

Phần cuối cùng của quy trình của chúng tôi là đảm bảo rằng chúng tôi có các hàng chính xác. Từ hai màn hình trước, chúng ta biết rằng truy vấn như thế này sẽ trả về tất cả các hàng từ thành phố có kết quả khớp tương ứng từ fact trong cột fact_id . Chúng tôi chỉ quan tâm đến các thành phố thủ đô từ bảng thành phố, vì vậy chúng tôi sẽ cần sử dụng mệnh đề WHERE trên cột capital , có giá trị là 1 nếu thành phố là thủ đô và 0 nếu không phải:

WHERE c.capital = 1

Giờ đây, chúng ta có thể tập hợp tất cả những điều này lại với nhau để viết một truy vấn trả lời câu hỏi của chúng ta. Chúng tôi sẽ giới hạn nó chỉ trong 10 hàng đầu tiên để số lượng đầu ra có thể quản lý được.

CHỌN
f. tên quốc gia,
c. tên capital_city
TỪ các thành phố c
Sự thật về INNER JOIN f ON f.id = c.facts_id
WHERE c.capital = 1
GIỚI HẠN 10;

quốc gia
thủ đô

Aruba
Oranjestad

Antigua và Barbuda
Saint John'S

các Tiểu Vương Quốc Ả Rập Thống Nhất
Abu Dhabi

Afghanistan
Kabul

Algeria
Algiers

Azerbaijan
Baku

Albania
Tirana

Armenia
Yerevan

Andorra
Andorra La Vella

Angola
Luanda

Left Joins trong SQL

Như chúng tôi đã đề cập trước đó, một phép nối bên trong sẽ không bao gồm bất kỳ hàng nào không có sự khớp lẫn nhau từ cả hai bảng. Điều này có nghĩa là có thể có thông tin mà chúng tôi không thấy trong truy vấn của mình khi các hàng không khớp.

Chúng tôi có thể sử dụng các truy vấn SQL để khám phá điều này:

CHỌN ĐẾM (DISTINCT (tên)) TỪ dữ kiện;

đếm

261

CHỌN COUNT (DISTINCT (fact_id)) TỪ các thành phố;

đếm

210

Bằng cách chạy hai truy vấn này, chúng tôi có thể thấy rằng có một số quốc gia trong bảng sự kiện không có các thành phố tương ứng trong bảng thành phố , điều này cho biết chúng tôi có thể có một số dữ liệu không đầy đủ.

Hãy xem cách chúng tôi có thể tạo truy vấn để khám phá dữ liệu bị thiếu bằng cách sử dụng một loại liên kết mới— liên kết bên trái .

Một phép nối bên trái bao gồm tất cả các hàng mà một phép nối bên trong sẽ chọn, cộng với bất kỳ hàng nào từ bảng đầu tiên (hoặc bên trái) không khớp trong bảng thứ hai. Chúng ta có thể thấy điều này được biểu diễn dưới dạng biểu đồ Venn.

Hãy xem một ví dụ bằng cách thay thế INNER JOIN bằng LEFT JOIN từ truy vấn đầu tiên mà chúng tôi đã viết và xem xét cùng lựa chọn các hàng từ sơ đồ trước đó của chúng tôi

CHỌN * TỪ sự kiện
THAM GIA TRÁI các thành phố TRÊN city.facts_id = fact.id

Ở đây, chúng ta có thể thấy rằng đối với các hàng mà fact.id không khớp với bất kỳ giá trị nào trong city.facts_id (237, 238, 240 và 244), các hàng vẫn được bao gồm trong kết quả. Khi điều này xảy ra, tất cả các cột từ bảng thành phố được điền bằng giá trị rỗng.

Chúng tôi có thể sử dụng các giá trị null này để lọc kết quả của mình cho chỉ các quốc gia không tồn tại ở thành phố với mệnh đề WHERE . Khi so sánh với null trong SQL, chúng tôi sử dụng từ khóa IS , thay vì ký hiệu = . Nếu chúng ta muốn chọn các hàng trong đó một cột là rỗng, chúng ta có thể viết:

WHERE column_name LÀ KHÔNG ĐẦY ĐỦ

Nếu chúng tôi muốn chọn các hàng có tên cột không rỗng, chúng tôi sử dụng:

WHERE column_name KHÔNG ĐẦY ĐỦ

Hãy sử dụng phép nối trái để khám phá các quốc gia không tồn tại trong bảng thành phố .

CHỌN
f. tên quốc gia,
f. dân số
TỪ sự thật f
THAM GIA TRÁI các thành phố c BẬT c.facts_id = f.id
Ở đâu c.name LÀ KHÔNG ĐẦY ĐỦ;

quốc gia
dân số

Kosovo
1870981

Monaco
30535

Nauru
9540

San Marino
33020

Singapore
5674472

Tòa thánh (Thành phố Vatican)
842

Đài loan
23415126

Liên minh Châu Âu
513949445

Quần đảo Ashmore và Cartier

Đảo giáng sinh
1530

Quần đảo Cocos (Keeling)
596

Quần đảo biển san hô

Đảo Heard và Quần đảo McDonald

Đảo Norfolk
2210

Hồng Kông
7141106

Ma Cao
592731

Đảo Clipperton

Vùng đất Nam Cực và Nam Cực thuộc Pháp

Saint Barthelemy
7237

Saint martin
31754

rượu cam bì
148406

Sint Maarten
39689

Quần đảo Cook
9838

Niue
1190

Tokelau
1337

Đảo Bouvet

Jan Mayen

Svalbard
1872

Akrotiri
15700

Lãnh thổ Ấn Độ Dương thuộc Anh

Dhekelia
15700

Gibraltar
29258

Guernsey
66080

Jersey
97294

Montserrat
5241

Quần đảo Pitcairn
48

Quần đảo Nam Georgia và Nam Sandwich

Đảo Navassa

Đảo Wake

Hoa Kỳ Island Pacific Island Refuges

Nam Cực

dải Gaza
1869055

Hải đảo

quần đảo Trường Sa

bờ phía tây
2785366

Bắc Băng Dương

Đại Tây Dương

ấn Độ Dương

Thái Bình Dương

Biển phía Nam

Thế giới
7256490011

Xem qua kết quả của truy vấn chúng tôi đã viết trong màn hình trước, chúng tôi có thể thấy một số lý do khác nhau khiến các quốc gia không có các giá trị tương ứng trong thành phố :

  • Các quốc gia có dân số nhỏ và / hoặc không có khu vực đô thị lớn (được xác định là có dân số trên 750.000 người), ví dụ như San Marino, Kosovo và Nauru.
  • Các tiểu bang thành phố, chẳng hạn như Monaco và Singapore.
  • Các lãnh thổ không phải là quốc gia, chẳng hạn như Hồng Kông, Gibraltar và Quần đảo Cook.
  • Khu vực & amp; Các đại dương không phải là quốc gia, chẳng hạn như Liên minh Châu Âu và Thái Bình Dương.
  • Các trường hợp thiếu dữ liệu xác thực, chẳng hạn như Đài Loan.

Điều quan trọng là bất cứ khi nào bạn sử dụng các phép nối bên trong, hãy lưu ý rằng bạn có thể đang loại trừ dữ liệu quan trọng, đặc biệt nếu bạn đang tham gia dựa trên các cột không được liên kết trong lược đồ cơ sở dữ liệu.

Tham gia bên phải và Bên ngoài

Có hai kiểu nối ít phổ biến hơn mà SQLite không hỗ trợ mà bạn nên biết. Đầu tiên là tham gia phù hợp . Một phép nối phải, như tên đã chỉ ra, hoàn toàn ngược lại với một phép nối bên trái. Trong khi phép nối bên trái bao gồm tất cả các hàng trong bảng trước mệnh đề JOIN , phép nối bên phải bao gồm tất cả các hàng trong bảng mới trong mệnh đề JOIN . Chúng ta có thể thấy một liên kết đúng trong biểu đồ Venn bên dưới:

Hai truy vấn sau, một truy vấn sử dụng phép nối bên trái và một truy vấn sử dụng phép nối bên phải, tạo ra các kết quả giống hệt nhau.

CHỌN f.name country, c.name city
TỪ sự thật f
THAM GIA TRÁI các thành phố c BẬT c.facts_id = f.id
GIỚI HẠN 5;

CHỌN f.name country, c.name city
TỪ các thành phố c
Sự kiện THAM GIA PHẢI f ON f.id = c.facts_id
GIỚI HẠN 5;

Lý do chính mà phép nối đúng sẽ được sử dụng là khi bạn tham gia nhiều hơn hai bảng. Trong những trường hợp này, việc sử dụng một phép nối phải được ưu tiên hơn vì nó có thể tránh cơ cấu lại toàn bộ truy vấn của bạn để tham gia vào một bảng. Ngoài ra, các phép nối bên phải hiếm khi được sử dụng một cách hợp lý, vì vậy đối với các phép nối đơn giản, tốt hơn nên sử dụng phép nối bên trái hơn là phép nối bên phải vì nó sẽ dễ dàng hơn cho người khác đọc và hiểu truy vấn của bạn.

Loại kết nối khác không được SQLite hỗ trợ là kết nối bên ngoài đầy đủ . Một phép nối bên ngoài đầy đủ sẽ bao gồm tất cả các hàng từ các bảng ở cả hai phía của phép nối. Chúng ta có thể thấy toàn bộ kết nối bên ngoài trong biểu đồ Venn bên dưới:

Giống như các phép nối bên phải, các phép nối bên ngoài đầy đủ không phổ biến một cách hợp lý. Cú pháp SQL tiêu chuẩn cho một phép nối bên ngoài đầy đủ là:

CHỌN f.name country, c.name city
TỪ các thành phố c
Sự thật về THAM GIA NGOÀI TRỜI ĐẦY ĐỦ f ON f.id = c.facts_id
GIỚI HẠN 5;

Khi kết hợp thành phố sự kiện bằng một phép nối bên ngoài đầy đủ, kết quả sẽ giống như phép nối bên trái và bên phải của chúng tôi ở trên, vì không có giá trị nào trong < mã> thành phố.facts_id không tồn tại trong fact.id .

Hãy cùng nhau xem xét biểu đồ Venn của từng loại liên kết, điều này sẽ giúp bạn so sánh sự khác biệt của từng loại trong số bốn liên kết mà chúng ta đã thảo luận cho đến nay.

Tiếp theo, hãy thực hành sử dụng các phép nối để trả lời một số câu hỏi về dữ liệu của chúng tôi.

Tìm các thành phố thủ đô đông dân nhất

Trước đây, chúng tôi đã sử dụng tên cột khi chỉ định thứ tự cho các kết quả truy vấn của chúng tôi, như vậy:

CHỌN
tên,
igration_rate
TỪ sự kiện
ĐẶT HÀNG BẰNG CHUYÊN NGÀNH di chuyển_ tỷ lệ_độ_cơ;

Có một phím tắt hữu ích mà chúng tôi có thể sử dụng trong các truy vấn của mình, cho phép chúng tôi bỏ qua tên cột và thay vào đó sử dụng thứ tự các cột xuất hiện trong mệnh đề SELECT . Trong trường hợp này, igration_rate là cột thứ hai trong mệnh đề SELECT của chúng tôi, vì vậy chúng tôi chỉ có thể sử dụng 2 thay vì tên cột:

CHỌN
tên,
igration_rate
TỪ sự kiện
ĐẶT HÀNG THEO 2 mô tả;

Bạn có thể sử dụng phím tắt này trong mệnh đề ORDER BY hoặc GROUP BY . Hãy lưu ý rằng bạn muốn đảm bảo các truy vấn của mình vẫn có thể đọc được, vì vậy việc nhập tên cột đầy đủ có thể tốt hơn cho các truy vấn phức tạp hơn.

Hãy sử dụng những gì chúng ta đã học để tạo ra danh sách 10 thành phố thủ đô hàng đầu theo dân số. Vì chúng tôi không quan tâm đến các quốc gia từ sự kiện không có thành phố tương ứng ở thành phố , chúng tôi nên sử dụng INNER JOIN .

CHỌN
c. tên capital_city,
f. tên quốc gia,
c. dân số
TỪ sự thật f
INNER THAM GIA các thành phố c BẬT c.facts_id = f.id
WHERE c.capital = 1
ĐẶT HÀNG BẰNG 3 MÔ TẢ
GIỚI HẠN 10;

thủ đô
quốc gia
dân số

Tokyo
Nhật Bản
37217000

New Delhi
Ấn Độ
22654000

thành phố Mexico
Mexico
20446000

Bắc Kinh
Trung Quốc
15594000

Dhaka
Bangladesh
15391000

Buenos Aires
Argentina
13528000

Manila
Phi-líp-pin
11862000

Matxcova
Nga
11621000

Cairo
Ai cập
11169000

Thủ đô Jakarta
Indonesia
9769000

Kết hợp SQL Joins với Subqueries

Truy vấn con có thể được sử dụng để thay thế các phần của truy vấn, cho phép chúng tôi tìm câu trả lời cho những câu hỏi phức tạp hơn. Chúng ta cũng có thể kết hợp với kết quả của một truy vấn con, giống như chúng ta có thể với một bảng.

Đây là ví dụ về cách sử dụng phép nối và truy vấn con để tạo ra một bảng các quốc gia và thành phố thủ đô của họ, giống như chúng tôi đã làm trước đó trong sứ mệnh.

Lúc đầu, việc đọc các truy vấn con có thể quá tải, vì vậy chúng tôi sẽ chia nhỏ những gì xảy ra trong ví dụ này theo một số bước. Điều quan trọng cần nhớ là kết quả của bất kỳ truy vấn con nào luôn được tính trước, vì vậy chúng tôi đọc từ trong ra ngoài.

  • Truy vấn con, trong hộp màu đỏ, được tính toán đầu tiên. Truy vấn đơn giản này chọn tất cả các cột từ thành phố , lọc các hàng được đánh dấu là thành phố thủ đô bằng cách có giá trị cho capital là 1.

  • INNER JOIN kết hợp kết quả truy vấn con, bí danh là c , với bảng fact dựa trên mã ON mệnh đề.

  • Hai cột được chọn từ kết quả của phép nối:

    • f.name , bí danh là country .
    • c.name , bí danh là capital_city .
  • Kết quả được giới hạn trong 10 hàng đầu tiên.

Dưới đây là kết quả của truy vấn này:

quốc gia
thủ đô

Aruba
Oranjestad

Antigua và Barbuda
Saint John'S

các Tiểu Vương Quốc Ả Rập Thống Nhất
Abu Dhabi

Afghanistan
Kabul

Algeria
Algiers

Azerbaijan
Baku

Albania
Tirana

Armenia
Yerevan

Andorra
Andorra La Vella

Angola
Luanda

Sử dụng ví dụ này làm mô hình, chúng tôi sẽ viết một truy vấn tương tự để tìm các thành phố không phải thủ đô với dân số trên 10 triệu.

CHỌN
c. tên thành phố,
f. tên quốc gia,
c. dân số dân cư
TỪ sự thật f
THAM GIA INNER (
CHỌN * TỪ các thành phố
WHERE vốn = 0
VÀ dân số & gt; 10000000
) c BẬT c.facts_id = f.id
ĐẶT HÀNG BẰNG 3 MÔ TẢ;

thành phố
quốc gia
dân số

New York-Newark
Hoa Kỳ
20352000

Thượng hải
Trung Quốc
20208000

sao Paulo
Brazil
19924000

Mumbai
Ấn Độ
19744000

Marseille-Aix-en-Provence
Nước pháp
14890100

Kolkata
Ấn Độ
14402000

Karachi
Pakistan
13876000

Los Angeles-Long Beach-Santa Ana
Hoa Kỳ
13395000

Osaka-Kobe
Nhật Bản
11494000

Istanbul
Thổ Nhĩ Kỳ
11253000

Lagos
Nigeria
11223000

Quảng châu
Trung Quốc
10849000

Thử thách SQL: Truy vấn phức tạp có kết hợp và truy vấn con

Hãy lấy mọi thứ chúng ta đã học trước đây và sử dụng nó để viết một truy vấn phức tạp hơn. Không có gì lạ khi thấy rằng 'tư duy trong SQL' cần một chút làm quen, vì vậy đừng nản lòng nếu lúc đầu truy vấn này có vẻ khó hiểu. Việc luyện tập sẽ trở nên dễ dàng hơn!

Khi bạn đang viết các truy vấn phức tạp với các phép nối và truy vấn con, bạn nên làm theo quy trình sau:

  • Nghĩ xem bạn cần dữ liệu nào trong kết quả cuối cùng của mình

  • Tìm ra những bảng nào bạn sẽ cần tham gia và liệu bạn có cần tham gia vào một truy vấn con hay không.

    • Nếu bạn cần tham gia vào một truy vấn con, hãy viết truy vấn con trước.
  • Sau đó, bắt đầu viết mệnh đề SELECT của bạn, sau đó là phép nối và bất kỳ mệnh đề nào khác mà bạn cần.

  • Đừng ngại viết truy vấn của bạn theo từng bước, chạy nó khi bạn thực hiện— ví dụ: bạn có thể chạy truy vấn con của mình dưới dạng truy vấn 'độc lập' trước để đảm bảo rằng nó trông giống như bạn muốn trước khi viết truy vấn bên ngoài.

Chúng tôi sẽ viết một truy vấn để tìm các quốc gia nơi dân số trung tâm đô thị (thành phố) chiếm hơn một nửa tổng dân số cả nước. Có nhiều cách để viết truy vấn này nhưng chúng ta sẽ thực hiện qua một cách tiếp cận.

Chúng ta có thể bắt đầu bằng cách viết một truy vấn để tổng hợp tất cả dân số đô thị cho các thành phố ở mỗi quốc gia. Chúng tôi có thể thực hiện việc này mà không cần tham gia bằng cách nhóm trên fact_id (chúng tôi sẽ sử dụng một giới hạn trong ví dụ dưới đây để quản lý đầu ra):

CHỌN
fact_id,
SUM (dân số) urban_pop
TỪ các thành phố
NHÓM THEO 1
GIỚI HẠN 5;

sự kiện_id
Urban_pop

1
3097000

10
172000

100
1127000

101
5000

102
546000

Tiếp theo, chúng ta sẽ kết hợp bảng fact vào truy vấn con đó, chọn tên quốc gia, dân số thành thị và tổng dân số (một lần nữa, chúng tôi đã sử dụng một giới hạn để giữ mọi thứ gọn gàng):

CHỌN
f. tên quốc gia,
c.urban_pop,
f.population total_pop
TỪ sự thật f
THAM GIA INNER (
CHỌN
fact_id,
SUM (dân số) urban_pop
TỪ các thành phố
NHÓM THEO 1
) c BẬT c.facts_id = f.id
GIỚI HẠN 5;

quốc gia
Urban_pop
total_pop

Afghanistan
3097000
32564342

Áo
172000
8665550

Libya
1127000
6411776

Liechtenstein
5000
37624

Lithuania
546000
2884433

Cuối cùng, chúng tôi sẽ tạo một cột mới chia dân số thành thị cho tổng dân số và sử dụng WHERE ORDER BY để lọc / xếp hạng kết quả:

CHỌN
f. tên quốc gia,
c.urban_pop,
f.population total_pop
TỪ sự thật f
THAM GIA INNER (
CHỌN
fact_id,
SUM (dân số) urban_pop
TỪ các thành phố
NHÓM THEO 1
) c BẬT c.facts_id = f.id
GIỚI HẠN 5;

quốc gia
Urban_pop
total_pop
Urban_pct

Uruguay
1672000
3341893
0,500315

Congo, Cộng hòa
2445000
4755097
0,514185

Brunei
241000
429646
0,560927

New Caledonia
157000
271615
0,578024

Quần đảo Virgin
60000
103574
0,579296

Quần đảo Falkland (Islas Malvinas)
2000
3361
0,595061

Djibouti
496000
828324
0,598800

Châu Úc
13789000
22751014
0,606083

Nước Iceland
206000
331918
0,620635

Người israel
5226000
8049314
0,649248

các Tiểu Vương Quốc Ả Rập Thống Nhất
3903000
5779760
0,675288

Puerto Rico
2475000
3598357
0,687814

Bahamas, The
254000
324597
0,782509

Kuwait
2406000
2788534
0,862819

Saint Pierre và Miquelon
5000
5657
0,883861

Guam
169000
161785
1,044596

Quần đảo Bắc Mariana
56000
52344
1.069846

American Samoa
64000
54343
1.177705

Bạn có thể thấy rằng mặc dù truy vấn cuối cùng của chúng tôi phức tạp, nhưng sẽ dễ hiểu hơn nhiều nếu bạn xây dựng nó từng bước.

Hướng dẫn tham gia SQL: Các bước tiếp theo

Trong hướng dẫn tham gia sql này, chúng ta đã học:

  • Sự khác biệt giữa liên kết bên trong và bên trái.
  • Vai trò của phép nối bên phải và bên ngoài
  • Cách chọn cách tham gia phù hợp với nhiệm vụ của bạn.
  • Sử dụng các phép nối với các truy vấn con, các hàm tổng hợp và các kỹ thuật SQL khác.

Các tài nguyên khác mà bạn có thể quan tâm bao gồm bảng gian lận SQL , bài viết của chúng tôi về chứng chỉ SQL , danh sách các câu hỏi phỏng vấn SQL cho các cuộc phỏng vấn xin việc và tất nhiên là tính tương tác của chúng tôi Các khóa học về SQL. Nhấp vào bên dưới để đăng ký và bắt đầu miễn phí!


Xem thêm những thông tin liên quan đến chủ đề cách nối hai truy vấn trong máy chủ sql

Truy vấn nâng cao trong SQL Server

  • Tác giả: Thành ngô
  • Ngày đăng: 2016-06-09
  • Đánh giá: 4 ⭐ ( 4126 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: lập trình trong cơ sở dữ liệu SQL Server, làm việc với Sql Server, Lập trình cơ sở dữ liệu sql server

2 cách cấu hình truy cập từ xa trong SQL Server

  • Tác giả: vdo.vn
  • Đánh giá: 5 ⭐ ( 2473 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cấu hình truy cập từ xa trong SQL Server nhằm mục đích kiểm soát việc thực hiện quá trình lưu trữ từ các máy chủ cục bộ hoặc từ xa mà SQL Server đang chạy.

Sửa các câu lệnh truy vấn sql server, truy vấn dữ liệu trong sql (bài 5)

  • Tác giả: jdomain.vn
  • Đánh giá: 5 ⭐ ( 8407 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nếu truy vấn của bạn hoạt động kém hiệu quả thì việc thêm một số câu lệnh SQL cơ bản có thể giúp các kết quả của bạn đúng trọng tâm hơn, Chúng ta hãy xem một vài loại câu lệnh SQL và các mệnh đề hoặc các phần mà bạn có thể sửa để cho ra kết quả mong muốn

Tăng tốc độ truy vấn trong mysql

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 2058 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1. Các nguyên nhân làm chậm truy vấn

Kết nối Access tới máy chủ SQL

  • Tác giả: support.microsoft.com
  • Đánh giá: 3 ⭐ ( 6334 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trình điều khiển và phiên bản ODBC, nhà cung cấp và phiên bản OLE DB, ADO, DAO, ODBC và từ khóa OLE DB

Linked server SQL 2016 - kết nối 2 database từ 2 server khác nhau cùng làm việc trên một server SQL

  • Tác giả: laptrinhvb.net
  • Đánh giá: 3 ⭐ ( 5470 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Linked Server là cơ chế cho phép kết nối từ một SQL Server tớ

Làm cách nào để truy cập cơ sở dữ liệu SQL Server từ máy tính khác được kết nối với cùng một nhóm làm việc?

  • Tác giả: qastack.vn
  • Đánh giá: 4 ⭐ ( 5315 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Có hai cấp độ bảo mật cần được thay đổi để cho phép truy cập từ…

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

Xem Thêm  thẻ âm thanh html | tự động phát âm thanh html - codewithrandom - cách tự động phát âm thanh trong html