SQL-DQL

  • DQL
    • 基础查询
    • 条件查询
    • 分组聚合
      • 聚合函数
      • 分组查询
    • 结果排序
    • 分页限制
    • 总结

DQL

语法结构

SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数

基础查询

查询多个字段
SELECT 字段1, 字段2, ......, 字段n FROM 表;

查询所有字段
SELECT * FROM 表;

查询时显示为别名
SELECT 字段1 [AS] '别名1', 字段2 [AS] '别名2', ......, 字段n [AS] '别名n' FROM 表;

查询结果去除重复记录
SELECT DISTINCT 字段1, 字段2, ......, 字段n FROM 表;

示例:

CREATE TABLE student(id INT,name VARCHAR(20),age INT
);INSERT INTO student
VALUES (10001, '周杰轮', 31), (10002, '王力鸿', 33), (10003, '林俊节', 26), (10004, '张学油', 26), (10005, '刘德滑', 40), (10006, '李白', 33), (10007, '张无忌', 31), (10008, '张三丰', 91), (10009, '李逵', 40);# 查询id和name两个列
SELECT id, name FROM student;# 查询全部列
SELECT id, name, age FROM student;# 查询全部列,快捷写法
SELECT * FROM student;# 查询id和name两个列,年龄小于33岁
SELECT id, name FROM student WHERE age < 33;# 查询全部列,id等于10003
SELECT id, name, age FROM student WHERE id = 10003;# 查询name列,并设置别名显示为“姓名”
SELECT name AS '姓名' FROM student; # 查询age列,且重复结果只显示一个
SELECT DISTINCT age FROM student;

条件查询

基础语法
SELECT 字段列表 FROM 表 WHERE 条件列表;

条件:==============================================================
比较运算符              |    功能
--------------------------------------------------------------
>                      |    大于
>=                     |    大于等于
<                      |    小于
<=                     |    小于等于
=                      |    等于
<> 或 !=               |    不等于
BETWEEN ... AND ...    |    在某个范围之内(含最大、最小)
IN(...)                |    在in之后列表中的值,满足一个即可
LIKE '占位符'           |    模糊匹配(“_”匹配单个字符,“%”匹配任意个字符)
IS NULL                |    值为null
============================================================================================================================
逻辑运算符              |    功能
--------------------------------------------------------------
AND 或 &&              |    并且(多个条件同时成立)
OR 或 ||               |    或者(多个条件任意一个成立)
NOT 或 !               |    非
==============================================================

分组聚合

基础语法
SELECT [字段] 聚合函数 FROM 表 [WHERE 条件判断] [GROUP BY 字段];

注意:
GROUP BY后面出现哪个字段,哪个字段才能出现在SELECT后的字段中

聚合函数

聚合函数:将一列数据作为一个整体,进行纵向计算。

语法
SELECT 聚合函数 FROM 表;

聚合函数:==============================================================
函数                   |    功能
--------------------------------------------------------------
SUM(字段)              |    求和
AVG(字段)              |    求平均值
MIN(字段)              |    求最小值
MAX(字段)              |    求最大值
COUNT(字段 或 *)       |    求数量
==============================================================

注:
null不参与任何聚合函数运算

分组查询

语法
SELECT 字段 FROM 表 [WHERE 条件] GROUP BY 字段 [HAVING 分组后过滤条件];

where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。

示例:

DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT,name VARCHAR(20),age INT,gender VARCHAR(10),address VARCHAR(20)
);INSERT INTO student
VALUES(10001, '周杰轮', 31, '男', '北京'), (10002, '王力鸿', 33, '男', '上海'), (10003, '林俊节', 26, '男', '成都'), (10004, '蔡依琳', 27, '女', '北京'), (10005, '林志灵', 30, '女', '贵阳'),(10006, '张学油', 35, '男', '重庆'), (10007, '刘德滑', 40, '男', '北京');# 求age平均值
SELECT AVG(age) FROM student;# 按gender字段分类并分别求age平均值(不显示gender)
SELECT AVG(age) FROM student GROUP BY gender;# 按gender字段分类并分别求age平均值(显示gender)
SELECT gender, AVG(age) FROM student GROUP BY gender;# 按gender字段分类并分别求age平均值与总和,id最大值与最小值
SELECT gender, AVG(age), SUM(age), MIN(id), MAX(id), COUNT(*) FROM student GROUP BY gender;# 查询年龄大于30的员工,并根据地址分组
SELECT address, COUNT(*) FROM student WHERE age > 30 GROUP BY address;# 查询年龄大于30的员工,根据地址分组,获取员工数量大于1的地址
SELECT address, COUNT(*) AS address_count FROM student WHERE age > 30 GROUP BY address HAVING address_count > 1;

