Hiển thị các cột từ nhiều bảng mysql

Bạn muốn nối các bảng trên nhiều cột bằng cách sử dụng khóa ghép chính trong một bảng và khóa ghép ngoại trong bảng khác

Ví dụ

Cơ sở dữ liệu của chúng tôi có ba bảng tên là student, enrollmentpayment. Bảng student có dữ liệu trong các cột sau. id [khóa chính],

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
0 và
SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
1

idfirst_namelast_name1EllieWillson2TomBrown3SandraMiller

Bảng enrollment có dữ liệu trong các cột sau. khóa chính [

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 và student0], student1 và student2

student_idcourse_codeis_activestart_date1GD03true2020-01-201AP01false2020-03-102SL01true2020-05-053SL01true2020-06-01

Bảng payment có dữ liệu trong các cột sau. khóa ngoại [

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 và student0, khóa chính của bảng enrollment], student7 và student8

student_idcourse_codestatusamount1GD03pay2301AP01pending1002SL01pending803SL01pending110

Hãy hiển thị tên, mã khóa học, trạng thái và số tiền thanh toán của từng sinh viên

Dung dịch

SELECT
  s.last_name, s.first_name,
  p.course_code, p.status, p.amount
FROM enrollment e
JOIN student s
  ON s.id=e.student_id
JOIN payment p
  ON p.course_code=e.course_code
	AND p.student_id=e.student_id;
last_namefirst_namecourse_codestatusamountWillsonEllieGD03đã thanh toán230WillsonEllieAP01đang chờ xử lý100BrownTomSL01đang chờ xử lý80MillerSandraSL01đang chờ xử lý110

Thảo luận

Nếu bạn muốn lấy dữ liệu được lưu trữ trong các bảng được nối bằng một khóa phức hợp, là khóa chính trong một bảng và khóa ngoại trong một bảng khác, chỉ cần sử dụng điều kiện nối trên nhiều cột

Trong một bảng đã tham gia [trong ví dụ của chúng tôi, enrollment], chúng tôi có một khóa chính được tạo từ hai cột [

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 và student0]. Trong bảng thứ hai [payment], chúng tôi có các cột là khóa ghép ngoại [
SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 và student0]. Làm thế nào chúng ta có thể nối các bảng với các phím ghép này?

Dễ dàng. Chúng ta chỉ cần sử dụng mệnh đề enrollment5 với nhiều hơn một điều kiện bằng cách sử dụng toán tử AND sau điều kiện đầu tiên. Trong ví dụ của chúng tôi, chúng tôi sử dụng điều kiện này

enrollment6

Trong phần đầu tiên, chúng tôi sử dụng cột

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 từ bảng enrollment
SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 từ bảng payment. Ở điều kiện tiếp theo, chúng ta lấy cột student0 từ bảng enrollmentstudent0 từ bảng payment

Lưu ý rằng các cột

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
3 và student0 tạo thành khóa chính trong bảng enrollment. Do đó, chúng được sử dụng trong bảng payment làm khóa ngoại

Với SQL, bạn có thể lấy thông tin từ các cột trong nhiều bảng. Thao tác này được gọi là thao tác nối

Trong SQL, một thao tác nối được chỉ định bằng cách đặt tên của các bảng mà bạn muốn nối vào cùng một mệnh đề TỪ của câu lệnh SELECT

Giả sử bạn muốn xem danh sách tất cả các nhà cung cấp và số mặt hàng cũng như tên mặt hàng cho các mặt hàng được cung cấp của họ. Tên mặt hàng không có trong bảng NHÀ CUNG CẤP; . Sử dụng cột chung, ITEM_NUMBER, bạn có thể thấy tất cả các cột như thể chúng đến từ một bảng duy nhất

Bất cứ khi nào cùng một tên cột tồn tại trong hai hoặc nhiều bảng được nối, tên cột phải đủ điều kiện theo tên bảng để chỉ định cột nào đang được tham chiếu. Trong câu lệnh CHỌN này, tên cột ITEM_NUMBER được xác định trong cả hai bảng, do đó, nó cần phải đủ điều kiện theo tên bảng. Nếu các cột có tên khác nhau thì không cần trình độ chuyên môn

Để thực hiện thao tác nối này, hãy nhập câu lệnh SELECT sau bằng cách nhập trực tiếp vào màn hình Nhập câu lệnh SQL hoặc bằng cách nhắc.

SELECT SUPPLIER_NUMBER, SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS, SAMPLECOLL.INVENTORY_LIST
      WHERE SAMPLECOLL.SUPPLIERS.ITEM_NUMBER
                         = SAMPLECOLL.INVENTORY_LIST.ITEM_NUMBER
Nếu bạn sử dụng lời nhắc, bạn cần nhập cả hai tên bảng trên dòng nhập TỪ bảng

