使用WHERE子句过滤数据
SQL语句:SELECT user_name FROM user WHERE id=12
数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。上述语句用于查询列数据user_name,但是只会查询 id 为12的user_name。
注意: 在同时使用 ORDER BY 和 WHERE 子句时,应该让ORDER BY位于 WHERE 之后,否则将会产生错误。
使用运算操作符过滤数据

SQL语句1:SELECT * FROM user WHERE id=12
SQL语句1的意思:查询user表id为12的行数据
SQL语句2:SELECT * FROM user WHERE id>=12
SQL语句2的意思:查询user表id大于等于12的行数据
SQL语句3:SELECT * FROM user WHERE id!=12
SQL语句3的意思:查询user表id不等于12的行数据
SQL语句4:SELECT * FROM user WHERE id BETWEEN 5 AND 12
SQL语句4的意思:查询user表id大于等于5而小于等于12的行数据
注意 在使用BETWEEN时,必须指定两个值:所需范围的低端值和高端值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括指定的开始值和结束值。
SQL语句5:SELECT * FROM user WHERE user_name IS NULL
SQL语句5的意思:查询user表user_name为NULL(空值)的所有行数据
使用逻辑操作符过滤数据
AND操作符
SQL语句:SELECT user_name, password FROM user WHERE id !=1314 AND id>=100
AND相当于“&&”操作,该SQL可以检索出id不等于1314并且id>100的列数据。上述例子中使用了只包含一个关键字AND的语句,把两个过滤条件组 合在一起。还可以添加多个过滤条件,每添加一条就要使用一个AND。
OR操作符
SQL语句:SELECT * FROM user WHERE id =1314 OR user_name=’阿离’
OR相当于“||”操作,该SQL可以检索出id为1314或者user_name为“阿离”的所有列数据。WHERE子句中使用的 OR 关键字,用来表示检索匹配任一给定 条件的行。
注意: AND和OR操作符可以像Java的逻辑操作符一样进行多种高级的匹配,因此任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操符。不要过分依赖默认计算次序,即使确实是想要的东西也是如此。使用圆括号没有什么坏处,它能消除歧义。
IN操作符
SQL语句:SELECT user_name FROM user WHERE id IN(12, 15, 19) RODER BY DESC
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。上面的SQL可以检索出id为12,15,19并且按user_name的降序排序的user_name列数据。使用IN操作符具有以下优点:
- 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
- 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)
- IN操作符一般比OR操作符清单执行更快
- IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句,后续会介绍到
NOT操作符
SQL语句:SELECT * FROM user WHERE id NOT IN(12, 15)
NOT操作符相当于“!”操作,WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。上面的SQL语句可以检索出id不是12和15的全部列数据。
使用LIKE操作符过滤数据
LIKE搭配“%”通配符
SQL语句:SELECT user_name FROM user WHERE user_name LIKE ‘吴%’
最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。上面SQL语句可以检索出user_name以“吴”开头的列数据。
LIKE搭配“_”通配符
SQL语句:SELECT * FROM user WHERE username=’吴豪’
另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。上面得SQL语句可以检索出user_name为“吴X豪”的所有列数据。
注意: 与 % 能匹配0个字符不一样, 总是匹配一个字符,不能多也不能少
使用REGEXP操作符过滤数据
SQL语句:SELECT * FROM user WHERE user_name REGEXP ‘[123] Tom’
REGEXP操作符就是正则表达式,用在字段后面,上面的SQL语句表示可以检索出user_name符合正则表达式“[123] Tom”的所有列数据。