结果排序

可以对查询的结果,使用ORDER BY关键字,指定某个列进行排序。

语法
SELECT 字段列表 FROM 表 ORDER BY 字段1 [排序方式1], 字段2 [排序方式2], ......, 字段n [排序方式n];

排序方式:
ASC:升序(默认值)
DESC:降序

注:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

示例:

DROP TABLE IF EXISTS student;
CREATE TABLE student(id INT,name VARCHAR(20),age INT,gender VARCHAR(10)
);INSERT INTO student
VALUES(10001, '周杰轮', 31, '男'), (10002, '王力鸿', 33, '男'), (10003, '林俊节', 26, '男'), (10004, '蔡依琳', 27, '女'),(10005, '林志灵', 30, '女'),(10006, '张学油', 26, '男'), (10007, '李白', 26, '男'), (10008, '哪吒', 33, '男'), (10009, '刘德滑', 40, '男');# 按age降序排序结果
SELECT * FROM student ORDER BY age DESC;# 按id升序排序结果
SELECT * FROM student WHERE age > 31 ORDER BY id;# 根据年龄进行降序排序,若年龄相同则根据id升序排序
SELECT * FROM student ORDER BY age DESC, id ASC;# 根据年龄进行降序排序,若年龄相同则根据id降序排序
SELECT * FROM student ORDER BY age DESC, id DESC;

分页限制

语法
SELECT 字段列表 FROM 表名 LIMIT [起始索引, ] 查询记录数;

注:
起始索引从0开始。
不同数据库有不同的分页查询实现,MySQL中是limit。

示例:

# 查询结果限制为2条
SELECT * FROM student LIMIT 2;# 跳过前3条后查询2条
SELECT * FROM student LIMIT 3, 2;# 跳过前3条后查询2条
SELECT * FROM student WHERE gender = '男' ORDER BY id LIMIT 3, 2;

总结

编写顺序

SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数

注:
语句执行顺序为:FROM -> WHERE -> ORDER BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

示例:

