1.IN
mysql> select * from pet where name in('lzh','cyb');
+------+-------+------+------------+
| name | owner | sex | birth |
+------+-------+------+------------+
| cyb | lzh | Y | 1996-05-25 |
| lzh | cyb | N | 1996-03-24 |
+------+-------+------+------------+
2 rows in set (0.00 sec)
2.BETWEEN AND
mysql> select * from pet where birth BETWEEN '1996-05-25' and '2017-3-24';
+------+-------+------+------------+
| name | owner | sex | birth |
+------+-------+------+------------+
| lzk | NULL | Y | 1996-10-01 |
| cyb | lzh | Y | 1996-05-25 |
| HEHE | NULL | Y | 2017-03-24 |
| lzk | NULL | Y | 1996-10-01 |
| lzk | NULL | Y | 1996-10-01 |
+------+-------+------+------------+
5 rows in set (0.00 sec)
3.带LIKE的字符串匹配查询
%:匹配一个或者多个字符,长度可以为0.
_:匹配一个字符。
mysql> select * from pet where name like 'l_k';
+------+-------+------+------------+
| name | owner | sex | birth |
+------+-------+------+------------+
| lzk | NULL | Y | 1996-10-01 |
| lzk | NULL | Y | 1996-10-01 |
| lzk | NULL | Y | 1996-10-01 |
+------+-------+------+------------+
3 rows in set (0.00 sec)
mysql> select * from pet where name like "l%";
+------+-------+------+------------+
| name | owner | sex | birth |
+------+-------+------+------------+
| lzk | NULL | Y | 1996-10-01 |
| leap | root | N | 1996-03-24 |
| lzh | cyb | N | 1996-03-24 |
| lzk | NULL | Y | 1996-10-01 |
| lzk | NULL | Y | 1996-10-01 |
+------+-------+------+------------+
5 rows in set (0.00 sec)
4.用DISTINCT关键字取出结果中的重复行
mysql> select DISTINCT name from pet where name like "l%";
+------+
| name |
+------+
| lzk |
| leap |
| lzh |
+------+
3 rows in set (0.00 sec)
5.ORDER by +字段名 //按什么字段进行排序.
6.使用 GROUP BY +字段名表示以什么什么字段进行分组,这样分组中只会每组随机显示一个条目。
另外我们可以使用GROUP_CONCAT(字段)这样就会将分组后指定的字段的所有值都显示出来。
mysql> select * ,GROUP_CONCAT(name) from pet group by sex;
+------+-------+------+------------+----------------------+
| name | owner | sex | birth | GROUP_CONCAT(name) |
+------+-------+------+------------+----------------------+
| | NULL | NULL | NULL | |
| leap | root | N | 1996-03-24 | leap,lzh |
| lzk | NULL | Y | 1996-10-01 | lzk,cyb,HEHE,lzk,lzk |
+------+-------+------+------------+----------------------+
7.可以使用LIMIT限制查询结果的数量。
使用方法:
select xx from table_name limit 2; //在所有的查询记录中取前两条。
select xx from table_name limit n,m; //从编号为n的记录中查询三条记录。
8.使用聚合函数进行查询——count函数
对于除*以外的函数,返回所选择集合中非NULL值的数目。
对于*返回所选择集合中包含NULL值的数目。
9.连接查询。
连接是指把不同表的记录连到一起。
内连接查询:内连接表示相等的连接,即连接后的表中某个字段与每个表中的都相同。
外链接查询:外连接是指使用OUTER,JOIN关键字将两个表连接起来,外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表、右表或两边连接表中所有的数据行。
SELECT 字段名 from table_name 表1 LEFT|RIGHT JOIN 表2 ON 表1.字段名=表2.字段名 ;
mysql> select owner,information.passward,information.create_time from pet left join information on information.user=pet.name;
//左连接的特点是左表中有多少行,那么最后匹配出来的条目就有多少条
+-------+----------+---------------------+
| owner | passward | create_time |
+-------+----------+---------------------+
| NULL | NULL | NULL |
| root | NULL | NULL |
| NULL | NULL | NULL |
| lzh | 666666 | 2017-03-30 17:36:50 |
| NULL | NULL | NULL |
| cyb | 999999 | 2017-03-27 17:47:47 |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
| NULL | NULL | NULL |
+-------+----------+---------------------+
9 rows in set (0.02 sec)
//下面事以右连接的方式进行查询.
mysql> select owner,information.passward,information.create_time from pet right join information on information.user=pet.name;
+-------+----------+---------------------+
| owner | passward | create_time |
+-------+----------+---------------------+
| cyb | 999999 | 2017-03-27 17:47:47 |
| lzh | 666666 | 2017-03-30 17:36:50 |
+-------+----------+---------------------+
2 rows in set (0.00 sec)
//复合连接查询
//复合连接查询又称为复合条件查询,在连接查询时,我们可以增加其他的限制条件,复合查询的长度取决于最短的表。
mysql> select owner,information.passward,information.create_time from pet,information where information.user=pet.name;
+-------+----------+---------------------+
| owner | passward | create_time |
+-------+----------+---------------------+
| lzh | 666666 | 2017-03-30 17:36:50 |
| cyb | 999999 | 2017-03-27 17:47:47 |
+-------+----------+---------------------+
2 rows in set (0.00 sec)
10.子查询:所谓的子查询就是SELECT查询是另一个查询的附属,从MySQL4.1开始就可以嵌套多个查询,在外一层的查询中使用的是里面一层查询产生的结果集。
当遇到这样的多层查询时,MySQL从最内层的查询开始,然后移动到外层,在这个过程中每个查询产生的结果集都被赋给包围它的父查询。
带IN关键字的子查询:IN关键字可以检测结果中是否存在某个特定的值,如果检测成功执行外部的查询。
mysql> select * from information where user in(select name from pet);
//父查询 //子查询
+----+------+----------+---------------------+-------------+
| id | user | passward | create_time | email |
+----+------+----------+---------------------+-------------+
| 1 | lzh | 999999 | 2017-03-27 17:47:47 | 123@163.com |
| 2 | cyb | 666666 | 2017-03-30 17:36:50 | 321@163.com |
+----+------+----------+---------------------+-------------+
带EXISTS关键字的子查询;使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值(如果内层查询到满足条件的记录,就返回true),当返回为true时,外层语句将进行查询。
mysql> select * from information where exists(select * from pet where name="lzh");
+----+------+----------+---------------------+-------------+
| id | user | passward | create_time | email |
+----+------+----------+---------------------+-------------+
| 1 | lzh | 999999 | 2017-03-27 17:47:47 | 123@163.com |
| 2 | cyb | 666666 | 2017-03-30 17:36:50 | 321@163.com |
+----+------+----------+---------------------+-------------+
2 rows in set (0.00 sec)
使用正则表达式进行查询
字段名 REGEXP ‘匹配方式’
^:匹配以特定字符串开头的记录。
$:匹配以特定字符串结尾的记录。
.:匹配字符串的任意一个字符包括回车或者换行。
[字符set]:匹配字符集合中的任意一个字符。
[^字符set]:匹配字符集合以外的任意一个字符。
s1|s2|s3:匹配s1,s2,s3中的任意一个字符串。
*:匹配多个该符号之前的字符,包括0个或者1个。
+:匹配多个符号之间前字符,包括0个。