选择所有数据:
SELECT * FROM table_name;
mySQL中的运算符基本和C/C++等编程语言相同。
部分不同的有:
不等于<>(也可以使用!=)
逻辑与AND(也可以使用&&)
逻辑或OR(也可以使用||)
逻辑非NOT(也可以使用!)
可以使用括号改变计算的优先级。
例如对于如下表单:
+----+-----------------+--------+-------+
| ID | title | author | pages |
+----+-----------------+--------+-------+
| 1 | The Green Mile | 4 | 894 |
| 2 | Guards, Guards! | 2 | 302 |
| 3 | Imazdi | 3 | 354 |
| 4 | Gold | 1 | 405 |
| 5 | Howling Mad | 3 | 294 |
+----+-----------------+--------+-------+
选择ID在2-4之间的书本名:
SELECT title FROM book WHERE ID <= 4 && ID >=2;
结果为:
+-----------------+
| title |
+-----------------+
| Guards, Guards! |
| Imazdi |
| Gold |
+-----------------+
使用括号,删选出ID小于等于2或者author等于3的:
SELECT title FROM book WHERE !(ID > 2 && ID != 3);
null:
mySQL中NULL和编程语言中的null不同,它是一种特殊的类型,不能用作比较,例如:
WHERE author = null;这个断言语句返回的既不是true也不是false,即便author中有
null的选项。如果需要判断某一个字段为null或者not null应该使用IS操作符:
SELECT title FROM book WHERE author IS NOT NULL;
这个语句选取book中所有author非NULL的title项。
插入一行author为空的行:
INSERT INTO book(ID,title,pages)
VALUES(NULL,'Freedom',230);
现在表单变成了:
+----+-----------------+--------+-------+
| ID | title | author | pages |
+----+-----------------+--------+-------+
| 1 | The Green Mile | 4 | 894 |
| 2 | Guards, Guards! | 2 | 302 |
| 3 | Imazdi | 3 | 354 |
| 4 | Gold | 1 | 405 |
| 5 | Howling Mad | 3 | 294 |
| 6 | Freedom | NULL | 230 |
+----+-----------------+--------+-------+
选择author为空的书名和页数:
SELECT title,pages FROM book WHERE author IS NULL;
这样就把刚刚插入的author为NULL的行给选取出来了:
+---------+-------+
| title | pages |
+---------+-------+
| Freedom | 230 |
+---------+-------+
mySQL提供了"<=>"操作符判断两边的操作数是不是都是null,如果只有一边是NULL则返回0,否则返回1,例如
SELECT 1 <=> NULL, NULL <=> NULL, 1 <=> 1;
结果为(为啥1 <=> 1?):
+------------+---------------+---------+
| 1 <=> NULL | NULL <=> NULL | 1 <=> 1 |
+------------+---------------+---------+
| 0 | 1 | 1 |
+------------+---------------+---------+
成员测试:
查询一个值是否是集合中的一个成员,使用关键字IN:
SELECT TITLE FROM book WHERE author IN (1,3);
上面的语句查询作者在集合(1,3)中的书名:
+-------------+
| TITLE |
+-------------+
| Imazdi |
| Gold |
| Howling Mad |
+-------------+
查询一个值是否在一定的范围内,使用关键字BETWEEN(也可以用比较操作符来完成):
SELECT TITLE FROM book WHERE ID BETWEEN 2 AND 4;
上面的语句查询ID在2-4之间的书名。
通配符%和关键字LIKE:
可以使用LIKE和通配符%搜索含有一定字符串的内容,通配符%用来替代任意长度的字符,包括0个,
可以对LIKE前加NOT操作,即选取通配字符串外的内容。
SELECT title FROM book WHERE title LIKE 'G%';
该语句查询开始字母为G的书名:
+-----------------+
| title |
+-----------------+
| Guards, Guards! |
| Gold |
+-----------------+
字符'_','.'则只能匹配单个字符,例如Stac..匹配包含"Stac"且后面跟两个任意字符的字符串。
'[]':匹配括号内的任何字符,例如[Ss]tacey匹配"Stacey"或"stacey"的值,[a-zA-Z]匹配'a'-'z',
'A'-'Z'的任意罗马字符。
'^':匹配的字符必须以跟在'^'后的字符开头,例如与^Stacey匹配的字符必须以Stacey开头;
'$':匹配的字符必须以在'$'的字符结尾,例如与chese$匹配的字符必须以chese结尾。
'*':匹配其前面的任意个字符
扩展比较关键字REGEXP则在字符串比较中搜索任意位置的匹配字符,而不是开头。
SELECT title FROM book WHERE title REGEXP 'ee';
结果为:
+----------------+
| title |
+----------------+
| The Green Mile |
| Freedom |
+----------------+
如果使用LIKE的话将得到空的结果。