MySQL使用WHERE子句来过滤结果集中的行记录


MySQL使用WHERE子句来过滤结果集中的行记录

文章插图
 
在本教程中,我们将学习如何在SELECT语句中使用MySQL WHERE子句来过滤结果集中的行记录 。
1. MySQL WHERE子句简介
如果使用SELECT语句但不使用WHERE子句在表中查询数据,则会获取表中的所有行记录,这些行记录中大部分是不想要的行记录 。例如,在一些表中存放商业交易中的数据 。从这些表中获取所有行,尤其是对于诸如员工,销售订单,采购订单,生产订单等的大型表格来说,这是没有意义的,因为我们经常想要的是一些特定的数据,例如本季度的销售额 ,今年销量比去年同期的销量等等 。
WHERE子句允许根据指定的过滤表达式或条件来指定要选择的行 。
您还将学习如何使用LIMIT子句来限制SELECT语句返回的行数 。
2. MySQL WHERE子句示例
我们将继续使用示例数据库(yiibaidb)中employees表中的数据,如下图所示 。
假设只想从employees表中获取销售代表员工,可使用以下查询:
SELECTlastname, firstname, jobtitleFROM employeesWHERE jobtitle = 'Sales Rep';SQL执行上面查询,得到以下结果 -
mysql> SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep';+-----------+-----------+-----------+| lastname | firstname | jobtitle |+-----------+-----------+-----------+| Jennings | Leslie | Sales Rep || Thompson | Leslie | Sales Rep || Firrelli | Julie | Sales Rep || Patterson | Steve | Sales Rep || Tseng | Foon Yue | Sales Rep || Vanauf | George | Sales Rep || Bondur | Loui | Sales Rep || Hernandez | Gerard | Sales Rep || Castillo | Pamela | Sales Rep || Bott | Larry | Sales Rep || Jones | Barry | Sales Rep || Fixter | Andy | Sales Rep || Marsh | Peter | Sales Rep || King | Tom | Sales Rep || Nishi | Mami | Sales Rep || Kato | Yoshimi | Sales Rep || Gerard | Martin | Sales Rep |+-----------+-----------+-----------+17 rows in setShell即使WHERE子句出现在语句的末尾,但MySQL会首先使用WHERE子句中的表达式来选择匹配的行 。它选择具有职位名称为销售代表的行记录 。
jobtitle = 'Sales Rep';ShellMySQL从SELECT子句中的选择列表中选择列 。
可以像上面的查询一样形成一个简单的条件,或者是将多个表达式与逻辑运算符(如AND,OR等)组合在一起的一个非常复杂的例子 。例如,要在办公室代码(officeCode)等于1中查找所有销售代表,请使用以下查询:
SELECTlastname, firstname, jobtitleFROM employeesWHERE jobtitle = 'Sales Rep' AND officeCode = 1;SQL执行上面查询后,得到以下结果 -
mysql> SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep' AND officeCode = 1;+----------+-----------+-----------+| lastname | firstname | jobtitle |+----------+-----------+-----------+| Jennings | Leslie | Sales Rep || Thompson | Leslie | Sales Rep |+----------+-----------+-----------+2 rows in setShell下表列出了可用于在WHERE子句中形成过滤表达式的比较运算符 。
【MySQL使用WHERE子句来过滤结果集中的行记录】操作符 描述 = 等于,几乎任何数据类型都可以使用它 。<> 或 != 不等于 < 小于,通常使用数字和日期/时间数据类型 。> 大于,<= 小于或等于 >= 大于或等于 以下查询使用不等于(!=)运算符来获取不是销售代表的其它所有员工:
SELECTlastname, firstname, jobtitleFROM employeesWHERE jobtitle <> 'Sales Rep';Shell执行上面查询语句,得到以下结果 -
mysql> SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle <> 'Sales Rep';+-----------+-----------+----------------------+| lastname | firstname | jobtitle |+-----------+-----------+----------------------+| Murphy | Diane | President || Patterson | Mary | VP Sales || Firrelli | Jeff | VP Marketing || Patterson | William | Sales Manager (APAC) || Bondur | Gerard | Sale Manager (EMEA) || Bow | Anthony | Sales Manager (NA) |+-----------+-----------+----------------------+6 rows in setShell以下查询将获得办公室代码大于5的每位员工:
mysql> SELECT lastname, firstname, officeCode FROM employees WHERE officecode > 5;+-----------+-----------+------------+| lastname | firstname | officeCode |+-----------+-----------+------------+| Patterson | William | 6 || Bott | Larry | 7 || Jones | Barry | 7 || Fixter | Andy | 6 || Marsh | Peter | 6 || King | Tom | 6 |+-----------+-----------+------------+6 rows in setSQL办公室代码小于或等于4(<= 4)的员工呢?
SELECTlastname, firstname, officeCodeFROM employeesWHERE officecode <= 4;SQL执行上面查询语句,得到以下结果 -
mysql> SELECT lastname, firstname, officeCode FROM employees WHERE officecode <= 4;+-----------+-----------+------------+| lastname | firstname | officeCode |+-----------+-----------+------------+| Murphy | Diane | 1 || Patterson | Mary | 1 || Firrelli | Jeff | 1 || Bondur | Gerard | 4 || Bow | Anthony | 1 || Jennings | Leslie | 1 || Thompson | Leslie | 1 || Firrelli | Julie | 2 || Patterson | Steve | 2 || Tseng | Foon Yue | 3 || Vanauf | George | 3 || Bondur | Loui | 4 || Hernandez | Gerard | 4 || Castillo | Pamela | 4 || Gerard | Martin | 4 |+-----------+-----------+------------+15 rows in setShell


推荐阅读