sql数据过滤where子句

数据库一般都存有海量的数据,而有时需要查询的数据比较少,这时就可以根据过滤条件来检索我们需要的数据,where子句就是干这活的。where子句跟在select子句from的后面。where子句的操作符一般如下:

等于(=)、不等于(<>)、不等于(!=)、小于(<)、小于等于(<=)、不小于(!<)、大于(>)、大于等于(>=)、不大于(!>)、指定两个值之间between、为空值is null

用法都是一样的,只要保证子句的位置正确即可

mysql> select id,model_cpu,num_cpus from device_info where <span style="color: #ff0000;">id<=5</span>;
+----+----------------------------------+----------+
| id | model_cpu | num_cpus |
+----+----------------------------------+----------+
| 1 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 2 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 24 |
| 3 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 4 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 12 |
| 5 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 12 |
+----+----------------------------------+----------+
5 rows in set (0.00 sec)

mysql> select id,model_cpu,num_cpus from device_info where id <span style="color: #ff0000;">between 6 and 9</span>;
+----+----------------------------------+----------+
| id | model_cpu | num_cpus |
+----+----------------------------------+----------+
| 6 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 7 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 24 |
| 8 | Intel(R)Xeon(R)CPUE5620@2.40GHz | 16 |
| 9 | Intel(R)Xeon(R)CPUE5620@2.40GHz | 16 |
+----+----------------------------------+----------+
4 rows in set (0.04 sec)

具体到不同的数据库,可能支持的操作符不一样,但都能达到相同的功能。从上面的例子可以看出可以用逻辑运算符 and or 将多个条件串联起来,and 的优先级高于or 貌似() 的优先级最高,有点像C语言的运算符的优先级(额,有点扯远了!)

数据过滤还有个操作符 in,具体功能看看下面的结果就知道了:

</p>

<pre>mysql> select id,model_cpu,num_cpus from device_info where id <span style="color: #ff0000;">in(6,9)</span>;
+----+----------------------------------+----------+
| id | model_cpu | num_cpus |
+----+----------------------------------+----------+
| 6 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 9 | Intel(R)Xeon(R)CPUE5620@2.40GHz | 16 |
+----+----------------------------------+----------+
2 rows in set (0.00 sec)</pre>
<p style="text-align: justify;">

还有个 not,貌似只能结合 in 来使用,看看下面结果:

mysql> select id,model_cpu,num_cpus from device_info where id <span style="color: #ff0000;">not</span> in(6,9);
+----+----------------------------------+----------+
| id | model_cpu | num_cpus |
+----+----------------------------------+----------+
| 1 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 2 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 24 |
| 3 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 4 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 12 |
| 5 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 12 |
| 7 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 24 |
| 8 | Intel(R)Xeon(R)CPUE5620@2.40GHz | 16 |

查询结果就将 id 含有6和9的行排除了。

上面的这些过滤方法是常用的,还有些比较变态的过滤方法,sql果然强大,哈哈。

用通配符进行过滤,这些通配符结合like子句使用(开发中应该尽量避免是由like,特别是从大量数据中匹配查找时,当然你的机器性能足够强大还是可以用的)

百分号通配符 % ,%标识任意字符出现任意次数,就像bash中的 * 号。

mysql> select id,model_cpu,num_cpus from device_info where model_cpu <span style="color: #ff0000;">like 'Intel%';</span>
+----+----------------------------------+----------+
| id | model_cpu | num_cpus |
+----+----------------------------------+----------+
| 1 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 2 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 24 |

下划线 _ 通配符,与%类似,但是只匹配单个字符

mysql> select id,model_cpu,num_cpus from device_info where model_cpu <span style="color: #ff0000;">like 'Intel(R)Xeon(R)CPUE5-26200@2.00_'</span>;
+----+----------------------------------+----------+
| id | model_cpu | num_cpus |
+----+----------------------------------+----------+
| 1 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 2 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 24 |
| 3 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 8 |
| 4 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 12 |
| 5 | Intel(R)Xeon(R)CPUE5-26200@2.00G | 12 |

如果能够以其他的操作语句达到过滤的目的,就应该避免过分使用通配符。貌似通配符还有[ ]、^等神马。没有仔细研究过。

转载请注明出处:http://www.xiaomastack.com/2014/07/26/sqlsjgl/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

29 − 25 =