文章目录

  • DQL准备工作和语法
  • 语法
  • 简单查询
  • 条件查询
  • 排序查询
  • 聚合查询
  • 分组查询
  • 条数限制查询

DQL准备工作和语法

准备工作

#创建商品表:
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);

语法

select [distinct]
* | 列名,列名
from 表
where 条件

简单查询

-- 查询所有的商品.
SELECT * from product;
-- 查询商品名和商品价格.
select pname,price from product;
-- 查询价格,去掉重复值.
select DISTINCT price from product;
-- 查询结果是表达式(运算查询):将所有商品的价格+10元进⾏显示.
select pname,price+10 from product;
-- 别名查询.使⽤的关键字是as(as可以省略的).列别名
select pname,price+10 as '价格' from product;
select pname,price+10 '价格' from product;
-- 别名查询.使⽤的关键字是as(as可以省略的).表别名
select * from product as p;
select * from product p;

条件查询

比较运算符 < <= > >= =<> ⼤于、⼩于、⼤于(⼩于)等于、不等于
BETWEEN…AND… 显示在in列表中的值,例:in(100,200)
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; -- mysql特有的符号
#查询商品价格⼤于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);
# LIKe 中的 %代表匹配任意⻓度的任意字符; _代表匹配⼀个任意字符
#查询商品名称含有'霸'字的所有商品
select * from product where pname like '%霸%';
#查询商品名称以'⾹'开头的所有商品
select * from product where pname like '⾹%';
#查询商品名称第⼆个字为'想'的所有商品
select * from product where pname like '_想%';
#商品没有分类id的商品
select * from product where category_id is NULL;
#查询有分类id的商品
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; -- 不推荐
select count(pid) from product;
select count(category_id) 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;

分组查询

分组查询是指使⽤group by字句对查询信息进⾏分组。
格式:SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件;
分组操作中的having⼦语句,是⽤于在分组后对数据进⾏过滤的,作⽤类似于where条件。

having与where的区别:

  • having是在分组操作执⾏后, 对分组后的数据进⾏过滤.
    where是在分组操作执⾏前, 对分组前的数据只能使⽤表原始列进⾏条件过滤
  • having后⾯可以使⽤ 聚合函数 where后⾯不可以使⽤ 聚合函数。
  • 当⼀条SQL语句中, 既有where⼜有 group by \ having时, 先执⾏ where, 再执⾏ group by, 最后执⾏having

练习

#统计各个分类商品的个数
select category_id,count(*) from product group by category_id;
#统计各个分类商品的个数,且只显示个数⼤于1的信息
SELECT category_id,count(*) from product GROUP BY category_id HAVING
count(*)>1;
#统计价格>200元的 各个分类商品的个数,且只显示个数⼤于1的信息
-- select * from product where price>200 group by category_id;
-- select category_id,count(*) from product where price>200 group by
category_id ;
select category_id,count(*) from product where price>200 group by
category_id HAVING count(*)>1;

条数限制查询

LIMIT是MySQL内置函数,其作⽤是⽤于限制查询结果的条数。

格式: select * from 表名 limit m,n
其中: m是指记录开始的index,从0开始,表示第⼀条记录
n是指从第m+1条开始,取n条。
例如:
select * from tablename limit 2,4 -- 即取出第3条⾄第6条,4条记录

应⽤场合:分⻚

分⻚查询格式:
SELECT * FROM 表名 LIMIT startRow,pageSize;
例如:
select * from products limit 0,5; #第⼀⻚,每⻚显示5条。
select * from products limit 5,5; #第⼆⻚,每⻚显示5条。
select * from products limit 10,5; #第三⻚,每⻚显示5条。
select * from products limit startRow,5; #第curPage⻚,每⻚显示5条, startRow
的值如何计算呢?
-- 后台计算出⻚码、⻚数(⻚⼤⼩)
-- 分⻚需要的相关数据结果分析如下,
-- 注意:下⾯是伪代码不⽤于执⾏
int curPage = 2; -- 当前⻚数
int pageSize = 5; -- 每⻚显示数量
int startRow = (curPage - 1) * pageSize; -- 当前⻚, 记录开始的位置(⾏数)计算
int totalSize = select count(*) from products; -- 记录总数量
int totalPage = Math.ceil(totalSize * 1.0 / pageSize); -- 总⻚数

