【MySQL|第四篇】DQL语句(二)——数据查询语言

4、排序分页:

(1)排序:

        查询数据的时候进行排序,就是根据某个字段的值,按照升序或者降序的情况将记录显示出来

语法:

        select col_name,...

        from tb_name

        order by col_name [asc|desc]

注意事项:

1. order by语句,只对查询记录显示调整,并不改变查询结果,所以执行权最低,最后执行

2. 排序的默认值是asc:表示升序(可以不写),desc:表示降序

3. 如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值

        先升序排第一列,如果第一列有重复的值,再降序排第二列,以此类推

案例:查看员工的id,名字和薪资,按照薪资的降序排序显示,工资相同就按名字升序排

        select id,last_name,salary

        from s_emp

        order by salary desc,last_name;

(2)分页:

        因为表中数据过多,我们并不能一次全都查询出来交给前端去展示,而是需要每次按照提前设置好的要求,查询一部分数据给用户,当用户点击下一页的时候,再查出下一部分数据给用户。

语法:

        select 字段列表

        from 表名

        limit 起始索引, 查询记录数;

案例1:查询s_emp表中,前5条数据

        select id,last_name

        from s_emp

        limit 0,5;

        或者

        select id,last_name

        from s_emp

        limit 5;

案例2:查询s_emp表中第二页数据,每页显示5条数据

        select id,last_name

        from s_emp

        limit 5,5;

案例3:查询s_emp表中,第n页,每页显示size条数据

        select id,last_name

        from s_emp

        limit (n-1)*size,size;

注意事项:

1. 起始索引从0开始.计算公式 : 起始索引 = (查询页码 - 1* 每页显示记录数

2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数

5、多表查询:

多表查询,又称表联合查询,即一条sql语句涉及到的表有多张,表中的数据通过特定的连接,进行联合显示。

注意事项:阿里开发规范中要求多表连接必须给表起别名

(1)笛卡尔积:

        在数学中,两个集合XY的笛卡尓积(Cartesian product),又称直积,表示为X × Y

        例如,假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a,1), (a, 2), (b, 0), (b, 1), (b, 2)}。

        在数据库中,如果直接查询俩张表,那么其查询结果就会产生笛卡尔积。例如这里:s_emp表中25条数据,s_dept表中12条数据,查询俩张表,数据俩俩组合,会得到300条数据

        其实,s_emp表中的每一条数据,和s_dept表中的每一条数据进行俩俩组合,这里面大多数的数据是没有意义的,为了这种避免笛卡尔积的产生,在多表查询的时候,可以使用连接查询来解决这个问题。

注意:多表查询本质上将多张小表组合成一张大表,同时要借助连接查询去除无效的笛卡尔积。

(2)等值连接:

        等值连接又称为内连接(自然连接),将两张具有关联关系的列的数据连接起来,连接查询where子句中用来连接两个表的条件称为连接条件或者连接谓词,当连接运算为=的时候,称之为等值连接。

语法:

        select col_name....

        from table_name1,table_name2

        where [table_name1].[col_name]=[table_name2].[col_name]

        或

        select col_name....

        from table_name1 inner join table_name2

        on [table_name1].[col_name]=[table_name2].[col_name]

案例:查询员工的名字、部门编号、部门名字

        select last_name,dept_id,s_dept.id,name

        from s_emp,s_dept

        where s_emp.dept_id=s_dept.id;

为了表述的更加清楚,可以给每张表起别名

        select se.last_name,se.dept_id,sd.id,sd.name

        from s_emp se,s_dept sd

        where se.dept_id=sd.id;

(3)不等值连接:

        两张没有关联关系(主外键)的表,通过某个特定场景的业务连接起来,为不等值连接

假设数据库中还有一张工资等级表, salgrade

工资等级表 salgrade

  • gradeName 列表示等级名称
  • losal 列表示这个级别的最低工资数
  • hisal 列表示这个级别的最高工资数
#新建等级表create table salgrade(id int primary key auto_increment,name varchar(20),minsal float,maxsal float);#往表中插入数据insert into salgrade(name,minsal,maxsal) values('初级工程师',0,1000);insert into salgrade(name,minsal,maxsal) values('中级工程师',1001,2000);insert into salgrade(name,minsal,maxsal) values('高级工程师',2001,3000);#删除表drop table salgrade;

案例:查询出员工的名字、职位、工资、工资等级名称

