1. 程式人生 > >簡單學習三、Mysql語句之表內容操作

簡單學習三、Mysql語句之表內容操作

表內容的操作

1、增

insert into 表 (列名,列名...) values (值,值,值...)
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)


insert into 表 (列名,列名...) select 列名,列名... from 表

2、刪

#刪除表
drop table 表名 #先清空表
#清表資料
delete from 表名
delete from 表名 where 條件1 and 條件2


3、改

update 表 set 列名 = '值' where 條件


4、查

select * from 表
select * from 表 where 條件
select 列名1,列名2,列名3 as 新列名 from 表 where 條件 #as 更改列名3顯示的列名


5、其他(條件、萬用字元、分頁、排序、連表、組合、分組)

A、按條件
mysql> select * from a;
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   1 | zhangsan   |   18 |        2 |
|   2 | wanwu      |   18 |        2 |
|   3 | lisi       |   19 |        3 |
|   4 | zhangfei   |   22 |        5 |
|   5 | wuhua      |   12 |        1 |
|   6 | laohu      |   33 |        4 |
|   7 | houyi      |   23 |        2 |
|   8 | zhengzheng |   33 |        5 |
+-----+------------+------+----------+
8 rows in set (0.00 sec)
~~~A.a~~~    select * from 表 where 條件1 and 條件2 and 條件3;

mysql> select * from a where age = 23 and part_nid = 2;
+-----+-------+------+----------+
| nid | name  | age  | part_nid |
+-----+-------+------+----------+
|   7 | houyi |   23 |        2 |
+-----+-------+------+----------+
1 row in set (0.00 sec)
~~~A.b~~~    select * from 表 where nid between 2 and 5; #nid等於2到5範圍內

mysql> select * from a where nid between 2 and 5;
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   2 | wanwu    |   18 |        2 |
|   3 | lisi     |   19 |        3 |
|   4 | zhangfei |   22 |        5 |
|   5 | wuhua    |   12 |        1 |
+-----+----------+------+----------+
4 rows in set (0.00 sec)
~~~A.c~~~    select * from 表 where nid in (1,3,4) #nid 等於1或3或4

mysql> select * from a where nid in (1,3,4);
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   1 | zhangsan |   18 |        2 |
|   3 | lisi     |   19 |        3 |
|   4 | zhangfei |   22 |        5 |
+-----+----------+------+----------+
3 rows in set (0.00 sec)
~~~A.e~~~    select * from 表 where id not in (11,22,33)#id 不等於1或3或4

mysql> select * from a where nid not in (1,3,4);
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   2 | wanwu      |   18 |        2 |
|   5 | wuhua      |   12 |        1 |
|   6 | laohu      |   33 |        4 |
|   7 | houyi      |   23 |        2 |
|   8 | zhengzheng |   33 |        5 |
+-----+------------+------+----------+
5 rows in set (0.00 sec)
~~~A.f~~~    select * from 表 where nid in (select nid from 表) #nid 是否包含在nid裡
#b表nid只有1-6
mysql> select * from a where nid in (select nid from b);
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   1 | zhangsan |   18 |        2 |
|   2 | wanwu    |   18 |        2 |
|   3 | lisi     |   19 |        3 |
|   4 | zhangfei |   22 |        5 |
|   5 | wuhua    |   12 |        1 |
|   6 | laohu    |   33 |        4 |
+-----+----------+------+----------+
6 rows in set (0.00 sec)
B、萬用字元
~~~B.a~~~    select * from 表 where 列名 like 'zh%'   - zh開頭的所有(多個字串)

mysql> select * from a where name like 'zhang%';
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   1 | zhangsan |   18 |        2 |
|   4 | zhangfei |   22 |        5 |
+-----+----------+------+----------+
2 rows in set (0.00 sec)
~~~B.b~~~    select * from 表 where 列名 like 'zhangsa_'   - zhengsa開頭的所有(一個字元)
mysql> select * from a where name like 'zhangsa_';
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   1 | zhangsan |   18 |        2 |
+-----+----------+------+----------+
1 row in set (0.00 sec)
~~~B.c~~~    select * from 表 where 列名 like '%ng%'  - 列裡面所有包含ng

mysql> select * from a where name like '%ng%';
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   1 | zhangsan   |   18 |        2 |
|   4 | zhangfei   |   22 |        5 |
|   8 | zhengzheng |   33 |        5 |
+-----+------------+------+----------+
3 rows in set (0.00 sec)
C、分頁
~~~C.a~~~    select * from 表 limit 2;            - 前2行

mysql> select * from a limit 2;
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   1 | zhangsan |   18 |        2 |
|   2 | wanwu    |   18 |        2 |
+-----+----------+------+----------+
2 rows in set (0.00 sec)
~~~C.b~~~    select * from 表 limit 2,5;          - 從第2行開始的5行
             select * from 表 limit 5 offset 2    - 從第2行開始的5行 #2種寫法一樣 儘量用這種

