從零開始學資料庫(二)——select顯示、where、%、排序、limit、distinct、count、max等、刪和改

零零水發表於2016-04-07

(十一)使用select顯示

輸入:

select * fromsales_rep where commission>1;

顯示:

mysql>select * from sales_rep where commission>1;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               1 | Rive    | Sol       |         10 |

|               2 | John    | char      |         11 |

|               3 | Jop     | Peter      |        12 |

|               4 | dong    | wang      |         20 |

|               6 | bbb     | BB         |          2 |

|               7 | ccc     | CC         |          3 |

|               8 | ddd     | DDD        |          4 |

|               9 | ee      | EEEE       |          5 |

|              10 | ff      | FFF        |          6 |

+—————–+———+————+————+

9rows in set (0.00 sec)

 

解釋:

①select:表示使用select語句

②*:表示萬用字元(顯示所有的)。可以用某一項替換,如surname,則只顯示surname這一項;

③from sales_rep:指從表名為sales_rep的這一張表讀取內容;

④where commission>1:指的是,讀取表內commission這一個屬性大於1的所有項;

也可以改為:where first_name=`cc` :那麼就只顯示first_name的值是cc的項了(注意需要加引號)(並且不區分大小寫,注意,mysql幾乎是不區分大小寫的)

⑤;:以分號為結尾。

 

 

 

(十二)where從句

基於(十一)

輸入:

select * fromsales_rep where first_name!=`cc` or first_name=”cc”;

顯示:

mysql>select * from sales_rep where first_name!=`cc` or first_name=”cc”;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               1 | Rive    | Sol       |         10 |

|               2 | John    | char      |         11 |

|               3 | Jop     | Peter      |        12 |

|               4 | dong    | wang      |         20 |

|               5 | aaa     | AAA        |          1 |

|               6 | bbb     | BB         |          2 |

|               7 | ccc     | CC         |          3 |

|               8 | ddd     | DDD        |          4 |

|               9 | ee      | EEEE       |          5 |

|              10 | ff      | FFF        |          6 |

+—————–+———+————+————+

10rows in set (0.00 sec)

 

解釋:

①or:前後各有一條語句first_name!=`cc`first_name=”cc”

②or的效果是兩條語句只要有一條成立,便符合條件。由於一個內容要麼是cc,要麼不是cc(必然的),所以每一項都會成立(因此相當於顯示除了null)。

③and:也可以用and來連線,表示兩條語句都符合的才行。(有一條不符合就不成立)。

④多個or和and聯用:支援聯用。

or的聯用:mysql> select * fromsales_rep where first_name=`bb`or first_name=”cc”orfirst_name=”aaa”
三者符合一個的就可以。

and聯用:由此可推,可以多個and聯用。

也可以or和and混合使用,但為了避免理解出錯,請使用括號來區分層級。

 

 

 

 

(十三)萬用字元%

%是一個萬用字元,類似*,表示0個或者多個字元。

輸入:

select * fromsales_rep where first_name like “%c%”;

顯示:

mysql>select * from sales_rep where first_name like “%c%”;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               2 | John    | char      |         11 |

|               7 | ccc     | CC         |          3 |

+—————–+———+————+————+

2rows in set (0.00 sec)

 

效果:

first_name屬性裡有c字母的項,全部都是符合條件的。

 

 

 

(十四)分類

排序:(正序)

輸入:

select * fromsales_rep order by first_name;

顯示:

mysql>select * from sales_rep order by first_name;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               0 | NULL    | NULL      |       NULL |

|               8 | NULL    | NULL      |       NULL |

|               5 | aaa     | AAA        |          1 |

|               6 | bbb     | BB         |          2 |

|               7 | ccc     | CC         |          3 |

|               2 | John    | char      |         11 |

|               8 | ddd     | DDD        |          4 |

|               9 | ee      | EEEE       |          5 |

|              10 | ff      | FFF        |          6 |

|               3 | Jop     | Peter      |        12 |

|               1 | Rive    | Sol       |         10 |

|               4 | dong    | wang      |         20 |

+—————–+———+————+————+

15rows in set (0.00 sec)

 

效果:

在first_name項,以字母順序進行排序(會顯示null項);

 

 

 

排序:(多重排序)

輸入:

select * fromsales_rep order by surname,first_name;

顯示:

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               0 | NULL    | NULL      |       NULL |