select e.id, e.last_name, e.title, e.salary, s.name
from s_emp e, salgrade s
where e.salary between s.minsal and s.maxsal;

(4)自连接:

        自连接就是一张表,自己和自己连接后进行查询

案例1:查询每个员工的名字以及员工对应的管理者的名字

        select s1.id,s1.last_name,s2.id,s2.last_name manager_name

        from s_emp s1,s_emp s2

        where s1.manager_id = s2.id;

# 可理解s1为员工表,s2为经理表

(5)内连接:

内连接查询:查询两表或多表中交集部分数据。

内连接从语法上可以分为: 隐式内连接 与 显式内连接

隐式内连接语法:

        select 字段列表

        from table_name1,table_name2

        where 条件 ... ;

显式内连接语法:

        select 字段列表

        from table_name1 [inner] join table_name2

        on 连接条件 ... ;

案例1:查询员工的姓名及所属的部门名称

隐式内连接实现

select se.id,se.last_name,se.dept_id,sd.id,sd.name
from s_emp se,s_dept sd
where se.dept_id = sd.id;

显式内连接实现

select se.id,se.last_name,se.dept_id,sd.id,sd.name
from s_emp se inner join s_dept sd
on se.dept_id = sd.id;

注意事项:

一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。

(6)外连接:

        外连接分为,左外连接、右外连接

        左外连接:保留表关系中所有匹配的数据记录,包含关联左边表中不匹配的数据记录

语法:

        select col_name....

        from table_name1 left [outer] join table_name2

        on [table_name1].[col_name]=[table_name2].[col_name]

案例1:查询所有员工,以及对应的部门的名字,没有部门的员工也要显示出来

#这里的outer,是可以省去不写
select se.id,se.last_name,se.dept_id,sd.name
from s_emp se left outer join s_dept sd
on se.dept_id=sd.id;

        

可以看出,左边的第一张表中,新增的一条数据tom,原来等值连接不上,现在也被查询出来了。

        右外连接:保留表关系中所有匹配的数据记录,包含关联右边表中不匹配的数据记录。

语法:

        select col_name....

        from table_name1 right [outer] join table_name2

        on [table_name1].[col_name]=[table_name2].[col_name]

案例1:查询所有员工 以及对应的部门的名字,没有任何员工的部门也要显示出来

select se.id,se.last_name,se.dept_id,sd.namefrom s_emp se right outer join s_dept sdon se.dept_id=sd.id;

可以看出,右边的第二张表中,新增的一条数据st,原来等值连接不上,现在也被查询出来了

6、单行函数:

        函数在计算机语言的使用中贯穿始终,函数可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性 。

        在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。

        SQL中的函数可以分为两类:单行函数和聚合函数,本章我们重点讨论单行函数。

        单行函数接受参数返回一个结果,只对一行进行变换,每行返回一个结果,可以嵌套,参数可以是一列或一个值。

(1)数值函数:

案例展示:

案例1:返回-20的绝对值 select abs(-20);

案例2:返回32.56的四舍五入保留小数点后-2位  select round(32.56,-2);

案例3:将10转化为二进制、八进制、十六进制  select bin(10),oct(10),hex(10);

(2)字符串函数:

案例展示:

案例1:将hello转化为大写,将GOOD转化为小写  select upper('hello'),lower('GOOD');

案例2:将helloworld字符串拼接  select concat('hello','world');

案例3:去除字符串中前后的空白字符  select trim(' hello world ');

案例4:将helloworld从第3个位置开始截取  select substr('helloworld',3);

(3)时间日期:

案例1:获取当前时间,包括年月日  select curdate(),current_date();

案例2:获取当前时间,包括小时、分钟、秒  select curtime(),current_time();

案例3:获取当前系统时间  select now(),sysdate();

案例4:获取世间标准日期和时间  select utc_date(),utc_time();

案例5:获取当前系统时间戳  select unix_timestamp();

案例6:将当前时间转化为时间戳  select unix_timestamp(now());

案例7:将时间戳转化为时间 select from_unixtime(1661789223);

案例8:返回当前是那年 select year(now());

案例9:返回当前时间的年月select extract(year_month from now());

案例10:将当前时间转化为年--select date_format(now(),'%Y-%m-%d');

fm格式:

(4)流程控制:

        流程处理函数可以根据不同的条件,执行不同的处理流程。

案例1:员工薪水大于1500,显示蓝领,否则白领

