前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL基本查询语句

SQL基本查询语句

作者头像
zy010101
发布于 2020-12-08 02:12:22
发布于 2020-12-08 02:12:22
1.4K00
代码可运行
举报
文章被收录于专栏:程序员程序员
运行总次数:0
代码可运行

基本查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM <tablename>;

SELECT是SQL关键字,SQL关键字是不区分大小写的,但是表名是区分大小写的。SELECT关键字表示查询操作,而*表示查询所有字段。FROM是SQL关键字,表示从哪张表查询。tablename是表名。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。另外MySQL要求每条SQL语句的结束都需要加上分号。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students;

SELECT语句还可以单独使用,通常用来检查当前数据库连接是否有效。通常是使用SELECT 1;来进行判断。

条件查询

SELECT语句可以通过WHERE条件来设定查询条件。格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM <tablename> WHERE <condition>;

WHERE是SQL的关键字,condition是限制条件。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students WHERE score >= 90;

其中条件表达式可以使用AND,OR,NOT关键字来进行条件之间的组合。AND,OR,NOT的意思和C语言中的&&,||,! 没有区别。下面来分别展示一下相关的查询实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students WHERE score >= 80 AND id = 1;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students WHERE score >= 90 OR score <= 60;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students WHERE NOT id = 3;

AND, NOT, OR之间存在优先级关系。NOT优先级最高,其次是AND,最后是OR。同样,和C语言中建议的一样,我们在使用它们的时候,为了使程序方便阅读,建议加上括号。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students WHERE (NOT class_id = 3) AND (score >= 80);

投影查询

无论是基础查询还是条件查询,最终的结果都是显示了所有字段。即:包含了id, class_id, name, gender, score。如果我们只关心name字段,那么查询语句应该按照如下格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT <字段列表> FROM <表名>;

下面是一个实例,展示了如何指定相关字段进行查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT class_id, name FROM students WHERE class_id = 1;

查询结果显示了表中一班所有的同学。如果你不想显示class_id,那么查询语句可以改为如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT name FROM students WHERE class_id = 1;

排序

注意到,我们使用SELECT * FROM students;默认按照id升序来排列。其实我们可以指定排序的字段,使用ORDER BY关键字即可。语句格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students ORDER BY score;

这样的查询默认是按照升序排列的,如果需要按照降序排列,那么需要加上DESC。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students ORDER BY score DESC;

有时候,分数相同,你可能会进一步按照其他规则来排列,例如按照class_id来排列。那么就还需要加上class_id。下面展示的是score和class_id都是按照DESC(降序)来排列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT name,score,class_id FROM students ORDER BY score,classid DESC;

我们还可以指定score按照DESC排列,但是class_id按照升序排列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT name,score,class_id FROM students ORDER BY score DESC,class_id;

实际上,默认是升序是ASC。但是ASC可以省略,即:ORDER BY score ASC;和ORDER BY score;是一样的。下面,结合WHERE条件查询,给出一个例子,查询1班的成绩,按照降序输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT class_id,name,score FROM students WHERE class_id = 1 ORDER BY score DESC;

分页查询

有时候数据量很大,很多,一页根本显示不下,但是你又必须看看数据库中的数据。那么这时候,你就需要分页显示。子句格式如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LIMIT <M> OFFSET <N>

LIMIT 3表示最多显示3个记录,OFFSET 0表示从0号记录开始显示。那么查询下一页的命令应该如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT class_id,name,score FROM students ORDER BY score LIMIT 3 OFFSET 3;

以此类推,查询下下一页应该是LIMIT 3 OFFSET 6;一直到LIMIT 3 OFFSET 9;会把剩下的都显示出来,因为我们就只有10条信息。

OFFSET是可选的,如果只写LIMIT 15,那么相当于LIMIT 15 OFFSET 0。在MySQL中,LIMIT 15 OFFSET 30还可以简写成LIMIT 30, 15。使用LIMIT <M> OFFSET <N>分页时,随着N越来越大,查询效率也会越来越低。

聚合查询

SQL提供了专门的聚合函数,使用聚合函数进行查询,就是聚合查询。下面以使用SQL内置的COUNT()函数查询为例进行说明。

COUNT(*)表示查询所有列的行数,要注意聚合的计算结果虽然是一个数字,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT(*)。通常,使用聚合查询时,我们应该给列名设置一个别名,便于处理结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT COUNT(*) num FROM students;

实际上,COUNT(*)和COUNT(id)的效果是一致的。

除了COUNT()函数外,SQL还提供了如下聚合函数:

函数

说明

SUM