|               8 | NULL    | NULL      |       NULL |

|               5 | aaa     | AAA        |          1 |

|               5 | bbb     | AAA        |          5 |

|               6 | bbb     | BB         |          2 |

|               7 | ccc     | CC         |          3 |

|               8 | ddd     | DDD        |          4 |

|               4 | dong    | wang      |         20 |

|               9 | ee      | EEEE       |          5 |

|              10 | ff      | FFF        |          6 |

|               2 | John    | char      |         11 |

|               3 | Jop     | Peter      |        12 |

|               1 | Rive    | Sol       |         10 |

+—————–+———+————+————+

16 rows in set (0.00 sec)

效果說明:

①多了一個surname作為引數。效果是,先以第一個引數所在的項為順序進行排序顯示,假如第一個一樣,以第二個引數進行排序;

②由此類推,可以有更多項。

 

 

 

排序:(倒序)

輸入:

select * fromsales_rep order by first_name desc;

顯示:

mysql>select * from sales_rep order by first_name desc;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               4 | dong   | wang       |         20 |

|               1 | Rive    | Sol       |         10 |

|               3 | Jop     | Peter      |        12 |

|              10 | ff      | FFF        |          6 |

|               9 | ee      | EEEE       |         5 |

|               8 | ddd     | DDD        |          4 |

|               2 | John    | char      |         11 |

|               7 | ccc     | CC         |          3 |

|               6 | bbb     | BB         |          2 |

|               5 | bbb     | AAA        |          5 |

|               5 | aaa     | AAA        |          1 |

|               0 | NULL    | NULL      |       NULL |

|               8 | NULL    | NULL      |       NULL |

+—————–+———+————+————+

16rows in set (0.00 sec)

區別:

在正序的命令後面加一個desc即可。

 

 

 

排序:(正序關鍵字)

假如需要第一個引數按正序,相同的情況下,第二個引數按反序進行排列。

輸入:

select * fromsales_rep order by surname asc, employes_number desc;

顯示:

mysql>select * from sales_rep order by surname asc, employes_number desc;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|              10 | NULL    | NULL      |       NULL |

|               9 | NULL    | NULL      |       NULL |

|               8 | NULL    | NULL      |       NULL |

|               0 | NULL    | NULL      |       NULL |

|               0 | NULL    | NULL      |       NULL |

|               5 | aaa     | AAA        |          1 |

|               6 | bbb     | BB         |          2 |

|               5 | bbb     | AAA        |          5 |

|               7 | ccc     | CC         |          3 |

|               8 | ddd     | DDD        |          4 |

|               4 | dong    | wang      |         20 |

|               9 | ee      | EEEE       |          5 |

|              10 | ff      | FFF        |          6 |

|               2 | John    | char      |         11 |

|               3 | Jop     | Peter      |        12 |

|               1 | Rive    | Sol       |         10 |

+—————–+———+————+————+

16rows in set (0.00 sec)

 

 

 

(十五)限制返回的項數LIMIT

輸出行數限制:

輸入:(在排序:(正序關鍵字)基礎上修改)

select * from sales_rep order by surname asc, employes_number desclimit 1;

顯示:

mysql>select * from sales_rep order by surname asc, employes_number desc limit

1;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|              10 | NULL    | NULL      |       NULL |

+—————–+———+————+————+

1row in set (0.00 sec)

 

解釋:

①limit可以設定為0(雖然不顯示內容,但是可以用於在大的資料庫中進行測試查詢);

②limit後面的數字決定了返回的行數;

 

 

輸出行數限制+偏移限制:

輸入:

select * fromsales_rep order by surname asc, employes_number desc limit 1,2;

顯示:

mysql>select * from sales_rep order by surname asc, employes_number desc limit

1,2;

+—————–+———+————+————+

|employes_number | surname | first_name | commission |

+—————–+———+————+————+

|               9 | NULL    | NULL      |       NULL |

|               8 | NULL    | NULL      |       NULL |

+—————–+———+————+————+

2rows in set (0.00 sec)

解釋:

①引數1表示從開始偏移幾行(即從理論應該顯示的結果的第幾行開始顯示);

②引數2表示顯示幾行。

③1,2表示從第2行(偏移1)開始顯示,顯示2行

 

 

 

 

(十六)返回最大值MAX()

輸入:

