SQL kiểm tra nhiều cột cho nhiều giá trị

Bên dưới Hàm SQL phân tích cú pháp [Theo cách không được tối ưu hóa] một chuỗi cho một số và nếu nó tìm thấy, nó sẽ trả về nó dưới dạng một số nguyên

CREATE FUNCTION dbo.fn_GetNumbers[@strInput NVARCHAR[500]]
RETURNS INT
AS
BEGIN
DECLARE @strOut NVARCHAR[500] = '', @intCounter INT = 1, @OutValue INT
WHILE @intCounter  0]
	SELECT @OutValue = cast[@strOut as int]
else
	SELECT @OutValue = null

RETURN @OutValue
END

Khi bạn có chức năng đó, bạn có thể sử dụng nó trong SQL bên dưới để nhận được kết quả mong muốn.
SELECT GoodDescription, dbo.fn_GetNumbers[GoodDescription]
FROM 
[
SELECT '3 Bleaching'  as GoodDescription
UNION ALL
SELECT 'hair lotions'
UNION ALL
SELECT 'dentifrices'
UNION ALL
SELECT '9 Glasses'
UNION ALL
SELECT 'eyeglass lens'
UNION ALL
SELECT '14 Precious metals and their alloys'
UNION ALL
SELECT '18 Leather and imitations of leather'
] T
WHERE dbo.fn_GetNumbers[GoodDescription] IN [3, 18]

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

Thí 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], first_namelast_name

idfirst_namelast_name1EllieWillson2TomBrown3SandraMiller

Bảng enrollment có dữ liệu trong các cột sau. khóa chính [student_idstudent0], 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 [student_idstudent0, khóa chính của bảng enrollment], student7 và student8

student_idcourse_codestatusamount1GD03paid2301AP01pending1002SL01pending803SL01pending110

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