计算某一列的合计值,该列必须为数值类型

AVG

计算某一列的平均值,该列必须为数值类型

MAX

计算某一列的最大值

MIN

计算某一列的最小值

例如计算总分和平均分。

还可以加上条件限制,例如计算一班的平均分。

多表查询

多表查询的结果是表的乘积,不是显示多个表。这个非常不好用,因为很容易就导致表很大。下面是个例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM students,classes;

其实就是这张表变成了40行记录了,如果你有两张1万行记录的表,你去查询它,那么将导致表的记录变成了1亿。

连接查询

连接查询是另一种类型的多表查询。连接查询对多个表进行JOIN运算,简单地说,就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。

现在,我们希望结果集同时包含所在班级的名称,上面的结果集只有class_id列,缺少对应班级的name列。我们可以将students表作为主表,把classes表中的name列连接在主表上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT s.id, 
s.class_id, 
c.name class_name, 
s.name,
s.gender, 
s.score 
FROM students s 
INNER JOIN classes c 
ON s.class_id = c.id;

ON后面是限制条件,表示students表的class_id列与classes表的id列相同的行需要连接。INNER JOIN是内连接。除此之外,还有外连接(OUTER JOIN)。把上面的内连接改成外连接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT s.id,
s.class_id, 
c.name class_name, 
s.name,
s.gender, 
s.score 
FROM students s 
RIGHT OUTER JOIN classes c 
ON s.class_id = c.id;

INNER JOIN只返回同时存在于两张表的行数据,由于students表的class_id包含1,2,3,classes表的id包含1,2,3,4,所以,INNER JOIN根据条件s.class_id = c.id返回的结果集仅包含1,2,3。

RIGHT OUTER JOIN返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以NULL填充剩下的字段。

