MySQL DML语句
《深入浅出MySQL:数据库开发、优化与管理维护(第二版)》
P34
插入记录
-
insert into tablename(field1, field2, ... , fieldn) values(value1, value2, value3, ... , valuen);
-
-
mysql> insert into emp(ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
-
Query OK, 1 row affected (0.03 sec)
不指名字段:
-
mysql> insert into emp values('lisa','2003-02-01','3000',2);
-
Query OK, 1 row affected (0.02 sec)
缺省字段名插入:
-
insert into emp(ename,sal) values(\'dony\',1000);
-
-
mysql> insert into emp(ename,sal) values(\'dony\',1000);
-
Query OK, 1 row affected (0.07 sec)
-
mysql> select * from emp;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| lisa | 2003-02-01 | 3000.00 | 2 |
-
| dony | NULL | 1000.00 | NULL |
-
+-------+------------+---------+--------+
-
3 rows in set (0.01 sec)
一次性插入多条记录:
-
insert into tablename (field1, field2, ... , fieldn)
-
values
-
(record1_value1, record1_values2, ... , record1_valuesn),
-
(record2_value1, record2_values2, ... , record2_valuesn),
-
...
-
(recordn_value1, recordn_values2, ... , recordn_valuesn);
-
-
insert into emp(ename,hiredate,sal,deptno) values('gao','2000-09-09',800.00,1),('lili','2000-09-09',300.00,1);
-
insert into dept values(1,'tech'),(2,'sale'),(5,\'fin\'),(5,\'dept5\'),(6,\'dept6\');
更新记录
-
update tablename set field1=value1, field2 =value2, ......, fieldn =valuen [where condition]
-
mysql> update emp set sal=4000.00 where ename='lisa';
-
Query OK, 1 row affected (0.05 sec)
-
Rows matched: 1 Changed: 1 Warnings: 0
-
update emp a, dept b set a.sal=a.sal*b.deptno, b.deptname=a.ename where a.deptno=b.deptno;
删除数据
-
delete from tablename [where condition]
-
mysql> delete from emp where ename='dony';
-
Query OK, 1 row affected (0.04 sec)
一次删除多个表的数据
-
delete t1,t2, ... , tn from t1,t2, ... , tn [ where condition]
查询记录
查询所有字段
-
select * from tablename [where condition]
-
select ename, hiredate, sal, deptno from emp;
上面两种等价。
查询不重复的记录: distinct
-
mysql> select * from emp;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| gao | 2000-09-09 | 3000.00 | 1 |
-
| lili | 2000-09-09 | 300.00 | 1 |
-
| lisa | 2003-02-01 | 3000.00 | 2 |
-
+-------+------------+---------+--------+
-
4 rows in set (0.00 sec)
-
-
mysql> select distinct deptno from emp;
-
+--------+
-
| deptno |
-
+--------+
-
| 1 |
-
| 2 |
-
+--------+
-
2 rows in set (0.00 sec)
条件查询
-
mysql> select *from emp where deptno=1 and sal<3000;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| lili | 2000-09-09 | 300.00 | 1 |
-
+-------+------------+---------+--------+
-
2 rows in set (0.00 sec)
排序和限制
-
select * from tablename [where condition] [order by field1 [Desc | Asc], field2 [Desc | Asc],... ,fieldn [Desc | Asc]]
默认是Asc
-
mysql> select * from emp order by sal;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| lili | 2000-09-09 | 300.00 | 1 |
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| gao | 2000-09-09 | 3000.00 | 1 |
-
| lisa | 2003-02-01 | 3000.00 | 2 |
-
+-------+------------+---------+--------+
-
4 rows in set (0.01 sec)
-
mysql> select * from emp order by deptno, sal desc;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| gao | 2000-09-09 | 3000.00 | 1 |
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| lili | 2000-09-09 | 300.00 | 1 |
-
| lisa | 2003-02-01 | 3000.00 | 2 |
-
+-------+------------+---------+--------+
-
4 rows in set (0.00 sec)
显示部分结果
select ...[LIMIT offset_start, row_count]
offset_start表示记录的起始偏移量(默认为 0 ),row_count表示显示的行数。
Eg: 按sal排序后显示前3条记录
-
mysql> select * from emp order by sal limit 3;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| lili | 2000-09-09 | 300.00 | 1 |
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| gao | 2000-09-09 | 3000.00 | 1 |
-
+-------+------------+---------+--------+
-
3 rows in set (0.00 sec)
显示emp表中按照sal排序后从第二条记录开始的3条记录:
-
mysql> select *from emp order by sal limit 1,3;
-
+-------+------------+---------+--------+
-
| ename | hiredate | sal | deptno |
-
+-------+------------+---------+--------+
-
| zzx1 | 2000-01-01 | 2000.00 | 1 |
-
| gao | 2000-09-09 | 3000.00 | 1 |
-
| lisa | 2003-02-01 | 3000.00 | 2 |
-
+-------+------------+---------+--------+
-
3 rows in set (0.00 sec)
聚合操作
-
select [field1, field2, ... , fieldn] fun_name
-
from tablename
-
[where condition]
-
[group by field1, field2, ... , fieldn [with rollup ] ]
-
[Having condition]
fun_name表示聚合操作: sum, count, max, min等等
group by 表示要进行分类聚合的字段
having 关键字表示对分类后的结果再进行条件的过滤。
having 和where的区别是: having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤。
统计公司的总人数
-
mysql> select count(1) from emp;
-
+----------+
-
| count(1) |
-
+----------+
-
| 4 |
-
+----------+
-
1 row in set (0.02 sec)
在上面的基础上,统计各个部门的人数
-
mysql> select deptno, count(1) from emp group by deptno;
-
+--------+----------+
-
| deptno | count(1) |
-
+--------+----------+
-
| 1 | 3 |
-
| 2 | 1 |
-
+--------+----------+
-
2 rows in set (0.00 sec)
既要统计各部门人数,又要统计总人数:
-
mysql> select deptno,count(1) from emp group by deptno with rollup;
-
+--------+----------+
-
| deptno | count(1) |
-
+--------+----------+
-
| 1 | 3 |
-
| 2 | 1 |
-
| NULL | 4 |
-
+--------+----------+
-
3 rows in set (0.00 sec)
统计人数大于1人的部门:
-
mysql> select deptno,count(1) from emp group by deptno having count(1)>1;
-
+--------+----------+
-
| deptno | count(1) |
-
+--------+----------+
-
| 1 | 3 |
-
+--------+----------+
-
1 row in set (0.00 sec)
最后统计公司所有员工的薪水总额、最高和最低薪水:
-
mysql> select sum(sal),max(sal),min(sal) from emp;
-
+----------+----------+----------+
-
| sum(sal) | max(sal) | min(sal) |
-
+----------+----------+----------+
-
| 8300.00 | 3000.00 | 300.00 |
-
+----------+----------+----------+
-
1 row in set (0.00 sec)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26435490/viewspace-1259907/
,如需转载,请注明出处,否则将追究法律责任。