select id,last_name,salary,if(salary>2000,'蓝领','白领')from s_emp;

案例2:显示员工年薪薪水为null的用0计算

select id,last_name,salary,ifnull(salary,0)*13 sum_salfrom s_emp;

案例3:员工薪水大于2500,显示金领,1500-2500蓝领,否则白领

select id,last_name,salary,case when salary>2500 then '金领'when salary<=2500 and salary>=1500 then '蓝领'else '白领' endas "rank"from s_emp;

案例4:按照员工编号指定3组员工

select id,last_name,salary,case id%3 when 1 then '1group'when 2 then '2group'else '3group' endas "group"from s_emp;

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

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

相关文章

百度文心X1.1发布!实测深度思考能力!

文章目录背景模型实测效果事实性指令跟随智能体模型技术解读基准测试文心飞桨携手共进总结背景 9月9日&#xff0c;WAVE SUMMIT深度学习开发者大会上&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰正式发布了文心大模型X1.1深度思考模型&#xff…

基于Java+SpringBoot的B站评论系统架构设计与实践深度解析

基于JavaSpringBoot的B站评论系统架构设计与实践深度解析 前言 作为国内领先的视频分享平台&#xff0c;B站的评论系统承载着海量用户的实时互动需求。本文将从架构师角度&#xff0c;基于JavaSpringBoot技术栈&#xff0c;深度解析评论系统的技术实现方案、核心难点及扩展性设…

赋能数字孪生:Paraverse平行云实时云渲染平台LarkXR,提供强大的API与SDK用于二次开发和深度集成

在数字孪生渗透千行百业的今天&#xff0c;构建一个高保真、实时交互、可大规模访问的虚拟孪生世界已成为核心需求。然而&#xff0c;对于开发者而言&#xff0c;从零开始构建实时云渲染、海量模型加载、数据双向互通、多端适配、网页嵌套&#xff0c;平台定制化等底层技术难关…

基于Nginx实现反向代理、负载均衡与动静分离完整部署指南

基于Nginx实现反向代理、负载均衡与动静分离完整部署指南 文章目录基于Nginx实现反向代理、负载均衡与动静分离完整部署指南一、架构规划与环境准备1.1 架构设计思路1.2 服务器规划1.3 环境依赖二、部署Nginx负载均衡器2.1 安装Nginx依赖包2.2 创建Nginx专用用户2.3 编译安装Ng…

HTML5国庆网站源码

一. 网站概述 本国庆主题网站以弘扬爱国主义精神为核心&#xff0c;通过丰富多元的交互功能与视觉设计&#xff0c;打造沉浸式国庆体验空间。网站采用单页面架构&#xff0c;通过平滑滚动实现各模块的无缝衔接&#xff0c;涵盖首页、知识科普、互动体验等十大功能板块&#xf…

MySQL收集processlist记录的shell工具mysql_collect_processlist

文章目录安装指南日志文件内容日志分析参考1.简单检索2.统计不同状态的语句的数量3.按照时间统计注意事项仓库这是一个纯脚本工具&#xff0c;用于从MySQL的information_schema.processlist视图中定期收集数据并保存到本地日志文件。支持MYSQL5.7-9.4版本。 template copy fro…

工业RFID现场网关模块:实现多协议互通,128台读写设备互连!

随着工业4.0进程加速&#xff0c;企业对生产系统集成度的需求不断增长。在工厂中常需整合不同品牌PLC、驱动器、机械臂、读写器等设备系统&#xff0c;这其中就会涉及到如Profinet、EtherNet/IP、EtherCAT、Modbus TCP、CC-LINK IE等不同通讯协议连接。虽可将部分设备直接与PLC…

黑马点评高级篇第7节课 输入INFO replication 显示0个从节点,但是在7002节点又显示它已经是7001节点的从节点了

问题描述在黑马点评高级篇第七节课的这个位置​​​​​​&#xff0c;当我输入INFO replication 的时候下面本应该显示为connected_slaves: 2&#xff0c;但是我的显示的是0。然后当我切换到7002端口的节点时&#xff0c;又显示7002就是7001的从节点解决我看弹幕上说在7002和7…

pcb线路板打样厂家有哪些?

在电子制造产业升级浪潮中&#xff0c;PCB打样环节的效率与品质直接影响产品迭代速度。本文聚焦国内五家具备核心技术竞争力的PCB打样厂商&#xff0c;深度解析其差异化优势&#xff0c;为硬件开发者提供精准选型参考。猎板PCB作为国家高新技术企业&#xff0c;猎板PCB在高频高…