Một cách khác để nhập cùng một câu lệnh là sử dụng tên tương quan. Tên tương quan cung cấp tên khác cho tên bảng để sử dụng trong câu lệnh. Tên tương quan phải được sử dụng khi tên bảng giống nhau. Nó có thể được chỉ định bằng cách theo dõi từng tên bảng trong danh sách TỪ. Câu lệnh trước đó có thể được viết lại thành.

SELECT SUPPLIER_NUMBER, Y.ITEM_NUMBER, ITEM_NAME
      FROM SAMPLECOLL.SUPPLIERS X, SAMPLECOLL.INVENTORY_LIST Y
      WHERE X.ITEM_NUMBER = Y.ITEM_NUMBER

Trong ví dụ này, SAMPLECOLL. NHÀ CUNG CẤP được đặt tên tương quan là X và SAMPLECOLL. INVENTORY_LIST được đặt tên tương quan là Y. Sau đó, tên X và Y được sử dụng để xác định tên cột ITEM_NUMBER

Chạy ví dụ này trả về đầu ra sau

                                 Display Data
                                             Data width . . . . . . :      45
Position to line  . . . . .              Shift to column  . . . . . .
....+....1....+....2....+....3....+....4....+
SUPPLIER_NUMBER  ITEM    ITEM
                 NUMBER  NAME
     1234        153047  Pencils, red
     1234        229740  Lined tablets
     1234        303476  Paper clips
     9988        153047  Pencils, red
     9988        559343  Envelopes, legal
     2424        153047  Pencils, red
     2424        303476  Paper clips
     5546        775298  Chairs, secretary
     3366        303476  Paper clips
     3366        073956  Pens, black
********  End of data  ********
 
F3=Exit      F12=Cancel      F19=Left      F20=Right      F21=Split

Ghi chú. Vì không có mệnh đề ORDER BY nào được chỉ định cho truy vấn nên thứ tự của các hàng mà truy vấn của bạn trả về có thể khác.

Các giá trị dữ liệu trong bảng kết quả biểu thị tổng hợp các giá trị dữ liệu có trong hai bảng INVENTORY_LIST và SUPPLIERS. Bảng kết quả này chứa số nhà cung cấp từ bảng NHÀ CUNG CẤP và số mặt hàng và tên mặt hàng từ bảng INVENTORY_LIST. Mã hàng nào không có trong bảng NHÀ CUNG CẤP thì không có trong bảng kết quả này. Các kết quả không được đảm bảo theo bất kỳ thứ tự nào trừ khi mệnh đề ORDER BY được chỉ định cho câu lệnh SELECT. Bởi vì bạn không thay đổi bất kỳ tiêu đề cột nào cho bảng SUPPLIER, tên cột SUPPLIER_NUMBER được sử dụng làm tiêu đề cột

Ví dụ sau đây cho thấy cách sử dụng ORDER BY để đảm bảo thứ tự của các hàng. Câu lệnh đầu tiên sắp xếp bảng kết quả theo cột SUPPLIER_NUMBER. Các hàng có cùng giá trị cho SUPPLIER_NUMBER được sắp xếp theo ITEM_NUMBER của chúng.

SELECT SUPPLIER_NUMBER,Y.ITEM_NUMBER,ITEM_NAME
	FROM SAMPLECOLL.SUPPLIERS X,SAMPLECOLL.INVENTORY_LIST Y
	WHERE X.ITEM_NUMBER = Y.ITEM_NUMBER
	ORDER BY SUPPLIER_NUMBER,Y.ITEM_NUMBER

Làm cách nào để CHỌN cột từ nhiều bảng trong MySQL?

Cú pháp ví dụ để chọn từ nhiều bảng. .
CHỌN p. p_id, p. cus_id, p. p_name, c1. tên1, c2. tên2
TỪ sản phẩm NHƯ p
TRÁI THAM GIA khách hàng1 NHƯ c1
Trên P. cus_id=c1. cus_id
TRÁI THAM GIA khách hàng2 NHƯ c2
Trên P. cus_id = c2. cus_id

Làm cách nào để hiển thị nhiều cột từ các bảng khác nhau trong SQL?

Để chọn nhiều cột từ một bảng, chỉ cần phân tách các tên cột bằng dấu phẩy . Ví dụ: truy vấn này chọn hai cột, tên và ngày sinh, từ bảng người. CHỌN tên, ngày sinh TỪ người; .

Làm cách nào tôi có thể lấy tên cột từ tất cả các bảng trong MySQL?

Làm cách nào để liệt kê tất cả các bảng chứa tên cột cụ thể trong MySQL? . CHỌN DISTINCT TABLE_NAME TỪ INFORMATION_SCHEMA. COLUMNS WHERE COLUMN_NAME IN['column1', 'column2'] AND TABLE_SCHEMA = 'schema_name';

Làm cách nào để lấy các trường từ hai bảng trong SQL?

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.

Chủ Đề