Làm cách nào để trích xuất dữ liệu từ hai bảng?
Mệnh đề 1 được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng, dựa trên cột liên quan giữa chúng Show Hãy xem xét một lựa chọn từ bảng "Đơn hàng" OrderIDCustomerIDOrderDate1030821996-09-1810309371996-09-1910310771996-09-20 Sau đó, hãy xem một lựa chọn từ bảng "Khách hàng" Khách hàngIDKhách hàngTênLiên hệTênQuốc gia1Alfreds FutterkisteMaria AndersĐức2Ana Trujillo Emparedados y heladosAna TrujilloMexico3Antonio Moreno TaqueríaAntonio MorenoMexico Lưu ý rằng cột "CustomerID" trong bảng "Orders" đề cập đến "CustomerID" trong bảng "Customers". Mối quan hệ giữa 2 bảng trên là cột "CustomerID" Sau đó, chúng ta có thể tạo câu lệnh SQL sau (có chứa 2), chọn các bản ghi có giá trị khớp trong cả hai bảngVí dụCHỌN Đơn đặt hàng. OrderID, khách hàng. Tên khách hàng, đơn đặt hàng. OrderDate và nó sẽ tạo ra một cái gì đó như thế này OrderIDCustomerNameOrderDate10308Ana Trujillo Emparedados y helados9/18/199610365Antonio Moreno Taquería11/27/199610383Xung quanh Horn12/16/199610355Xung quanh Horn15/11/199610278Berglunds snabbköp8/12/1996 Các loại THAM GIA SQL khác nhauDưới đây là các loại THAM GIA khác nhau trong SQL
Kiểm tra bản thân với các bài tậpTập thể dụcChèn các phần còn thiếu trong mệnh đề 1 để nối hai bảng 8 và 9, sử dụng trường 10 trong cả hai bảng làm mối quan hệ giữa hai bảng Có một số cách để lấy dữ liệu từ nhiều bảng trong cơ sở dữ liệu. Trong câu trả lời này, tôi sẽ sử dụng cú pháp nối ANSI-92. Điều này có thể khác với một số hướng dẫn khác sử dụng cú pháp ANSI-89 cũ hơn (và nếu bạn đã quen với 89, có vẻ kém trực quan hơn nhiều - nhưng tất cả những gì tôi có thể nói là thử nó) vì nó dễ dàng hơn nhiều . Tại sao lại sử dụng nó? . Việc đọc các truy vấn được viết bởi những người khác bằng cú pháp này sẽ dễ dàng hơn Tôi cũng sẽ sử dụng khái niệm về một bãi đỗ xe nhỏ có cơ sở dữ liệu để theo dõi những chiếc xe nào có sẵn. Chủ sở hữu đã thuê bạn làm nhân viên IT Máy tính của anh ta và hy vọng bạn có thể cung cấp cho anh ta dữ liệu mà anh ta yêu cầu ngay lập tức Tôi đã tạo một số bảng tra cứu sẽ được sử dụng bởi bảng cuối cùng. Điều này sẽ cung cấp cho chúng tôi một mô hình hợp lý để làm việc từ. Để bắt đầu, tôi sẽ chạy các truy vấn của mình đối với cơ sở dữ liệu mẫu có cấu trúc sau. Tôi sẽ cố gắng nghĩ về những sai lầm phổ biến thường mắc phải khi bắt đầu và giải thích điều gì sai với chúng - cũng như tất nhiên là chỉ ra cách sửa chúng Bảng đầu tiên chỉ đơn giản là liệt kê màu sắc để chúng ta biết trong bãi xe mình có những màu gì
Bảng nhãn hiệu xác định các nhãn hiệu khác nhau của những chiếc xe mà caryard có thể bán
Bảng mô hình sẽ bao gồm các loại ô tô khác nhau, việc này sẽ đơn giản hơn nếu sử dụng các loại ô tô khác nhau thay vì mô hình ô tô thực tế
Và cuối cùng, để kết nối tất cả những chiếc bàn khác này, chiếc bàn gắn kết mọi thứ lại với nhau. Trường ID thực sự là số lô duy nhất được sử dụng để xác định ô tô
Điều này sẽ cung cấp cho chúng tôi đủ dữ liệu (tôi hy vọng) để bao gồm các ví dụ bên dưới về các loại liên kết khác nhau và cũng cung cấp đủ dữ liệu để khiến chúng trở nên đáng giá Vì vậy, đi sâu vào vấn đề, ông chủ muốn biết ID của tất cả những chiếc xe thể thao mà ông ấy có Đây là một phép nối hai bảng đơn giản. Chúng tôi có một bảng xác định mô hình và bảng với cổ phiếu có sẵn trong đó. Như bạn có thể thấy, dữ liệu trong cột 6 của bảng 7 liên quan đến cột 8 của bảng 7 mà chúng ta có. Bây giờ, chúng tôi biết rằng bảng mô hình có ID là 0 cho 1, vì vậy hãy viết phép nối 0Vì vậy, truy vấn này có vẻ tốt phải không? 1Ôi không. Một lỗi trong truy vấn đầu tiên của chúng tôi. Vâng, và nó là một quả mận. Bạn thấy đấy, truy vấn thực sự có các cột phù hợp, nhưng một số trong số chúng tồn tại trong cả hai bảng, vì vậy cơ sở dữ liệu bị nhầm lẫn về cột thực sự mà chúng tôi muốn nói và ở đâu. Có hai giải pháp để giải quyết vấn đề này. Cách đầu tiên rất hay và đơn giản, chúng ta có thể sử dụng 2 để nói cho cơ sở dữ liệu biết chính xác ý của chúng ta, như thế này 3Cái khác có lẽ thường được sử dụng hơn và được gọi là bí danh bảng. Các bảng trong ví dụ này có các tên đơn giản và ngắn gọn, nhưng gõ một cái gì đó như 3 có thể sẽ nhanh cũ, vì vậy một cách đơn giản là đặt tên cho bảng như thế này 5Bây giờ, quay lại yêu cầu. Như bạn có thể thấy, chúng tôi có thông tin chúng tôi cần, nhưng chúng tôi cũng có thông tin không được yêu cầu, vì vậy chúng tôi cần đưa mệnh đề where vào câu lệnh để chỉ nhận những chiếc xe Thể thao như được yêu cầu. Vì tôi thích phương pháp bí danh bảng hơn là sử dụng lặp đi lặp lại các tên bảng, nên tôi sẽ sử dụng phương pháp này từ thời điểm này trở đi Rõ ràng, chúng ta cần thêm mệnh đề where vào truy vấn của mình. Chúng tôi có thể xác định Xe thể thao bằng cách sử dụng 4 hoặc 5. Vì ID được lập chỉ mục và khóa chính (và nó ít phải gõ hơn), hãy sử dụng nó trong truy vấn của chúng tôi 8Chơi lô tô. sếp vui. Tất nhiên, là sếp mà chưa bao giờ hài lòng với cái mình yêu cầu, nó xem thông tin rồi bảo mình cũng muốn màu Được rồi, vì vậy chúng tôi đã viết một phần tốt của truy vấn, nhưng chúng tôi cần sử dụng bảng thứ ba là màu sắc. Bây giờ, bảng thông tin chính của chúng tôi 7 lưu trữ ID màu xe và liên kết này trở lại cột ID màu. Vì vậy, theo cách tương tự như ban đầu, chúng ta có thể tham gia một bảng thứ ba 0Chết tiệt, mặc dù bảng đã được nối chính xác và các cột có liên quan đã được liên kết, nhưng chúng tôi đã quên lấy thông tin thực tế từ bảng mới mà chúng tôi vừa liên kết 0Phải, đó là ông chủ ra khỏi lưng của chúng tôi trong giây lát. Bây giờ, để giải thích một số điều này chi tiết hơn một chút. Như bạn có thể thấy, mệnh đề 7 trong câu lệnh của chúng tôi liên kết bảng chính của chúng tôi (tôi thường sử dụng bảng chứa thông tin hơn là bảng tra cứu hoặc bảng thứ nguyên. Truy vấn sẽ hoạt động tốt với tất cả các bảng được chuyển đổi xung quanh, nhưng sẽ không có ý nghĩa gì khi chúng ta quay lại truy vấn này để đọc nó sau một vài tháng nữa, vì vậy, tốt nhất là cố gắng viết một truy vấn hay và đẹp mắt. . Nếu bạn tiếp tục dạy người khác, hãy cố gắng thấm nhuần những đặc điểm này trong các truy vấn của họ - đặc biệt nếu bạn sẽ khắc phục sự cố cho họHoàn toàn có thể tiếp tục liên kết ngày càng nhiều bảng theo cách này 1Mặc dù tôi đã quên bao gồm một bảng mà chúng ta có thể muốn nối nhiều hơn một cột trong câu lệnh 8, đây là một ví dụ. Nếu bảng 8 có các mô hình dành riêng cho thương hiệu và do đó cũng có một cột có tên là 00 được liên kết trở lại bảng 01 trên trường 02, thì có thể thực hiện như sau 2Bạn có thể thấy, truy vấn trên không chỉ liên kết các bảng đã tham gia với bảng chính 7 mà còn chỉ định các liên kết giữa các bảng đã tham gia. Nếu điều này không được thực hiện, kết quả được gọi là phép nối cartesian - nghĩa là dba có nghĩa là xấu. Phép nối cartesian là phép nối trong đó các hàng được trả về vì thông tin không cho cơ sở dữ liệu biết cách giới hạn kết quả, vì vậy truy vấn trả về tất cả các hàng phù hợp với tiêu chíVì vậy, để đưa ra một ví dụ về phép nối cartesian, hãy chạy truy vấn sau 3Chúa ơi, thật là xấu xí. Tuy nhiên, đối với cơ sở dữ liệu có liên quan, đó chính xác là những gì được yêu cầu. Trong truy vấn, chúng tôi đã yêu cầu 02 từ 7 và 6 từ 8. Tuy nhiên, vì chúng tôi không chỉ định cách tham gia các bảng, cơ sở dữ liệu đã khớp mọi hàng từ bảng đầu tiên với mọi hàng từ bảng thứ haiĐược rồi, vậy là ông chủ đã trở lại, và ông ấy lại muốn biết thêm thông tin. Tôi muốn cùng một danh sách, nhưng cũng bao gồm cả 4WD trong đó Tuy nhiên, điều này cho chúng ta một cái cớ tuyệt vời để xem xét hai cách khác nhau để thực hiện điều này. Chúng ta có thể thêm một điều kiện khác vào mệnh đề where như thế này 4Mặc dù những điều trên sẽ hoạt động hoàn toàn tốt, nhưng hãy nhìn nó theo cách khác, đây là một lý do tuyệt vời để chỉ ra cách một truy vấn 08 sẽ hoạt độngChúng tôi biết rằng sau đây sẽ trả lại tất cả các xe Thể thao 1Và sau đây sẽ trả về tất cả 4WD 6Vì vậy, bằng cách thêm mệnh đề 09 vào giữa chúng, kết quả của truy vấn thứ hai sẽ được thêm vào kết quả của truy vấn đầu tiên 7Như bạn có thể thấy, kết quả của truy vấn đầu tiên được trả về trước, tiếp theo là kết quả của truy vấn thứ hai Trong ví dụ này, tất nhiên sẽ dễ dàng hơn nhiều nếu chỉ sử dụng truy vấn đầu tiên, nhưng truy vấn 08 có thể rất tốt cho các trường hợp cụ thể. Chúng là một cách tuyệt vời để trả về các kết quả cụ thể từ các bảng từ các bảng không dễ dàng kết hợp với nhau - hoặc đối với vấn đề đó là các bảng hoàn toàn không liên quan. Có một vài quy tắc để làm theo tuy nhiên
Bây giờ, bạn có thể tự hỏi sự khác biệt giữa việc sử dụng 08 và 09 là gì. Truy vấn 08 sẽ loại bỏ trùng lặp, trong khi truy vấn 09 thì không. Điều này không có nghĩa là có một chút ảnh hưởng về hiệu suất khi sử dụng 08 trên 09 nhưng kết quả có thể đáng giá - mặc dù vậy, tôi sẽ không suy đoán về điều đóVề ghi chú này, có thể đáng chú ý một số ghi chú bổ sung ở đây
Đối với các ví dụ tiếp theo, tôi sẽ thêm một vài hàng bổ sung vào bảng của chúng tôi Tôi đã thêm 32 vào bảng nhãn hiệu. Tôi cũng đã thêm một hàng vào 7 có giá trị 34 là 35 - không có tham chiếu trong bảng màuĐược rồi, ông chủ quay lại lần nữa, sủa yêu cầu - *Tôi muốn đếm từng nhãn hiệu chúng tôi mang và số lượng ô tô trong đó. ` - Thông thường, chúng ta vừa đến một phần thú vị của cuộc thảo luận và ông chủ muốn có thêm công việc Đúng vậy, vì vậy điều đầu tiên chúng ta cần làm là có một danh sách đầy đủ các thương hiệu có thể 8Bây giờ, khi chúng ta nối cái này với bảng ô tô của mình, chúng ta sẽ nhận được kết quả sau 9Tất nhiên đó là một vấn đề - chúng tôi không thấy bất kỳ đề cập nào về thương hiệu 32 đáng yêu mà tôi đã thêmĐiều này là do phép nối tìm kiếm các hàng phù hợp trong cả hai bảng. Vì không có dữ liệu trong ô tô thuộc loại 32 nên nó không được trả lại. Đây là nơi chúng ta có thể sử dụng tham gia 38. Điều này sẽ trả về tất cả các kết quả từ một bảng cho dù chúng có khớp với bảng kia hay không 0Bây giờ chúng ta đã có điều đó, chúng ta có thể thêm một chức năng tổng hợp đáng yêu để đếm số lượng và loại bỏ ông chủ khỏi lưng chúng ta trong giây lát 1Và với điều đó, ông chủ trượt đi Bây giờ, để giải thích điều này một cách chi tiết hơn, các phép nối ngoài có thể thuộc loại 39 hoặc 50. Trái hoặc Phải xác định bảng nào được bao gồm đầy đủ. Một 51 sẽ bao gồm tất cả các hàng từ bảng bên trái, trong khi (bạn đoán nó) một 52 mang tất cả các kết quả từ bảng bên phải vào kết quảMột số cơ sở dữ liệu sẽ cho phép một 53 sẽ mang lại kết quả (dù khớp hay không) từ cả hai bảng, nhưng điều này không được hỗ trợ trong tất cả các cơ sở dữ liệuBây giờ, tôi có thể đoán tại thời điểm này, bạn đang tự hỏi liệu bạn có thể hợp nhất các kiểu nối trong một truy vấn hay không - và câu trả lời là có, bạn hoàn toàn có thể 2Vì vậy, tại sao đó không phải là kết quả được mong đợi? Đây là truy vấn sẽ hoạt động để nhận được kết quả mà chúng tôi mong đợi 3Như chúng ta có thể thấy, chúng ta có hai phép nối ngoài trong truy vấn và kết quả đang đến như mong đợi Bây giờ, còn những kiểu kết nối khác mà bạn yêu cầu thì sao? Chà, không phải tất cả các cơ sở dữ liệu đều hỗ trợ 54 nhưng hầu như tất cả các cơ sở dữ liệu sẽ cho phép bạn tạo một giao lộ thông qua một phép nối (hoặc ít nhất là một câu lệnh where có cấu trúc tốt)Giao lộ là một loại liên kết hơi giống với một 08 như được mô tả ở trên - nhưng điểm khác biệt là nó chỉ trả về các hàng dữ liệu giống hệt nhau (và ý tôi là giống hệt nhau) giữa các truy vấn riêng lẻ khác nhau được liên kết tham gia. Chỉ những hàng giống hệt nhau về mọi mặt mới được trả vềMột ví dụ đơn giản sẽ là như vậy 4Trong khi truy vấn 08 bình thường sẽ trả về tất cả các hàng của bảng (truy vấn đầu tiên trả về bất kỳ thứ gì trên 57 và truy vấn thứ hai trả về bất kỳ thứ gì có 58) sẽ dẫn đến một tập hợp đầy đủ, truy vấn giao nhau sẽ chỉ trả về hàng khớp với 59 khi nó đáp ứng cả hai Bây giờ, nếu cơ sở dữ liệu của bạn không hỗ trợ truy vấn 80, thì có thể dễ dàng thực hiện điều trên bằng truy vấn sau 5Nếu bạn muốn thực hiện phép giao nhau trên hai bảng khác nhau bằng cách sử dụng cơ sở dữ liệu vốn không hỗ trợ truy vấn giao nhau, bạn sẽ cần tạo phép nối trên mọi cột của bảng Làm cách nào để lấy dữ liệu từ hai bảng?Trong SQL, chúng ta cũng có thể truy xuất dữ liệu từ nhiều bảng bằng cách sử dụng CHỌN với nhiều bảng , điều này thực sự dẫn đến THAM GIA CHÉO tất cả các bảng. Bảng kết quả xảy ra từ CROSS JOIN của hai chứa tất cả các tổ hợp hàng của bảng thứ 2 là sản phẩm của Cartesian của các bảng.
Làm cách nào để hiển thị dữ liệu từ 2 bảng trong SQL?Hiển thị dữ liệu từ nhiều bảng
. Nối tự nhiên (còn được gọi là nối đều hoặc nối đơn giản) - Tạo phép nối bằng cách sử dụng một cột thường được đặt tên và xác định
Bạn sẽ chọn khái niệm nào để trích xuất dữ liệu từ hai bảng?Trả lời. b. Equijoin là một trong những kiểu nối, đây là kỹ thuật đơn giản và phổ biến nhất để nối nhiều bảng. Equijoins còn được gọi là phép nối đơn giản hoặc phép nối bên trong. Equijoin liên quan đến khóa chính và khóa ngoại.
Làm cách nào tôi có thể lấy dữ liệu từ hai bảng mà không cần nối?Cách nối các bảng trong SQL mà không cần sử dụng THAM GIA . Sử dụng dấu phẩy giữa các tên bảng trong mệnh đề TỪ và chỉ định điều kiện nối trong mệnh đề WHERE Sử dụng UNION / UNION ALL |