MySql数据查询(一) 单表查询

#查询数据
1.基本查询语句
	select 
		(*|<字段列表>)
		[
		 from <表1>,<表2>... 
		 [where <表达式>]
		 [group by <group by definition>]
		 [having <expression> [{<operator> <expression>} ...]]
		 [order by <order by definition>]
		 [limit [<offset>,] <row count>]
		]
	select 字段1,字段2.... from 表或视图 where 查询条件;
	{*| <字段列表>}:包含星号通配符选择字段列表,表示查询字段,字段列至少包含一个字段名称,多个字段每个字段间用逗号隔开,最后一个字段后不加逗号
	from<表1>,<表2>... 表1和表2查询数据的来源,可以是多个
	where 可选项,限定查询行必须满足的查询条件
	group by <字段>:按照指定的字段分组,显示查询出来的数据
	order by <字段>:按照什么样的顺序显示查询出来的数据,可进行的排序有升序(ASC)、降序(DESC)
	limit [<offset>,] <row count>:控制每次查询显示的数据条数
#单表查询
1.查询所有字段
	(1)	格式:select * from 表名 或者 select 所有列名 from 表名
		作用: 从一个表中检索所有记录
		eg.
			mysql> select * from test1;
			+------+------+------------+---------+
			| f_id | s_id | f_name     | f_price |
			+------+------+------------+---------+
			| a1   |  101 | apple      |    5.20 |
			| a2   |  103 | apricot    |    2.20 |
			| b1   |  102 | blackberry |   10.20 |
			| b2   |  104 | berry      |    7.60 |
			| b5   |  107 | xxxx       |    3.60 |
			| bs1  |  103 | orange     |   11.20 |
			| bs2  |  104 | melon      |    8.20 |
			| c0   |  101 | cherry     |    3.20 |
			| l2   |  104 | lemon      |    6.40 |
			| m1   |  106 | mango      |   15.70 |
			| m2   |  105 | xbabay     |    2.60 |
			| m3   |  105 | xxtt       |   11.60 |
			| o2   |  107 | coconut    |    9.20 |
			| t1   |  105 | banana     |   10.30 |
			| t2   |  106 | grape      |    5.30 |
			| t4   |  107 | xbababa    |    3.60 |
			+------+------+------------+---------+
2.查询指定字段
	(1)	格式:select 列名 from 表名
		作用:查询表中的某一个字段
		eg.
			mysql> select f_id from test1;
			+------+
			| f_id |
			+------+
			| a1   |
			| a2   |
			| b1   |
			| b2   |
			| b5   |
			| bs1  |
			| bs2  |
			| c0   |
			| l2   |
			| m1   |
			| m2   |
			| m3   |
			| o2   |
			| t1   |
			| t2   |
			| t4   |
			+------+
	(2)	格式:select 字段名1,字段名2,...,字段名n from 表名
		作用:查询表中的多个字段
		eg.
			mysql> select f_name,f_price from test1;
			+------------+---------+
			| f_name     | f_price |
			+------------+---------+
			| apple      |    5.20 |
			| apricot    |    2.20 |
			| blackberry |   10.20 |
			| berry      |    7.60 |
			| xxxx       |    3.60 |
			| orange     |   11.20 |
			| melon      |    8.20 |
			| cherry     |    3.20 |
			| lemon      |    6.40 |
			| mango      |   15.70 |
			| xbabay     |    2.60 |
			| xxtt       |   11.60 |
			| coconut    |    9.20 |
			| banana     |   10.30 |
			| grape      |    5.30 |
			| xbababa    |    3.60 |
			+------------+---------+
3.查询指定记录
	格式:select 字段名1,字段名2,...,字段名n from 表名 where 查询条件
	作用:从表中根据字段名查询符合查询条件的值
		where条件判断符
	操作符			说明
	=				相等
	<>,!=			不相等
	<				小于
	<=				小于或者等于
	>				大于
	>=				大于或者等于
	between			位于两值之间
	eg.
		mysql> select f_name,f_price from test1 where f_price < 10.00;
		+---------+---------+
		| f_name  | f_price |
		+---------+---------+
		| apple   |    5.20 |
		| apricot |    2.20 |
		| berry   |    7.60 |
		| xxxx    |    3.60 |
		| melon   |    8.20 |
		| cherry  |    3.20 |
		| lemon   |    6.40 |
		| xbabay  |    2.60 |
		| coconut |    9.20 |
		| grape   |    5.30 |
		| xbababa |    3.60 |
		+---------+---------+
