目录
基础查询
高级查询
基础查询
现有用户表user数据如下:
1、写出ddl语句创建如上表,插入数据,查询所有数据
#创建表user
create table user(
id int UNSIGNED auto_increment key ,
device_id int UNSIGNED,
gender varchar(6),
age TINYINT,
university varchar(4),
province varchar(10)
)
#插入数据
insert into user(device_id,gender,age,university,province)
values(2138,'male',21,'北京大学','Beijing'),
(3214,'male',null,'复旦大学','Shanghai'),
(6543,'female',20,'北京大学','Beijing'),
(2315,'female',23,'浙江大学','Zhejiang'),
(5432,'male',25,'山东大学','Shandong');
#查询所有数据
select * from user;
2、查询设备id为2138对应的性别、年龄和学校的数据,请你取出相应数据
select u.gender,u.age,u.university from user u where u.device_id=2138;
3、查询用户来自于哪些学校,请从用户信息表中取出学校的去重数据
select DISTINCT(university) university from user;
4、查询前两2条用户信息
select * from user order by id LIMIT 2;
5、查询用户年龄并按降序排序
select age from user order by age desc ;
6、查询所有北京大学的学生
select * from user where university like '北京大学';
select * from user where university = '北京大学';
7、 查询学校名字带‘京’的学生
select * from user where university like '%京%';
8、查询24岁以上的用户,请你取出满足条件的设备ID、性别、年龄、学校
select device_id,gender,age,university from user where age>=24;
9、查询除复旦大学以外的所有用户信息
select * from user where university != '复旦大学';
select * from user where not university = '复旦大学';
10、查询所有学校及学校的人数
select university,count(*) num from user GROUP BY university;
11、查询年龄在20到23之间的用户信息
select * from user where age BETWEEN 20 and 23;
select * from user where age >=20 and age<=23;
select * from user where age in (20,21,22,23);
高级查询
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
);
2、写一个存储过程,实现商品类别数据插入至少4条
create PROCEDURE p_initcategory()
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_initcategory();
3、写一个存储过程,插入商品数据n条
create PROCEDURE p_initgoods()
begin
insert into goods(name,content,price,stock,cid,categoryPath)
values('小米电视','',2999,100,'3','1/3/'),('格力空调','',6999,50,'4','1/4/'),('创维电
视','',2100,10,'3','1/3/');
end;
#调用
call p_initgoods();
4、关联查询显示商品名称、价格、数量、类别
select g.`name`,g.price,g.stock,c.`name` categoryname from goods g JOIN
category c on g.cid=c.id;
5、根据类别查询出对应商品数据
select * from goods where INSTR(categoryPath,'3/');
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.gid;
end;
#插入购买数据
insert into goods_sale(gid,name,num,price) values(1,'小米电视',2,2999);
select * from goods_sale;
select * from goods;
7、写一个函数,根据类别id返回类别名称
create FUNCTION f_queryCategoryName(_id int UNSIGNED)
returns varchar(20)
begin
DECLARE _name varchar(20);
select name into _name from category where id=_id;
return _name;
end;
select f_queryCategoryName(1);
8、统计商品销售情况,显示商品名称、销售数量,取排名前三
select s.`name`,sum(s.num) num from goods_sale s GROUP BY name ORDER BY
num desc limit 3;
9、查询当天的购买记录
select * from goods_sale where DATE_FORMAT(create_time,'%Y-%m-%d')=CURDATE();
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');