select详细用法


数据库版本:KingbaseES V008R006C008B0014


        

简介

    SELECT语句是用于从一个或多个表中检索数据的操作,它作为数据库DQL语言,可以通过特定条件从表中检索数据。本篇文章以kingbase为例介绍select的详细用法。

        

文章目录如下

1. 基本语法

2. 条件过滤

2.1. 比较运算符

2.2. 逻辑运算符

2.3. 模糊匹配

2.4. 成员运算符

2.5. 范围匹配

2.6. 检查匹配

3. 聚合函数

4. 数据排序

5. 分组查询

6. 子查询

7. 连接查询

7.1. 内连接

7.2. 外连接

8. 总结


        

1. 基本语法

SELECT 的基本语法如下:

SELECT
    列名  --需要查询的列,*表示所有列
FROM
    表名; --需要查询的表
  • 以分号结尾(在SQL中,分号表示结束符) 

示例:

         

这种最简单的写法查询的数据也是最繁杂,特别当表存在成千上万行时是无法利用人力寻找的,所以需要一个过滤条件。在SQL通过关键字where来过滤:

SELECT
    列名
FROM
    表名
WHERE
    列名 = '成都市';  --直接查询成都

 除了条件过滤,SELECT还支持排序、分组、聚合等操作,下面依次介绍。

        

2. 条件过滤

在SELECT语句中,使用where子句来指定过滤条件,语法为:

SELECT
    列名  --需要查询的列,*表示所有列
FROM
    表名  --需要查询的表
WHERE
    条件; --指定条件过滤

这里的条件可以是比较运算符、逻辑运算符、模糊匹配、成员运算符等。

        

2.1. 比较运算符

比较运算符包括:

大于(>)

小于(<)

等于(=)

不等于(<>或!=)

大于等于(>=)

小于等于(<=)

举个例子,查询 id 列大于10的信息(使用 >)

SELECT
    *
FROM
    表名
WHERE
    id > 10;  --指定条件

        

查询 name 列等于 '成都市' 的信息(使用 =)

  • 注意:数字不加引号,字符必须加引号
SELECT
    *
FROM
    表名
WHERE
    name = '成都市';  --指定条件

        

2.2. 逻辑运算符

逻辑运算符包括:

与(AND):满足全部要求

或(OR)  :满足部分要求

非(NOT):取反

举个例子,查询 name = 成都市,且 id = 1 的信息(使用 AND)

SELECT
    *
FROM
    表名
WHERE
    name = '成都市'
AND  --使用逻辑运算符
    id = 1;

        

查询 name = 成都市,或者 id = 2 的信息(使用 OR)

SELECT
    *
FROM
    表名
WHERE
    name = '成都市'
OR  --使用逻辑运算符
    id = 2;

        

查询成都市和资阳市以外的城市信息(使用 NOT)

SELECT
    *
FROM
    表名
WHERE
    NOT name = '成都市'  --取反
AND
    NOT name = '资阳市'; --取反

        

2.3. 模糊匹配

模糊匹配分为:

左模糊(%ab):以ab结尾的字符

右模糊(ab%):以ab开头的字符

全模糊(%ab%):包含ab的字符

语法为:

SELECT
    列名
FROM
    表名
WHERE
    列名 LIKE '模糊匹配';  --模糊匹配某列

        

举个例子,匹配 description 列以 '光' 结尾的数据(使用左模糊)

SELECT
    *
FROM
    si_chuan
WHERE
    description LIKE '%光';  --左模糊

        

匹配 description 列包含 '光' 的数据(使用全模糊)

SELECT
    *
FROM
    si_chuan
WHERE
    description LIKE '%光%';  --全模糊

        

2.4. 成员运算符

成员运算符分为:

IN:判断多个值

NOT IN:判断多个值取反

【案例一】过滤多个值

SELECT
    *
FROM
    si_chuan
WHERE
    id IN(1, 2, 3);  --同时查询id为1/2/3的值

        

【案例二】不查询多个值