4.带IN关键字查询
	(1)	格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x IN (条件) order by 字段名_v
		作用:从表中查询数据,且字段名_x在条件中,并安照字段名_v排序
		eg.
			mysql> select s_id,f_name,f_price from test1 where s_id IN (101,102) order by f_name;  
			+------+------------+---------+
			| s_id | f_name     | f_price |
			+------+------------+---------+
			|  101 | apple      |    5.20 |
			|  102 | blackberry |   10.20 |
			|  101 | cherry     |    3.20 |
	(2)	格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x NOT IN (条件) order by 字段名_v
		作用:从表中查询数据,且字段名_x不在条件中,并安照字段名_v排序
		eg.
			mysql> select s_id,f_name,f_price from test1 where s_id NOT IN (101,102) order by f_name;
			+------+---------+---------+
			| s_id | f_name  | f_price |
			+------+---------+---------+
			|  103 | apricot |    2.20 |
			|  105 | banana  |   10.30 |
			|  104 | berry   |    7.60 |
			|  107 | coconut |    9.20 |
			|  106 | grape   |    5.30 |
			|  104 | lemon   |    6.40 |
			|  106 | mango   |   15.70 |
			|  104 | melon   |    8.20 |
			|  103 | orange  |   11.20 |
			|  107 | xbababa |    3.60 |
			|  105 | xbabay  |    2.60 |
			|  105 | xxtt    |   11.60 |
			|  107 | xxxx    |    3.60 |
			+------+---------+---------+
5.带between and范围查询
	格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x between 值1 and 值2;
	作用:查询符合在between and之间的值
	eg.
		mysql> select f_name,f_price from test1 where f_price between 2.00 and 10.00;
		+---------+---------+
		| f_name  | f_price |
		+---------+---------+
		| apple   |    5.20 |
		| apricot |    2.20 |
		| berry   |    7.60 |
		| xxxx    |    3.60 |
		| melon   |    8.20 |
		| cherry  |    3.20 |
		| lemon   |    6.40 |
		| xbabay  |    2.60 |
		| coconut |    9.20 |
		| grape   |    5.30 |
		| xbababa |    3.60 |
		+---------+---------+
6.带like的字符匹配查询
	(1).通配符%,匹配任意长度的字符,包括零字符
	格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x f_name 'b_%'
	作用:查询表中以b开头的f_name,%可以放在任何位置,%g%,中间包含g字符的f_name
	eg.
		mysql> select f_id,f_name from test1 where f_name like 'b%';
		+------+------------+
		| f_id | f_name     |
		+------+------------+
		| b1   | blackberry |
		| b2   | berry      |
		| t1   | banana     |
		+------+------------+
	(2).通配符'-',匹配任意一个字符
	格式:select 字段名1,字段名2,...,字段名n from 表名 where 字段名_x f_name '----y'
	作用:查询以y结尾,且y前面有4个字母记录
	eg.
		mysql> select f_id,f_name from test1 where f_name like '____y';
		+------+--------+
		| f_id | f_name |
		+------+--------+
		| b2   | berry  |
		+------+--------+
7.查询空值
	空值为NULL,不等同于0,也不等同于空字符串,表示数据未知、不适用或将在以后添加数据
	格式:select 字段名1、字段名2、... from 表名 where 字段名 is null;
	作用:从表中查询数据,并判断字段名是否为空
	eg.
		mysql> select c_id, c_name,c_email from test2 where c_email is null;
		+-------+-----------+---------+
		| c_id  | c_name    | c_email |
		+-------+-----------+---------+
		| 10003 | NetbHoood | NULL    |
		+-------+-----------+---------+
	格式:select 字段名1、字段名2、... from 表名 where 字段名  is not null;
	作用:从表中查询数据,并判断字段名是否为空
	eg.
		mysql> select c_id, c_name,c_email from test2 where c_email is not null;     
		+-------+---------+-------------------+
		| c_id  | c_name  | c_email           |
		+-------+---------+-------------------+
		| 10001 | redhook | [email protected]     |
		| 10002 | Stars   | [email protected] |
		| 10004 | JOTO    | [email protected]   |
		+-------+---------+-------------------+
