DML 数据查询

Posted zss0520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

技术分享图片

以上是关于DML 数据查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中都有哪些DML操作

MySql触发器使用

MySQL触发器

数据库DDL与DML指的什么?

数据库DDL与DML指的什么?

如果我的 PLSQL 块中有多个 DML 查询,我如何计算聚合受影响的行?