MySQL中的高级查询语句案例

  1. 创建并合理设计表:至少满足如下要求

商品: 商品名称 、商品描述、商品价格、商品数量、商品类别等

商品类别: 类别名称 、多级分类,类别排序

商品购买表: 购买的商品、数量 、价格 等

#创建商品类别
create table category
(
    id int unsigned auto_increment key,
    name varchar(20),
    pid int unsigned default 0,
    sorts tinyint unsigned
);
#创建商品表
create table goods
(
    id int unsigned auto_increment key,
    name varchar(20),
    content text,
    price decimal(10, 2),
    stock mediumint default 0,
    cid int unsigned,
    categorypath varchar(200) ,
    create_time timestamp default current_timestamp,
    update_time timestamp on update current_timestamp
);
#商品购买表
create table goods_sale
(
    id int unsigned auto_increment key,
    gid int unsigned,
    name varchar(20),
    num mediumint default 0,
    price decimal(10, 2),
    create_time timestamp default current_timestamp
);

show tables;  查看category,goods,goods_sale 三个表创建成功。

MySQL中的高级查询语句案例_第1张图片

2.写一个存储过程,实现商品类别数据插入至少4条

create PROCEDURE p_category()
begin
    insert into category(id,name,pid,sorts)
    values(1,'电器',0,1),(2,'电脑',0,2),(null,'电视',1,1),(null,'空调',1,2),(null,'洗衣机',2,1);
end;
#调用
call p_category();

查询结果:

MySQL中的高级查询语句案例_第2张图片

3.写一个存储过程,插入商品数据n条

create PROCEDURE p_goods()
begin
    insert into goods(name,content,price,stock,categoryPath)
    values('格力空调','',2999,100,'1/3/'),('联想电脑','',6999,50,'1/4/'),('海尔洗衣机','',2100,10,'1/3/');
end;
#调用
call p_goods();

插入结果:

MySQL中的高级查询语句案例_第3张图片

 4.关联查询显示商品名称、价格、数量、类别

select g.`name`,g.price,g.stock,c.`name` categoryname  from goods g JOIN category c on g.cid=c.id;

执行结果:

MySQL中的高级查询语句案例_第4张图片

 5.根据类别查询出对应商品数据

select * from goods where instr(categoryPath,'3/');

查询结果:

MySQL中的高级查询语句案例_第5张图片

  6.写一个触发器添加商品购买记录时,自动更新商品数量

create trigger t_update_goods_stock
after insert
    on goods_sale for each row
    begin
        update goods set stock = stock-new.num where id = new.id;
    end;
-- 插入购买数据
insert into goods_sale(gid,name,num,price)
values (1,'格力空调',2,2999);

insert into goods_sale(gid, name, num, price)
values (2,'联想电脑',5,6999);

执行结果:

MySQL中的高级查询语句案例_第6张图片

 7.写一个函数,根据类别id返回类别名称

create FUNCTION p_CategoryName(_id int UNSIGNED)
       returns varchar(20)
   begin
       DECLARE _name varchar(20);
       select name into _name from category where id=_id;
       return _name;
   end;
select p_CategoryName(2);

执行结果:

MySQL中的高级查询语句案例_第7张图片

8统计商品销售情况,显示商品名称、销售数量,取排名前三

select s.`name`,sum(s.num) num from goods_sale s group by name order by num desc limit 3;

执行结果:

MySQL中的高级查询语句案例_第8张图片

 9查询当天的购买记录

select * from goods_sale where date_format(create_time,'%Y-%m-%d')=curdate();

执行结果:

MySQL中的高级查询语句案例_第9张图片

10查询最近3天的购买记录

select * from goods_sale where DATE_FORMAT(create_time,'%Y-%m-%d')>=DATE_FORMAT(DATE_SUB(now(),interval 3 day),'%Y-%m-%d');

执行结果:

MySQL中的高级查询语句案例_第10张图片

你可能感兴趣的:(MySqL,mysql,数据库)