MySQL 查询数据

1 查询全部字段mysql

1.1 使用*通配符查询全部字段sql

SELECT * FROM 表名app

1.2 在SELECT语句中指定全部字段函数

SELECT id,name from users;ui

2 查询指定字段code

2.1 查询单个字段排序

SELECT 列名 FROM 表名;it

2.2 查询多个字段class

SELECT 列名1,列名2,列名3 ...列名n from 表名select

2.3 查询指定记录

SELECT 字段名1,字段名2,...,字段名n FROM 表名 where 查询条件

2.4 带in关键字的查询

mysql> SELECT f_id from fruits where f_name in(apple, orange);

ERROR 1054 (42S22): Unknown column 'apple' in 'where clause'

mysql> SELECT f_id from fruits where f_name in('apple','orange');

+------+

| f_id |

+------+

| a1   |

| bs1  |

+------+

2 rows in set (0.00 sec)

2.5 带between and的范围查询

mysql> select f_name from fruits where f_price between 5 and 11;
+------------+
| f_name     |
+------------+
| apple      |
| blackberry |
+------------+
2 rows in set (0.00 sec)

2.6 带有like的字符匹配查询

能够和like一块儿匹配使用的通配符有 % 和 _

2.6.1 百分号通配符 %  匹配任意长度的字符,甚至包括零字符   %能够放在任意位置

mysql> select f_id,s_id,f_name from fruits where f_name like '%c%';
+------+------+------------+
| f_id | s_id | f_name     |
+------+------+------------+
| b1   |  101 | blackberry |
+------+------+------------+
1 row in set (0.00 sec)

2.6.2 下划线通配符 _ 一次只能匹配任意一个字符

select f_id, f_name from fruits where f_name like '____e';
+------+--------+
| f_id | f_name |
+------+--------+
| a1   | apple  |
+------+--------+
1 row in set (0.00 sec)

2.7 查询空值

select语句中使用 is NULL 子句,能够查询字段是否为空

mysql> select f_id, f_name from fruits where province is NULL;
+------+--------+
| f_id | f_name |
+------+--------+
| bs1  | orange |
+------+--------+
1 row in set (0.00 sec)

2.8 带and的多条件查询

使用and链接两个甚至多个查询条件,多个条件表达式之间用and分开

mysql> select * from fruits where f_price>6 and province is NOT NULL;

+------+------+------------+---------+----------+

| f_id | s_id | f_name     | f_price | province |

+------+------+------------+---------+----------+

| b1   |  101 | blackberry |   10.20 | ShanDong |

+------+------+------------+---------+----------+

1 row in set (0.00 sec)

2.9 带or的多条件查询

mysql> select * from fruits where f_name = 'apple' or province is NULL;
+------+------+--------+---------+----------+
| f_id | s_id | f_name | f_price | province |
+------+------+--------+---------+----------+
| a1   |  101 | apple  |    5.20 | HeNan    |
| bs1  |  102 | orange |   11.20 | NULL     |
+------+------+--------+---------+----------+
2 rows in set (0.00 sec)

2.10 distinct 消除重复记录

mysql> select * from fruits;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| a1   |  101 | apple      |    5.20 | HeNan    |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| bs1  |  102 | orange     |   11.20 | NULL     |
+------+------+------------+---------+----------+
3 rows in set (0.00 sec)

mysql> select distinct s_id from fruits;
+------+
| s_id |
+------+
|  101 |
|  102 |
+------+
2 rows in set (0.00 sec)

2.11 对查询结果排序

2.11.1 单列排序

mysql> select * from fruits order by f_price;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| a1   |  101 | apple      |    5.20 | HeNan    |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| bs1  |  102 | orange     |   11.20 | NULL     |
+------+------+------------+---------+----------+
3 rows in set (0.00 sec)

mysql> select * from fruits order by province;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| bs1  |  102 | orange     |   11.20 | NULL     |
| a1   |  101 | apple      |    5.20 | HeNan    |
| b1   |  101 | blackberry |   10.20 | ShanDong |
+------+------+------------+---------+----------+
3 rows in set (0.00 sec)

2.11.2 多列排序

在对多列排序的时候,只有在第一列有相同值的状况下,才会对第二列进行排序。

mysql> select * from fruits;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| a1   |  101 | apple      |    5.20 | HeNan    |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| b11  |  101 | apple      |    4.00 | NULL     |
| bs1  |  102 | orange     |   11.20 | NULL     |
+------+------+------------+---------+----------+
4 rows in set (0.00 sec)

mysql> select * from fruits order by f_name;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| a1   |  101 | apple      |    5.20 | HeNan    |
| b11  |  101 | apple      |    4.00 | NULL     |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| bs1  |  102 | orange     |   11.20 | NULL     |
+------+------+------------+---------+----------+
4 rows in set (0.00 sec)

mysql> select * from fruits order by f_name,f_price;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| b11  |  101 | apple      |    4.00 | NULL     |
| a1   |  101 | apple      |    5.20 | HeNan    |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| bs1  |  102 | orange     |   11.20 | NULL     |
+------+------+------------+---------+----------+
4 rows in set (0.00 sec)

2.11.3 指定排序方向

DESC 降序         ASC升序

mysql> select * from fruits;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| a1   |  101 | apple      |    5.20 | HeNan    |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| b11  |  101 | apple      |    4.00 | NULL     |
| bs1  |  102 | orange     |   11.20 | NULL     |
+------+------+------------+---------+----------+
4 rows in set (0.00 sec)

mysql> select * from fruits order by f_price DESC;
+------+------+------------+---------+----------+
| f_id | s_id | f_name     | f_price | province |
+------+------+------------+---------+----------+
| bs1  |  102 | orange     |   11.20 | NULL     |
| b1   |  101 | blackberry |   10.20 | ShanDong |
| a1   |  101 | apple      |    5.20 | HeNan    |
| b11  |  101 | apple      |    4.00 | NULL     |
+------+------+------------+---------+----------+
4 rows in set (0.00 sec)

2.12 分组查询

2.12.1 建立分组

group by关键字一般和集合函数一块儿使用,如MAX(),MIN(),COUNT(),SUM(),AVG().

mysql> select s_id,count(*) as total from fruits group by s_id;
+------+-------+
| s_id | total |
+------+-------+
|  101 |     3 |
|  102 |     1 |
+------+-------+
2 rows in set (0.01 sec)
mysql> select s_id,count(*) as total, group_concat(f_name) from fruits group by s_id;
+------+-------+------------------------+
| s_id | total | group_concat(f_name)   |
+------+-------+------------------------+
|  101 |     3 | apple,blackberry,apple |
|  102 |     1 | orange                 |
+------+-------+------------------------+
2 rows in set (0.00 sec)

2.12.2 使用having过滤分组

mysql> select s_id, count(*) as total from fruits group by s_id having count(*)>1;
+------+-------+
| s_id | total |
+------+-------+
|  101 |     3 |
+------+-------+
1 row in set (0.00 sec)

2.12.3 在group by子句中使用with rollup

使用with rollup关键自以后,最后一行会记录一条查询出的全部记录的总和,能够用来统计记录数量。

mysql> select s_id,count(*) as total from fruits group by s_id with rollup;
+------+-------+
| s_id | total |
+------+-------+
|  101 |     3 |
|  102 |     1 |
| NULL |     4 |
+------+-------+
3 rows in set (0.01 sec)

2.12.4 多字段分组

group by name1,name2