SQL练习(单表查询)
create table star(
id int auto_increment,
name varchar(50) not null,
money float not null ,
province varchar(20) default null ,
age tinyint unsigned not null ,
sex tinyint not null ,
primary key (id)
) engine= InnoDB default charset=utf8;
要求:
1, 根据表结构使用sql语句创建star表 (答案直接根据语句创建即可)
2, 给star表随机插入多条数据 (答案直接根据语句插入即可)
3, 在star表中找出年龄大于30的明星select * from star where age>30;
4, 按照省份分组,查出每个省份的明星个数
select province,count(*) from star group by province;
5, 找到明星个数大于1的省份
select province, count(*) from star group by province having count(*)>1;
6, 找到明星个数第二多的省份及个数
select province,count(*) from star group by province order by count(*) desc limit 1,1
重点(多表查询)
分类表category: 商品表goods
-- 1, 使用sql语句创建category表和goods表,其中categoryid为外键(答案根据语句创建即可)
-- 2, 找出所有分类
-- SELECT * FROM category;
-- 3, 找出价格>=5的商品名称有哪些
-- SELECT name FROM goods where price>=5;
-- 4, 找出分类名称为‘水果’的所有商品
-- SELECT goods.* FROM category,goods WHERE category.id=goods.categoryid and category.name='水果';
(方法二)-- SELECT goods.* FROM category JOIN goods ON category.id=goods.categoryid and category.name='水果';
-- 5, 找出泡泡堂商品所属的分类名称
-- SELECT category.name, goods.name FROM category,goods WHERE category.id=goods.categoryid and goods.name='泡泡堂';
-- 6, 找出每个分类的分类名称及分类的商品数量
-- SELECT category.name, count(goods.categoryid) FROM category left JOIN goods ON category.id=goods.categoryid GROUP BY category.id;
-- 7, 将所有商品按价格降序排列
-- SELECT * FROM goods ORDER BY price DESC;
-- 8, 找出每个分类的名称及分类的商品数量,并按商品数量降序排列
-- SELECT category.name, count(goods.categoryid) FROM category left JOIN goods ON category.id=goods.categoryid GROUP BY category.id ORDER BY count(goods.categoryid) DESC;
-- 9, 找出比'娃哈哈'价格低的商品
-- SELECT * FROM goods WHERE price<(SELECT price FROM goods WHERE name='娃哈哈');
-- 10, 找出比平均价格低的商品
-- SELECT AVG(price) FROM goods;
(方法二)-- SELECT * FROM goods WHERE price<(SELECT AVG(price) FROM goods);
-- 11, 列出分类名称和这些分类的商品信息,同时也列出那些没有商品的分类
-- SELECT category.name, goods.* FROM category LEFT JOIN goods on category.id=goods.categoryid;
小注意: 标点符号不要错都是英文格式,每条语句结尾都有‘;’。