前两节课时 DDL 主要是对数据库,表的 CRUD操作。这节课是 DML。
文章来自: 培训资料 2018年4月某传某智教育某黑某马java\2.javaweb\2-2MySQL
参考书:《MySQL从入门到精通》 第9章 数据的操作 这里知识有点跳跃啊,不是按照书本的知识顺序来,而是按照培训视频来的。倒是也连贯。
返回知识列表:MySQL知识列表
5 DML:增删改表中数据
5.1 添加数据:
* 语法:
* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
* 注意:
1. 列名和值要一一对应。
2. 如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...值n);
3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
5.2. 删除数据:
* 语法:
* delete from 表名 [where 条件]
* 注意:
1. 如果不加条件,则删除表中所有记录。
2. 如果要删除所有记录
1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
5.3 修改数据:
* 语法:
* update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
* 注意:
1. 如果不加任何条件,则会将表中所有记录全部修改。
5.4 SQL完成对表中数据的CRUD的实际操作
- 插入数据
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3)
insert into student(sid,sname,sex,age) values(1,'zhangsan',1,23);
简单写法: 如果插入的是全列名的数据,表名后面的列名可省略。
insert into student values(2,'zhangsan',1,23)
批量插入
insert into student values
(4,'zhangsan', 1,23),
(5,'zhangsan', 1,23),
(6,'zhangsan', 1,23),
(7,'zhangsan', 1,23),
(8,'zhangsan', 1,23);
因为第一列被primary key限定,所以第一列值不能重复。
查看表中数据
select * from student
15-解决表中插入数据中文乱码的问题
命令行下插入中文问题: insert into student values(11 ,'李四',2,34)
修改my.ini配置
- 暂停mysql服务
- 在MySQL安装路径中找到my.ini 配置文件
- 将编码改成gbk
- 保存文件退出,重启MySQL服务。
删除记录
delete from 表名 [where 条件]
delete from student where sid=10;
delete from student; 如果没有指定条件 会将表中数据一条一条全部删除
delete : DML 一条一条删除表中的数据
truncate: DDL 先删除表再重建表
如果数据表较小,delete比较高效
如果数据比较大,truncate 比较高效
更新表记录
update 表名 set 列名=列的值,列名2=列的值 [where 条件]
将sid为5的名字改成李四
如果参数是字符串,日期要加上单引号
update student set sname='李四' where sid=5
update student set sname='李四',sex=0; -- 会将所有的数据都修改了。
18 网络故障之后重新梳理
查询记录
select [distinct] [*] [列名1,列名2] from 表名 [where 条件]
distinct 去除重复的数据
select * from student;
-- 商品分类: 手机数码,鞋靴箱包,
1,分类的ID
2,分类名称
3,分类描述
create table category(
cid int primary key auto_increment, -- ID自动往上加。
pname varchar(10),
price double,
pdate timestamp,
cno int
);
insert into product values(null, '小米mix4',998,null,1);
insert into product values(null, '锤子',2998,null,1);
insert into product values(null, '阿迪王',99,null,2);
-- 简单查询
-- 查询所有的商品
select * from product;
-- 查询商品名称和商品价格
select pname,price from product;
-- 别名查询,as 的关键字, as 关键字是可省略
-- 表别名: select p.pname, p.price from product p;
select p.pname,p.price from product as p;
-- 列别名:select pname as 商品名称, price as 商品价格 from product;
select pname as 商品名称,price as 商品价格 from product;
省略as关键字
select pname 商品名称,price 商品价格 from product;
-- 去掉重复的值
-- 查询商品所有的价格
select price from product;
select distinct price from product;
-- select运算查询: 仅仅在查询结果上做了运算 + - * /
select *,price*1.5 from product;
select *,price*1.5 as 折后价 from product
select *,price*0.9 from product;
-- 条件查询 [where 关键字]
指定条件,确定要操作的记录
-- 查询价格 > 60 的所有商品信息
select * from product where price > 60;
20 select复杂的查询
-- where 后的条件写法:
--关系运算符: > >= < <= != < >
<> : 不等于,标准SQL 语法
!= : 不等于, 非标准SQL语法
-- 查询商品价格不等于88的所有商品
select * from product where price <> 88;
select * from product where price != 88;
-- 查询商品价格在10 到 100 之间
select * from product where price > 10 and price < 100;
between ... and ...
select * from product where price between 10 and 100;
-- 逻辑运算: and or not
-- 查询出商品价格 小于100 或者商品价格 大于900
select * from product where price < 100 or price > 900;
-- like: 模糊查询
_ : 代表的是一个字符
% : 代表的是多个字符
-- 查询出名字带有饼的所有商品 %饼%
select * from product where pname like '%饼%';
-- 查询第二个名字是熊的所有商品 '_熊%'
select * from product where pname like '_熊%';
-- in 在某个范围中获得值
-- 查询出商品分类ID 在 1,4,5里面的所有商品
select * from product where cno in (1,4,5);
-- 排序查询: order by 关键字
asc: ascend 升序
desc: descend 降序
-- 0。 查询所有商品,按照价格进行排序
select * from product order by price;
-- 1. 查询所有的商品,按价格进行降序排序(asc -- 升序, desc -- 降序)
select * from product order by price desc;
-- 2. 查询名称有 小的商品,按价格降序排序
select * from product where pname like '%小%' order by price asc;
-- 聚合函数
sum() 求和
avg() 求平均值
count() 统计数量
max() 最大值
min() 最小值
-- 1,获得所有商品价格的总和
select sum(price) from product;
-- 2,获取所有商品的平均价格
select avg(price) from product;
-- 3,获得所有商品的个数
select count(*) from product;
-- 注意 where 条件后面不能接聚合函数。
-- 查出商品价格大于平均价格的所有商品
查出所有商品
select * from product;
大于
平均价格
select avg(price) from product;
select * from product where price > (select agv(price) from product);
-- 分组: group by
--1, 根据cno 字段分组,分组后统计商品的个数
select cno,count(*) from product group by cno;
--2,根据cno 分组,分组统计每组商品的平均价格 并且商品平均价格 > 60
select cno,avg(price)
from product group by cno
having avg(price) > 60
-- having 关键字 可以连接聚合函数的 出现在分组之后
-- where 关键字 它是不可以接聚合函数, 出现在分组之前
-- 编写顺序
-- S .. F .. W .. G .. H .. O
select .. from .. where .. group by ... having ... order by
-- 执行顺序
F .. W.. G.. H .. S.. O
from .. where .. group by .. having .. select ... order by