MySQL —— 基本查詢方法

 

MySQL —— 簡單查詢與按條件查詢mysql

在MySQL中從數據表中查詢數據的基本語句時select語句。
  select語句基本語法格式:
      select 查詢內容
      from 表名
      where 表達式
      group by 字段名
      having 表達式
      order by 字段名
      limit 記錄數
每個select語句由多個子句組成。sql

1. from 表名 指定是從那張表中查詢函數


2. select 查詢內容spa

查詢全部字段 select * from 表名
*通配符:表示全部字段code

mysql> select * from test;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | A    |    4 |
|    2 | B    |    7 |
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
4 rows in set (0.06 sec)

 

查詢部分字段 select 字段名 from 表名;blog

mysql> select name from test;
+------+
| name |
+------+
| A    |
| B    |
| C    |
| D    |
+------+
4 rows in set (0.00 sec)

 

在MySQL表中,每一個字段的數據能夠當作變量處理
查詢所需的某個字段數據處理後的結果:select 字段處理方式 from 表名排序

mysql> select age-3  from test;
+-------+
| age-3 |
+-------+
|     1 |
|     4 |
|     2 |
|     9 |
+-------+
4 rows in set (0.11 sec)

 

3. where 表達式 (按條件查詢)內存

在MySQL的表查詢時,每每並非須要將全部內容所有查出,而是根據實際需求,查詢所需數據
select 查詢內容 from 表名 where 表達式;字符串

在MySQL語句中,條件表達式是指select語句的查詢條件,在where子句中可使用關係運算符
接操做數做爲查詢條件對數據進行選擇。
關係運算符:
=   等於
<>  不等於
!=  不等於
<   小於
>   大於
<=  小於等於
>=  大於等於it

例如查詢年齡大於5的信息

mysql> select * from test where age > 5;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    2 | B    |    7 |
|    4 | D    |   12 |
+------+------+------+
2 rows in set (0.04 sec)

 

in的關鍵字查詢

查詢某個指定集合內的記錄 select 查詢內容 from 表名 where 條件 in(指定內容);

mysql> select * from test where age in (5, 12);
+------+------+------+
| id   | name | age  |
+------+------+------+
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
2 rows in set (0.00 sec)

 

帶有between and 關健字查詢

查詢某個在給定範圍內的記錄 select 查詢內容 from 表名 where 條件 between 值1 and 值2

mysql> select * from test where age between 5 and 12;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    2 | B    |    7 |
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
3 rows in set (0.07 sec)

 

查詢某些爲空NULL  或 非空的記錄 select 查詢內容 from 表名 where 條件 is(not) NULL

mysql> select * from test where age is NULL;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    6 | F    | NULL |
+------+------+------+
1 row in set (0.00 sec)

 

在查詢時過濾掉重複的值:select distinct 字段名 from 表名;字段名錶示要過濾重複記錄的字段

mysql> select num from a;
+------+
| num  |
+------+
|    5 |
|   10 |
|   15 |
|   10 |
|   15 |
|    5 |
|   10 |
+------+
7 rows in set (0.00 sec)
mysql> select distinct num from a;
+------+
| num  |
+------+
|    5 |
|   10 |
|   15 |
+------+
3 rows in set (0.00 sec)

 

在使用distinct指定多個字段時,只有被指定的這些字段的值都相同,纔會被認爲是重複的

在查詢具備一類相同特徵的數據時,須要用到模糊查詢,這是就須要使用like關鍵字
select 查詢內容 from 表名 where 內容 (not) like ‘匹配的字符串’
百分號通配符 %:表示匹配任意長度的任意字符串

mysql> select name from name;
+------+
| name |
+------+
| 1112 |
| 1122 |
| 1222 |
| 2111 |
+------+
4 rows in set (0.00 sec)
mysql> select name from name where name like '11%';
+------+
| name |
+------+
| 1112 |
| 1122 |
+------+
2 rows in set (0.00 sec)

 

下劃線通配符 _ :表示匹配任意單個字符,若是須要匹配多個字符,則須要使用多個 _ 

mysql> select name from name where name like '11__';
+------+
| name |
+------+
| 1112 |
| 1122 |
+------+
2 rows in set (0.00 sec)

 

若是須要查詢帶有 % 或 _ 的數據,因爲 % 和 _ 是通配符,則須要使用 \ 進行轉義
\% 表示 %,\_ 表示 _

 

有時在查詢時爲了查詢結果更加精確,須要多個限條件,這時就須要 and(&&) 來鏈接條件

mysql> select cat_id, cat_name, parent_id from category;
+--------+---------------------------+-----------+
| cat_id | cat_name                  | parent_id |
+--------+---------------------------+-----------+
|      1 | 手機類型                  |         0 |
|      2 | CDMA手機                  |         1 |
|      3 | GSM手機                   |         1 |
|      4 | 3G手機                    |         1 |
|      5 | 雙模手機                  |         1 |
|      6 | 手機配件                  |         0 |
|      7 | 充電器                    |         6 |
|      8 | 耳機                      |         6 |
|      9 | 電池                      |         6 |
|     11 | 讀卡器和內存卡            |         6 |
|     12 | 充值卡                    |         0 |
|     13 | 小靈通/固話充值卡         |        12 |
|     14 | 移動手機充值卡            |        12 |
|     15 | 聯通手機充值卡            |        12 |
+--------+---------------------------+-----------+
14 rows in set (0.00 sec)
mysql> select cat_id, cat_name, parent_id from category
    -> where cat_id > 7 and parent_id = 6;