SELECT
    *
FROM
    si_chuan
WHERE
    id NOT IN(1, 2, 3);  --查询id不包含1/2/3的值

        

2.5. 范围匹配

范围匹配一般使用

BETWEEN  开始值  AND  结束值

当需要查询 id 为5~10的数据时,一般采用比较+逻辑运算符:

SELECT
    *
FROM
    si_chuan
WHERE
    id >= 5 AND id <=10;

        

使用 BETWEEN 语法

SELECT
    *
FROM
    si_chuan
WHERE
    id BETWEEN 5 AND 10;

        

2.6. 检查匹配

检查匹配包括

IS NULL:查询为空的数据

IS NOT NULL:查询不为空的数据

EXISTS:判断子查询是否返回了结果集

【案例一】查询 description 列为空的数据

SELECT
    *
FROM
    si_chuan
WHERE
    description IS NULL;

        

 【案例二】查询 description 列不为空的数据

SELECT
    *
FROM
    si_chuan
WHERE
    description IS NOT NULL;

        

【案例三】判断子查询不为空

SELECT * FROM si_chuan WHERE EXISTS (SELECT * FROM t1);
  • 如果子查询为空则返回空
  • 如果子查询不为空则返回正常结果 

        

3. 聚合函数

  • 聚合函数用于对一组数值进行计算,并返回单个值作为结果,通常对某列作聚合运算。

【案例一】统计某张表行数(包括空行)

SELECT COUNT(*) FROM 表名;

        

【案例二】计算某列的总值(该列必须为数值类型)

SELECT SUM(列名) FROM 表名;

        

【案例三】计算某列的平均值(该列必须为数值类型)

SELECT AVG(列名) FROM 表名;

        

【案例四】查看某列的最大值(该列必须为数值类型)

SELECT MAX(列名) FROM 表名;

        

【案例五】查看某列的最小值(该列必须为数值类型)

SELECT MIN(列名) FROM 表名;

        

 【案例六】对某列去重

SELECT DISTINCT(列名) FROM 表名;

        

4. 数据排序

SELECT 语言可以对任何类型的数据进行排序,包括数值、字符串、日期和其他数据类型。

  • 数值类型:排序是基于数值的大小进行的;
  • 字符串类型:排序是基于字母顺序进行的;
  • 日期类型:排序是基于日期的先后顺序进行。

排序不需要加 WHERE 条件,语法如下:

SELECT
    *
FROM
    表名
ORDER BY 列名 [升序/降序];
  • ASC:表示升序(默认)
  • DESC:表示降序

        

【案例一】对 "薪资" 列升序

SELECT * FROM 表名 ORDER BY 薪资;  --默认升序
SELECT * FROM 表名 ORDER BY 薪资 ASC;

        

【案例二】对 "入职日期" 列降序

SELECT * FROM 表名 ORDER BY 入职日期 DESC;

         

【案例三】对多字段排序

SELECT
    *
FROM
    表名
ORDER BY
    薪资 ASC,
    年龄 ASC,
    入职日期 DESC;

上述排序的优先级为:薪资>年龄>入职日期,所以只有当高优先级出现相同的值后,才会对下一级进行排序。

        

5. 分组查询

分组查询是对数据库中的数据进行分组计算,并返回汇总数据的过程。通常搭配聚合函数一起使用,直接使用相当于去重。

比如:直接对 "性别" 列分组(相当于去重)

SELECT
    性别
FROM
    表名
GROUP BY 性别;

        

对于聚合函数的应用,比如查询每类 "学历" 的总薪资

SELECT
    学历, SUM(薪资)
FROM
    表名
GROUP BY 学历;
  • 查询2列:学历、薪资,并对薪资求和。如果不分组则对所有人薪资求和,但对学历分组,那么会对不同学历分别求和。

        

又或者查询每类学历目前的人数

SELECT
    学历, COUNT(*) AS 人数
FROM
    表名
GROUP BY 学历;
  • 同样查询2列数据,count表示统计行数,对学历分组后就会自动对不同学历统计行数。 

        

