1.使用select从单个表中获取数据
mysql> use test_db;
mysql> create table fruits
-> (
-> f_id char(10) not null,
-> s_id int not null,
-> f_name char(255) not null,
-> primary key(f_id)
-> );
Query OK, 0 rows affected
2.插入如下数据,为select语句做铺垫
mysql> insert into fruits(f_id,s_id,f_name,f_price)
-> values("a1",101,"apple",5.2),
-> ("b1",102,"banana",6.2),
-> ("c1",103,"caomei",7.2)
-> ;
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
3.使用select语句查询指定字段f_id和f_name的数据
mysql> select f_id,f_name from fruits;
+------+--------+
| f_id | f_name |
+------+--------+
| a1 | apple |
| b1 | banana |
| c1 | caomei |
+------+--------+
3 rows in set
4.从fruits表中查询所有字段的数据
mysql> select * from fruits;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| a1 | 101 | apple | 5.2 |
| b1 | 102 | banana | 6.2 |
| c1 | 103 | caomei | 7.2 |
+------+------+--------+---------+
3 rows in set
5.用select语句指定所有字段。结果同select * from fruits;
mysql> select f_id,s_id,f_name,f_price from fruits;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| a1 | 101 | apple | 5.2 |
| b1 | 102 | banana | 6.2 |
| c1 | 103 | caomei | 7.2 |
+------+------+--------+---------+
3 rows in set
6.查询单个字段
mysql> select f_name from fruits;
+--------+
| f_name |
+--------+
| apple |
| banana |
| caomei |
+--------+
3 rows in set
7.查询多个字段
mysql> select f_name,f_price from fruits;
+--------+---------+
| f_name | f_price |
+--------+---------+
| apple | 5.2 |
| banana | 6.2 |
| caomei | 7.2 |
+--------+---------+
3 rows in set
8.查询指定记录
mysql> select f_name,f_price
-> from fruits
-> where f_price = 5.2
-> ;
+--------+---------+
| f_name | f_price |
+--------+---------+
| apple | 5.2 |
+--------+---------+
1 row in set
mysql> select f_name,f_price
-> from fruits
-> where f_name = "apple"
-> ;
+--------+---------+
| f_name | f_price |
+--------+---------+
| apple | 5.2 |
+--------+---------+
1 row in set
mysql> select f_name,f_price
-> from fruits
-> where f_price < 10
-> ;
+--------+---------+
| f_name | f_price |
+--------+---------+
| apple | 5.2 |
| banana | 6.2 |
| caomei | 7.2 |
+--------+---------+
3 rows in set
9.带IN关键字查询
mysql> select s_id,f_name,f_price
-> from fruits
-> where s_id in (101,102)
-> order by f_name
-> ;
+------+--------+---------+
| s_id | f_name | f_price |
+------+--------+---------+
| 101 | apple | 5.2 |
| 102 | banana | 6.2 |
+------+--------+---------+
2 rows in set
mysql> select s_id,f_name,f_price
-> from fruits
-> where s_id not in (101,102)
-> order by f_name
-> ;
+------+--------+---------+
| s_id | f_name | f_price |
+------+--------+---------+
| 103 | caomei | 7.2 |
+------+--------+---------+
1 row in set
10.带BETWEEN AND的范围查询
mysql> select f_name,f_price
-> from fruits
-> where f_price between 5.2 and 8.2
-> ;
+--------+---------+
| f_name | f_price |
+--------+---------+
| apple | 5.2 |
| banana | 6.2 |
| caomei | 7.2 |
+--------+---------+
3 rows in set
11.带LIKE的字符匹配查询
(1)百分号通配符 '%' ,匹配任意长度的字符,甚至包括零字符
查询所有以'b'开头的水果:
mysql> select f_id,f_name
-> from fruits
-> where f_name like "b%"
-> ;
+------+--------+
| f_id | f_name |
+------+--------+
| b1 | banana |
+------+--------+
1 row in set
查询以'b'开头,以'a'结尾的水果的名称:
mysql> select f_name
-> from fruits
-> where f_name like 'b%a'
-> ;
+--------+
| f_name |
+--------+
| banana |
+--------+
1 row in set
(2)下划线通配符'_',一次只能匹配任意一个字符。
查询以字母'e'结尾,且'e'前面只有4个字母的记录:
mysql> select f_name
-> from fruits
-> where f_name like 'b%a'
-> ;
+--------+
| f_name |
+--------+
| banana |
+--------+
1 row in set
12.查询空值
查询customers表中的c_email为空的记录的c_id,c_name和c_email字段值:
mysql> select c_id,c_name,c_email from customers where c_email is null;
+-------+--------+---------+
| c_id | c_name | c_email |
+-------+--------+---------+
| 10088 | oldboy | NULL |
+-------+--------+---------+
1 row in set
查询customers表中的c_email不为空的记录的c_id,c_name和c_email字段值:
mysql> select c_id,c_name,c_email from customers where c_email is not null;
+-------+--------+-------------------+
| c_id | c_name | c_email |
+-------+--------+-------------------+
| 10086 | zgyd | Liming@163.com |
| 10087 | stars | Jerry@hotmain.com |
+-------+--------+-------------------+
2 rows in set
13.带AND多条件查询
查询fruits表中查询s_id = 101且f_price大于等于5的水果价格和名称:
mysql> select f_id,f_price,f_name
-> from fruits
-> where s_id = "101" and f_price >= 5
-> ;
+------+---------+--------+
| f_id | f_price | f_name |
+------+---------+--------+
| a1 | 5.2 | apple |
+------+---------+--------+
1 row in set
在fruits表中查询s_id = 101或102且f_price大于5且f_name = "apple"的水果价格和名称:
mysql> select f_id,f_price,f_name
-> from fruits
-> where s_id in("101","102") and f_price >= 5 and f_name = "apple"
-> ;
+------+---------+--------+
| f_id | f_price | f_name |
+------+---------+--------+
| a1 | 5.2 | apple |
+------+---------+--------+
1 row in set
14.带OR的多条件查询
查询s_id = 101或者s_id = 102的水果供应商的f_price和f_name:
mysql> select s_id,f_name,f_price from fruits where s_id = 101 or s_id = 102;
+------+--------+---------+
| s_id | f_name | f_price |
+------+--------+---------+
| 101 | apple | 5.2 |
| 102 | banana | 6.2 |
+------+--------+---------+
2 rows in set
查询s_id = 101或者s_id = 102的水果供应商的f_price和f_name:
---》还可以:
mysql> select s_id,f_name,f_price
-> from fruits
-> where s_id in (101,102)
-> ;
+------+--------+---------+
| s_id | f_name | f_price |
+------+--------+---------+
| 101 | apple | 5.2 |
| 102 | banana | 6.2 |
+------+--------+---------+
2 rows in set
15.查询结果不重复
mysql> select distinct s_id from fruits;
+------+
| s_id |
+------+
| 101 |
| 102 |
| 103 |
+------+
3 rows in set
17.对查询结果排序
mysql> select f_name from fruits;
+--------+
| f_name |
+--------+
| apple |
| banana |
| caomei |
+--------+
3 rows in set
单列排序:
mysql> select f_name from fruits order by f_name;
+--------+
| f_name |
+--------+
| apple |
| banana |
| caomei |
+--------+
3 rows in set
多列排序:
mysql> select f_name,f_price from fruits order by f_name,f_price;
+--------+---------+
| f_name | f_price |
+--------+---------+
| apple | 5.2 |
| banana | 6.2 |
| caomei | 7.2 |
+--------+---------+
3 rows in set
指定排序方向:
查询fruits表中的f_name和f_price字段,对结果按f_price降序方式排序:
mysql> select f_name,f_price from fruits order by f_price desc;
+--------+---------+
| f_name | f_price |
+--------+---------+
| caomei | 7.2 |
| banana | 6.2 |
| apple | 5.2 |
+--------+---------+
3 rows in set
查询fruits表,先按f_price降序排序,再按f_name字段升序排序:
mysql> select f_price,f_name from fruits order by f_price desc,f_name;
+---------+--------+
| f_price | f_name |
+---------+--------+
| 7.2 | caomei |
| 6.2 | banana |
| 5.2 | apple |
+---------+--------+
3 rows in set
18.分组查询
mysql> select s_id,count(*) as total from fruits group by s_id;
+------+-------+
| s_id | total |
+------+-------+
| 101 | 1 |
| 102 | 1 |
| 103 | 1 |
+------+-------+
3 rows in set
mysql> select s_id,group_concat(f_name) as name from fruits group by s_id;
+------+--------+
| s_id | name |
+------+--------+
| 101 | apple |
| 102 | banana |
| 103 | caomei |
+------+--------+
3 rows in set
mysql> select s_id,group_concat(f_name) as names
-> from fruits
-> group by s_id having count(f_name) > 1;
Empty set
mysql> select s_id,count(*) as total
-> from fruits
-> group by s_id with rollup
-> ;
+------+-------+
| s_id | total |
+------+-------+
| 101 | 1 |
| 102 | 1 |
| 103 | 1 |
| NULL | 3 |
+------+-------+
4 rows in set
19.使用LIMIT限制查询结果的数量
显示fruits表查询结果的前4行:
mysql> select * from fruits limit 4;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| a1 | 101 | apple | 5.2 |
| b1 | 102 | banana | 6.2 |
| c1 | 103 | caomei | 7.2 |
+------+------+--------+---------+
3 rows in set
这里的1是第二行,3总行数为3行。
mysql> select * from fruits limit 1,3;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b1 | 102 | banana | 6.2 |
| c1 | 103 | caomei | 7.2 |
+------+------+--------+---------+
2 rows in set