【MySQL】数据处理之增删改

# 第十一章 数据处理之增删改

#0. 储备工作
use atguigudb;
create table if not exists emp1(
id int,
`name` varchar(15),
hire_date date,
salary double(10,2)
);

desc emp1;

select * 
from emp1;

#1、添加数据

#方式1. 一条一条的添加数据
#① 没有指明添加的字段

INSERT INTO emp1
VALUES (1,'TOM','2000-12-21',3400);   #注意:一定要按照声明的字段的先后顺序添加
#② 指明要添加的字段 (字段)
insert INTO emp1(id, hire_date, salary, `name`)
value(2,'1999-09-09',4000,'Jerry');
# 说明 没有进行赋值的hire_date的值为null
insert INTO emp1(id, salary, `name`)
value(2,4000,'shk');
#③ 同时插入多条数据
insert into emp1(id, `name`,salary)
values 
(4,'Jim',5000),
(5,'张俊杰',5500);

#方式2. 将查询结构插入到表中
select * from emp1;

insert into emp1 (id, `name`,salary, hire_date)
#查询语句
select employee_id, last_name, salary, hire_date  #查询的字段一定要与添加到的表的字段一一对应
from employees
where department_id in (70,60);

desc emp1;
desc employees;

#说明 :emp1表中要添加数据的字段的长度不能低于employees表中的
#查询的字段的长度。如果emp1表中要添加数据的字段的长度低于
#employees表中的长度的话,就有添加不成功的风险

#2.更新数据(修改数据)
#update...set...where

#可以实现批量修改数据
update emp1
set hire_date = curdate()
where id = 5;

select * from emp1;

#同时修改一条数据的多个字段
update emp1
set hire_date = curdate(), salary =6000
where id = 4;

select * from emp1;

#题目:将表中姓名包含a的提薪20%
update emp1
set salary = salary*1.2
where name like '%a%';

select * from emp1; 
#修改数据时,是可能存在不成功的情况。(可能是由于约束的影响造成的)
update employees
set department_id = 10000
where employee_id = 102;

#删除数据 delete from …… where……
delete from emp1
where id = 1;
#在删除数据时,也可能由于约束的影响,导致删除失败
delete from departments
where department_id = 50;

#小结:DML操作默认情况下,执行完后都会自动提交数据
# 如果希望执行完以后不自动提交数据,则需要使用 set autocommit = FALSE.

#4. MySQL8的新特性:计算列
use atguigudb;
create table test1(
a int,
b int,
c int generated always as (a+b) virtual  #字段c即为计算列
);

insert into test1 (a,b)
values(10,20);

select *
from test1;

update test1
set a=100;


#综合案例
# 1、创建数据库test01_library
create database if not exists test01_library;
use tese01_library;

#2、创建表 books,表结构如下:
create table if not exists books(
id int,
name varchar(50),
authors varchar(100),
price float,
pubdate year,
note varchar(100),
num int
);

select * from books;

# 3、向books表中插入记录
#   1)不指定字段名称,插入第一条记录
insert into books 
value(1,'Tal of AAA', 'Dickes', 23, 1995, 'novel',11);
#   2)指定所有字段名称,插入第二记录
insert into books(id,name,authors,price,pubdate,note,num)
values(2,'EmmaT','Jane lura',35,1993,'joke',22);
#   3)同时插入多条记录(剩下的所有记录)
insert into books(id,name,authors,price,pubdate,note,num)
values
(3,'Story of Jane','Jane Tim',40,2001,'novel',0),
(4,'Lovey Day','George Byron',20,2005,'novel',30),
(5,'Old land','Honore Blade',30,2010,'law',0),
(6,'The Battle','Upton Sara',30,1999,'medicine',40),
(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28);

# 4、将小说类型(novel)的书的价格都增加 5 。
update books
set price = price + 5;
select * from books;

# 5、将名称为EmmaT的书的价格改为 40 ,并将说明改为drama。
update books
set price = 40, note = 'drama'
where name = 'EmmaT';
select * from books;

# 6、删除库存为 0 的记录。
delete from books
where num = 0;
select * from books;

# 7、统计书名中包含a字母的书
select * 
from books
where name like '%a%';

# 8、统计书名中包含a字母的书的数量和库存总量
select count(*),sum(num)
from books
where name like '%a%';

# 9、找出“novel”类型的书,按照价格降序排列
select *
from books
where note = 'novel'
order by price desc;

# 10、查询图书信息,按照库存量降序排列,如果库存量相同的按照note升序排列
select *
from books
order by num desc, note;

# 11、按照note分类统计书的数量
select note, count(*)
from books
group by note;

# 13、查询所有图书,每页显示 5 本,显示第二页
select *
from books
limit 5,5;


# 14、按照note分类统计书的库存量,显示库存量最多的
select books.note
from books, (select note,max(num)
from books
group by note
order by max(num) desc
limit 1) t_note_num
where books.note = t_note_num.note;

# 15、查询书名达到 10 个字符的书,不包括里面的空格
select *
from books
where length(REPLACE(name,' ','')) >= 10;

# 16、查询书名和类型,其中note值为novel显示小说,law显示法律,medicine显示医药,cartoon显示卡通,joke显示笑话
select name,    case note when 'novel' then '小说'
                when 'law' then '法律'
                when 'medicine' then '医药'
                when 'cartoon' then '卡通'
                when 'joke'then '笑话'
                end details
from books; 

        
# 17、查询书名、库存,其中num值超过 30 本的,显示滞销,大于 0 并低于 10 的,显示畅销,为 0 的显示需要无货
select name, num, case when num >30 then '滞销'
                       when num>0 and num<10 then '畅销'
                       when num = 0 then '无货'
                       end details
from books;

# 18、统计每一种note的库存量,并合计总量
select note, sum(num)
from books
group by note with rollup;

# 19、统计每一种note的数量,并合计总量
select note, count(*)
from books
group by note with rollup;

# 20、统计库存量前三名的图书
select name
from books
order by num desc
limit 0,3;

# 21、找出最早出版的一本书
select name 
from books
where pubdate = (
                    select min(pubdate)
                    from books
                 );

# 22、找出novel中价格最高的一本书
select name
from books
where note = 'novel' and price = (
                                     select max(price)
                                     from books
                                     where note = 'novel'
                                    );

# 23、找出书名中字数最多的一本书,不含空格
select name
from books
where length(REPLACE(name,' ','')) >= all(
                                            select length(REPLACE(name,' ',''))
                                            from books
                                            )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值