Có mệnh đề where trong python không?

Ngôn ngữ truy vấn có cấu trúc, phổ biến hơn được gọi là SQL là ngôn ngữ Cơ sở dữ liệu quan hệ mạnh mẽ. Ngôn ngữ này cho phép bạn truy cập và thao tác dữ liệu được lưu trữ trong cơ sở dữ liệu SQL. Hướng dẫn này sẽ chỉ cho bạn cách truy cập sức mạnh của SQL bằng Python và cách lọc dữ liệu bằng cách sử dụng câu lệnh WHERE

Bước đầu tiên là nhập các thư viện cần thiết. Bạn sẽ cần nhập sqlite3, điều này sẽ cho phép bạn kết nối với cơ sở dữ liệu SQL và chạy các truy vấn SQL. Bạn cũng sẽ cần nhập gấu trúc. Pandas sẽ cho phép bạn xem các kết quả được truy vấn ở định dạng khung dữ liệu rõ ràng, dễ đọc

Nhập các thư viện cần thiết

Đối với hướng dẫn này, cơ sở dữ liệu Football Delphi sẽ được sử dụng. Bạn có thể tải xuống cơ sở dữ liệu tại đây, https. //www. kaggle. com/laudanum/footballdelphi. Dành chút thời gian đọc mô tả để tìm hiểu thêm về cơ sở dữ liệu và các bảng mà chúng ta sẽ sử dụng

Tiếp theo, bạn sẽ cần kết nối với cơ sở dữ liệu và tạo một đối tượng con trỏ. Sau này chúng ta sẽ gọi phương thức thực thi của con trỏ để chạy các truy vấn SQL

Kết nối với cơ sở dữ liệu và tạo đối tượng con trỏ

Bây giờ bạn sẽ được kết nối với cơ sở dữ liệu Football Delphi. Đây là cơ sở dữ liệu quan hệ. Một cơ sở dữ liệu quan hệ bao gồm các bảng. Mỗi bảng là tập dữ liệu duy nhất của riêng nó lưu trữ thông tin. Mỗi bảng được sắp xếp theo cột và hàng. Cơ sở dữ liệu này bao gồm bốn bảng

  • Unique_Teams
  • Diêm
  • Đội
  • Đội_trong_Trận

Để chạy truy vấn SQL và xem nó ở định dạng khung dữ liệu dễ xem, chúng tôi sẽ sử dụng đoạn mã sau

Truy vấn SQL ở định dạng Python

Đối với truy vấn đầu tiên, chúng tôi sẽ xem trước nội dung của bảng, Unique_Teams. Để làm điều này, chúng ta có thể chạy truy vấn sau

Bảng Unique_Teams

Câu lệnh SELECT cho cơ sở dữ liệu biết cột nào chúng ta đang cố lấy từ tập dữ liệu. Dấu hoa thị, (*), cho cơ sở dữ liệu biết rằng chúng tôi muốn chọn tất cả các cột có sẵn trong bảng. Câu lệnh TỪ cho cơ sở dữ liệu biết rằng chúng tôi muốn chọn dữ liệu từ bảng, Unique_Teams. Truy vấn SQL được kết thúc bằng dấu chấm phẩy, (;). Điều này cho cơ sở dữ liệu biết rằng bạn đã kết thúc truy vấn của mình tương tự như cách dấu chấm kết thúc câu

Bạn có thể tự mình thực hành điều này bằng cách thử truy vấn tất cả nội dung của bảng Kết quả phù hợp và so sánh truy vấn của bạn với câu trả lời bên dưới

Bảng đấu

Đây là bảng chúng ta sẽ sử dụng cho phần còn lại của hướng dẫn. Có 9 cột trong bảng Matches. Trang Kaggle cơ sở dữ liệu này đã được tải xuống từ đó mô tả từng cột như sau

  • Match_ID (số nguyên). ID duy nhất cho mỗi trận đấu
  • Div (str). xác định hạng đấu mà trận đấu diễn ra (D1 = Bundesliga, D2 = Bundesliga 2, E0 = Giải Ngoại hạng Anh)
  • Mùa (int). Mùa trận đấu diễn ra vào (thường kéo dài từ tháng 8 đến tháng 5 năm sau)
  • Ngày (str). Ngày diễn ra trận đấu
  • HomeTeam (str). Tên đội chủ nhà
  • Đội khách (str). Tên đội khách
  • FTHG (int) (Bàn thắng cả trận trên sân nhà). Số bàn thắng đội nhà ghi được
  • FTAG (int) (Bàn thắng cả trận trên sân khách). Số bàn thắng đội khách ghi được
  • FTR (str) (Kết quả toàn thời gian). Kết quả 3 bên của trận đấu (H = Đội nhà thắng, D = Hòa, A = Đội khách thắng)

