SQL基础查询语句练习(Mysql版,单表,有表数据)

准备数据

#创建商品表:
create table product(
	pid int primary key,
	pname varchar(20),
	price double,
	category_id varchar(32)
);
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'果9',1,NULL);

提示 :语句末尾的英文分号,作用为分隔语句,运行单条语句不写也可以(Mysql中)

  • 简单查询
#查询所有的商品.	
select * from product;

#查询商品名和商品价格.
select pname,price from product;

#别名查询 使用的关键字是as(as可以省略的) 表别名:
select * from product as p;

#别名查询 使用的关键字是as(as可以省略的) 列别名:
select pname as pn from product;

#去掉重复值.
select distinct price from product;

#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示. 
select pname,price+10 from product;
  • 条件查询 
条件查询运算符
比较运算符> 、<、>=、<=、!=(<>)大于、小于、大于(小于)、不等于
 between..and...显示在某一区间的值(含头含尾)
 in(set)显示在 in 列表中的值,例:in(10,20)
 like '张'模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like '_a%';
 is null判断是否为空
 and多个条件同时成立
 or多个条件任一成立
 not不成立,例:where not(salary>100);

 

#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname = '花花公子';

#查询价格为800商品
SELECT * FROM product WHERE price = 800;

#查询价格不是800的所有商品
SELECT * FROM product WHERE price != 800;
SELECT * FROM product WHERE price <> 800;
SELECT * FROM product WHERE NOT(price = 800);

#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price > 60;

#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;

#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN (200,800);

#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';

#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';

#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';

#商品没有分类的商品
SELECT * FROM product WHERE category_id IS NULL;

#查询有分类的商品
SELECT * FROM product WHERE category_id IS NOT NULL;
  •  排序查询

      通过order by语句,可以将查询出的结果进行排序。暂时放置在select语句的最后。

格式:

SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;
#ASC 升序 (默认)
#DESC 降序

练习:

#使用价格排序(降序)
SELECT * FROM product ORDER BY price DESC;

#在价格排序(降序)的基础上,以分类排序(降序)
SELECT * FROM product ORDER BY price DESC,category_id DESC;

#显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
  •  聚合查询

上面做的时横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

聚合函数类型

- count:统计指定列不为NULL的记录行数;

- sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

- max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

- min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

- avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
#查询商品的总条数
SELECT COUNT(*) FROM product; 

#查询价格大于200商品的总条数
SELECT COUNT(*) FROM product WHERE price > 200;

#查询分类为'c001'的所有商品的总和
SELECT SUM(price) FROM product WHERE category_id = 'c001';

#查询分类为'c002'所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_id = 'c002';

#查询商品的最大价格和最小价格
SELECT MAX(price),MIN(price) FROM product;
  •  分组查询
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

- having与where的区别:


       having是在分组后对数据进行过滤

       where是在分组前对数据进行过滤

       having后面可以使用分组函数(统计函数)

       where后面不可以使用分组函数

- 练习

#统计各个分类商品的个数
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id ;

#统计各个分类商品的个数,且只显示个数大于1的信息
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*) > 1;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值