8.带AND的多条件查询
	格式:select 字段名1、字段名2、... from 表名 where 条件1 and 条件2;
	作用:多条件查询,&的关系
	eg.
		mysql> select f_id, f_price, f_name from test1 where s_id = '101' and f_price >=5;
		+------+---------+--------+
		| f_id | f_price | f_name |
		+------+---------+--------+
		| a1   |    5.20 | apple  |
		+------+---------+--------+
9.带OR的多条件查询
	格式:select 字段名1、字段名2、... from 表名 where 条件1 or 条件2;
	作用:多条件查询,|的关系
	eg.
		mysql> select f_id, f_price, f_name from test1 where s_id = 101 or s_id = 102;  
		+------+---------+------------+
		| f_id | f_price | f_name     |
		+------+---------+------------+
		| a1   |    5.20 | apple      |
		| b1   |   10.20 | blackberry |
		| c0   |    3.20 | cherry     |
		+------+---------+------------+
10.查询结果不重复
	格式:select distinct 字段名 from 表名;
	作用:消除表中重复的记录值
	eg.
		mysql> select s_id from test1;         
		+------+
		| s_id |
		+------+
		|  101 |
		|  103 |
		|  102 |
		|  104 |
		|  107 |
		|  103 |
		|  104 |
		|  101 |
		|  104 |
		|  106 |
		|  105 |
		|  105 |
		|  107 |
		|  105 |
		|  106 |
		|  107 |
		+------+
		mysql> select distinct s_id from test1;
		+------+
		| s_id |
		+------+
		|  101 |
		|  103 |
		|  102 |
		|  104 |
		|  107 |
		|  106 |
		|  105 |
		+------+
11.对查询结果排序
	(1).单列排序
		格式:select 字段名 from 表名 order by 字段名;
		作用:将查询的结果进行排序
		eg.
			mysql> select f_name from test1 order by f_name;
			+------------+
			| f_name     |
			+------------+
			| apple      |
			| apricot    |
			| banana     |
			| berry      |
			| blackberry |
			| cherry     |
			| coconut    |
			| grape      |
			| lemon      |
			| mango      |
			| melon      |
			| orange     |
			| xbababa    |
			| xbabay     |
			| xxtt       |
			| xxxx       |
			+------------+
			mysql> select f_name from test1 order by f_name;
			+------------+
			| f_name     |
			+------------+
			| apple      |
			| apricot    |
			| banana     |
			| berry      |
			| blackberry |
			| cherry     |
			| coconut    |
			| grape      |
			| lemon      |
			| mango      |
			| melon      |
			| orange     |
			| xbababa    |
			| xbabay     |
			| xxtt       |
			| xxxx       |
			+------------+ 
	(2)多列排序
		格式:selct 字段名1,字段名2 from 表名 order by 字段名1,字段名2
		作用:从表中查询字段名1,字段名2 先按字段名1排序,再按字段名2排序
		eg.
			mysql> select f_name from test1 order by f_name;
			+------------+
			| f_name     |
			+------------+
			| apple      |
			| apricot    |
			| banana     |
			| berry      |
			| blackberry |
			| cherry     |
			| coconut    |
			| grape      |
			| lemon      |
			| mango      |
			| melon      |
			| orange     |
			| xbababa    |
			| xbabay     |
			| xxtt       |
			| xxxx       |
			+------------+
	(3)指定排序方式
		格式:select 字段名1,字段名2 from 表名 order by 字段名 DESC;
		作用:将字段名按照降序方式排序,不加参数DESC默认为升序方式,升序的参数为(ASC)
		注意:排序只应用于位于其前面的字段
		eg.
			mysql> select f_price,f_name from test1 order by f_price DESC, f_name;
			+---------+------------+
			| f_price | f_name     |
			+---------+------------+
			|   15.70 | mango      |
			|   11.60 | xxtt       |
			|   11.20 | orange     |
			|   10.30 | banana     |
			|   10.20 | blackberry |
			|    9.20 | coconut    |
			|    8.20 | melon      |
			|    7.60 | berry      |
			|    6.40 | lemon      |
			|    5.30 | grape      |
			|    5.20 | apple      |
			|    3.60 | xbababa    |
			|    3.60 | xxxx       |
			|    3.20 | cherry     |
			|    2.60 | xbabay     |
			|    2.20 | apricot    |
			+---------+------------+
