一、增
1.1 單條數據增加
語法: insert into 表名(字段1,字段2...) values(字段1的值,字段2的值...)
1.2 多條插入
mysql> create table idc( -> id int auto_increment primary key, -> name varchar(32) not null, -> position varchar(10) not null) -> engine = innodb default charset = utf8; Query OK, 0 rows affected (0.00 sec) mysql> desc idc; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(32) | NO | | NULL | | | position | varchar(10) | NO | | NULL | | +----------+-------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) # 插入多條數據 mysql> insert into idc(name,position) values('博興','北京'),('大族','北京'),('紀蘊','上海'); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from idc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec)
1.3 根據從其他表查到的數據插入到新表中
mysql> create table idc_new( id int auto_increment primary key, name varchar(32) not null, position varchar(10) not null) engine = innno Query OK, 0 rows affected (0.00 sec) mysql> select * from idc_new; Empty set (0.00 sec) mysql> select * from idc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec) mysql> insert into idc_new(name,position) select name,position from idc; Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec)
二、刪
語法: delete from 表名 where 條件
三、改
語法: update 表名 set 字段1=新值,字段2=新值,字段3=新值... where 條件
修改多個字段
mysql> select * from idc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec) mysql> update idc set name = '大龍',position='邯鄲' where id = 3; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from idc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 大龍 | 邯鄲 | +----+--------+----------+ 3 rows in set (0.00 sec)
四、查
4.1 單表查詢
4.1.1 將表里的所有字段的所有數據都查出來
- *代表所有
select * from test;
4.1.2 只查指定字段的所有數據
# select 字段1,字段2 ... from 表; select user,host from mysql.user;
4.1.3 別名
mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec) mysql> select id,name as 機房名稱,position as 機房位置 from idc_new; +----+--------------+--------------+ | id | 機房名稱 | 機房位置 | +----+--------------+--------------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------------+--------------+
4.1.4 等於,不等於
mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec) mysql> select * from idc_new where position = '北京'; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | +----+--------+----------+ 2 rows in set (0.00 sec) mysql> select * from idc_new where position != '北京'; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 3 | 紀蘊 | 上海 | +----+--------+----------+ 1 row in set (0.00 sec)
4.1.5 in和not in
mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 4 rows in set (0.00 sec) mysql> select * from idc_new where id in (1,3,4); +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 3 rows in set (0.00 sec) mysql> select * from idc_new where id not in (1,3,4); +----+--------+----------+ | id | name | position | +----+--------+----------+ | 2 | 大族 | 北京 | +----+--------+----------+ 1 row in set (0.00 sec)
# in (可以某個SQL查詢出來結果)
mysql> select * from idc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 大龍 | 邯鄲 | +----+--------+----------+ 3 rows in set (0.00 sec) mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 4 rows in set (0.00 sec) mysql> select * from idc_new where id in (select id from idc); +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec)
4.1.6 between and
- 閉區間
mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 4 rows in set (0.00 sec) mysql> select * from idc_new where id between 1 and 3; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | +----+--------+----------+ 3 rows in set (0.00 sec)
4.1.7 通配符
- % 多個
- _ 一個
# % mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 4 rows in set (0.00 sec) mysql> select * from idc_new where position like "北%"; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | +----+--------+----------+ 2 rows in set (0.00 sec)
# —_代表一個占位符
mysql> select * from idc_new where position like "北_";
+----+--------+----------+
| id | name | position |
+----+--------+----------+
| 1 | 博興 | 北京 |
| 2 | 大族 | 北京 |
+----+--------+----------+
2 rows in set (0.00 sec)
4.1.8 limit
limit a ,b 從a往后查b條數據
mysql> select * from employee; +----+----------+ | id | name | +----+----------+ | 1 | wangys | | 2 | wc | | 3 | huisz | | 4 | chaoyf | | 5 | anyl | | 6 | xiaolong | | 7 | jiayue | | 8 | a | | 9 | b | | 10 | c | | 11 | d | | 12 | e | | 13 | f | | 14 | g | | 15 | h | +----+----------+ 15 rows in set (0.00 sec) mysql> select * from employee limit 5; +----+--------+ | id | name | +----+--------+ | 1 | wangys | | 2 | wc | | 3 | huisz | | 4 | chaoyf | | 5 | anyl | +----+--------+ 5 rows in set (0.00 sec) mysql> select * from employee limit 5,5; +----+----------+ | id | name | +----+----------+ | 6 | xiaolong | | 7 | jiayue | | 8 | a | | 9 | b | | 10 | c | +----+----------+ 5 rows in set (0.00 sec) mysql> select * from employee limit 10,5; +----+------+ | id | name | +----+------+ | 11 | d | | 12 | e | | 13 | f | | 14 | g | | 15 | h | +----+------+ 5 rows in set (0.00 sec)
分頁
page = int(input('請輸入要查看第幾頁')) records = 10 page_offset = (page-1)*records # 計算從第幾條數據開始 print('select * from t1 limit %s %s'%(page_offset,records))
4.1.9 排序
- asc 正序
- desc 倒敘
- 可以使用多個條件排序,前一個條件先進行排序,后面一個條件后進行排序
mysql> select * from idc_new; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 4 rows in set (0.00 sec) mysql> select * from idc_new order by id asc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 1 | 博興 | 北京 | | 2 | 大族 | 北京 | | 3 | 紀蘊 | 上海 | | 4 | 后場 | 邯鄲 | +----+--------+----------+ 4 rows in set (0.00 sec) mysql> select * from idc_new order by id desc; +----+--------+----------+ | id | name | position | +----+--------+----------+ | 4 | 后場 | 邯鄲 | | 3 | 紀蘊 | 上海 | | 2 | 大族 | 北京 | | 1 | 博興 | 北京 | +----+--------+----------+ 4 rows in set (0.00 sec)
# 線倒敘,后limit 去后幾行
mysql> select * from idc_new order by id desc limit 2;
+----+--------+----------+
| id | name | position |
+----+--------+----------+
| 4 | 后場 | 邯鄲 |
| 3 | 紀蘊 | 上海 |
+----+--------+----------+
2 rows in set (0.00 sec)
4.1.10 分組
group by 對誰進行分組
mysql> select * from departments; +----+--------+ | id | name | +----+--------+ | 4 | IT | | 5 | 銷售 | | 6 | 產品 | +----+--------+ 3 rows in set (0.00 sec) mysql> select * from employee; +----+--------+--------+ | id | name | dpt_id | +----+--------+--------+ | 1 | 老王 | 4 | | 2 | 老郭 | 6 | | 3 | 老劉 | 5 | | 4 | 老惠 | 4 | +----+--------+--------+ 4 rows in set (0.00 sec) # 查看各個部門都有多少人 mysql> select count(1),dpt_id from employee group by dpt_id; +----------+--------+ | count(1) | dpt_id | +----------+--------+ | 2 | 4 | | 1 | 5 | | 1 | 6 | +----------+--------+ 3 rows in set (0.00 sec)
如果對於聚合函數結果進行二次篩選時,必須使用having
# 查看部門人數大於1的部門
mysql> select count(1),dpt_id from employee group by dpt_id having count(1) >1; +----------+--------+ | count(1) | dpt_id | +----------+--------+ | 2 | 4 | +----------+--------+ 1 row in set (0.00 sec)
4.2 連表查詢
4.2.1 連表查詢的方法
mysql> select * from departments; +----+--------+ | id | name | +----+--------+ | 4 | IT | | 5 | 銷售 | | 6 | 產品 | +----+--------+ 3 rows in set (0.00 sec) mysql> select * from employee; +----+--------+--------+ | id | name | dpt_id | +----+--------+--------+ | 1 | 老王 | 4 | | 2 | 老郭 | 6 | | 3 | 老劉 | 5 | | 4 | 老惠 | 4 |
mysql> select * from departments,employee where departments.id = employee.dpt_id; +----+--------+----+--------+--------+ | id | name | id | name | dpt_id | +----+--------+----+--------+--------+ | 4 | IT | 1 | 老王 | 4 | | 6 | 產品 | 2 | 老郭 | 6 | | 5 | 銷售 | 3 | 老劉 | 5 | | 4 | IT | 4 | 老惠 | 4 | +----+--------+----+--------+--------+ | 4 | +----+--------+--------+ 4 rows in set (0.00 sec)
mysql> select * from employee left join departments on employee.dpt_id = departments.id; +----+--------+--------+------+--------+ | id | name | dpt_id | id | name | +----+--------+--------+------+--------+ | 1 | 老王 | 4 | 4 | IT | | 4 | 老惠 | 4 | 4 | IT | | 3 | 老劉 | 5 | 5 | 銷售 | | 2 | 老郭 | 6 | 6 | 產品 | +----+--------+--------+------+--------+ 4 rows in set (0.00 sec) mysql> select * from employee right join departments on employee.dpt_id = departments.id; +------+--------+--------+----+--------+ | id | name | dpt_id | id | name | +------+--------+--------+----+--------+ | 1 | 老王 | 4 | 4 | IT | | 2 | 老郭 | 6 | 6 | 產品 | | 3 | 老劉 | 5 | 5 | 銷售 | | 4 | 老惠 | 4 | 4 | IT | +------+--------+--------+----+--------+ 4 rows in set (0.00 sec) mysql> select * from employee inner join departments on employee.dpt_id = departments.id; +----+--------+--------+----+--------+ | id | name | dpt_id | id | name | +----+--------+--------+----+--------+ | 1 | 老王 | 4 | 4 | IT | | 2 | 老郭 | 6 | 6 | 產品 | | 3 | 老劉 | 5 | 5 | 銷售 | | 4 | 老惠 | 4 | 4 | IT | +----+--------+--------+----+--------+