MySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)

news2024/9/22 13:24:24

目录

语法

基本查询

1.查询多个字段

2.设置别名

3.去除重复记录

示例

条件查询

1.语法

2.条件

示例

聚合函数 

介绍

常见聚合函数

语法

示例

分组查询

语法

示例

排序查询

1.语法

2.排序方式

示例

分页查询

语法

示例

DQL案例练习

执行顺序

DQL总结


DQL

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

查询关键字:SELECT 

语法

SELECT
    字段列表
FROM
    表名列表
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数;
  • 基本查询
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(GROUP BY)
  • 排序查询(ORDER BY)
  • 分页查询(LIMIT)

基本查询

1.查询多个字段

SELECT 字段1,字段2,字段3... FROM 表名;

--查询所有字段,在调试时可以使用通配符:* 
SELECT * FROM 表名;

实际编写SQL时不建议使用*,效率低、可视化程度低。

2.设置别名

SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名;

编写时,AS可省略。

3.去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

示例

我们先创建一个类似结构的表格emp

1.查询指定字段 name,workno,age 返回

2.查询所有字段返回

select id,workno,name,gender,age,idcard,workaddress,entrydate from emp;

-- select * from emp;

3.查询所有员工的工作地址,并起别名 

4.查询公司员工的工作地址(去重)

  

条件查询

1.语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

2.条件

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN...ADN...在某个范围之内(含最小、最大值)
IN(...)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配 (‘_’匹配单个字符,‘%’匹配任意个字符)
IS NULL判断是否为空
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意一个成立)
NOT 或 !非,不是

示例

-- 1.查询年龄等于88的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age = 88;

-- 2.查询年龄小于20的员工信息
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age < 20;

-- 3.查询年龄小于等于20的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age <= 20;

-- 4.查询没有身份证号的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where idcard is null;

-- 5.查询有身份证号的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where idcard is not null;
-- 6.查询年龄不等于88的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age != 88;
    -- 或
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age <> 88;

-- 7.查询年龄在15岁(包含)到20岁(包含)之间的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age >= 15 && /*AND*/ age <= 20;
    -- 或
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age between 15 and 20; -- 注意15和20的位置不要写反

-- 8.查询性别为女且年龄小于25岁的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where gender = '女' and age < 25;

-- 9.查询年龄等于16 或20 或40 的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age=16 || age=20 || age=40;
    -- 或
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where age in(16,20,40);
-- 10.查询姓名为两个字的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where name like('__');

-- 11.查询身份证号最后一位是X的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where idcard like('%X');
    -- 或
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where idcard like('________________X');

-- 查询名字中间带有’小‘的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where name like('_小_'); -- 也可以用_小%,但不可以用%小%

-- 查询李氏的员工
select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where name like('李%');

聚合函数 

介绍

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

常见聚合函数

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

语法

SELECT 聚合函数(字段列表) FROM 表名;

注意:NULL值不参与所有聚合函数运算。 

示例

-- 1.统计该企业员工数量
select count(id) from emp;

-- 2.统计该企业员工的平均年龄
select avg(age) from emp;

-- 3.统计该企业员工的最大年龄
select max(age) from emp;

-- 4.统计该企业员工的最小年龄
select min(age) from emp;

-- 5.统计西安地区员工的年龄之和
select sum(age) from emp where workaddress = '西安';

分组查询

语法

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

where与having的区别

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

注意:

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

示例



分组前过滤(where)+分组后过滤 (having):

 

排序查询

1.语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段1 排序方式2;

2.排序方式

  • ASC:升序(默认值)
  • DESC:降序

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

示例

1.根据年龄对公司员工进行升序排序

2.根据入职时间,对员工进行降序排序

 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

分页查询

语法

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

 注意:

  • 起始索引从0开始,起始索引= (查询页码-1)*每页显示记录数
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10

示例

1.查询第1页员工数据,每页展示10条记录

2.查询第2页员工数据,每页展示10条记录

DQL案例练习

1.查询年龄为18,20,21,22,23岁的女性员工信息

select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where gender = '女' and age in(18,20,21,22,23);

