#查詢數據
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 |
+------+------+--------+---------+
MySql數據查詢(一) 單表查詢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.