Mysql中常用到的查询关键字

news2024/9/22 23:28:14

文章目录

  • 1、join
  • 2、like 模糊查询
  • 3、or
  • 4、distinct
  • 5、in 包含
  • 6、group by 分组
  • 7、order by
  • 8、limit

1、join

MySQL 的连接主要分为内连接和外连接。

什么是内连接: 取得两张表中满足存在连接匹配关系的记录。
什么是外连接: 不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。

上图!!!!!
在这里插入图片描述
内连接 inner join:在两张表进行连接查询时,只保留两张表中完全匹配的结果集
外连接常用的有左连接、右连接。
左连接 left join :在两张表进行连接查询时,会返回左表所有的行,以及右表中匹配的行,右表中没有匹配到的返回null
右连接 right join:在两张表进行连接查询时,会返回右表所有的行,以及左表中匹配的行,左表中没有匹配到的返回null。

on先对数据进行过滤,然后再进行连接

先建两张表:t_user和t_class

CREATE TABLE `t_user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_name` varchar(32) DEFAULT NULL,
  `password` varchar(32) DEFAULT NULL,
  `status` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


CREATE TABLE `t_class` (
  `user_id` int NOT NULL,
  `class_name` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

插入数据:

# t_user 表
INSERT INTO `t_user` VALUES (9, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (10, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (11, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (12, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (13, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (14, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (15, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (16, 'yuanhaozhe', '123456', 2);
INSERT INTO `t_user` VALUES (17, 'yuanhaozhe', '123456', 2);

#t_class 表
INSERT INTO `t_class` VALUES (9, '软件1班');
INSERT INTO `t_class` VALUES (9, '人工智能1班');
INSERT INTO `t_class` VALUES (10, '软件2班');
INSERT INTO `t_class` VALUES (1, '计算机科学1班');
INSERT INTO `t_class` VALUES (11, '计算机科学2班');

内连接:匹配规则是 t_user的id=t_class的user_id

select * from t_user tu inner join t_class tc on tu.id = tc.user_id

返回的是完全满足规则的记录:
在这里插入图片描述

左连接:匹配规则是 t_user的id=t_class的user_id

select * from t_user tu left join t_class tc on tu.id = tc.user_id

返回的是左表的所有记录,以及右表中匹配的记录(左表的一条记录可以匹配右表的多条记录,例如 t_user中id为9的记录,匹配右表中user_id为9的两条记录):
在这里插入图片描述
右连接:匹配规则是 t_user的id=t_class的user_id

select * from t_user tu right join t_class tc on tu.id = tc.user_id

返回的是右表的所有记录,以及左表中匹配的记录(右表的一条记录可以匹配左表的多条记录):
在这里插入图片描述

2、like 模糊查询

此时t_user表中有以下记录:
在这里插入图片描述
当 like 后面的内容没有一个%时,此时 like相当于=;

select * from t_user where user_name like '45';

在这里插入图片描述

当 like 后面的内容 %写在左侧开头时(‘%45’),此时查询的是某个字段以%后面的内容为结尾的记录

select * from t_user where user_name like '%45';

在这里插入图片描述
当 like 后面的内容 %写在右侧结尾时(‘45%’),此时查询的是某个字段以%后面的内容为开头的记录

select * from t_user where user_name like '45%';

在这里插入图片描述

当 like 后面的内容 %写在左侧开头和右侧结尾时(‘%45%’),此时查询的是某个字段包含两个%之间的内容的记录

select * from t_user where user_name like '%45%';

在这里插入图片描述

3、or

OR运算符可以实现对多个条件进行同时判断
and 的优先级高于or

select * from t_user where id = 9  or status = 0 and id = 3;

上面这条sql的判断条件是: id=9 或 (status=0 and id=3)

select * from t_user where id = 2   and id = 3 or status = 0;

上面这条sql的判断条件是: (id=2 and id=3)or status=0

4、distinct

distinct 用于对某个字段过滤重复数据
当我执行下面sql去查询t_user表中的user_name时(不加distinct):

select  user_name from t_user ;

在这里插入图片描述
当我执行下面sql去查询t_user表中的user_name时(加distinct)

select distinct user_name from t_user ;

在这里插入图片描述
可以明显看到将重复的yuanhaozhe过滤掉,只保留了一条记录。

5、in 包含

in常用于where表达式中,其作用是查询某个范围内的数据(是用来指定一个值在一个列表或一个子查询中是否存在的运算符),可以代替多个or

举例:

SELECT * FROM `t_class` where user_id in (1,9,10) ORDER BY user_id DESC

这条sql将会查询出t_class表中 user_id = 1 或 user_id =9 或 user_id =10 的
在这里插入图片描述

6、group by 分组

分组查询的原理:先对数据进行分组,在对分组后的数据进行汇总,分组查询通常用于配合聚合函数,达到分类汇总统计信息的目的。而分类汇总的本质实际上就是先将数组进行分组,分组后相同类别的信息会聚在一起,然后通过需求进行计算。
比如:查询出记录中出现的名字,每个名字出现的次数,状态码

select user_name,count(user_name),status from t_user GROUP BY user_name,status

在这里插入图片描述
如果使用group by ,则select中只能出现 group by 后面的字段 或 聚合函数

7、order by

查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。
以这个表为例(没有设置主键):
在这里插入图片描述
按照user_id从低到高进行排序:

SELECT * FROM `t_class` order by user_id

在这里插入图片描述
如果要反过来,按照user_id从高到底排序,我们可以加上DESC表示“倒序”:

SELECT * FROM `t_class` order by user_id DESC

默认的排序规则是ASC:“升序”,即从小到大。ASC可以省略,即ORDER BY score ASC和ORDER BY score效果一样。

8、limit

使用SELECT查询时,如果结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,不如分页显示,每次显示100条。
要实现分页功能,实际上就是从结果集中显示第1~ 100条记录作为第1页,显示第101~200条记录作为第2页,以此类推。
因此,分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT OFFSET 子句实现。我们先把所有信息按照user_id从高到低进行排序:

SELECT * FROM `t_class` order by user_id DESC

在这里插入图片描述

现在,我们把结果集分页,每页2条记录。要获取第2页的记录,可以使用LIMIT 2 OFFSET 2:

SELECT * FROM `t_class` order by user_id DESC LIMIT 2 OFFSET 2

在这里插入图片描述

上述查询LIMIT 2 OFFSET 2表示,对结果集从2号记录开始(跳过前两条),最多取2条。注意SQL记录集的索引从0开始。

可见,分页查询的关键在于,首先要确定每页需要显示的结果数量pageSize(这里是2),然后根据当前页的索引pageIndex(从1开始),确定LIMIT和OFFSET应该设定的值:

  1. LIMIT总是设定为pageSize;
  2. OFFSET计算公式为pageSize * (pageIndex - 1)。

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

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

相关文章

设计高端大气上档次的时尚品?!微软工程师借助AIGC成功圆梦!

(本文阅读时间:5 分钟) 在这个创意横飞、想象力爆棚的时代中,有很多美丽且吸引人的东西围绕在我们身边。然而,遗憾的是,被誉为“攻城狮”的我,内心里虽然非常喜欢且欣赏这些夺目的作品&#xff…

手动输入域账号自动禁用windows域用户的脚本

禁用windows域用户的脚本,需求: 1、显示该域用户的创建时间,最后登录时间和存放的OU, 2、将该账号禁用; 3、禁用后重新返回交互界面等待输入新的域账号。 Powershell脚本内如下: # 无限循环等待用户的输入…

Meta没做成的事OpenAI要干?ChatGPT之父推出加密项目Worldcoin

大模型焦虑还未停歇,鬼才创始人瞄准了加密领域。 继ChatPT之后,OpenAI的首席执行官Sam Altman推出的加密货币项目Worldcoin近日被透露融资近一亿美金,彻底搅翻了科技界与Web3的平静。 据官网描述,Worldcoin由Sam和Max Novendstern…

奇舞周刊第492期:提升 Web 核心性能指标的 9 个建议

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 提升 Web 核心性能指标的 9 个建议 大家好,我是 ConardLi。今天继续来为大家解读今年的 Google I/O,我会重点为大家解读前端开发者应该关注的信息&#xff…

软考初级程序员上午单选题(13)

1、下列不能兼作输入设备和输出设备的是______。 A.可擦除型光盘 B.软盘 C.硬盘 D.键盘 2、文件型计算机病毒主要感染______。 A..TXT文件 B..GIF文件 C..EXE文件 D..MP3文件 3、_…

【Error】Error: Cannot find module ‘babel-preset-es2015‘

启动项目时出现了下面的错误,错误图如下: 解决办法: 在项目的babel.config.js文件中修改presets的参数,修改如下: 原文件: 修改成babel/preset-env,修改后文件:

SpringBoot源码分析之Tomcat是如何在SpringBoot中启动的?

一.前言 我们知道SpringBoot可以直接把传统的war包打成可执行的jar包,直接启动。这得益于SpringBoot内置了容器可以直接启动。本文将以 Tomcat 为例,来看看 SpringBoot 是如何启动 Tomcat 的。 二.源码分析 一.SpringApplication初始化 public class…

【STC8】热启动串口指令下载

前言 在目标开发板没有装载自动下载电路的时候,往往需要冷启动,也就是需要手动开关电源,来达到单片机复位下载。当然还有一种方法是热启动,通过串口接收到自定义的指令后,软件执行复位下载。这就是本文介绍的内容。 材…

理解神经网络的数学原理(四)多层感知机(MLP)与二叉空间分割树(BSP Tree)

概述 最近发现了一个传统算法,非常适合描述多层感知机(Multi-Layer Perceptron,MLP)的模型逻辑,其算法逻辑也非常清晰简单,所以在这里再对比一下,方便大家更容易理解多层感知机的内容&#xff…

手写Docker之认识NameSpace、CGroups、Union file system

关于NameSpace Linux NameSpace主要是kernel中用于隔离系统资源的功能,而docker就是基于NameSpace去隔离系统资源达到容器化的效果 以下案例均以该代码进行举例: package mainimport ("fmt""os""os/exec""syscall&…

【C++】mapsetmultimapmultiset使用说明

文章目录 关联式容器键值对pair的定义(键值对) 树形结构的关联式容器Set -> 排序去重Set的文档介绍Set的使用:set的构造set的迭代器set的容量set修改操作API接口总结: multiset -> 排序 可重复lower_bound&&upper_bound mapmap的模板参数说明map的构造map的迭代…

毕业季,各互联网大厂急缺这类 Python 人才!

又快到了应届毕业生找工作的季节了,一大波大厂高薪岗位陆续开放,想拿 Offer、升职加薪的你准备得怎么样了? 今年的招聘力度可以说是近几年最大,比如字节跳动旗下的大力教育,高调宣布:“未来 4 个月&#x…

最新整理Java面试八股文,大厂必备神器

在看这篇文章之前,我想我们需要先搞明白八股文是什么??? 明清科举考试的一种文体,也称制义、制艺、时文、八比文。八股文章就四书五经取题,内容必须用古人的语气,绝对不允许自由发挥&#xff0…

记录--axios和loading不得不说的故事

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题。这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loading展示与取消的逻辑。 首先在我们平时处理业务的时候loading一般…

OpenAI 重磅发布 ChatGPT iOS 客户端!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 今天凌晨,OpenAI 正式发布了 iOS 客户端! 这代表你可以直接在 iPhone 和 iPad 上直接使用 ChatGPT 进行聊天了。 该客户端基于 Whisper 开源模型,集成了…

用排列组合来编码通信(七)——《我的5/4张牌的预言》

早点关注我,精彩不错过! 从《5张牌的预言》开始,前面介绍了3个拓展思路,分别从引入额外信息解放选牌(Eigens value),引入正反信息来编码(ups and downs),继续…

从零开始学架构——可扩展架构模式

可扩展架构模式的基本思想和模式 软件系统与硬件和建筑系统最大的差异在于软件是可扩展的,一个硬件生产出来后就不会再进行改变、一个建筑完工后也不会再改变其整体结构 例如,一颗 CPU 生产出来后装到一台 PC 机上,不会再返回工厂进行加工以…

从零玩转前后端加解密之SM2-sm2

title: 从零玩转前后端加解密之SM2 date: 2022-08-21 19:42:00.907 updated: 2023-03-30 13:28:48.866 url: https://www.yby6.com/archives/sm2 categories: - 加密算法 - 从零玩转系列 tags: - 加密算法 - sm2 前言 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥…

工业互联网UWB定位系统源码,支持自定义开发

工厂人员定位系统,采用UWB定位技术,通过在厂区内部署一定数量的定位基站,以及为人员、车辆、物资佩戴标签卡的形式,实时获取人员精确位置,精度高达10cm。 文末获取联系 工厂人员定位系统可实现物资/车辆实时定位&#…

不同厂家对讲机耳塞耳挂/领夹型988对讲机如何写频改频点/频率能互相通信

988型号都是很多厂家代工出来的,代工出来默认的频点都不一样,有可能买回来的2个不同厂家生产的对讲机,这样它们要能通讯,必须要同频点才能互通,它一般出厂设定16个频道,长按+和-键来切换频道。 需要用到typeC 的写频线,其实是用CH430芯片的usb写频线,可以找厂家要写频线…