运行结果:

 2.查询性别为男,并且年龄在20-48岁(含)以内的姓名为三个字的员工

select id,workno,name,gender,age,idcard,workaddress,entrydate
    from emp where gender = '男' and age between 20 and 40 and name like('___');

运行结果:

3.统计员工表中,年龄小于60岁的男性员工和女性员工的人数

select gender,count(id) from emp where age < 60 group by gender;

运行结果:

4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序

select name,age from emp where age <= 35 order by age asc,entrydate desc;

 运行结果:

5.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

select * from emp
    where gender = '男' and age between 20 and 40
        order by age asc,entrydate asc
            limit 5;

运行结果:

执行顺序

编写顺序为:

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

而执行顺序为: 

即, 

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

DQL总结


end


学习自:黑马程序员——MySQL数据库课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux操作系统】Linux系统编程中的共享存储映射(mmap)

在Linux系统编程中&#xff0c;进程之间的通信是一项重要的任务。共享存储映射&#xff08;mmap&#xff09;是一种高效的进程通信方式&#xff0c;它允许多个进程共享同一个内存区域&#xff0c;从而实现数据的共享和通信。本文将介绍共享存储映射的概念、原理、使用方法和注意…

降级gcc和g++为版本gcc-7和g++-7

错误提示&#xff1a; /usr/local/cuda-10.1/include/crt/host_config.h:129:2: error: #error -- unsupported GNU version! gcc versions later than 8 are not supported! 129 | #error -- unsupported GNU version! gcc versions later than 8 are not supported! …

TiDB 源码编译之 TiFlash 篇

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/5f3fe44d 导言 TiFlash 从去年四月一日开源至今已经过去将近一年半&#xff0c;这段时间里 TiFlash 从 v6.0.0-DMR 升级到了 v7.3.0-DMR &#xff0c;并增加了若干新特性&#xff0c;比如支持 …

