mysql> select name from test where name = 'kevin'; +-------+ | name | +-------+ | kevin | | kevin | +-------+ 2 rows in set (0.01 sec) 选择多个条目 mysql> select name ,sex from test; +-------+------+ | name | sex | +-------+------+ | kevin | M | | kevin | M | +-------+------+ 2 rows in set (0.00 sec) |
where 条件组合检索 |
mysql> select name, sex from test where sex = 'M' and arg=18; +-------+------+ | name | sex | +-------+------+ | kevin | M | | kevin | M | +-------+------+ 2 rows in set (0.00 sec) mysql> select name, sex from test where sex = 'M' or arg=17; +-------+------+ | name | sex | +-------+------+ | kevin | M | | kevin | M | +-------+------+ 2 rows in set (0.00 sec) mysql> select name, sex from test where sex = 'N' or arg=17; Empty set (0.00 sec) 以上对比可知,使用where 中or , and 进行组合变量的条件,来进行选择;对于多个选项,可持续的进行and 或or; |
mysql> select arg from test order by arg; +------+ | arg | +------+ | 18 | | 18 | | 20 | +------+ 3 rows in set (0.07 sec) |
mysql> select name from test order by arg; +--------+ | name | +--------+ | kevin | | kevin | | sherry | +--------+ 3 rows in set (0.00 sec) |
NULL值可能令人感到奇怪直到你习惯它。概念上,NULL意味着“没有值”或“未知值”,且它被看作与众不同的值。为了测试NULL,你不能使用算术比较 操作符例如=、<或!=。为了说明它,试试下列查询:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
很显然你不能通过这些比较得到有意义的结果。相反使用IS NULL和IS NOT NULL操作符:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
请注意在MySQL中,0或 NULL意味着假而其它值意味着真。布尔运算的默认真值是1。
NULL操作的常见错误是不能在定义为NOT NULL的列内插入0或空字符串,但事实并非如此。在NULL表示"没有数值"的地方有数值。使用IS [NOT] NULL则可以很容易地进行测试,如下所示:
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
因此完全可以在定义为NOT NULL的列内插入0或空字符串,实际是NOT NULL。
MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。
SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。
由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
扩展正则表达式的一些字符是:
· ‘.’匹配任何单个的字符。
· 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
· “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。
为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:
为了找出以“b”开头的名字,使用“^”匹配名字的开始:
你也可以使用“{n}”“重复n次”操作符重写前面的查询:
mysql> select * from test where name regexp '^k...n$';
+-------+------+------+
| name | sex | arg |
+-------+------+------+
| kevin | M | 18 |
| kevin | M | 18 |
+-------+------+------+
2 rows in set (0.00 sec)
mysql> select * from test where name regexp '^k..n$';
Empty set (0.00 sec)
mysql> select * from test where name regexp '^k.{3}n$';
+-------+------+------+
| name | sex | arg |
+-------+------+------+
| kevin | M | 18 |
| kevin | M | 18 |
+-------+------+------+
2 rows in set (0.00 sec)
mysql> select * from test where name regexp '^k.{4}n$';
Empty set (0.00 sec)
min (int type)
max (int type)
计算最大的int型数和最小的int型数;
于该查询要注意的几件事情:
你不必有2个不同的表来进行联结。如果你想要将一个表的记录与同一个表的其它记录进行比较,可以将一个表联结到自身。
查询中,我们为表名指定别名以便能引用列并且使得每一个列引用与哪个表实例相关联更直观。
mysql> select test.name,test2.name from test ,test2;
+--------+--------+
| name | name |
+--------+--------+
| kevin | kevin |
| kevin | sherry |
| kevin | kevin |
| kevin | sherry |
| sherry | kevin |
| sherry | sherry |
+--------+--------+
6 rows in set (0.00 sec)
mysql> select t1.name,t2.name from test as t1 ,test2 as t2;
+--------+--------+
| name | name |
+--------+--------+
| kevin | kevin |
| kevin | sherry |
| kevin | kevin |
| kevin | sherry |
| sherry | kevin |
| sherry | sherry |
+--------+--------+
6 rows in set (0.04 sec)