【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)

1. 场景故事 “作为HR&#xff0c;我曾每天手动换壁纸提神&#xff0c;直到某天忙到忘记&#xff0c;结果被同事截图当‘黑历史’…” → 转折点&#xff1a;用Python调用Windows API写了个“随机壁纸机”&#xff0c;开机自启&#xff0c;每次登录都是新风景&#xff0c;现在截…

集成学习 —— 梯度提升树GBDT、XGBoost

目录 一、梯度提升树 1、残差提升树 Boosting Decision Tree 2、梯度提升树 Gradient Boosting Decision Tree 二、构建案例 1、 初始化弱学习器(CART树)&#xff1a; 2、 构建第1个弱学习器 3、 构建第2个弱学习器 4、 构建第3个弱学习器 5、 构建最终弱学习器 6、 构…

【船类】监控录像下船舶类别检测识别数据集:近7k图像,6类,yolo标注

监控录像下船舶类别检测识别数据集概述 数据集包含 6900监控录像下船舶类别图像&#xff0c;6个标注类别&#xff1a; 散货船、集装箱船、渔船、杂货船、矿砂船、客船 标注格式&#xff1a;yolo txt&#xff08;格式可转&#xff0c;可直接训练&#xff09; 标注工具&#…

用户故事设计范式(As a... I want to... So that...)

我们来详细解析一下用户故事&#xff08;User Story&#xff09;&#xff0c;包括其结构、为什么重要、如何编写好的用户故事以及一个完整的示例。1. 用户故事的基本结构&#xff1a;三段式模板最经典和通用的用户故事模板就是您提到的三段式&#xff1a;As a [角色]:目的&…

【OpenGL】LearnOpenGL学习笔记20 - 实例化 Instancing

上接&#xff1a;https://blog.csdn.net/weixin_44506615/article/details/151156446?spm1001.2014.3001.5501 完整代码&#xff1a;https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 实例化 Instancing 以往当我们在场景中要大量绘制相同模型…

MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!

MySQL「主从不一致」最常见的成因、快速定位思路以及可落地的修复手段 一、为什么会不一致&#xff1f;14 类高频场景类别典型表现/触发条件快速自检命令/日志1. 从库被写入业务或 DBA 直连从库 UPDATE/INSERTSHOW VARIABLES LIKE read_only 应为 ON2. 复制过滤规则主从 binlog…

AI 网站源码:探秘 SUNO,革新音乐创作的 AI 先锋

在当今数字化浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正深刻地重塑各个领域&#xff0c;音乐创作也不例外。SUNO 作为一款引领潮流的音乐生成工具&#xff0c;宛如一颗璀璨新星&#xff0c;在音乐创作的天空中熠熠生辉&#xff0c;为音乐爱好者和创作者们带来了前…

Linux:malloc背后的实现细节

目录前言一、先搞懂基础&#xff1a;程序的内存布局&#xff08;关键前提&#xff01;&#xff09;二、malloc的核心实现步骤&#xff08;4层架构拆解&#xff09;第1层&#xff1a;用户调用 → 标准库处理&#xff08;glibc的malloc.c&#xff09;第2层&#xff1a;堆内存池管…

什么是X11转发?

X11 转发&#xff08;X11 forwarding&#xff0c;ssh -X&#xff09;是一种 SSH 协议功能&#xff0c;它允许用户在远程服务器上运行图形化应用程序&#xff0c;并通过本地的显示设备和输入输出设备与这些程序进行交互。它被开发者广泛使用&#xff0c;用于在大规模、异构的服务…

Android Kotlin 动态注册 Broadcast 的完整封装方案

在 Kotlin 中封装动态注册的 Broadcast 可以让你更优雅地管理广播的注册和注销&#xff0c;避免内存泄漏。下面是一个完整的封装方案&#xff1a; 基础封装类 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改进(8):融合Self-Attention的CNN架构

1. 自注意力机制简介自注意力机制是Transformer架构的核心组件&#xff0c;它能够计算输入序列中每个元素与其他所有元素的相关性。与CNN的局部感受野不同&#xff0c;自注意力机制允许模型直接建立远距离依赖关系&#xff0c;从而捕获全局上下文信息。在计算机视觉中&#xff…