DROP TABLE IF EXISTS emp;# 创建员工表(employee)
CREATE TABLE emp(id INT COMMENT '编号',workno VARCHAR(10) COMMENT '工号',name VARCHAR(10) COMMENT '姓名',gender CHAR(1) COMMENT '性别',age TINYINT UNSIGNED COMMENT '年龄',idcard CHAR(18) COMMENT '身份证号',workaddress VARCHAR(50) COMMENT '工作地址',entrydate DATE COMMENT '入职时间'
)COMMENT '员工表';INSERT INTO emp(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES(1, '00001', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01'), (2, '00002', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01'), (3, '00003', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01'), (4, '00004', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01'), (5, '00005', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01'), (6, '00006', '杨逍', '男', 28, '12345678931234567X', '北京', '2006-01-01'), (7, '00007', '范瑶', '男', 40, '123456789212345670', '北京', '2005-05-01'), (8, '00008', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-01'), (9, '00009', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-01'), (10, '00010', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-01'), (11, '00011', '张士诚', '男', 55, '123567897123465670', '江苏', '2015-05-01'), (12, '00012', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01'), (13, '00013', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-01'), (14, '00014', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-01'), (15, '00015', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01'), (16, '00016', '周芷若', '女', 18, null, '北京', '2012-06-01');# 查询年龄为20,21,22,23岁的员工信息
SELECT * FROM emp WHERE gender = '女' AND age IN(20,21,22,23);# 查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
SELECT * FROM emp WHERE gender = '男' AND (age BETWEEN 20 AND 40) AND name LIKE '___';# 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
SELECT gender, COUNT(*) FROM emp WHERE age < 60 GROUP BY gender;# 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
SELECT name, age FROM emp WHERE age <= 35 ORDER BY age ASC, entrydate DESC;# 查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
SELECT * FROM emp WHERE gender = '男' AND (age BETWEEN 20 AND 40) ORDER BY age ASC, entrydate ASC LIMIT 5;# 通过别名验证DQL语句的执行顺序
SELECT e.name ename, e.age eage FROM emp e WHERE e.age > 15 ORDER BY eage ASC;

《SQL基础》04. SQL-DQL相关推荐

  1. 学习Sql基础以及Sql的部分语法(语法部分为3w中copy)

    第一章 .net与c# .NET是Microsoft.NET的简称,包含了能在.NET Framework平台运行的所有编程语言. C# 是专门为.NET平台设计的一种语言. c#第一个成绩 (1)使 ...

  2. java sql 基础_Java SQL基础

    SQL基础 1.DataBase 创建:CREATE DATABASE DATABASE_NAME ; 使用:USE DATABASE_NAME ; 删除:DROP DATABASE DATABASE ...

  3. SQL 基础篇 SQL 16 查找GPA最高值

    SQL基础篇(汇总)刷题传送门 题目链接 题面 样例输入 drop table if exists user_profile; CREATE TABLE `user_profile` ( `id` i ...

  4. SQL基础:常用SQL语句详解(转)

    到今天为止,人们对关系数据库做了大量的研究,并开发出关系数据语言,为操作关系数据库提供了方便的用户接口.关系数据语言目前有几十种,具有增加.删除.修改.查询.数据定义与控制等完整的数据库操作功能.通常 ...

  5. (大数据工程师学习路径)第四步 SQL基础课程----SQL介绍及mysql的安装

    一.数据库和SQL介绍 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它的产生距今已有六十多年.随着信息技术和市场的发展,数据库变得无处不在:它在电子商务.银行系统等众多领域都 ...

  6. 【SQL基础】SQL常用函数简要解析

    目录 1 字符串截取 1.1 left() 1.2 right() 1.3 mid() 2 字符串连接 2.1 concat() 2.2 concat_ws() 2.3 group_concat() ...

  7. SQL必知必会(一)SQL基础篇

    SQL基础 1.SQL语言 2.SQL开发规范 3.DB.DBS 和 DBMS 的区别是什么 4.SQL执行顺序 1.oracle中执行顺序 2.MYSQL执行顺序 3.sql关键字执行顺序 5. I ...

  8. 【SQL基础-3】SQL常用函数

    目录 1 字符串函数 1.1 字符串截取 1.1.1 left() 1.1.2 right() 1.1.3 mid()/substring()/substr() 1.2 字符串连接 1.2.1 con ...

  9. 【SQL基础-2】SQL常用运算符及通配符

    目录 1 常用运算符 1.1 比较运算符 1.2 BETWEEN范围运算符 1.2.1 当范围为日期时 1.2.2 当范围为字符时 1.3 IN列举运算符 1.4 NOT & AND & ...

  10. oracle 的遍历语法,oracle pl/sql之pl/sql语法

    一.pl/sql基础 pl/sql分匿名块和命名块. 命名块:存储过程,函数,触发器,包等. pl/sql语句块分3部分: (1)声明部分 (2)可执行部分 (3)异常处理部分 其中可执行部分是语句块 ...

最新文章

  1. python语言入门教程-菜鸟学Python入门教程大盘点|7个多月的心血总结
  2. [YTU]_2441( C++习题 复数类--重载运算符2+)
  3. java的轻量锁,jvm第7节-锁(偏向锁,轻量锁,自旋锁)
  4. sklearn分类器性能评估
  5. Linux通过RPM方式指定软件安装目录
  6. 安装Nvida 显示环境
  7. Python中RowIOBase详解
  8. Qt532.线程(_beginthread)
  9. POI读取单元格信息及单元格公式
  10. LVS学习笔记--DR模式部署
  11. 剑指offer——面试题10:二进制中1的个数
  12. oracle使用cgi吗_php架构之CGI、FastCGI、php-fpm有什么关系?原来这么简单
  13. 华为交换机学习指南基于子网划分划分vlan
  14. 计算机毕业设计之微信小程序的点餐系统 网上订餐app的论文
  15. 【html5插入透明Webm视频】
  16. 使用 Golang 实现简易的令牌桶算法
  17. IP地址被屏蔽怎么解决
  18. labview 写入mysql_LabVIEW 连接MySQL数据库
  19. 2012年7月份第2周51Aspx源码发布详情
  20. vue在新的标签页打开pdf文件

热门文章

  1. 「津津乐道播客」#397 厂长来了:怎样用科技给法律赋能?
  2. 《惢客创业日记》2020.07.25-26(周六)光盘行动的痛点(三)
  3. 耳机四根线的图解_type c数据线拆解及接线图文详解
  4. 网页服务器修复,网页被劫持,跳转发布网修复方法 看完就明白
  5. 你想象不到这些明星竟然是程序员出身
  6. IBM ThinkPad F11系统恢复完全技巧
  7. python 当前时间的毫秒时间戳转换为 年-月-日 时:分:秒
  8. DiscuzX2.5,X3.0,X3.1,X3.2完整目录结构【模板目录template】
  9. 物质社会会变成巨大的神经,这颗星球将会成一颗会思考的大脑
  10. 设置py文件在pycharm里的工作环境/路径