Có lẽ chúng tôi chỉ muốn chọn cột, Match_ID. Để làm điều này, chúng tôi sẽ chỉ viết Match_ID trong câu lệnh chọn thay vì dấu hoa thị. Đoạn mã dưới đây cho thấy làm thế nào điều này được thực hiện

Xem Match_ID

Hãy thử chỉ chọn cột HomeTeam từ bảng So khớp và so sánh mã của bạn với truy vấn bên dưới

CHỌN Đội nhà từ các trận đấu;

Bạn có thể chọn nhiều cột bằng cách nhập tên của từng cột trong câu lệnh chọn và phân tách từng tên cột bằng dấu phẩy, (,). Bạn có thể xem tên của cả Đội nhà và Đội khách trong mỗi trận đấu bên dưới

CHỌN Đội nhà, Đội khách TỪ các trận đấu;

Thực hành chọn nhiều cột bằng cách chọn Match_ID và Date từ bảng Matches và so sánh truy vấn của bạn với mã bên dưới

CHỌN Match_ID, Ngày TỪ trận đấu;BÁO CÁO Ở ĐÂU

Có 24.625 hàng trong bảng Matches. Điều này gây khó khăn cho việc tìm kiếm thông tin cụ thể. Có lẽ chúng tôi chỉ muốn thông tin từ Mùa giải 2015. Để làm điều này, chúng ta có thể thêm câu lệnh WHERE vào truy vấn SQL của mình. Câu lệnh WHERE cho phép chúng ta chọn thông tin thỏa mãn một điều kiện nào đó. Để truy vấn thông tin chỉ liên quan đến mùa giải 2015 từ bảng Trận đấu, chúng ta có thể sử dụng truy vấn bên dưới

SELECT * FROM Matches WHERE Season = 2015;

Bây giờ chúng tôi chỉ có 992 hàng và mỗi hàng là từ một trận đấu mùa giải 2015. Điều này cho phép chúng tôi xem dữ liệu từ mùa giải 2015 dễ dàng hơn nhiều so với việc cuộn qua toàn bộ bảng như đã truy vấn trước đó. Giống như câu lệnh SELECT cho phép chúng ta trả về các cột đã chỉ định từ bảng dữ liệu, câu lệnh WHERE cho phép chúng ta trả về các hàng cụ thể từ tập dữ liệu đáp ứng một điều kiện nhất định, chẳng hạn như Season = 2015. Để thực hành sử dụng câu lệnh WHERE, hãy viết truy vấn chọn tất cả các cột từ bảng Kết quả phù hợp trong đó Mục tiêu toàn thời gian tại nhà (FTHG) tương đương với 5 và so sánh truy vấn của bạn với truy vấn bên dưới

SELECT * FROM Matches WHERE FTHG = 5;

Cho đến nay, chúng tôi chỉ sử dụng dữ liệu số trong câu lệnh WHERE. Để sử dụng dữ liệu chuỗi trong câu lệnh WHERE, chúng ta cần đặt dấu ngoặc kép xung quanh dữ liệu mà chúng ta đang sử dụng làm điều kiện. Để truy vấn tất cả dữ liệu trong đó Arsenal là Đội chủ nhà, chúng ta có thể sử dụng truy vấn bên dưới

SELECT * FROM Matches WHERE HomeTeam = ‘Arsenal’;

Để thực hành sử dụng dữ liệu chuỗi làm điều kiện trong câu lệnh WHERE, hãy chọn tất cả các cột trong phân chia D2 và so sánh truy vấn của bạn với truy vấn bên dưới

SELECT * FROM Matches WHERE Div = ‘D2’;Toán tử so sánh

Cho đến nay, chúng ta chỉ sử dụng dấu bằng (=) như một toán tử trong câu lệnh WHERE. Ngoài dấu bằng, bạn có thể sử dụng các toán tử khác bao gồm

  • > (lớn hơn)
  • < (ít hơn)
  • >= (lớn hơn hoặc bằng)
  • <= (less than or equal to)
  • = (không bằng)

Để xem tất cả dữ liệu từ bảng Các trận đấu mà Đội khách ghi 3 bàn trở lên, chúng ta có thể sử dụng truy vấn sau

