美文网首页
数据库实操练习

数据库实操练习

作者: 花开有声是我 | 来源:发表于2022-02-12 19:24 被阅读0次
-- 00 获取数据库版本信息
select version(); # 5.5.53

-- 01 查询
select * from student;

-- 02 创建表前删除表、创表语句
drop table if exists goods;

create table goods(
id int  unsigned primary key auto_increment,
goodsName varchar(20),
price decimal(6, 2),
num int,
company varchar(20),
remark varchar(30)
);

-- 03 修改数据
update goods set price=5600.00,num=50,company='某宝' where id = 2;

-- 08 添加商品
insert into goods values
(0, '台式电脑', 6000.00, 100,'某东', '某东'),
(0, '冰箱', 6000.00, 100,'某东', '某东')
;

delete from goods where id = 1;
select * from goods;

alter table goods add isdelete int;
update goods set isdelete = 1;
select * from goods where isdelete = 1;


-- 07 三种删除数据方式
-- delete from student;
select * from student;
-- truncate table student;
-- 删除表
drop table student;

-- 删除速度:drop > truncate > delete
*******************************************************************************

-- 04 排序 asc / desc
select * from goods order by price;
select * from goods order by num desc, price asc;
*******************************************************************************
-- 05 单表查询
select goodsName,price from goods;

-- 起别名
select goodsName  商品名称,price 价格 from goods;
select goodsName  商品名称 from goods;
select goodsName  商品名称, price 价格 from goods;
select goodsName as '商品名称', price '价格1' from goods;


-- 去重
select distinct(goodsName) from goods;

select * from goods;
-- 并列条件 另外还有 not / or
select * from goods where price > 100 and company = '并夕夕';

-- 模糊查询 like % _
select * from goods where remark like '%一次性口罩%';

-- _匹配单个字符
select * from goods where company like '_东';

-- 查询范围 范围从小到大
select * from goods where price between 100 and 1000;
 -- 不连续范围
select * from goods where company in ('某宝', '并夕夕');

select * from goods where remark is null;
select * from goods where remark is not null;
*******************************************************************************

-- 需求9:查询以下信息:商品信息总条数;最高商品价格;最低商品价格;商品平均价格;一次性口罩的总数量
 -- 聚合函数
 select count(*) from goods;
 select count(remark) from goods;
 
 select max(price) from goods;
 SELECT MIN(price) FROM goods;

-- 平均
select avg(price) from goods;

-- 一次性口罩的总数量
select * from goods where remark like '%一次性口罩%';
select count(*) from goods where remark like '%一次性口罩%';


-- 不生效
select sum(count) from goods where remark like '%一次性口罩%'; -- 需求实现

-- 需求10:查询每家公司的商品信息数量
select company 公司名称, count(*) 数量 from goods group by company;


-- select company 公司名称, count(*) 数量 from goods where count(*) > 2;  -- where后不可以用聚合函数
select company 公司名称, count(*) 数量 from goods group by company having count(*) > 2;

select company 公司名称, count(*) 数量 from goods group by company order by count(*) desc;

select company 公司名称, count(*) 数量 from goods group by company having company !='';
select company 公司名称, count(*) 数量 from goods group by company having company !='并夕夕';

-- 获取公司商品最贵
select company 公司名称, max(price) from goods group by company having company !='并夕夕';



-- 需求11:查询5-10行的所有数据 limit 起始索引,数据行数
select * from goods;

select * from goods limit 4, 6;
-- 起始索引可以省略 默认为0
select * from goods limit 6;

select * from goods limit 3, 3;

###############################################################################

-- 06 SQL 查询作业安排
-- 课上的后9个案例, 脱离笔记, 独立完成一遍!
-- 完成作业1之后, 完成课下作业2(晚自习发)
-- 作业完成后, 提交在线文档, 以小组形式, 进行互审
-- 互审过程中记录问题, 完成互审后, 联络老师进行问题沟通

-- 3种删除数据方法(所有数据)
-- delete from goods;
-- truncate table goods;
-- drop table goods;

-- 需求3: 准备商品数据, 查询所有数据, 查询部分字段, 起字段别名, 去重
select * from goods;
select goodsName, price from goods;
select goodsName 商品名称, price 价格 from goods;


-- 需求4: 查询价格等于30并且出自并夕夕的所有商品信息
select * from goods where price = 50 and company = '并夕夕';


-- 需求5: 查询全部一次性口罩的商品信息
select * from  goods where remark like '%一次性口罩%';


-- 需求6: 查询所有价格在30-100的商品信息
select * from goods where price between 30 and 100;


-- 需求7: 查询没有描述信息的商品信息
select * from goods where remark is null;

-- 需求8: 查询所有商品信息, 按照价格从大到小排序, 价格相同时, 按照数量少到多排序
select * from goods order by price desc, num asc;