LEFT OUTER JOIN则返回左表都存在的行。如果我们给students表增加一行,并添加class_id=5,由于classes表并不存在id=5的行,所以,LEFT OUTER JOIN的结果会增加一行,对应的class_nameNULL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT s.id, s.class_id, c.name class_name, s.name,s.gender, s.score FROM students s LEFT OUTER JOIN classes c ON s.class_id = c.id;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
十二、可观测性——监控与日志
在 Kubernetes 中,监控和日志属于生态的一部分,它并不是核心组件,因此大部分的能力依赖上层的云厂商的适配。Kubernetes 定义了介入的接口标准和规范,任何符合接口标准的组件都可以快速集成。
Yuyy
2022/09/21
7190
十二、可观测性——监控与日志
从零搭建一个基于 ELK 的日志、指标收集与监控系统
在需要私有化部署的系统中,大部分系统仅提供系统本身的业务功能,例如用户管理、财务管理、客户管理等。但是系统本身仍然需要进行日志的采集、应用指标的收集,例如请求速率、主机磁盘、内存使用量的收集等。同时方便的分布式系统日志的查看、指标的监控和告警也是系统稳定运行的一个重要保证。
问问计算机
2021/05/08
1.3K0
从零搭建一个基于 ELK 的日志、指标收集与监控系统
这些技术轮子,让监控落地成为现实!
先帝创业未半而中道崩殂,今监控天下三分。如下图所示,监控的天下被划分为基于 Tracing(调用链)监控、基于Metrics(指标)监控、基于Logging(日志) 的监控。
一猿小讲
2019/11/13
1.1K0
ELK日志监控分析系统的探索与实践(一):利用Filebeat监控Springboot日志
由于公司项目较多,所部署服务产生的日志也较多,以往查看服务器日志只能通过xshell、putty等SSH工具分别连接每台服务器,然后进入到各个服务器,执行Linux命令查看日志,这样可能会带来以下问题:
大刚测试开发实战
2022/11/14
2K1
ELK日志监控分析系统的探索与实践(一):利用Filebeat监控Springboot日志
这么多监控组件,总有一款适合你
监控是分布式系统的必备组件,能够起到提前预警、问题排查、评估决策等功效,乃行走江湖、居家必备之良品。
xjjdog
2019/09/24
4.5K0
这么多监控组件,总有一款适合你
搞定Prometheus普罗米修斯监控系统
AAA公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行为业务监控,责成运维部门来实施这个项目。
全栈程序员站长
2022/09/09
5.9K0
搞定Prometheus普罗米修斯监控系统
接近完美的监控系统—普罗米修斯
普罗米修斯(Prometheus)是一个SoundCloud公司开源的监控系统。当年,由于SoundCloud公司生产了太多的服务,传统的监控已经无法满足监控需求,于是他们在2012年决定着手开发新的监控系统,即普罗米修斯。
全栈程序员站长
2022/09/09
6.2K0
接近完美的监控系统—普罗米修斯
常见监控分为哪几类?
你们之中很多人多多少少都接触过监控,但是你所知道的监控,到底属于哪一类呢?这期我们就从下面这张图开始聊起。如图所示,可以清晰的看出,监控的世界可以被划分为基于 Logging 的监控、基于 Tracing 的监控、基于 Metrics 的监控。
一猿小讲
2019/09/25
1.4K0
常见监控分为哪几类?
腾讯云多Kubernetes的多维度监控实践
本次内容根据2017年11月4日 K8S Geek Gathering 沙龙深圳站腾讯云高级工程师王天夫的演讲内容整理而成。 本次分享的主要内容涉及腾讯云容器的顶层整体设计,包括产品功能,及提供的
腾讯云开发者社区
2017/11/15
3.4K0
腾讯云多Kubernetes的多维度监控实践
普罗米修斯
Prometheus(普罗米修斯)是一套开源的监控系统,其基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,不需要任何 SDK 或者其他的集成过程,其架构如图:
六个核弹
2022/12/23
2.8K0
普罗米修斯
基于Elastic Stack的海量日志分析平台实践
随着58集团业务的飞速发展,日志数量也呈现指数级增长。传统的日志处理方案,已不再适用,此时急需一套功能强大、稳定可靠的日志处理系统。
Spark学习技巧
2019/10/24
1.3K0
基于Elastic Stack的海量日志分析平台实践
自从上了Prometheus,睡觉真香!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/25
7030
自从上了Prometheus,睡觉真香!
聊聊 Prometheus 监控
某某某公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行业务监控,责成运维部门来实施这个项目。
码猿技术专栏
2023/05/01
8010
聊聊 Prometheus 监控
普罗米修斯Prometheus监控神器
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161742.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
2K0
ELK日志监控分析系统的探索与实践(二):利用Metricbeat监控服务器系统资源指标
在ELK日志监控分析系统的探索与实践(一)中,我们介绍了利用ELK+Filebeat监控Springboot项目的日志,本篇则是重点介绍如何利用ELk+Metricbeat监控服务器系统CPU、内存、磁盘等系统指标。
大刚测试开发实战
2022/11/14
7890
ELK日志监控分析系统的探索与实践(二):利用Metricbeat监控服务器系统资源指标
全链路监控的起源&解决方案
APM(Application Performance Management)的核心思想是什么? 在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系。比如两个应用服务节点之间使用HTTP作为传输协议的话,那么这些标记就会被加入到HTTP头中。可见如何传递这些标记是与应用服务节点之间使用的通讯协议有关的,常用的协议就相对容易加入这些内容,一些按需定制的可能就相对困难些,这一点也直接决定了实现分布式追踪系统的难度。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,APM会感知应用间关系和服务间关系,并进行相应的指标统计。如何衡量一个大规模集群的跟踪系统的优劣?它应该满足低损耗、应用透明的、大范围部署这三个需求的。
小傅哥
2020/07/14
2.3K0
全链路监控的起源&解决方案
5 款顶级 Kubernetes 日志监控工具
Kubernetes在容器编排市场中占主导地位,推动企业向微服务演进。微服务的每个实例都会生成大量日志事件,这些事件很快就变得难以管理。但更复杂的是当出现问题时,由于服务之间复杂的交互作用,以及可能的故障模式,导致很难找到根本原因。潜在的问题使得Kubernetes日志管理工具变得十分重要。
民工哥
2020/11/17
1.2K0
5 款顶级 Kubernetes 日志监控工具
一文搞懂Prometheus、Grafana(含腾讯云上实战)
通常来说,对于一个运行时的复杂系统,如果系统出了问题是很难排查的。因为你是不太可能在运行时一边检查代码一边调试的。因此,你需要在各种关键点加上监控,通过监控获取的数据,指导我们进一步工作,解决问题。
yuann
2021/01/06
53.7K1
一文搞懂Prometheus、Grafana(含腾讯云上实战)
云原生下日志方案的架构设计
原文链接:https://yq.aliyun.com/articles/717779
业余草
2019/11/18
1.1K0
SRE-面试问答模拟-监控与日志
Q: 什么是 Metrics? A: Metrics 是时间序列数据,表示系统状态和性能的数值。它们定期采集并记录,例如 CPU 使用率、内存消耗、请求响应时间等。
行者深蓝
2024/09/07
1240
推荐阅读
相关推荐
十二、可观测性——监控与日志
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文