实际上分组就是将某列的数据去重,然后计算这列数据的平均值、最大值、最小值等等,非常的简单。需要注意的是,分组后面如果带有条件,是不能使用where的,而是having。

使用上面的例子,统计每类学历人数后,过滤人数大于2500的数据

SELECT
    学历, COUNT(*) AS 人数
FROM
    表名
GROUP BY 学历
HAVING  --分组后过滤使用having,而不是where
    人数 > 2500;

        

如果是排序则可以不使用 having

SELECT
    学历, COUNT(*) AS 人数
FROM
    表名
GROUP BY 学历
ORDER BY 人数;

        

6. 子查询

子查询实际上就是在一个查询中嵌套另外一个查询,这样在内部的查询结果可以影响到外部的查询操作。

SELECT * FROM 表名 WHERE id = (子查询);

比如通过表2的结果来查询表1

SELECT
    *
FROM
    表1
WHERE
    列名 IN (
        SELECT 列名 FROM 表2 WHERE 条件
    );

        

子查询同样可以应用到投影列

SELECT
    id,
    name,
    (SELECT MAX(薪资) FROM 表2)
FROM
    表1;
  • 将表2最大工资放到查询列中

        

还可以将子查询作为表来使用

SELECT
    学历, AVG(薪资)
FROM
    (SELECT * FROM emp WHERE 薪资 > 15000)  --子查询的数据作为表
GROUP BY 学历;

        

7. 连接查询

连接查询用于在多个表之间建立关联,并检索出满足指定条件的记录。可以通过将两个或多个表的列进行比较来确定它们之间的关系,并返回相关联的记录。

比如直接查询2张表:

t1 和 t2 表分别包含3行数据,直接查询2张表会进行交叉连接操作(称为笛卡尔积)。交叉连接会返回2张表中所有可能的组合,即将表 t1 的每一行与表 t2 的每一行进行匹配,生成一个新的结果集,所呈现的行数为 3*3=9 行。

正是因为直接查询2张表会形成笛卡尔积,当表数据过万时所查询的数据极为复杂且易用性太差,所以需要通过连接查询来简化数据。

        

7.1. 内连接

内连接查询基于两个或多个表之间的相同值将符合条件的行连接起来,只有那些在所有连接的表中都存在匹配值的行才会被返回。

SELECT
    列名
FROM
    表1 INNER JOIN 表2  --连接2张表
ON
    表1.列名 = 表2.列名  --连接条件:相同类型的列
INNER JOIN 表3          --连接3张表
    表2.列名 = 表3.列名  --连接条件:相同类型的列
INNER JOIN 表4          --连接4张表
    表3.列名 = 表4.列名; --连接条件:相同类型的列

使用条件 t1.id = t2.id,从字面来理解两张表的id列相同的数据,也就是只查询相同的数据。

注意:id 列不是固定的,可以是任意列,但是数据类型必须相同。

        

还有一种写法,使用where条件

SELECT
    列名
FROM
    表1,表2,表3
WHERE
    表1.列名 = 表2.列名
AND
    表2.列名 = 表3.列名;

这种方法不需要 inner join 关键字,只需要加条件即可,使用更简单。 

        

7.2. 外连接

上述通过内连接来查询数据相同的行,对于某些场景无法完全应用,比如同时查询 "表1" 和 "表2",需要查询 "表1" 的全部信息和与 "表2" 相同数据的信息,则需要使用外连接。

左连接:显示左表全部数据和右表与左表相同的数据

SELECT
    列名
FROM
    表1 LEFT JOIN 表2
ON
    表1.列名 = 表2.列名;

表1在左边,所以查询表1的所有信息,存在条件 表1.列名 = 表2.列名,所以只显示与表1相同数据的表2

        

右连接:显示右表全部数据和左表与右表相同的数据

SELECT
    列名
FROM
    表1 RIGHT JOIN 表2
ON
    表1.列名 = 表2.列名;

        