+--------+-----------------------+-----------+
| cat_id | cat_name              | parent_id |
+--------+-----------------------+-----------+
|      8 | 耳機                  |         6 |
|      9 | 電池                  |         6 |
|     11 | 讀卡器和內存卡        |         6 |
+--------+-----------------------+-----------+
3 rows in set (0.05 sec)

 

有時在查詢時,只須要數據知足某些條件中的某一個,這時就須要使用 or(||) 來鏈接條件

mysql> select cat_id, cat_name, parent_id from category where cat_id = 3 or cat_id = 9;
+--------+-----------+-----------+
| cat_id | cat_name  | parent_id |
+--------+-----------+-----------+
|      3 | GSM手機   |         1 |
|      9 | 電池      |         6 |
+--------+-----------+-----------+
2 rows in set (0.02 sec)

 

注意:在查詢時,and 的優先級高於 or

 

聚合函數:

  count()函數:統計記錄條數 select count(記錄) from 表名
  

mysql> select * from test;
  +------+------+------+
  | id   | name | age  |
  +------+------+------+
  |    1 | A    |    4 |
  |    2 | B    |    7 |
  |    3 | C    |    5 |
  |    4 | D    |   12 |
  |    5 | E    |    0 |
  |    6 | F    | NULL |
  +------+------+------+
  6 rows in set (0.01 sec)
  mysql> select count(name) from test;
  +-------------+
  | count(name) |
  +-------------+
  |           6 |
  +-------------+
  1 row in set (0.09 sec)

 

  sum()函數:計算表中某個字段值的總和,select sum(字段名) from 表名
  

mysql> select sum(age) from test;
+----------+
| sum(age) |
+----------+
|       28 |
+----------+
1 row in set (0.00 sec)

 

  avg()函數:計算表中某個字段的平均值 select avg(字段名) from 表名

  mysql> select avg(age) from test;
  +----------+
  | avg(age) |
  +----------+
  |   5.6000 |
  +----------+
  1 row in set (0.00 sec)

 

  max()函數:返回表中某個字段中的最大值

  mysql> select max(age) from test;
  +----------+
  | max(age) |
  +----------+
  |       12 |
  +----------+
  1 row in set (0.04 sec)

 

  min()函數:返回表中某個字段中的最小值

  mysql> select min(age) from test;
  +----------+
  | min(age) |
  +----------+
  |        0 |
  +----------+
  1 row in set (0.00 sec)

 

  分組查詢:

    在對數據表中的數據進行統計時,須要將數據按照必定的特徵分組統計,此時就需
    要使用分組查詢  select 查詢內容 from 表名 group by 分組依據 [having表達式條件]
  

  mysql> select * from test;
  +------+------+------+-------+
  | id   | name | age  | class |
  +------+------+------+-------+
  |    1 | A    |    4 |     1 |
  |    2 | B    |    7 |     1 |
  |    3 | C    |    5 |     1 |
  |    4 | D    |   12 |     2 |
  |    5 | E    |    0 |     2 |
  |    6 | F    |    8 |     3 |
  +------+------+------+-------+
  6 rows in set (0.00 sec)
  
  mysql> select max(age) from test group by class;
  +----------+
  | max(age) |
  +----------+
  |        7 |
  |       12 |
  |        8 |
  +----------+
  3 rows in set (0.03 sec)

 


對查詢結果進行排序
    select 查詢內容 from 表名 order by 排序條件 asc/desc,asc表示升序 desc表示降序
 

  mysql> select name, age from test order by age asc;
  +------+------+
  | name | age  |
  +------+------+
  | E    |    0 |
  | A    |    4 |
  | C    |    5 |
  | B    |    7 |
  | F    |    8 |
  | D    |   12 |
  +------+------+
  6 rows in set (0.00 sec)
  mysql> select name, age from test order by age desc;
  +------+------+
  | name | age  |
  +------+------+
  | D    |   12 |
  | F    |    8 |
  | B    |    7 |
  | C    |    5 |
  | A    |    4 |
  | E    |    0 |
  +------+------+

 

限制查詢:
    在查詢時,可能須要只顯示部分數據,這是須要限制查出來的數據數量
    select 查詢內容 from 表名 limit 偏移量m 記錄數n,表示從第m+1個記錄開始查詢出n條記錄

  mysql> select name, age from test order by age asc limit 2, 2;
  +------+------+
  | name | age  |
  +------+------+
  | C    |    5 |
  | B    |    7 |
  +------+------+
  2 rows in set (0.00 sec)

 

where 與 having:
    where 與 having關鍵字都用於設置條件表達式對查詢結果進行過濾,區別是having後面能夠跟聚合    函數,而where不能,一般having關鍵字都與group by 一塊兒使用,表示對分組後的數據進行過濾   

相關文章
相關標籤/搜索