-- 需求9:查询以下信息:商品信息总条数;最高商品价格;最低商品价格;商品平均价格;一次性口罩的总数量
select count(*) from goods;
select max(price) from goods;
select min(price) from goods;
select avg(price) from goods;
select count(*) 一次性口罩数量 from goods where remark like '%一次性口罩%';

-- 需求10:查询每家公司的商品信息数量
select company, count(company) from goods group by company;

select company 公司名称, count(*) 数量 from goods group by company having company != '并夕夕';
select company 公司名称, max(price) from goods group by company;

-- 需求11:查询5-10行的所有数据 limit 起始索引,数据行数
select * from goods limit 4, 6;

###############################################################################

-- 09 多表查询
select * from goods_breathmask;
select * from category;

-- 内连接
select * from goods_breathmask g inner join category  c on g.typeId = c.typeId;

-- select g.goodsName, c.cateName from goods_breathmask g inner join category  c on g.typeId = c.typeId;
select g.*, c.cateName from goods_breathmask g inner join category  c on g.typeId = c.typeId;

-- 左连接
select * from goods_breathmask g left join category c on g.typeId = c.typeId;

select * from category c left join goods_breathmask g on g.typeId = c.typeId;

-- 右连接
select * from goods_breathmask g right join category c on g.typeId = c.typeId;

-- 需求:显示所有价格低于30的商品信息,包含其对应的商品分类
select g.*,c.cateName from goods_breathmask g left join category c on g.typeId = c.typeId where g.price > 30;

###############################################################################

-- 10 自关联
select * from areas a inner join areas b where a.pid = b.aid;

select * from areas a1 inner join areas a2 where a1.aid = a2.pid;

select a.*, b.name 市名 from areas a inner join areas b where a.aid = b.pid;

-- 需求4:查询河南省的所有市
select * from areas a1 
inner join areas a2 on a1.aid = a2.pid 
where a1.name = '河南省';

-- 需求5:查询河南省的所有市和区
select * from areas a1 
inner join areas a2 on a1.aid = a2.pid 
left join areas a3 on a2.aid = a3.pid
where a1.name = '河南省';

###############################################################################

-- 11 子查询
-- 需求6:查询价格高于平均价的商品信息
select * from goods where goods.price > (select avg(price) from goods);

-- 需求7:查询所有来自并夕夕的商品信息,包括商品分类
select * from goods_breathmask;

select g.*, c.cateName from goods_breathmask g 
left join category c on g.typeId = c.typeId 
where g.company = '拼多多';

select * from goods_breathmask g 
left join category c on g.typeId = c.typeId 
where g.company = '拼多多';

select a.*, c.cateName from category c
inner join (select * from goods_breathmask g where g.company = '拼多多') a on c.typeId = a.typeId;

select * from (select * from goods_breathmask g where g.company = '拼多多') a
inner join category c on c.typeId = a.typeId;

-- 需求:查询在25-100之间的商品的价格
select price from goods where price between 20 and 100;
select * from goods where price in (select price from goods where price between 20 and 100);

select * from goods where price = some(select price from goods where price between 20 and 100);

select * from goods where price = any(select price from goods where price between 20 and 100);

-- 取反 查询不在25-100之间的商品的价格 的商品
select * from goods where price != all(select price from goods where price between 20 and 100);

select * from goods where price <> all(select price from goods where price between 20 and 100);
###############################################################################

--12 MySQL高级 外键
drop table if exists class;
create table class(
id int unsigned primary key auto_increment,
name varchar(10)
);

-- truncate table class;
insert into class values
(0, '一年级'),
(0, '二年级'),
(0, '三年级'),
(0, '四年级'),
(0, '五年级'),
(0, '六年级'),
(0, '七年级'),
(0, '八年级'),
(0, '九年级');

drop table if exists stu;
create table stu(
name varchar(10),
class_id int unsigned,
foreign key(class_id) references class(id)
);


-- 主表
drop table if exists class;
create table class(
id int unsigned primary key auto_increment,
name varchar(10)
);
-- 从表
drop table if exists stu;
create table stu(
name varchar(10),
class_id int unsigned,
-- stu 表的 class_id 指向 class 表的 id, class_id 是

-- foreign key(自己的字段名) references 目标表名(目标表的主键)
foreign key(class_id) references class(id)
);

###############################################################################

-- 13 MySQL高级 外键索引
-- 开启时间监测
set profiling = 1;

-- 查询示例数据 num =10000的值
select * from test_index where num = 10000;

-- 查看运行时间
show profiles;

-- 对已存在的表添加索引
create index num_index on test_index(num);
select * from test_index where num = 10000;
show profiles;

show index from test_index;

--扩展2: 创表时添加
create table create_index(
id int primary key,
name varchar(10) unique,
age int,
key(age)
);