CHỌN * TỪ Phù hợp với FTAG ≥ 3;

Để thực hành sử dụng các toán tử điều kiện trong câu lệnh WHERE, hãy truy vấn tất cả dữ liệu từ bảng Trận đấu, nơi Đội nhà không thắng

SELECT * FROM Matches WHERE FTR. = ‘H’;VÀ & HOẶC. Sử dụng nhiều điều kiện trong câu lệnh WHERE

Cho đến nay chúng ta chỉ đặt một điều kiện trong câu lệnh WHERE nhưng có thể đặt nhiều hơn một điều kiện trong câu lệnh WHERE. Để làm điều này, bạn có thể thêm mệnh đề AND hoặc OR vào truy vấn SQL để lọc thêm kết quả của mình. Khi sử dụng mệnh đề AND trong câu lệnh WHERE, mỗi câu lệnh ở hai bên của mệnh đề AND phải đúng thì một quan sát được trả về. Để xem điều này hoạt động như thế nào, truy vấn bên dưới sẽ hiển thị tất cả các quan sát từ bảng Các trận đấu mà Man United là Đội chủ nhà và kết quả cuối cùng của trận đấu là hòa

SELECT * FROM Matches WHERE HomeTeam = ‘Man United’ AND FTR = ‘D’;

Khi sử dụng mệnh đề OR trong câu lệnh WHERE, các hàng sẽ chỉ được đưa vào kết quả khi điều kiện đầu tiên là đúng hoặc điều kiện thứ hai là đúng. Nếu cả hai điều kiện đều đúng với một quan sát thì quan sát đó cũng sẽ được trả về. Để xem mệnh đề OR hoạt động như thế nào, hãy xem truy vấn sau đây hiển thị tất cả các hàng từ bảng Trận đấu trong mùa giải 2012 hoặc mùa giải 2013

CHỌN * TỪ Các trận đấu NƠI Mùa giải = 2012 HOẶC Mùa giải = 2013;

Để thực hành sử dụng mệnh đề AND trong câu lệnh WHERE, hãy chọn tất cả các hàng trong bảng Các trận đấu mà Đội nhà ghi được hơn 3 điểm và Đội khách thắng trận rồi so sánh với truy vấn bên dưới

SELECT * FROM Matches WHERE FTHG > 3 AND FTR = ‘A’;

Để thực hành sử dụng mệnh đề OR trong câu lệnh WHERE, hãy chọn Đội nhà, Đội khách, FTHG, FTAG, FTR từ bảng Các trận đấu mà Đội nhà ghi hơn 7 bàn hoặc Đội khách ghi nhiều hơn 7 bàn và so sánh với truy vấn bên dưới

CHỌN Đội nhà, Đội khách, FTHG, FTAG, FTR TỪ các trận đấu TRONG ĐÓ FTHG > 7 HOẶC FTAG > 7;GIỮA VÀ KHÔNG GIỮA. Lọc các hàng rơi vào một dãy

Bây giờ, chúng tôi sẽ giới thiệu thêm hai mệnh đề có thể được bao gồm trong câu lệnh WHERE, BETWEEN và NOT BETWEEN. Với mệnh đề GIỮA, bạn có thể lọc kết quả của mình dựa trên điều kiện là giá trị trong cột được lọc phải nằm giữa hai giá trị để được trả về. Ví dụ: nếu chúng tôi muốn chọn tất cả các trận đấu từ mùa giải 2012 đến tất cả các trận đấu từ mùa giải 2015, chúng tôi sẽ sử dụng truy vấn sau

CHỌN * TỪ Các trận đấu NƠI Mùa giải GIỮA 2012 VÀ 2015;

Mệnh đề NOT BETWEEN hoạt động theo cách ngược lại. Nếu chúng ta viết NOT BETWEEN thay cho BETWEEN trong truy vấn trên, nó sẽ chỉ hiển thị các trận đấu không có trong phạm vi mùa giải 2012–2015. Vì vậy, các trận đấu trước mùa giải 2012 sẽ được đưa vào và các trận đấu sau mùa giải 2015 sẽ được đưa vào kết quả trả về nhưng không có trận đấu nào giữa mùa giải 2012 và mùa giải 2015 được đưa vào. Để truy vấn các trận đấu có Match_ID không nằm trong khoảng từ 25 đến 46.750, chúng tôi có thể sử dụng truy vấn sau

