MySQL第五课 DML 对表中数据插入,删除,更新

前两节课时 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配置

  1. 暂停mysql服务
  2. 在MySQL安装路径中找到my.ini 配置文件
  3. 将编码改成gbk
  4. 保存文件退出,重启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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值