aardio的CS架构mysql数据表查询实例

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom479) winform.add( buttonAdd{cls"button";text"复制";left516;top442;right587;bottom473;z11}; buttonClose{cls"button";text"退出";…

HTML详解连载(8)

HTML详解连载&#xff08;8&#xff09; 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽浮动-产品区域布局场景 解决方法清除浮动方法一&#xff1a;额外标签发方法二&#xff1a;单伪元素法方法三&#xff1a;双伪元素法方法四&#xff1a;overflow浮动-总结…

漫谈红黑树:红黑树的奇妙演化

漫谈红黑树&#xff1a;红黑树的奇妙演化 一、红黑树的提出二、红黑树性质的简单推导三、结论 博主简介 &#x1f4a1;一个热爱分享高性能服务器后台开发知识的博主&#xff0c;目标是通过理论与代码实践的结合&#xff0c;让世界上看似难以掌握的技术变得易于理解与掌握。技能…

Dockerfile快速搭建自己专属的LAMP环境

目录 编写Dockerfile 1.文件内容需求&#xff1a; 2.值得注意的是centos6官方源已下线&#xff0c;所以需要切换centos-vault源&#xff01; 3.Dockerfile内容 4.进入到 lamp 开始构建镜像 推送镜像到私有仓库 1.创建用户并添加到私有仓库&#xff1a;​编辑​编辑 2.推…

CK-A60180、CK-B1542、CK-L3095单向离合器

CK-A1542、CK-A1747、CK-A2052、CK-A2652、CK-A3072、CK-A3580、CK-A4090、CK-A45100、CK-A450110、CK-A60130、CK-A65140、CK-A70150、CK-A75160、CK-A80170、CK-A1250、CK-A1855、CK-A2060、CK-A2563、CK-A2563T、CK-A2870、CK-A3080T、CK-A3585、CK-A35100、CK-A35140、CK-A…

Mybatis对参数的处理

环境配置 项目结构 导入依赖 <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><dependency><groupId>mysql</grou…

16、可重入锁+设计模式

可重入锁设计模式 while判断并自旋重试获取锁setnx含自然过期时间Lua脚本官网删除锁命令但不能保证可重如 问题&#xff0c;如何兼顾锁的可重入性问题&#xff1f; 可重入锁 可重入锁又名递归锁 是指在同一个线程在外层方法获取锁的时候&#xff0c;再进入该线程的内层方法…

Vue实战

初始化项目 创建项目 指令&#xff1a; pnpm create vite 实例&#xff1a; C:\Users\Administrator\Desktop\Vue\Vue3_admin_template>pnpm create vite .../Local/pnpm/store/v3/tmp/dlx-6140 | 1 Packages are hard linked from the content-addressable store to…

单体版ruoyi表格绑定按钮

先需要在表格中添加一个按钮&#xff0c;可以快速操作这条数据的某个0/1状态 表格的列 editFlag是检验用户是否有操作的权限 var editFlag [[${permission.hasPermi(pipayshop:itemCommoidtyInfoCategoryTop:edit)}]]; 绑定状态条 /* 用户状态显示 */function statusTools(…

我和 TiDB 的故事 | 远近高低各不同

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/b41a02e6 Hi, TiDB, Again! 书接上回&#xff0c; 《我和 TiDB 的故事 | 横看成岭侧成峰》 &#xff0c;一年时光如白驹过隙&#xff0c;这一年我好似在 TiDB 上投入的时间总量不是很多&#xff0…

baidu一面二叉树路径组数求和

举例&#xff1a;如下图&#xff0c;124125136 386 int sumTree(TreeNode* node,int sum){if(nodenullptr){return 0;}if(node->leftnullptr && node->rightnullptr){sum*10;sumnode->val;return sum;}sum *10;sum node->val;int sum_left sumTree(no…

网络安全---Ring3下动态链接库.so函数劫持

一、动态链接库劫持原理 1.1、原理 Unix操作系统中&#xff0c;程序运行时会按照一定的规则顺序去查找依赖的动态链接库&#xff0c;当查找到指定的so文件时&#xff0c;动态链接器(/lib/ld-linux.so.X)会将程序所依赖的共享对象进行装载和初始化&#xff0c;而为什么可以使用…

NPM 创建和管理组织

目录 1、创建一个组织 2、将用户帐户转换为组织 3、组织中开启双因素身份验证 3.1 关于组织的双因素身份验证 3.2 先决条件 3.3 在您的组织中要求双因素身份验证 3.4 帮助已删除的成员和外部协作者重新加入您的组织 4、重命名组织 5、删除组织 1、创建一个组织 任何n…

HRS--人力资源系统(Springboot+vue)--打基础升级--(三)查询用户信息

接上一集已经写了好导航侧界面&#xff0c;现在写个导航侧功能中的查询用户信息 1. 首先写一个员工信息vue&#xff0c;嗯 就叫employee.vue 2. 特地预留了右边的空白位置是用来展示数据的&#xff0c;所以我们要做子目录的一个关联&#xff0c;其次记得做地址的路由 3. Vue…

FreeRTOS基础六:中断管理2

在中断中使用队列 FreeRTOS的队列可以方便的实现中断传递数据到任务。但是如果数据到来的频率的非常高&#xff0c;导致中断触发频繁&#xff0c;则这种方式是非常不高效的。正如一些Demo所实现的&#xff0c;在UART中断中接收串口数据&#xff0c;然后放到队列中&#xff0c;…

华为OD机试关于无输入截止条件的ACM输入逻辑

无输入截止条件的ACM输入 华为OD机试题中有一些题目是没有输入截止条件的,比如 华为OD机试 - 数字游戏(Java & JS & Python)_伏城之外的博客-CSDN博客 从输入描述来看,每组有两行输入,但是并没有告诉我们具体有几组? 那么输入该如何截止呢? 此时,有两种输入…

CF 1326D Prefix-Suffix Palindrome(最长回文前后缀)

CF 1326D Prefix-Suffix Palindrome(最长回文前后缀) Problem - D2 - Codeforces 大意&#xff1a;给出一个字符串 S &#xff0c; 找出满足以下条件的字符串 T。 1. 字符串 T 尽可能长 并且 |T| ≤ |S| 2.字符串 T 由 S 的一个前缀和后缀拼接而成 &#xff0c; T 是回文串…