增删改查是使用数据库时最常用的操作。
增
insert into 表名 [ ( 字段名 , ( 字段名 ) ) ]
value (value , [, value ] ) ;
- 如果只给表的某几个字段赋值,则需要制定字段名
- 给表中所有的字段名添加数据,不必写字段名
- 插入的数据应该与字段的数据类型相同。使用
desc 表名
可以查看字段类型 - 数据大小应该在规定的范围内
- 在value中列出的数据位置必须与被加入的列位置相对应
- 字符和日期类型应该包含在单引号中
- 插入空值时,不指定或
insert into 表名 values(null)
- 一次添加多条数据
insert into 表名 values(),(),()
在数据插入时,假设主键对应的值已经存在,
当主键存在冲突时,可以进行以下操作:
- 更新操作:
insert into 表名(字段列表) values(值列表) on duplicate key 字段=新值
- 替换:
repalce into 表名(包含字段) value(值列表)
-有冲突->替换信息。
-没有冲突->添加新数据
改
update 表名 set 字段名=数据,[,字段2=数据] [where condition]
将字段所有数据修改
将指定字段指定数据修改
将数据进行算数修改
限制更新量
- update可以用新值更新原有表中的各列
- set语句指定更新的字段和值,可以指定多个字段
- where语句指定更新哪些行。没有where,则更新所有行
删
delete from 表名 [where condition]
在删除数据时,为了防止误删:
复制一个表
create table 新表名 like 表名
将数据复制到新表
insert into 新表名 select * from 表名
delete 与 truncate删除
delete
- 删除整个表的数据,但表结构还在
- 可以带where,使用更灵活
- 可以返回被删除的记录数
truncate
- 删除速度快
- 不能使用where
- 返回0,常用于清除表中数据
查
select [distinct] *| {column1,column2,...} from tbl_name;
select * from 表名:效率低
select 字段名,字段名 from 表名
distinct:去除重复行
别名:select 字段名,字段名 as 别名 from 表名
可以对起别名的字段进行只显示的数据操作
select + where
where语句中常用的运算符:
like’ %’
查询形如 ‘%红’ 的数据
select * from Friends where name like '%红'
>
查找年龄大于等于4的数据
select * from Friends where age >= 4
and
查询姓‘小’,并且年龄在3~5之间的人
select * from Friends where name like'小%' and age between 3 and 5
in
查询Tel为 ‘0003’ 的人
select的 order by 语句
- 指定排序的列,可以使用列名也可以使用select语句后指定的别名
- order by语句位于句尾
- asc升序(默认),desc降序
对年龄进行逆序排序
select * from Friends order by age desc
select + count 统计
count (列名) 返回某一列,行的总数 select count(*)|count(列名) from 表名 where condition
统计表中一共有多少人
select count(*)from Friends
统计age大于3的数量
select count(*) from Friends where age>3
- count(*) 会统计一共的记录数,count(列名)会排除NULL的情况
sum 求和
sum函数返回满足where条件的行的和 select sum(列名) {,sum(列名)...} from tbl_name [where condition]
求age之和
select sum(age) from Friends
平均年龄
select sum(age)/count(age) from Friends
- sum仅对数值起作用,否则结果没有意义
avg 平均值
avg函数返回满足where条件的一列的平均值
求平均年龄
select avg(age) from Friends
max/min
select max(列名) from 表名 [where condition]
group by 分组
select column1,column2, .. from table group by column
为了明确的展示分组,这里使用了雇员信息表
- EMP员工表
- DEPT部门表
- SALGRAD工资等级表
显示每个部门的平均工资和最高工资
mysql> select deptno,avg(sal),max(sal) from EMP group by deptno
显示每个部门的各种岗位的平均工资和最低工资
首先按deptno分组,然后各组再按job进行分组
mysql> select avg(sal),min(sal),job, deptno from EMP group by deptno, job;
having
和group by连用
显示平均工资低于2000的部门和它的平均工资
mysql> select avg(sal) as myavg from emp group by deptno having myavg<2000