当前位置: 首页 > news >正文

Mysql中常用到的查询关键字

文章目录

  • 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.lryc.cn/news/69133.html

相关文章:

  • 【ROS】ROS1工具详解
  • 论Plant Simulation中的Init的使用及调用顺序
  • nginx实现正向代理
  • 【spark】
  • ADO.NET 面试题
  • 第三篇、基于Arduino uno,用oled0.96寸屏幕显示dht11温湿度传感器的温度和湿度信息——结果导向
  • 什么是npu算力盒子,算力是越大越好吗?
  • 后端返回文件流时,前端如何处理并成功下载流文件以及解决下载后打开显示不支持此文件格式
  • Ansible的脚本-playbook 剧本
  • python lambda表达式表达式详解及应用
  • Windows 10计算机性能优化:让你的电脑更流畅
  • SpringMVC底层原理源码解析
  • 【CSS系列】第八章 · CSS浮动
  • janus videoroom 对接freeswitch conference 篇1
  • cs109-energy+哈佛大学能源探索项目 Part-2.1(Data Wrangling)
  • __101对称二叉树------进阶:你可以运用递归和迭代两种方法解决这个问题吗?---本题还没用【迭代】去实现
  • 怎么取消只读模式?硬盘进入只读模式怎么办?
  • 如何使用Java生成Web项目验证码
  • 【读书笔记】《亲密关系》
  • 面试季,真的太狠了...
  • 2023年十大最佳黑客工具!
  • 每日练习---C语言
  • 边缘计算如何推动物联网的发展
  • 第五章 栈与队列
  • PyQt5桌面应用开发(16):定制化控件-QPainter绘图
  • spring5源码篇(9)——mybatis-spring整合原理
  • 为什么需要防雷接地,防雷接地的作用是什么
  • 如何应用金字塔模型提高结构化表达能力
  • 2023年系统分析师考前几页纸
  • openwrt-安装NGINX