SELECT * FROM Matches WHERE Match_ID KHÔNG GIỮA 25 VÀ 46750;

Để tự luyện tập, chọn FTHG, FTAG, FTR trong tất cả các trận đấu mà số bàn thắng của Đội nhà nằm trong khoảng từ 7 đến 9 VÀ số bàn thắng của Đội khách không nằm trong khoảng từ 0 đến 3. Khi bạn đã hoàn thành việc này, hãy so sánh truy vấn của bạn với truy vấn bên dưới

CHỌN FTHG, FTAG, FTR TỪ các trận đấu WHERE (FTHG GIỮA 7 VÀ 9) VÀ (FTAG KHÔNG GIỮA 0 VÀ 3);IN( ). Chọn giá trị từ danh sách

Đôi khi bạn có thể chỉ muốn chọn dữ liệu được bao gồm trong một danh sách nhất định. Đây là lúc toán tử IN được sử dụng. Bạn có thể sử dụng toán tử IN trong câu lệnh WHERE nếu bạn chỉ muốn trả về các hàng khi điều kiện được đưa vào danh sách. Ví dụ: truy vấn sau đây sẽ trả về tất cả các trận đấu mà Chelsea, Hull hoặc Watford là Đội chủ nhà

SELECT * FROM Matches WHERE HomeTeam IN(‘Chelsea’, ‘Hull’, ‘Watford’);

Thực hành sử dụng toán tử IN để chọn Đội khách từ bảng Trận đấu khi Đội khách là Liverpool, Man City hoặc Swansea và so sánh truy vấn của bạn với truy vấn bên dưới

CHỌN Đội khách TỪ Các trận đấu NƠI Đội khách IN(‘Liverpool’, ‘Man City’, ‘Swansea’);THÍCH Nhà điều hành. Lọc dữ liệu chuỗi

Tiếp theo, chúng tôi sẽ giới thiệu toán tử LIKE. Toán tử này hữu ích khi bạn muốn lọc dữ liệu chuỗi. Để xem nó hoạt động như thế nào, hãy xem truy vấn bên dưới. Truy vấn này sẽ trả về tất cả các trận đấu có tên Đội nhà bắt đầu bằng chữ “A”

CHỌN * TỪ Các trận đấu MÀ Đội nhà THÍCH ‘A%’;

Sau câu lệnh THÍCH, chúng tôi đặt trong dấu ngoặc kép, A%. Chữ A cho chúng ta biết rằng câu lệnh phải bắt đầu bằng chữ “A”. Dấu phần trăm được sử dụng như một thẻ đại diện. Bất cứ điều gì sau A không bắt buộc phải là bất kỳ giá trị cụ thể nào. Để xem cách thức hoạt động của nó, hãy xem phần sau

  • WHERE HomeTeam LIKE ‘Be%’ (Trả về các hàng mà HomeTeam bắt đầu bằng “Be”)
  • WHERE HomeTeam LIKE ‘%ty’ (Trả về các hàng mà HomeTeam kết thúc bằng “ty”)
  • WHERE HomeTeam LIKE ‘%a%’ (Trả về các hàng mà HomeTeam bao gồm “a”)

Để thực hành sử dụng câu lệnh LIKE để trả về tất cả các trận đấu trong đó tên Đội khách bao gồm thuật ngữ “Thành phố” và so sánh với đoạn mã sau

CHỌN * TỪ Các trận đấu mà đội khách THÍCH ‘%Thành phố%’;

Bạn cũng có thể sử dụng thuật ngữ KHÔNG THÍCH. Nếu bạn muốn trả lại tất cả các trận đấu mà Ngày không bắt đầu bằng 2017, bạn có thể sử dụng truy vấn sau

SELECT * FROM Matches WHERE Date NOT LIKE ‘2017%’;

Để tự luyện tập, hãy chọn tất cả các cột từ bảng Trận đấu trong đó Ngày không bắt đầu bằng 2016 và tên Đội nhà kết thúc bằng chữ “y” và tên Đội khách không bao gồm chữ “e”. So sánh truy vấn của bạn với truy vấn bên dưới

CHỌN * TỪ Các trận đấu WHERE (Ngày KHÔNG THÍCH ‘2016%’) VÀ (Đội nhà thích ‘%y’) VÀ (Đội khách KHÔNG THÍCH ‘%e%’); IS NULL & IS NOT NULL. Xử lý các giá trị bị thiếu

