前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQL基本查询语句(三)
多表查询的结果是表的乘积,不是显示多个表。这个非常不好用,因为很容易就导致表很大。下面是个例子。
zy010101
2021/05/18
6410
SQL基本查询语句(三)
Oracle数据库学习
在关系数据库中,一张表中的每一行数据被称为一条记录。一条记录就是由多个字段组成的。例如,students表的两行记录:
kif
2023/02/27
1.9K0
「Workshop」第二十一期 SQL简介
点击链接观看B站讲解视频 https://www.bilibili.com/video/BV1XA411L766?share_medium=android&share_plat=android&sha
王诗翔呀
2022/01/21
3370
「Workshop」第二十一期 SQL简介
MySQL 多表查询、连接查询(内连接、外连接)
查询的结果是一个二维表,它是students表和classes表的“乘积”,即students表的每一行与classes表的每一行都两两拼在一起返回
Michael阿明
2020/07/13
3.8K0
MySQL 多表查询、连接查询(内连接、外连接)
SQL 常用操作
数据查询 查询数据库表的内容(所有行和列) SELECT * FROM <表名>; 示例 计算 SELECT <数学多项式>; 示例 条件查询 SELECT * FROM <表名> WHERE <条件表达式>; 示例 注意:对于条件表达式,可以用逻辑运算符(AND、OR、NOT)将多个条件同时进行匹配; 对于三个及以上的条件,可以用小括号()进行条件运算; 常用条件表达式 条件 表达式举例1 表达式举例2 说明 使用=判断相等 score = 90 nam
村雨遥
2022/06/15
8780
SQL 常用操作
SQL基本查询语句(二)
无论是基础查询还是条件查询,最终的结果都是显示了所有字段。即:包含了id, class_id, name, gender, score。如果我们只关心name字段,那么查询语句应该按照如下格式:
zy010101
2020/12/25
7210
MySQL 排序、分页查询、聚合查询
可以通过LIMIT <M> OFFSET <N>子句实现。每次显示最多 M 条,从第 N 条记录开始算
Michael阿明
2020/07/13
3.1K0
MySQL 排序、分页查询、聚合查询
数据库常用SQL操作篇
数据查询 查询数据库表的内容(所有行和列) SELECT * FROM <表名>; 示例 image 计算 SELECT <数学多项式>; 示例 image 条件查询 SELECT * FRO
村雨遥
2019/11/06
9480
数据库常用SQL操作篇
mysql学习总结04 — SQL数据操作
mysql 中 SELECT 命令类似于其他编程语言的 print 或 write,可用来显示字符串、数字、数学表达式的结果等
CS逍遥剑仙
2018/06/24
5.2K0
mysql学习总结04 — SQL数据操作
MySQL(五)
基本概念: 可合并多个相似的选择查询结果的结果集,等同于将一个表追加到另一个表,从而实现将两个表的查询结果组合到一起,使用 Union 或 Union all。 注意: 这个合并是纵向合并,字段数不变,多个查询的结果合并。
1ess
2021/11/01
7160
MySQL:查询(万字超详细版)
之后,可以通过as关键字来为查询结果中的列指定别名,as和引号可以省略,但如果别名中存在空格就不能省略引号了
2的n次方
2024/10/15
5850
MySQL:查询(万字超详细版)
老司机教你用SQL之查询操作
例3:显示所有的学生信息,先按照年龄从大-->小排序,当年龄相同时按照身高从高-->矮排序
tyrantlucifer
2022/03/23
1.2K0
老司机教你用SQL之查询操作
《SQL必知必会》读书笔记,30分钟入门SQL!
来源:https://segmentfault.com/p/1210000011760973/read
猴哥yuri
2019/11/27
2.7K0
软件测试必备的数据库SQL查询语法
数据库技术从诞生到现在,在不到半个世纪的时间里,形成了坚实的理论基础、成熟的商业产品和广泛的应用领域。在现实工作中,我们的软件测试工作通常与数据库密切相关。所以作为一名合格的软件测试岗位工作者对于一些常用的SQL 查询语法必须要掌握:
小雯子打豆豆
2021/09/23
2.9K0
软件测试必备的数据库SQL查询语法
MySQL多表查询笔记总结
SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FROM <表1> <表2>。
框架师
2019/09/19
1.7K0
MySQL多表查询笔记总结
MySQL查询进阶相关sql语句
当查询结果的字段来源于多张表时,可以将多张表连接成一个大的数据集,再选择合适的字段返回
菜菜cc
2022/11/15
3.8K0
MySQL查询进阶相关sql语句
学会Mysql第三天
1、having 是在 group by 子句之后:可以针对分组数据进行统计筛选。
白胡杨同学
2020/04/16
7350
MySQL:Left Join 避坑指南
left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论、商城里一个货物有多少评论、一条评论有多少个赞等等。但是由于对join、on、where等关键字的不熟悉,有时候会导致查询结果与预期不符,所以今天我就来总结一下,一起避坑。
JAVA葵花宝典
2019/12/24
1.1K0
【MySQL 系列】MySQL 语句篇_DQL 语句
DQL(Data Query Language),即数据查询语言,用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。
栗筝i
2024/03/19
2420
【MySQL 系列】MySQL 语句篇_DQL 语句
MySQL基本命令-SQL语句
在数据库系统中,SQL语句不区分大小写(建议用大写) SQL语句可单行或多行书写,以“;”结尾 关键词不能跨多行或简写 用空格和缩进来提高语句的可读性 子句通常位于独立行,便于编辑,提高可读性 注释: SQL标准: /*注释内容*/ 多行注释 -- 注释内容 单行注释,注意有空格 MySQL注释: #
星哥玩云
2022/08/16
8360
相关推荐
SQL基本查询语句(三)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文