show index from create_index;

drop index age on create_index;
-- ###############################################################################
# 14 MySQL高级 循环创建数据_存储过程
drop table if exists datatest;
-- 创建 datatest 表
create table datatest(
    id int unsigned primary key auto_increment,
    num int
);

-- 修改句尾标识符为'//'
delimiter //
-- 如果存在 test 存储过程则删除
drop procedure if exists test;
-- 创建无参数的存储过程 test
create procedure test()                     
begin
        -- 声明变量 i
        declare i int; 
        -- 变量初始化赋值为 0
    set i = 0;
        -- 设置循环条件: 当 i 大于 10 时跳出 while 循环
    while i < 100 do
                -- 往 datatest 表插入数据
        insert into datatest values (null, i);
                -- 循环一次, i 加一
        set i = i + 1; 
        -- 结束 while 循环
    end while;
        -- 查看 datatest 表数据
    select * from datatest; 
-- 结束存储过程定义语句
end//
-- 恢复句尾标识符为';'
delimiter ;                                                             

-- 调用存储过程 test
call test();   
###############################################################################
-- 15 视图
create view v_goods as select g.*,c.cateName from goods_breathmask g left join category c on g.typeId = c.typeId where g.price > 1;

drop view v_goods;

-- 1060 - Dumplicate column name 'id'
-- create view v_goods as select * from goods_breathmask g left join category c on g.typeId = c.typeId;
###############################################################################

-- 16 日志
-- D:\phpStudy\MySQL\data\WINDOWS-74K72L3.log
show variables like 'general%';

set global general_log = 1;

-- 关闭日志
set global general_log = 0;
-- #################################################################
-- 17 字符串函数
-- 不是SQL语言通用语句,只是MySQL有的,了解即可

-- 把括号中的多个值连接成一个字符串
select concat('张', '三');

select concat(name, age) from student;

select length('abc');
select length('a我');
select length('和你我');
select length(name), name from student;

-- 内置函数可以出现在where后面的条件中
select * from student where length(name) = 9;

-- left字符串 从指定字符串左侧,截取指定数量的字符
select left('和你我abc', 3);

select left('和你我abc', 4);
select left(name, 1) from student;

-- right字符串 从指定字符串右侧,截取指定数量的字符
select right(name, 1) from student;

-- substring(字符串,开始位置, 截取长度)
select substring('我和你abc', 3, 2);
select substring('我和你abc', 2, 3);
select substring(name, 2,1) from student;

-- 查询李白的生日
select substring(card, 7, 8) from student where name = '李白';

-- 按生日大小排序
select * from student order by substring(card, 7, 8);

-- 去除空格
select ltrim(' abc');
select rtrim('abc ');
select trim(' abc ');

相关文章

  • 生信星球学习记录Day2-HEYi😛

    Linux 基本命令 实操一 实操二 实操三3 实操四 练习题 如何输出长格式列表,以及显示文件大小ls -l ...

  • 基金练习实操

    经过妹妹一个周教我理财以及让我实操后,渐渐地懂得了理财的基础知识它的算法逻辑,在一个周内投入的500元净赚到收益5...

  • 继续练习实操

    做心理咨询的公益个案是一件非常有趣的事。既能链接到不同类型的来访者,又能在他们的人生故事里看见我自己的来时...

  • 2019年3月16日周检视

    效能 这个星期学习了十周进阶课程,还有实操课,在做实操课练习之前,还感觉自己有很多的时间,把实操课做完后感觉自己没...

  • 练习:实操小彩蛋

    即兴演讲实战训练小彩蛋: 1、加入即兴演讲训练营。 2、每天第一件事打开耳麦听听三位训练营小伙伴的打卡练习。 提炼...

  • 【中评班课程表】

    第一节理论:茶叶审评基础知识 实操:审评基础操作练习 第二节理论:茶树与茶叶化学 实操:审...

  • 实操课的乐趣

    以前上课,老师都只是书面上的说辞,并没有实操,除开练习走、站、坐、蹲外。从这个学期开始,我们开设了实操课程,和许多...

  • 2021-07-10

    实操口才表达能力练习打卡 今日问答口才练习数: 今日问答口才练习问题:为什么说认知决定行动力? 今日问答口才练习收...

  • 0610-Lemon-第三课第二次作业

    晚上实操课,我们在自己的战队小组里面进行实操,规则是在群里面练习用诱饵被动引流,把队员当作你的目标用户。 教练一说...

  • 「实操」练习中长型文案

    案例1:为京东*同道大叔合作活动写微博文案 活动背景:假如你是京东的微博运营,和同道大叔合作了一场活动,主题是“共...

网友评论

      本文标题:数据库实操练习

      本文链接:https://www.haomeiwen.com/subject/fohxlrtx.html