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 |
		+------+------+--------+---------+

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章