SQL语句(DQL)相关推荐

  1. Mysql单表、多表、SQL语句(DQL)

    第1章    SQL语句(DQL) 1.1     DQL准备工作和语法 1.1.1     准备工作 #创建商品表: create table product( pid int primary ke ...

  2. MySQL中SQL语句——DQL(数据查询语句)

    前言: 首先对于数据库有一定的了解,会对于Mysql的学习有一定的帮助: 数据库主要分为 DB(数据库),DBMS(数据库管理系统),SQL(结构化查询语言,用于和DBMS通信的语言):这篇要讲的DQ ...

  3. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  4. 聊聊SQL语句中 DDL 、DML 、DQL 、DCL 分别是什么

    数据库的核心语言就是SQL语言,那 DDL.DML.DQL.DCL 分别是什么?下面谈谈这四者的概念. 一. DDL 语句 二. DML 语句 三. DQL 语句 四. DCL 语句 一. DDL 语 ...

  5. 第6讲:SQL语句之DQL类型的数据查询语言

    SQL语句之DQL类型的数据查询语言 文章目录 SQL语句之DQL类型的数据查询语言 1.DQL类型的SQL语句基本概述 2.准备一张可以练习查询的数据表 3.DQL语句之简单的基础查询 3.1.查询 ...

  6. 【JavaWeb之旅二】MySQL数据库之SQL语句中的DML语句与DQL语句

    SQL语句中的DML语句与DQL语句 文章目录 SQL语句中的DML语句与DQL语句 1.SQL语句之DML 1.1DML常见的语法 1.添加数据常见语句 2.修改.删除数据常用语法 2.SQL语句之 ...

  7. 关于SQL语句的分类及DQL语句执行顺序

    关于SQL语句的分类及DQL语句执行顺序 SQL语句的分类 DQL语句 数据查询语言 select DML语句 数据操作语言 insert delete update DDL语句 数据定义语言 cre ...

  8. SQL语句中的DQL、DML、DCL、DDL、CCL、TPL

    结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库 ...

  9. sql之dql语句,语法和思路

    这些都是我自学时手打到文本文档,在复制粘贴到博客的,有一些命令格式不对,但全部百分百原创,如果有疑问或者不对的地方,欢迎评论区指正,也可以加q群592383030来探讨(我就是自学的普通人,不卖课,不 ...

最新文章

  1. Oracle round函数是什么意思?怎么运用?
  2. POJ 2112 Optimal Milking(二分+最大流)
  3. 使用 Python 和 OpenCV 进行数据增广
  4. 决策树学习算法 - ID3算法
  5. iOS集成sharesdk遇到的坑
  6. python中用来占位_python 占位符
  7. 机器人能翻转汉堡肉饼 短暂上岗后将“休息”四天
  8. Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程
  9. IJKMediaFramework框架的集成和使用实例一枚
  10. SpringBoot-拦截器、过滤器、监听器
  11. 【函数计算月报】2018年12月刊
  12. 电脑主页面上的计算机没了,电脑界面上的internet explorer 没有了
  13. windows server 2012 分布式文件系统DFS介绍
  14. Shell脚本编程之(三)执行方式差异(source, sh script, ./script)
  15. 面试软件测试的时候,应届生怎么包装自己的简历?
  16. 3、低功耗蓝牙(BLE)配对和解绑
  17. android 拦截耳机按键,Android耳机监测以及耳机按键监测
  18. javaweb三大框架
  19. 计算机无法自动搜索更新驱动程序,升级后关于硬件驱动的相关问题
  20. 一加手机怎么root权限_一加 A3010手机怎样Root,如何获取Root权限?

热门文章

  1. 自定义水波纹效果,可设置波纹条数和波纹颜色,使用简单
  2. javascript array添加图片_史上最全的web前端面试题汇总及答案JavaScript之二(二)...
  3. python 打包exe thread报错_pyinstaller 打包exe 遇到的坑
  4. android离线宝,Android 离线安装宝典
  5. java处理图像库函数_图象处理详解-Java架构师必看
  6. iOS查看静态库命令
  7. oauth password模式_SpringBoot OAuth2.0 认证授权(密码模式)
  8. api接口响应类型定义
  9. SpringBoot集成Thymeleaf
  10. Emacs之LaTeX环境配置及效果展示