Đôi khi, dữ liệu có thể bị thiếu trong một số hàng. Các giá trị này được gọi là dữ liệu NULL. Bạn có thể kiểm tra xem có bất kỳ dữ liệu nào bị thiếu cho một cột cụ thể hay không bằng cách sử dụng mệnh đề IS NULL trong câu lệnh WHERE. Để xem kết quả của bất kỳ trận đấu nào bị thiếu trong bảng Trận đấu, chúng tôi có thể sử dụng truy vấn sau

SELECT * FROM Matches WHERE FTR LÀ NULL;

Chúng tôi nhận được lỗi không khớp về độ dài. Điều này là do hiện tại có những quan sát mà kết quả của một trò chơi là không xác định. đó là tốt. Thực hành sử dụng mệnh đề IS NULL để kiểm tra xem có bất kỳ Số bàn thắng nào của Đội nhà bị thiếu trong bất kỳ quan sát nào trong bảng Trận đấu hay không và so sánh truy vấn của bạn với truy vấn bên dưới

SELECT * FROM Matches WHERE FTHG IS NULL;

Không được thiếu giá trị. Câu lệnh IS NOT NULL hoạt động theo cách ngược lại. Điều này sẽ trả về tất cả các giá trị trong đó một cột không có giá trị NULL. Truy vấn sau đây hiển thị tất cả các quan sát từ bảng Kết quả phù hợp khi không có giá trị null trong cột HomeTeam

SELECT * FROM Matches WHERE HomeTeam KHÔNG NULL;

Thực hành sử dụng mệnh đề NOT NULL bằng cách truy vấn tất cả các cột từ bảng So khớp trong đó Ngày không có giá trị null và so sánh với truy vấn bên dưới

SELECT * FROM Matches WHERE Date IS NOT NULL;

Một điều quan trọng cần lưu ý khi sử dụng IS NULL và IS NOT NULL, giá trị bằng 0 không tương đương với giá trị NULL. NULL là giá trị bị thiếu và giá trị 0 không phải là giá trị bị thiếu

Đây là phần cuối của hướng dẫn này. Chúng tôi đã giới thiệu cách kết nối và truy vấn thông qua cơ sở dữ liệu SQL với python. Chúng ta cũng đã thảo luận câu lệnh WHERE là gì và các kỹ thuật lọc sau đây có thể được sử dụng với câu lệnh WHERE

  • Toán tử so sánh
  • VÀ & HOẶC
  • Ở GIỮA và KHÔNG GIỮA
  • TRONG
  • THÍCH và KHÔNG THÍCH
  • LÀ NULL & KHÔNG PHẢI LÀ NULL

Tôi khuyến khích bạn tiếp tục thực hành bằng cách sử dụng các kỹ thuật này để hiểu sâu hơn về cách lọc bảng SQL bằng cách sử dụng câu lệnh WHERE

Cú pháp của mệnh đề WHERE là gì?

Cú pháp cơ bản của truy vấn SQL với mệnh đề WHERE . Trong khi mệnh đề SELECT chỉ định các cột được trả về từ (các) bảng, thì mệnh đề WHERE chứa các điều kiện phải đánh giá là đúng để kết quả là một hàng được trả về. WHERE ; The WHERE clause follows the SELECT and the FROM clauses. While the SELECT clause specifies the columns to be returned from the table(s), the WHERE clause contains the conditions that must evaluate to true for a row to be returned as a result.

%s trong Python SQL là gì?

Chúng tôi cần cung cấp các giá trị trong trình giữ chỗ ( %s ) trước khi thực hiện truy vấn. Truyền các biến Python ở vị trí của trình giữ chỗ khi chúng tôi thực hiện truy vấn. Chúng ta cần truyền hai đối số sau cho một con trỏ. hàm exec() để chạy truy vấn được tham số hóa.

Chúng ta có thể sử dụng mệnh đề WHERE với có không?

Bạn có thể tạo mệnh đề WHERE và mệnh đề HAVING liên quan đến cùng một cột . Để làm như vậy, bạn phải thêm cột hai lần vào khung Tiêu chí, sau đó chỉ định một phiên bản là một phần của mệnh đề HAVING và phiên bản còn lại là một phần của mệnh đề WHERE.

Mục đích của mệnh đề WHERE là gì?

Trong câu lệnh SQL, mệnh đề WHERE chỉ định tiêu chí mà giá trị trường phải đáp ứng đối với các bản ghi chứa giá trị được đưa vào kết quả truy vấn.