DML 数据查询

DQL准备工作和语法

创建商品表:

  商品表 product

  商品编号 主键 自增

  商品名称 字符

  商品价格 浮点型

  商品类别ID

1 create table product(
2     pid int not null primary key auto_increment,
3     pname varchar(500),
4     price double,
5     c_id int
6 );

添加测试数据:

 1 INSERT INTO product VALUES(null,'联想商务轻薄笔记本电脑,5999,1);
 2 INSERT INTO product VALUES(null,'联想拯救者游戏笔记本电脑',5999,1);
 3 INSERT INTO product VALUES(null,'三洋智能变频滚筒洗衣机',2499,1);
 4 INSERT INTO product VALUES(null,'海尔滚筒洗衣机全自动抗菌窗垫',2499,1);
 5 INSERT INTO product VALUES(null,'雷神游戏笔记本电脑',6599,1);
 6 INSERT INTO product VALUES(null,'七匹狼休闲裤男',299,2);
 7 INSERT INTO product VALUES(null,'真维斯长袖体恤上衣,35,2);
 8 INSERT INTO product VALUES(null,'花花公子休闲裤男裤',128,2);
 9 INSERT INTO product VALUES(null,'劲霸男装短版茄克男士休闲夹克',362,2); 
10 INSERT INTO product VALUES(null,'香奈儿女包',306830,3);
11 INSERT INTO product VALUES(null,'皮尔卡丹钱包',269,3);
12 INSERT INTO product VALUES(null,'普拉达女士斜挎包',28512,3);
13 INSERT INTO product VALUES(null,'好想你干果零食新疆特产',21.9,4);
14 INSERT INTO product VALUES(null,'三只松鼠坚果大礼包',128,4);
15 INSERT INTO product VALUES(null,'三只松鼠坚果炒货零食特产',32.8,4);
16 INSERT INTO product VALUES(null,'洽洽坚果炒货',149,4);
17 INSERT INTO product VALUES(null,'今之逸品今之逸品双眼皮贴',9.9,5);
18 INSERT INTO product VALUES(null,'自然乐园芦荟舒缓保湿凝胶',72,5);
19 INSERT INTO product VALUES(null,'欧莱雅男士控油清痘洁面',38.9,null);
20 INSERT INTO product VALUES(null,'阿拉丁无水草酸草酸',88.1,null);
21 INSERT INTO product VALUES(null,'远东电缆方国标家装照明',473,null);

简单查询

1. 查询所有的商品

select * from product;

2. 查询商品名和商品价格.  

select pname,price from product;

3. 别名查询.使用的关键字是as(as可以省略的).

表别名:  

select p.pname,p.price from product p;

列别名:

-- 列别名的第一种用途 更清楚的标记这一列是什么 但是因为是中文标记 不常用
select pname 商品名称 from product;  

-- 正常就是为了简化列名
select pname c1 from product;

4. 去掉重复值

select distinct price from product;

5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.

select pname,price spjg,(price+10) yfjg from product;

条件查询

查询商品名称为“三只松鼠坚果炒货零食特产”的商品所有信息:

SELECT * FROM product WHERE pname = '三只松鼠坚果炒货零食特产';

查询价格为299商品

SELECT * FROM product WHERE price = 299;

查询价格不是800的所有商品

-- 写法1 : 最正常的写法
SELECT * FROM product WHERE price != 800;

-- 写法2 : 比较诡异的写法
SELECT * FROM product WHERE price <> 800;

-- 写法3 : 很不正常的写法
SELECT * FROM product WHERE NOT(price = 800);

查询商品价格大于60元的所有商品信息

SELECT * FROM product WHERE price > 60;

查询商品价格在2000到10000之间所有商品

-- 标准写法
SELECT * FROM product WHERE price >= 2000 AND price <=10000;

-- 简易写法 效果一样
SELECT * FROM product WHERE price BETWEEN 2000 AND 10000;

查询商品价格小于2000或大于10000的所有商品

select * from product where price > 10000 or price < 2000;

查询商品价格等于 306830 28512 的商品信息

-- 标准写法
select * from product where price = 306830 or price = 28512;

-- 简写方案
select * from product where price in (306830,28512);

查询含有 '霸' 字的所有商品

SELECT * FROM product WHERE pname LIKE '%霸%';

查询以'三'开头的所有商品

SELECT * FROM product WHERE pname LIKE '三%';

查询第二个字为'想'的所有商品

SELECT * FROM product WHERE pname LIKE '_想%';

商品没有分类的商品

SELECT * FROM product WHERE c_id IS NULL;

查询有分类的商品

SELECT * FROM product WHERE c_id IS NOT NULL;

排序查询

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

格式:

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

1.使用价格排序(降序)

SELECT * FROM product ORDER BY price DESC;

2.在价格排序(降序)的基础上,以分类排序(降序)

SELECT * FROM product ORDER BY price DESC,c_id DESC;

3.显示商品的价格(去重复),并排序(降序)

SELECT DISTINCT price FROM product ORDER BY price DESC;

聚合查询

聚合查询就是先把表的数据聚在一起,统一进行计算后,再得出一个结果的查询方式,聚合函数会忽略空值。

我们学习如下五个聚合函数:

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

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

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

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

avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

1 查询商品的总条数

SELECT COUNT(*) FROM product;

2 查询价格大于2000商品的总条数

SELECT COUNT(*) FROM product WHERE price > 2000;

3 查询分类为 1 的所有商品的总和

SELECT SUM(price) FROM product WHERE c_id = 1;

4 查询分类为2所有商品的平均价格

SELECT AVG(price) FROM product WHERE c_id = 2;

5 查询商品的最大价格和最小价格

SELECT MAX(price),MIN(price) FROM product;

分组查询

分组查询是指使用group by字句对查询信息进行分组。

格式:

SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 分组条件;

分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。

having与where的区别:

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

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

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

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

1 统计各个分类商品的个数

SELECT c_id ,COUNT(*) FROM product GROUP BY c_id;

2 统计各个分类商品的个数,且只显示个数大于3的信息

SELECT c_id ,COUNT(*) FROM product GROUP BY c_id HAVING COUNT(*) > 3;

猜你喜欢

转载自www.cnblogs.com/zss0520/p/10205057.html