12.分组查询
	[GROUP BY 字段]  [having <条件表达式>]
	(1)创建分组
		格式:select 字段名 from 表名 group by 字段名;
		作用:从表中查询数据,并安装字段名进行分组
		eg.
			mysql> select s_id, count(*) as Total from test1 group by s_id;
			+------+-------+
			| s_id | Total |
			+------+-------+
			|  101 |     2 |
			|  102 |     1 |
			|  103 |     2 |
			|  104 |     3 |
			|  105 |     3 |
			|  106 |     2 |
			|  107 |     3 |
			+------+-------+
	(2)使用having过滤分组
		格式:select 字段名 from 表名 group by 字段名 having 条件
		作用:将查询出来的数据根据条件再次进行过滤
		eg.
			mysql> select s_id, count(*) as Total from test1 group by s_id having count(*) > 1;
			+------+-------+
			| s_id | Total |
			+------+-------+
			|  101 |     2 |
			|  103 |     2 |
			|  104 |     3 |
			|  105 |     3 |
			|  106 |     2 |
			|  107 |     3 |
			+------+-------+
	(3)使用with rollup
		格式:select 字段名 from  表名 group by 字段名 with rollup;
		作用:计算查询出来的所有记录的总和
		eg.
			mysql> select s_id, count(*) as Total from test1 group by s_id having count(*) > 1;
			+------+-------+
			| s_id | Total |
			+------+-------+
			|  101 |     2 |
			|  103 |     2 |
			|  104 |     3 |
			|  105 |     3 |
			|  106 |     2 |
			|  107 |     3 |
			+------+-------+
	(4)多字段分组
		格式:select 字段名1,字段名2 from 表名 group by 字段名1,字段名2
		作用:将查询到的数据进行分组,从左到右的顺序依次执行,第一个相同才会执行第二个条件
		eg.
			mysql> select s_id,f_name, count(*) from test1 group by s_id,f_name;
			+------+------------+----------+
			| s_id | f_name     | count(*) |
			+------+------------+----------+
			|  101 | apple      |        1 |
			|  101 | cherry     |        1 |
			|  102 | blackberry |        1 |
			|  103 | apricot    |        1 |
			|  103 | orange     |        1 |
			|  104 | berry      |        1 |
			|  104 | lemon      |        1 |
			|  104 | melon      |        1 |
			|  105 | banana     |        1 |
			|  105 | xbabay     |        1 |
			|  105 | xxtt       |        1 |
			|  106 | grape      |        1 |
			|  106 | mango      |        1 |
			|  107 | coconut    |        1 |
			|  107 | xbababa    |        1 |
			|  107 | xxxx       |        1 |
			+------+------------+----------+
	(5)group by和order by一起使用
		格式:select 字段名1,sum(字段名2 * 字段名3) as 变量名 from 表名 group by 字段名1 having sum(字段名2 * 字段名3) >= 100 order by 变量名
		作用:从表中查询指定数据,并对指定的数据进行排序
		注意:使用rollup时不能同时使用order by,两者互斥
13.使用limit限制查询结果数量
	格式:select * from 表名 limit [位置偏移量,] 行数,位置偏移量表示从哪一行开始,默认为0,表示从第一行开始
	作用:返回查询结果中指定的一些信息
	eg.
		mysql> select * from test1 limit 4,3;
		+------+------+--------+---------+
		| f_id | s_id | f_name | f_price |
		+------+------+--------+---------+
		| b5   |  107 | xxxx   |    3.60 |
		| bs1  |  103 | orange |   11.20 |
		| bs2  |  104 | melon  |    8.20 |
		+------+------+--------+---------+

猜你喜欢

转载自blog.csdn.net/poetry_and_distance/article/details/79813725