簡單學習三、Mysql語句之表內容操作
阿新 • • 發佈:2018-11-08
表內容的操作
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)