mysql> select * from a limit 5 offset 2;
+-----+----------+------+----------+
| nid | name     | age  | part_nid |
+-----+----------+------+----------+
|   3 | lisi     |   19 |        3 |
|   4 | zhangfei |   22 |        5 |
|   5 | wuhua    |   12 |        1 |
|   6 | laohu    |   33 |        4 |
|   7 | houyi    |   23 |        2 |
+-----+----------+------+----------+
5 rows in set (0.01 sec)
D、排序
~~~D.a~~~    select * from 表 order by 列 asc              - 根據 “列” 從小到大排列 

mysql> select * from a order by part_nid;
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   5 | wuhua      |   12 |        1 |
|   1 | zhangsan   |   18 |        2 |
|   2 | wanwu      |   18 |        2 |
|   7 | houyi      |   23 |        2 |
|   3 | lisi       |   19 |        3 |
|   6 | laohu      |   33 |        4 |
|   4 | zhangfei   |   22 |        5 |
|   8 | zhengzheng |   33 |        5 |
+-----+------------+------+----------+
8 rows in set (0.00 sec)
~~~D.b~~~    select * from 表 order by 列 desc             - 根據 “列” 從大到小排列

mysql> select * from a order by part_nid desc;
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   4 | zhangfei   |   22 |        5 |
|   8 | zhengzheng |   33 |        5 |
|   6 | laohu      |   33 |        4 |
|   3 | lisi       |   19 |        3 |
|   1 | zhangsan   |   18 |        2 |
|   2 | wanwu      |   18 |        2 |
|   7 | houyi      |   23 |        2 |
|   5 | wuhua      |   12 |        1 |
+-----+------------+------+----------+
8 rows in set (0.00 sec)
~~~D.c~~~    select * from 表 order by 列1 desc,列2 asc    - 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序

mysql> select * from a order by age desc,age asc;
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   6 | laohu      |   33 |        4 |
|   8 | zhengzheng |   33 |        5 |
|   7 | houyi      |   23 |        2 |
|   4 | zhangfei   |   22 |        5 |
|   3 | lisi       |   19 |        3 |
|   1 | zhangsan   |   18 |        2 |
|   2 | wanwu      |   18 |        2 |
|   5 | wuhua      |   12 |        1 |
+-----+------------+------+----------+
8 rows in set (0.00 sec)
E、分組  group by 必須在where之後,order by之前
~~~E.a~~~    select 列名1 from 表 group by 列名1

mysql> select part_nid from a group by part_nid;
+----------+
| part_nid |
+----------+
|        1 |
|        2 |
|        3 |
|        4 |
|        5 |
+----------+
5 rows in set (0.00 sec)
~~~E.b~~~    select 列名1,列名2 from 表 group by 列名1,列名2

mysql> select part_nid,age from a group by part_nid,age;
+----------+------+
| part_nid | age  |
+----------+------+
|        1 |   12 |
|        2 |   18 |
|        2 |   23 |
|        3 |   19 |
|        4 |   33 |
|        5 |   22 |
|        5 |   33 |
+----------+------+
7 rows in set (0.00 sec)
~~~E.c~~~    select 列名1,列名2 from 表  where 條件1 group by 列名,列名1 order by 列名1 desc

mysql> select part_nid,age from a where age < 30 group by part_nid,age order by age desc;
+----------+------+
| part_nid | age  |
+----------+------+
|        2 |   23 |
|        5 |   22 |
|        3 |   19 |
|        2 |   18 |
|        1 |   12 |
+----------+------+
5 rows in set (0.00 sec)
~~~E.d~~~    select 列名1,count(列名2) from 表 group by 列名1
mysql> select part_nid,count(age) from a group by part_nid;

+----------+------------+
| part_nid | count(age) |
+----------+------------+
|        1 |          1 |
|        2 |          3 |
|        3 |          1 |
|        4 |          1 |
|        5 |          2 |
+----------+------------+
5 rows in set (0.00 sec)
~~~E.e~~~    select 列名1 from 表 group by 列名1 having max(列名2) > 條件

mysql> select part_nid from a group by part_nid having max(age) > 30;
+----------+
| part_nid |
+----------+
|        4 |
|        5 |
+----------+
2 rows in set (0.00 sec)
F、連表
mysql> select * from a;
+-----+------------+------+----------+
| nid | name       | age  | part_nid |
+-----+------------+------+----------+
|   1 | zhangsan   |   18 |        2 |
|   2 | wanwu      |   18 |        2 |
|   3 | lisi       |   19 |        3 |
|   4 | zhangfei   |   22 |        5 |
|   5 | wuhua      |   12 |        1 |
|   6 | laohu      |   33 |        4 |
|   7 | houyi      |   23 |        2 |
|   8 | zhengzheng |   33 |        5 |
+-----+------------+------+----------+
8 rows in set (0.00 sec)