8. 总结

SELECT 语句主要用于查询某张表的数据,可以指定要查询的列以及可选的过滤条件、排序顺序和其他参数。通过2~5章节的基础学习可以了解SELECT的基本用法,但可能没办法将每种语法串起来,所以参考如下图:

  • 蓝色表示必选
  • 橙色表示二选一
  • 灰色表示可选

select 后面可以查询某列或者某列的聚合函数,表名后面的参数是可选的,表名后面可以接where条件或分组或排序等,也可以全部使用。全部使用的顺序参考示图箭头:

where > group by > order by

学习基本语法后再深入学习多表查询(章节6、7)。多表查询记住一个要点就行:加条件。比如内连接:

SELECT
    *
FROM
    表1,表2
WHERE
    表1.列 = 表2.列;

直接查询2张表会出现笛卡尔积,但只要将2张表的列数据作=条件,那么只会显示两列相同的数据,再根据当前的数据继续过滤即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DSP 技术基本概念及典型系统分析

1、 基本概念与典型的DSP系统 通常 DSP&#xff08;Digital Signal Processing&#xff09;是指数字信号处理。DSP 芯片是专用的数字信号处理器&#xff08;Digital Signal Processor&#xff09;&#xff0c;它采用哈佛结数、流水线作业方式的并行处理技术&#xff0c;有专用…

三、SpringBoot3 整合 SpringMVC

本章概要 实现过程web 相关配置静态资源处理自定义拦截器(SpringMVC 配置) 3.1 实现过程 创建程序引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www…

【算法统治世界】动态规划 个人笔记总结

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

中仕公考:2024山东事业编笔试成绩已出!

2024年山东省事业编笔试成绩查询入口于4约8日已经开放&#xff0c;考生可以登录入口查询笔试成绩。 山东16地市除菏泽以外均有县区参加此次310事业单位统考&#xff0c;成绩查询入口及进面名单等分地市分县区发布&#xff0c;考生可关注报考当地人民政府网站。笔试成绩查询后&…

鸿蒙南向开发:制作【智能儿童手表】

样例简介 本项目是基于BearPi套件开发的智能儿童手表系统&#xff0c;该系统通过与GSM模块&#xff08;型号&#xff1a;SIM808&#xff09;的通信来实现通话和定位功能。 智能儿童手表系统可以通过云和手机建立连接&#xff0c;同步时间和获取天气信息&#xff0c;通过手机下…

【SpringBoot整合系列】SpringBoot 实现大文件分片上传、断点续传及秒传

目录 功能介绍文件上传分片上传秒传断点续传 相关概念相关方法大文件上传流程前端切片处理逻辑后端处理切片的逻辑流程解析 后端代码实现功能目标1.建表SQL2.引入依赖3.实体类4.响应模板5.枚举类6.自定义异常7.工具类8.Controller层9.FileService10.LocalStorageService11.File…

Mac系统Unity团结引擎打包OpenHomeny项目配置

1、团结引擎下载&#xff1a;直接百度下载即可 2、mac版本的DevEco4.0编辑器下载&#xff1a; widthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v4.0/zh-cn/release-notes/OpenHarmony-v4.0-release.md/#%E9%85%8D%E5%A5%97%E5%85%B3%E7%B3%BB3、打开D…

IRIS / Chronicles 基础概念备忘录

数据类型存储不同 在 IRIS 中有 几种数据类型&#xff0c;但是这几种数据类型怎么存的和常用的关系数据库不太一样。 String&#xff1a;字符串类型&#xff0c;这个类型包括有字母和数字&#xff0c;需要注意在这里有一个 Padded 的概念&#xff0c;对与 String 类型的数据&…

深度解析Elasticsearch索引数据量过大的优化与部署策略

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 分片和副本策略 1.1分片策略 1.1.1 数据量 1.1…

spring cloud gateway openfeign 联合使用产生死锁问题

spring cloud gateway openfeign 联合使用产生死锁问题&#xff0c;应用启动的时候阻塞卡住。 spring.cloud 版本如下 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><vers…