selectmax(commission) from sales_rep;

顯示:

mysql>select max(commission) from sales_rep;

+—————–+

|max(commission) |

+—————–+

|              20 |

+—————–+

1row in set (0.00 sec)

效果:

返回commission這一項中最大的值。(對字母也有效)

 

 

 

(十七)防止顯示重複記錄distinct

輸入:

selectdistinct first_name from sales_rep;

顯示:

mysql>select distinct first_name from sales_rep;

+————+

|first_name |

+————+

|Sol        |

|char       |

|Peter      |

|wang       |

|AAA        |

|BB         |

|CC         |

|NULL       |

|DDD        |

|EEEE       |

|FFF        |

+————+

11rows in set (0.00 sec)

效果:

①原本都個NULL,這裡只顯示一個了;

②原本2個AAA,這裡只顯示一個了;

 

 

 

(十八)計數count()

顯示有效資料的行數(不顯示null):

輸入:

selectcount(first_name) from sales_rep;

顯示:

mysql>select count(first_name) from sales_rep;

+——————-+

|count(first_name) |

+——————-+

|                11 |

+——————-+

1row in set (0.00 sec)

效果:

①除了null都顯示;

 

 

顯示所有資料的行數(貌似除非都是null,否則就顯示):

輸入:

selectcount(*) from sales_rep;

顯示:

mysql>select count(*) from sales_rep;

+———-+

|count(*) |

+———-+

|       16 |

+———-+

1row in set (0.00 sec)

效果:

①即使有一項是null(其他項不是),也被計算在內;

 

 

顯示行數:(重複項算一項,使用distinct)

輸入:

selectcount(distinct first_name) from sales_rep;

顯示:

mysql>select count(distinct first_name) from sales_rep;

+—————————-+

|count(distinct first_name) |

+—————————-+

|                         10 |

+—————————-+

1row in set (0.00 sec)

效果:

①該項(first_name)中如果有重複的,記作一項。

 

 

(十九)平均、最小、總和

平均:avg()

最小:min()

總和:sum()

 

輸入:

selectsum(commission) from sales_rep;

顯示:

mysql>select sum(commission) from sales_rep;

+—————–+

|sum(commission) |

+—————–+

|              79 |

+—————–+

1row in set (0.00 sec)

 

效果:

①三個方法類似,結果不同;

②對字串無效

 

 

 

(二十)對計算結果修改(不影響原資料)

輸入:

selectemployes_number ,surname, commission+100 from sales_rep;

顯示:

mysql>select employes_number ,surname, commission+100 from sales_rep;

+—————–+———+—————-+

|employes_number | surname | commission+100 |

+—————–+———+—————-+

|               1 | Rive    |           110 |

|               2 | John    |           111 |

|               3 | Jop     |            112 |

|               4 | dong    |           120 |

|               5 | aaa     |            101 |

|               6 | bbb     |            102 |

|               7 | ccc     |            103 |

|               8 | NULL    |          NULL |

|               9 | NULL    |          NULL |

|              10 | NULL    |          NULL |

|               0 | NULL    |          NULL |

|               8 | ddd     |            104 |

|               9 | ee      |            105 |

|              10 | ff      |            106 |

|               0 | NULL    |          NULL |

|               5 | bbb     |            105 |

+—————–+———+—————-+

16rows in set (0.00 sec)

 

效果:

①指定項顯示結果 + 100,(commission+100);

②顯示選擇的項(employes_number ,surname,commission);

③不影響原資料;

 

 

 

(二十一)刪除記錄

輸入:

delete fromsales_rep where surname=”aaa”;

顯示:

mysql> delete from sales_rep where surname=”aaa”;

Query OK, 1 row affected (0.06 sec)

 

效果:

①刪除值為null的項:delete fromsales_rep where surname is null;

②刪除記錄將刪除所有符合要求的(所以儘量使用唯一項,例如類似id的東西);

③假如輸入delete from sales_rep 將刪除所有項

 

 

 

(二十二)修改記錄

輸入:

updatesales_rep set commission = 20 where employes_number=1;

顯示:

mysql> update sales_rep set commission = 20 where employes_number=1;

Query OK, 1 row affected (0.06 sec)

Rows matched: 1  Changed: 1  Warnings: 0

效果:

①employes_number的值是1的項,其commission的值被更改為20。

 


相關文章