mysql> select * from b;
+-----+-----------+
| nid | caption   |
+-----+-----------+
|   1 | it        |
|   2 | 馴獸師    |
|   3 | 飛行員    |
|   4 | 清潔員    |
|   5 | 所長      |
|   6 | 經理      |
+-----+-----------+
6 rows in set (0.00 sec)
~~~F.a~~~    關聯顯示
select A.列名1, A.列名2, B.列名2
from A,B
Where A.列名3 = B.列名3

mysql> select a.nid,a.name,a.age,b.caption from a,b where a.part_nid = b.nid;
+-----+------------+------+-----------+
| nid | name       | age  | caption   |
+-----+------------+------+-----------+
|   5 | wuhua      |   12 | it        |
|   1 | zhangsan   |   18 | 馴獸師    |
|   2 | wanwu      |   18 | 馴獸師    |
|   7 | houyi      |   23 | 馴獸師    |
|   3 | lisi       |   19 | 飛行員    |
|   6 | laohu      |   33 | 清潔員    |
|   4 | zhangfei   |   22 | 所長      |
|   8 | zhengzheng |   33 | 所長      |
+-----+------------+------+-----------+
8 rows in set (0.00 sec)
~~~F.b~~~    無對應關係則不顯示
select A.列名1, A.列名2, B.列名2
from A inner join B
on A.列名3 = B.列名3

mysql> select a.nid,a.name,a.age,b.caption from a inner join b where a.part_nid = b.nid; 
+-----+------------+------+-----------+
| nid | name       | age  | caption   |
+-----+------------+------+-----------+
|   5 | wuhua      |   12 | it        |
|   1 | zhangsan   |   18 | 馴獸師    |
|   2 | wanwu      |   18 | 馴獸師    |
|   7 | houyi      |   23 | 馴獸師    |
|   3 | lisi       |   19 | 飛行員    |
|   6 | laohu      |   33 | 清潔員    |
|   4 | zhangfei   |   22 | 所長      |
|   8 | zhengzheng |   33 | 所長      |
+-----+------------+------+-----------+
8 rows in set (0.00 sec)
~~~F.c~~~    A表所有顯示,如果B中無對應關係,則值為null
select A.列名1, A.列名2, B.列名2
from A left join B
on A.列名3 = B.列名3

mysql> select a.nid,a.name,a.age,b.caption from a left join b on a.part_nid = b.nid;     
+-----+------------+------+-----------+
| nid | name       | age  | caption   |
+-----+------------+------+-----------+
|   5 | wuhua      |   12 | it        |
|   1 | zhangsan   |   18 | 馴獸師    |
|   2 | wanwu      |   18 | 馴獸師    |
|   7 | houyi      |   23 | 馴獸師    |
|   3 | lisi       |   19 | 飛行員    |
|   6 | laohu      |   33 | 清潔員    |
|   4 | zhangfei   |   22 | 所長      |
|   8 | zhengzheng |   33 | 所長      |
+-----+------------+------+-----------+
8 rows in set (0.00 sec)
~~~F.e~~~    B表所有顯示,如果B中無對應關係,則值為null
select A.列名1, A.列名2, B.列名2
from A right join B
on A.列名3 = B.列名3

mysql> select a.nid,a.name,a.age,b.caption from a right join b on a.part_nid = b.nid;     
+------+------------+------+-----------+
| nid  | name       | age  | caption   |
+------+------------+------+-----------+
|    1 | zhangsan   |   18 | 馴獸師    |
|    2 | wanwu      |   18 | 馴獸師    |
|    3 | lisi       |   19 | 飛行員    |
|    4 | zhangfei   |   22 | 所長      |
|    5 | wuhua      |   12 | it        |
|    6 | laohu      |   33 | 清潔員    |
|    7 | houyi      |   23 | 馴獸師    |
|    8 | zhengzheng |   33 | 所長      |
| NULL | NULL       | NULL | 經理      |
+------+------------+------+-----------+
9 rows in set (0.00 sec)

G、組合

~~~G.a~~~    組合,自動處理重合
select 列名 from A union select 列名 from B

mysql> select nid from a union select nid from b;
+-----+
| nid |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
|   6 |
|   7 |
|   8 |
+-----+
8 rows in set (0.00 sec)
~~~G.b~~~    組合,不處理重合
select 列名 from A union all select 列名 from B
mysql> select nid from a union all select nid from b;
+-----+
| nid |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
|   6 |
|   7 |
|   8 |
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
|   6 |
+-----+
14 rows in set (0.00 sec)