Câu trả lời của Paul Dixon đã làm việc tuyệt vời cho tôi. Để thêm vào điều này, đây là một số điều tôi quan sát được đối với những người quan tâm đến việc sử dụng REGEXP
Để hoàn thành nhiều bộ lọc THÍCH với Ký tự đại diện
SELECT * FROM fiberbox WHERE field LIKE '%1740 %' OR field LIKE '%1938 %' OR field LIKE '%1940 %';Sử dụng thay thế REGEXP
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';Giá trị trong dấu ngoặc kép REGEXP và giữa. Toán tử (OR) được coi là ký tự đại diện. Thông thường, REGEXP sẽ yêu cầu các biểu thức ký tự đại diện như (. *)1740 (. *) hoạt động như %1740 %
Nếu bạn cần kiểm soát nhiều hơn đối với vị trí của ký tự đại diện, hãy sử dụng một số biến thể này
Để hoàn thành LIKE với Vị trí ký tự đại diện được kiểm soát
SELECT * FROM fiberbox WHERE field LIKE '1740 %' OR field LIKE '%1938 ' OR field LIKE '%1940 % test';Sử dụng
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';Đặt ^ trước giá trị cho biết bắt đầu dòng
Đặt $ sau giá trị cho biết cuối dòng
đặt (. *) hoạt động giống như ký tự đại diện %
Các. chỉ ra bất kỳ ký tự đơn nào, ngoại trừ ngắt dòng. đặt. bên trong () với * (. *) thêm một mẫu lặp lại cho biết bất kỳ số lượng ký tự nào cho đến cuối dòng
Có nhiều cách hiệu quả hơn để thu hẹp các đối sánh cụ thể, nhưng điều đó yêu cầu xem xét thêm Biểu thức chính quy. GHI CHÚ. Không phải tất cả các mẫu biểu thức chính quy đều hoạt động trong các câu lệnh MySQL. Bạn sẽ cần kiểm tra các mẫu của mình và xem những gì hoạt động
Cuối cùng, để hoàn thành nhiều bộ lọc THÍCH và KHÔNG THÍCH
SELECT * FROM fiberbox WHERE field LIKE '%1740 %' OR field LIKE '%1938 %' OR field NOT LIKE '%1940 %' OR field NOT LIKE 'test %' OR field = '9999';Sử dụng thay thế REGEXP
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$' OR field NOT REGEXP '1940 |^test ';HOẶC Thay thế hỗn hợp
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 ' OR field NOT REGEXP '1940 |^test ' OR field NOT LIKE 'test %' OR field = '9999';Lưu ý rằng tôi đã tách bộ NOT trong một bộ lọc WHERE riêng biệt. Tôi đã thử nghiệm sử dụng các mẫu phủ định, các mẫu hướng tới tương lai, v.v. Tuy nhiên, những biểu hiện này dường như không mang lại kết quả mong muốn. Trong ví dụ đầu tiên ở trên, tôi sử dụng ^9999$ để biểu thị đối sánh chính xác. Điều này cho phép bạn thêm các đối sánh cụ thể với các đối sánh ký tự đại diện trong cùng một biểu thức. Tuy nhiên, bạn cũng có thể kết hợp các loại câu lệnh này như bạn có thể thấy trong ví dụ thứ hai được liệt kê
Về hiệu suất, tôi đã chạy một số thử nghiệm nhỏ đối với bảng hiện có và không tìm thấy sự khác biệt nào giữa các biến thể của mình. Tuy nhiên, tôi cho rằng hiệu suất có thể là một vấn đề với cơ sở dữ liệu lớn hơn, trường lớn hơn, số lượng bản ghi lớn hơn và bộ lọc phức tạp hơn
Như mọi khi, hãy sử dụng logic ở trên vì nó hợp lý
Nếu bạn muốn tìm hiểu thêm về biểu thức chính quy, tôi khuyên bạn nên truy cập www. biểu thức chính quy. thông tin như một trang web tham khảo tốt
Mệnh đề WHERE trong MySQL là một từ khóa được sử dụng để chỉ định tiêu chí chính xác của dữ liệu hoặc các hàng sẽ bị ảnh hưởng bởi câu lệnh SQL được chỉ định. Mệnh đề WHERE có thể được sử dụng với các câu lệnh SQL như INSERT, UPDATE, SELECT và DELETE để lọc các bản ghi và thực hiện các thao tác khác nhau trên dữ liệu
Chúng ta đã xem xét cách truy vấn dữ liệu từ cơ sở dữ liệu bằng cách sử dụng câu lệnh SELECT trong hướng dẫn trước. Câu lệnh SELECT trả về tất cả các kết quả từ bảng cơ sở dữ liệu được truy vấn
Tuy nhiên, có những lúc chúng ta muốn giới hạn kết quả truy vấn ở một điều kiện cụ thể. Mệnh đề WHERE trong SQL có ích trong những tình huống như vậy
Mệnh đề WHERE Cú pháp
Cú pháp cơ bản cho mệnh đề WHERE khi được sử dụng trong câu lệnh MySQL SELECT WHERE như sau
SELECT * FROM tableName WHERE condition;ĐÂY
- “SELECT * FROM tableName” là câu lệnh CHỌN tiêu chuẩn
- “WHERE” là từ khóa giới hạn tập kết quả truy vấn đã chọn của chúng tôi và “điều kiện” là bộ lọc được áp dụng trên kết quả. Bộ lọc có thể là một phạm vi, một giá trị hoặc truy vấn phụ
Bây giờ hãy xem một ví dụ thực tế
Giả sử chúng tôi muốn lấy thông tin cá nhân của một thành viên từ bảng thành viên với số thành viên là 1, chúng tôi sẽ sử dụng tập lệnh sau để đạt được điều đó
________số 8
Thực thi tập lệnh trên trong bàn làm việc của MySQL trên “myflixdb” sẽ tạo ra các kết quả sau
membership_number full_names gender date_of_birth physical_address postal_address contct_number email 1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cmMệnh đề WHERE kết hợp với – AND LOGICAL Operator
Điều kiện WHERE trong MySQL khi được sử dụng cùng với toán tử logic AND, chỉ được thực thi nếu đáp ứng TẤT CẢ tiêu chí bộ lọc đã chỉ định
Bây giờ chúng ta hãy xem một ví dụ thực tế – Giả sử chúng ta muốn lấy danh sách tất cả các phim thuộc thể loại 2 được phát hành vào năm 2008, chúng ta sẽ sử dụng tập lệnh hiển thị bên dưới để đạt được điều đó
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 0
Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 1Mệnh đề WHERE kết hợp với – OR LOGICAL Operator
Mệnh đề WHERE khi được sử dụng cùng với toán tử OR, chỉ được thực thi nếu bất kỳ hoặc toàn bộ tiêu chí bộ lọc được chỉ định được đáp ứng
Tập lệnh sau lấy tất cả các phim thuộc loại 1 hoặc loại 2
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 2
Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 3Mệnh đề WHERE kết hợp với – Từ khóa IN
Mệnh đề WHERE trong MySQL, khi được sử dụng cùng với từ khóa IN chỉ ảnh hưởng đến các hàng có giá trị khớp với danh sách các giá trị được cung cấp trong từ khóa IN. Câu lệnh IN của MySQL giúp giảm số mệnh đề OR mà bạn có thể phải sử dụng
Truy vấn MySQL WHERE IN sau đây cung cấp các hàng có số_thành_viên là 1 , 2 hoặc 3
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 4Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 5Mệnh đề WHERE kết hợp với – Từ khóa NOT IN
Mệnh đề WHERE khi được sử dụng cùng với từ khóa NOT IN KHÔNG ảnh hưởng đến các hàng có giá trị khớp với danh sách các giá trị được cung cấp trong từ khóa NOT IN
Truy vấn sau đây cung cấp các hàng có số_thành_viên KHÔNG phải là 1 , 2 hoặc 3
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 '; 6
Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM `members` WHERE `membership_number` = 1;0Mệnh đề WHERE kết hợp với – COMPARISON Operator
Các toán tử so sánh nhỏ hơn (), bằng (=), không bằng () có thể được sử dụng với Mệnh đề WHERE
= Bằng
Đoạn script sau lấy tất cả các thành viên nữ từ bảng thành viên bằng cách sử dụng toán tử so sánh bằng
SELECT * FROM `members` WHERE `membership_number` = 1;1
Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM `members` WHERE `membership_number` = 1;2> Lớn hơn
Tập lệnh sau nhận tất cả các khoản thanh toán lớn hơn 2.000 từ bảng thanh toán
CHỌN * TỪ `thanh toán` WHERE `amount_đã thanh toán` > 2000;
Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM `members` WHERE `membership_number` = 1;3< > Không Bằng
Tập lệnh sau lấy tất cả các phim có id danh mục không phải là 1
SELECT * FROM `members` WHERE `membership_number` = 1;4
Thực thi tập lệnh trên trong bàn làm việc của MySQL đối với “myflixdb” sẽ tạo ra các kết quả sau
SELECT * FROM `members` WHERE `membership_number` = 1;5Tóm lược
- Mệnh đề SQL WHERE được sử dụng để hạn chế số lượng hàng bị ảnh hưởng bởi truy vấn CHỌN, CẬP NHẬT hoặc XÓA
- Điều kiện WHERE trong SQL có thể được sử dụng cùng với các toán tử logic như AND và OR, các toán tử so sánh như ,= v.v.
- Khi được sử dụng với toán tử logic AND, tất cả các tiêu chí phải được đáp ứng
- Khi được sử dụng với toán tử logic OR, bất kỳ tiêu chí nào cũng phải được đáp ứng
- Từ khóa IN được sử dụng để chọn các hàng khớp với danh sách các giá trị
Trêu ghẹo não
Giả sử chúng ta muốn lấy danh sách các phim đã thuê nhưng chưa trả đúng hạn 25/06/2012. Chúng ta có thể sử dụng mệnh đề câu lệnh SQL WHERE cùng với toán tử so sánh nhỏ hơn và toán tử logic AND để đạt được điều đó