Giải pháp

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_codestatusamountWillsonEllieGD03paid230WillsonEllieAP01pending100BrownTomSL01pending80MillerSandraSL01pending110

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ởi 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 đã nối [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 [student_idstudent0]. Trong bảng thứ hai [payment], chúng tôi có các cột là khóa ghép ngoại [student_idstudent0]. 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 student_id từ bảng enrollmentstudent_id từ bảng payment. Trong đ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 ________ 23 _______ và student0 từ 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

Trong SQL, nhiều trường cũng có thể được thêm vào với mệnh đề DISTINCT. DISTINCT sẽ loại bỏ những hàng có tất cả các trường đã chọn giống hệt nhau

nội dung

Thí dụ. Câu lệnh CHỌN mẫu

Đây là một truy vấn đơn giản trên một số cột đã chọn trong bảng đơn đặt hàng trong đó agent_code='A002'

Mã SQL

SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders 
WHERE agent_code='A002';

Biểu thức đại số quan hệ


Cây đại số quan hệ


bảng mẫu. mệnh lệnh


đầu ra

AGENT_CODE ORD_AMOUNT CUST_CODE     ORD_NUM
---------- ---------- ---------- ----------
A002             2500 C00005         200106
A002              500 C00022         200123
A002              500 C00009         200120
A002              500 C00022         200126
A002             3500 C00009         200128
A002             1200 C00009         200133
A002             4000 C00022         200113

Kết quả trên cho thấy cùng một agent_code, ord_amount và cust_code xuất hiện nhiều lần trong bảng đơn hàng

Thí dụ. CHỌN với DISTINCT trên hai cột

Để lấy các hàng giống hệt nhau [dựa trên hai cột agent_code và ord_amount] một lần từ bảng đơn hàng, có thể sử dụng câu lệnh SQL sau

Mã SQL

SELECT DISTINCT agent_code,ord_amount
FROM orders 
WHERE agent_code='A002';

Biểu thức đại số quan hệ


Cây đại số quan hệ


đầu ra

AGENT_CODE ORD_AMOUNT
---------- ----------
A002             3500
A002             1200
A002             4000
A002              500
A002             2500

trình bày bằng hình ảnh


Thí dụ. CHỌN với DISTINCT trên ba cột

Để lấy các hàng giống hệt nhau [dựa trên ba cộtagent_code, ord_amount và cust_code] một lần từ bảng đơn hàng, có thể sử dụng câu lệnh SQL sau

Mã SQL

SELECT DISTINCT agent_code, ord_amount,cust_code
FROM orders 
WHERE agent_code='A002';

Biểu thức đại số quan hệ


Cây đại số quan hệ


đầu ra

________số 8_______

trình bày bằng hình ảnh


Thí dụ. CHỌN với DISTINCT trên tất cả các cột của truy vấn đầu tiên

Để lấy các hàng giống hệt nhau [trên bốn cột agent_code, ord_amount, cust_code và ord_num] một lần từ bảng đơn hàng, có thể sử dụng câu lệnh SQL sau

Mã SQL

SELECT DISTINCT agent_code,ord_amount,cust_code,ord_num  
FROM orders 
WHERE agent_code='A002';

Biểu thức đại số quan hệ


Cây đại số quan hệ


đầu ra

AGENT_CODE ORD_AMOUNT CUST_CODE     ORD_NUM
---------- ---------- ---------- ----------
A002              500 C00022         200126
A002             2500 C00005         200106
A002              500 C00009         200120
A002             1200 C00009         200133
A002             4000 C00022         200113
A002             3500 C00009         200128
A002              500 C00022         200123

Trong kết quả ở trên, tất cả các hàng có agent_code là 'A002' đã trả về vì không có hàng nào giống nhau trên agent_code, ord_amount, cust_code và ord_num. Xem phần trình bày sau.

trình bày bằng hình ảnh


CHỌN với DISTINCT trên nhiều cột và mệnh đề ORDER BY

Bạn có thể sử dụng mệnh đề theo thứ tự trong câu lệnh chọn với sự khác biệt trên nhiều cột. Đây là một ví dụ

Mã SQL

SELECT DISTINCT agent_code,ord_amount
FROM orders 
WHERE agent_code='A002' 
ORDER BY ord_amount;

Biểu thức đại số quan hệ


Cây đại số quan hệ


đầu ra

AGENT_CODE ORD_AMOUNT
---------- ----------
A002              500
A002             1200
A002             2500
A002             3500
A002             4000

trình bày bằng hình ảnh

Hàm COUNT[] và CHỌN với DISTINCT trên nhiều cột

Bạn có thể sử dụng hàm đếm [] trong một câu lệnh chọn có sự khác biệt trên nhiều cột để đếm các hàng riêng biệt. Đây là một ví dụ

AGENT_CODE ORD_AMOUNT CUST_CODE     ORD_NUM
---------- ---------- ---------- ----------
A002             2500 C00005         200106
A002              500 C00022         200123
A002              500 C00009         200120
A002              500 C00022         200126
A002             3500 C00009         200128
A002             1200 C00009         200133
A002             4000 C00022         200113
0

đầu ra

AGENT_CODE ORD_AMOUNT CUST_CODE     ORD_NUM
---------- ---------- ---------- ----------
A002             2500 C00005         200106
A002              500 C00022         200123
A002              500 C00009         200120
A002              500 C00022         200126
A002             3500 C00009         200128
A002             1200 C00009         200133
A002             4000 C00022         200113
1

trình bày bằng hình ảnh

Thực hành bài tập SQL

  • Bài tập SQL, Thực hành, Lời giải
  • SQL Lấy dữ liệu từ bảng [33 Bài tập]
  • SQL Boolean và Toán tử quan hệ [12 Bài tập]
  • SQL Wildcard và toán tử đặc biệt [22 bài tập]
  • Hàm tổng hợp SQL [25 bài tập]
  • Đầu ra truy vấn định dạng SQL [10 Bài tập]
  • Truy vấn SQL trên nhiều bảng [8 bài tập]
  • LỌC và SẮP XẾP trên cơ sở dữ liệu nhân sự [38 bài tập]
  • SQL THAM GIA
    • SQL THAM GIA [29 Bài tập]
    • SQL THAM GIA trên cơ sở dữ liệu nhân sự [27 bài tập]
  • CÁC CÂU HỎI THƯỜNG GẶP SQL
    • SQL SUBQUERIES [39 Bài tập]
    • SQL SUBQUERIES trên Cơ sở dữ liệu nhân sự [55 Bài tập]
  • SQL Union[9 Bài tập]
  • Chế độ xem SQL[16 Bài tập]
  • Quản lý tài khoản người dùng SQL [16 Bài tập]
  • Cơ sở dữ liệu phim
    • Các truy vấn CƠ BẢN trên Cơ sở dữ liệu phim [10 Bài tập]
    • SUBQUERIES trên Cơ sở dữ liệu phim [16 Bài tập]
    • THAM GIA trên Cơ sở dữ liệu phim [24 Bài tập]
  • Cơ sở dữ liệu bóng đá
    • Giới thiệu
    • Các truy vấn CƠ BẢN trên Cơ sở dữ liệu bóng đá [29 Bài tập]
    • SUBQUERIES trên Cơ sở dữ liệu bóng đá [33 Bài tập]
    • THAM GIA các truy vấn trên Cơ sở dữ liệu bóng đá [61 Bài tập]
  • cơ sở dữ liệu bệnh viện
    • Giới thiệu
    • CƠ BẢN, CÂU HỎI PHỤ và THAM GIA [39 Bài tập]
  • cơ sở dữ liệu nhân viên
    • Truy vấn CƠ BẢN trên Database nhân viên [115 Bài tập]
    • SUBQUERIES trên Cơ sở dữ liệu nhân viên [77 Bài tập]
  • Nhiều hơn để đến

Bạn muốn cải thiện bài viết trên?



Theo dõi chúng tôi trên FacebookTwitter để cập nhật thông tin mới nhất.

SQL. Lời khuyên trong ngày

MySQL SELECT chỉ không có giá trị null

Bạn nên sử dụng IS NOT NULL. [Các toán tử so sánh = và cả hai đều cho UNKNOWN với NULL ở hai bên của biểu thức. ]

Làm cách nào để kiểm tra giá trị trong nhiều cột trong SQL?

Sử dụng câu lệnh SELECT để truy xuất dữ liệu trong SQL . Điểm khác biệt duy nhất là bạn phải chỉ định nhiều tên cột sau từ khóa SELECT và phân tách từng cột bằng dấu phẩy. use the same SELECT statement. The only difference is that you must specify multiple column names after the SELECT keyword, and separate each column by a comma.

Làm cách nào để áp dụng nhiều điều kiện WHERE trong SQL?

Bạn có thể sử dụng điều kiện OR trong mệnh đề WHERE để kiểm tra nhiều điều kiện trong đó bản ghi được trả về nếu bất kỳ điều kiện nào được đáp ứng . Ví dụ này sử dụng mệnh đề WHERE để xác định nhiều điều kiện, nhưng thay vì sử dụng điều kiện AND, mệnh đề này sử dụng điều kiện OR.

Làm cách nào để kiểm tra xem hai cột có cùng giá trị trong mysql không?

Tìm giá trị trùng lặp trong nhiều cột . CHỌN col1, COUNT[col1], col2, COUNT[col2],. TỪ NHÓM tên_bảng THEO col1, col2,. CÓ [ĐẾM[col1] > 1] VÀ [ĐẾM[col2] > 1] VÀ.

Chủ Đề