春秋之境28512

题目说该CMS的/single.php路径下&#xff0c;id参数存在一个SQL注入漏洞。访问看一下随便点一个图片。 发现了注入点?id 那么开始查看闭合符一个 就报错了 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for th…

【智能算法】孔雀优化算法(POA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年&#xff0c;Wang等人受到自然界孔雀社会行为启发&#xff0c;提出了孔雀优化算法&#xff08;Peafowl Optimization Algorithm&#xff0c;POA&#xff09;。 2.算法原理 2.1算法思想 POA…

uni-app调用苹果登录,并获取用户信息

效果 模块配置 dev中的配置 需要开启登录的权限&#xff0c;然后重新下载配置文件&#xff0c;发布打包基座&#xff0c;再运行程序 代码 <button click"appleLogin">苹果登录</button>function appleLogin() {uni.login({provider: apple,success: …

硬盘删除的文件怎么恢复?恢复方法大公开!

“硬盘删除的文件还有机会恢复吗&#xff1f;刚刚清理电脑垃圾的时候不小心删除了很多重要的文件&#xff0c;有什么方法可以有效恢复这些文件吗&#xff1f;” 在数据时代&#xff0c;我们会将很多重要的文件都保存在电脑上&#xff0c;如果我们清理了电脑上的文件&#xff0c…

GD32F470_(4线制)火光/火焰传感器模块火源探测 红外接收传感器 智能车配件

2.16 火焰传感器 红外火焰传感器可以用来探测火源或其它一些波长在700纳米~1000纳米范围内的热源&#xff0c;在机器人比赛中&#xff0c;远红外火焰探头起到非常重要的作用&#xff0c;它可以用作机器人的眼睛来寻找火源或足球。利用它可以制作灭火机器人等。 红外火焰传感器…

捷途山海T2探秘武夷山,这款旅行越野超混SUV直接拉满期待值

如今&#xff0c;出行已然不单单是A点到B点的空间位移&#xff0c;而是心灵的一场旅行。每个人都向往在旅途中&#xff0c;寻找到自我的归属。近年走红的捷途汽车&#xff0c;正洞察到用户们的出行迭代需求&#xff0c;推出全新力作捷途山海T2。山海T2是捷途旅行者的混动版&…

Centos7搭建 Skywalking 单机版

介绍 Skywalking是应用性能监控平台&#xff0c;可用于分布式系统&#xff0c;支持微服务、云原生、Docker、Kubernetes 等多种架构场景。 整体架构如图 Agent &#xff1a;在应用中&#xff0c;收集 Trace、Log、Metrics 等监控数据&#xff0c;使用 RPC、RESTful API、Kafk…

七燕论文可靠吗 #经验分享#经验分享

七燕论文是一个非常好用的论文写作工具&#xff0c;它不仅可以帮助学生提高写作效率&#xff0c;还能帮助他们避免抄袭和提高论文质量。七燕论文的查重降重功能非常靠谱&#xff0c;能够帮助用户检测论文中的重复内容&#xff0c;并提供相应的修改建议&#xff0c;确保论文的原…

人大金仓导入数据库

1、通过工具导入 具体步骤如下 逻辑还原选择备份文件还原至数据库还原 2、命令导入 进入如下文件夹下 在本文件夹下打开cmd运行如下命令 sys_restore -h 127.0.0.1 -p 54321 -d test -U system C:/Users/Lenovo/Desktop/lw_2024-01-03_11_11_44.dmp >> C:/Users/Len…

Mysql底层原理四:B+树索引

B树索引&#xff08;索引的原理&#xff09; 1.前言 前边我们详细唠叨了InnoDB数据⻚的7个组成部分&#xff0c;知道了各个数据⻚可以组成⼀个双向链表&#xff0c;⽽每个数据⻚中的记录会按照主键值从⼩到⼤的顺序组成⼀个单向链 表&#xff0c;每个数据⻚都会为存储在它⾥边…