10-单表查询

SQL语言

sql语言分类

SQL类别主要动作
DQL(Data Query Language)SELECT(通常与FROM、WHERE、GROUP BY、HAVING、ORDER BY等组合使用),用作数据chaxun
DMLINSERT、UPDATE和DELETE,用作定义数据库记录(数据)
TCLCOMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION,事务控制
DCLGRANT、REVOKE,定义访问权限和安全级别
DDLCREATE、ALTER、DROP、TRUNACTE,定义数据库对象,如库、表、列等
CCLDECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT,指针控制

DQL语法

通过元命令我们可以查看关于select的帮助

test=# \h select
命令:SELECT
说明: 从数据表或视图中读取数据
语法:
[ WITH [ RECURSIVE ] with查询语句(with_query) [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( 表达式 [, ...] ) ] ][ * | 表达式 [ [ AS ] 输出名称 ] [, ...] ][ FROM from列表中项 [, ...] ][ WHERE 条件 ][ GROUP BY grouping_element [, ...] ][ HAVING 条件 [, ...] ][ WINDOW 窗口名称 AS ( 窗口定义 ) [, ...] ][ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] 查询 ][ ORDER BY 表达式 [ ASC | DESC | USING 运算子 ] [ NULLS { FIRST | LAST } ] [, ...] ][ LIMIT { 查询所用返回记录的最大数量 | ALL } ][ OFFSET 起始值 [ ROW | ROWS ] ][ FETCH { FIRST | NEXT } [ 查询所用返回记录的最大数量 ] { ROW | ROWS } ONLY ][ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF 表名 [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]from 列表中的项可以是下列内容之一[ ONLY ] 表名 [ * ] [ [ AS ] 别名 [ ( 列的别名 [, ...] ) ] ][ TABLESAMPLE sampling_method ( 参数 [, ...] ) [ REPEATABLE ( 种子 ) ] ][ LATERAL ] ( 查询 ) [ AS ] 别名 [ ( 列的别名 [, ...] ) ]WITH查询语句名称(with_query_name) [ [ AS ] 别名 [ ( 列的别名 [, ...] ) ] ][ LATERAL ] 函数名称 ( [ 参数 [, ...] ] )[ WITH ORDINALITY ] [ [ AS ] 别名 [ ( 列的别名 [, ...] ) ] ][ LATERAL ] 函数名称 ( [ 参数 [, ...] ] ) [ AS ] 别名 ( 列定义 [, ...] )[ LATERAL ] 函数名称 ( [ 参数 [, ...] ] ) AS ( 列定义 [, ...] )[ LATERAL ] ROWS FROM( 函数名称 ( [ 参数 [, ...] ] ) [ AS ( 列定义 [, ...] ) ] [, ...] )[ WITH ORDINALITY ] [ [ AS ] 别名 [ ( 列的别名 [, ...] ) ] ]from列表中项 [ NATURAL ] 连接操作的类型 from列表中项 [ ON 用连接操作的条件 | USING ( 用于连接操作的列 [, ...] ) ]并且grouping_element可以是下列之一:( )表达式( 表达式 [, ...] )ROLLUP ( { 表达式 | ( 表达式 [, ...] ) } [, ...] )CUBE ( { 表达式 | ( 表达式 [, ...] ) } [, ...] )GROUPING SETS ( grouping_element [, ...] )with查询语句是:WITH查询语句名称(with_query_name) [ ( 列名称 [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( 查询 | 值 | insert | update | delete )TABLE [ ONLY ] 表名 [ * ]
参数简介
SELECT主动作关键字,可以对表执行投影和选择操作
DISTINCT用于对结果集去掉重复记录
*代表查询表中的所有列
WHERE指定查询条件,只会返回条件为true的记录
GROUP BY用于对满足条件的记录按指定列执行分组聚合运算
HAVING用于对分组聚合后的结果集进行筛选,只返回条件为true的记录
ORDER BY用于对结果集进行排序,ASC为升序,DESC为降序
LIMIT用于限制查询返回的结果
OFFSET…FETCH用于进行分页查询
FOR用于独占方式查询表

实验1:SELECT子句

查询所有行和所有列

1、查看course表的结构

test=# \d exam.course

2、使用"select *"查看表中所有的数据

test=# select * from exam.course;

image-20241113190434200

查询部分列

当我们想让输出的字段有意义,可以在查询的时候设置字段的别名。使用as关键字来表示别名

test=# select sno as "学员编号",sname as "学员姓名"
test-# from exam.student;

image-20241113191236608

单引号和双引号

注:dual是KES中的一个虚拟表,可以理解为想要输出什么就输出什么

1、有空格、特殊字符或者以数字开头的字段别名必须加双引号

test=# select 1+1 as "1+1=?" from dual;1+1=? 
-------2
(1 行记录)

2、针对标量字符串表达式必须用加单引号

test=# select 'Hello,Kingbase' as Hello from dual;hello      
----------------Hello,Kingbase
(1 行记录)

连接运算

使用"||"来进行拼接

1、字符串的拼接运算

SELECT还支持将多列拼接成一个长的字符串

test=# select iname ||'的职称是'||title as "讲师信息" from exam.instructor;

image-20241114160159728

2、字符串拼接经常用于生成SQL脚本

如,要删除exam模式下所有的表,可以通过拼接生成如下批量的sql

test=# select 'DROP TABLE'||schemaname||'.'||tablename||';' as "batch_sql" from sys_tables where schemaname='exam';

image-20241114163638113

算术运算符

1、数值的算术运算

在查询字段处,使用算术运算符,直接进行对字段进行的运算即可

在exam.score中查询sno、score、score+1的值,并且将score+1命名为new_score

test=# select sno,score,score+1 as new_score from exam.score;

image-20241114164017272

2、日期的运算符

test=# select '当前日期是'||current_date()+7 as "当前日期" from dual;当前日期       
----------------------当前日期是2024-11-21
(1 行记录)

使用条件表达式

1、输出exam.score表的成绩信息(sno,cno,score),要求成绩大于等于90时输出"高",成绩大于等于70并且小于90时输出"中",其它的输出"低",可以使用条件表达式case when…then…else…end来实现

test=# select sno,cno,score, case when score > 90 then '高'
test-# when score >= 70 and score <90 then '中'
test-# else '低' end as "成绩等级" from exam.score;

image-20241114165427474

实验2:where子句

在进行各种查询之前,我们要知道,查询都是基于**“where+条件”**来执行的,换句话说,这里的查询都需要有where出现

等值查询

1、数值型字段条件匹配

主要是使用where来进行条件匹配

如,在exam.score表中查询分数大于80学员信息,查询字段为sno、cno、score

test=# select sno,cno,score from exam.score where score>80;

image-20241114165829653

2、字符型字段条件匹配(等值匹配)

使用"字段=条件"来进行等值匹配

如,查看exam.student表中学员所在城市为Beijing的学员,查询字段为sno、sname、city

test=# select sno,sname,city from exam.student where city='Beijing';sno  |   sname   |  city   
------+-----------+---------1002 | Yang Yang | Beijing1003 | Liu Wei   | Beijing
(2 行记录)

3、字符型字段条件匹配(列表匹配)

使用in(条件,条件)来进行列表匹配

如,查看exam.student表中学员所在城市为Beijing或者Chongqing的学员,查询字段为sno、sname、city

test=# select sno,sname,city from exam.student where city in ('Beijing','Chongqing');sno  |   sname   |   city    
------+-----------+-----------1001 | Zhang San | Chongqing1002 | Yang Yang | Beijing1003 | Liu Wei   | Beijing1004 | Sun Juan  | Chongqing
(4 行记录)

多条件匹配

使用关键字and来进行多条件查询

如,exam.student表中,查找所在城市为Beijing,工作岗位是Database Engineer的学员信息,查询字段为sno、sname、city、job

test=# select sno,sname,city,job from exam.student where city='Beijing' and job='Database Engineer';sno  |   sname   |  city   |        job        
------+-----------+---------+-------------------1002 | Yang Yang | Beijing | Database Engineer1003 | Liu Wei   | Beijing | Database Engineer
(2 行记录)

逻辑运算符

逻辑运算符包含"与、或、非",分别使用逻辑运算符AND、OR、NOT表示

1、逻辑运算符的优先级为NOT>AND>OR

①证明AND优先级高于OR的优先级

该查询语句表示只要where条件为真,就输出"2"

输出为2,则表示先计算"1=0 and 1=0"的结果1=0条件为假,在通过计算"1=1 or 1=0"结果为条件为真,就输出"2"

test=# select 2 from dual where 1=1 or 1=0 and 1=0;                                                            ?column? 
----------2
(1 行记录)

②证明NOT优先级高于AND优先级

没有输出"1",则表示where的条件为假,而where在这里的条件是先计算"not 1=0"的条件为真,在去计算"1=0 and 1=0"的条件为假

test=# select 1 from dual where not 1=0 and 1=0;?column? 
----------
(0 行记录)

2、使用括号改变优先级

和我们的运算相似,小括号可以提升括号内运算符的优先级

以下使用有小括号和没小括号来进行对比

如下,第一句是先计算"0=1 or 1=1"计算结果为真,再进行"0=9 and 1=1"的计算,很明显结果为假

第二句是先计算"0=9 and 0=1"计算结果为假,再计算"or 1=1"很明显计算结果为真

test=# select 1 from dual where 0=9 and (0=1 or 1=1);?column? 
----------
(0 行记录)test=# select 1 from dual where 0=9 and 0=1 or 1=1;?column? 
----------1
(1 行记录)

模糊查询

模糊查询就是使用我们的通配符搭配进行查询,借此来查询无法确认的值

模糊查询主要是使用关键字like来进行的,通配符则是有%和_两种来表示任意字符,其中"%“表示任意多个字符,”_"一个字符

不要错误地使用"="来进行模糊查询,这一点不能搞混淆了

1、在exam.student表中,查询姓名以S开头的学员信息,查询字段为sno、sname、city

test=# select sno,sname,city from exam.student where sname like 'S%';                                                                                    sno  |  sname   |   city    
------+----------+-----------1004 | Sun Juan | Chongqing
(1 行记录)

2、在exam.student表中,查询姓名以g字符结尾的学员信息,查询字段为sno、sname、city

test=# select sno,sname,city from exam.student where sname like '%g';sno  |    sname    |   city    
------+-------------+-----------1002 | Yang Yang   | Beijing1005 | Li Xiaofeng | Guangzhou
(2 行记录)

3、在exam.student表中,查找姓名中第二个字符必须为i的学员信息,查询字段为sno、sname、city

注意第二个字符为i的学员的条件不只是"_i",还有一些同学除了第二字符为i,后面还有字符的名字,所以在i的后面还需要在加一个%的通配符,即’_i%’

test=# select sno,sname,city from exam.student where sname like '_i%';sno  |    sname     |   city    
------+--------------+-----------1003 | Liu Wei      | Beijing1005 | Li Xiaofeng  | Guangzhou1008 | Qin Shanshan | Xian
(3 行记录)

范围查询

在exam.student中,查询在2021年7月1日到9月1日参加培训的学员信息,查询字段为sno、sname、reg_date

在范围查找中,我们可以使用BETWEEN…AND…的条件关键字进行查询

test=# select sno,sname,reg_date from exam.student where reg_date between '2021-07-01' and '2021-09-01';sno  |    sname    |      reg_date       
------+-------------+---------------------1003 | Liu Wei     | 2021-07-10 00:00:001005 | Li Xiaofeng | 2021-09-01 00:00:00
(2 行记录)

空值查询

在exam.student表中,查询工作单位为空的学员信息,查询字段为sno、sname、company

查询空值可以使用"字段 IS null"作为查询的条件进行查询

test=# select sno,sname,company from exam.student where company is null;sno  |    sname     | company 
------+--------------+---------1007 | Feng Xiaoyue | 
(1 行记录)

实验3:ORDER BY子句

ORDER BY可以对特定字段的输出结果进行升序或者降序的排序

升序排列使用ASC

当我们使用ORDER BY的时候,默认就使用ASC选项,如下,使用ASC选项和不使用ASC选项的结果都是一致的

image-20241114194902199

降序排列使用DESC

除了升序,当然还有降序排列的输出,就是使用DESC关键字

image-20241114195145054

引用字段别名排序

按姓名排序

在exam.student表中查询sname、gender、phone,并将sname设置别名为name,将姓名进行升序排序

如下所示,我们在进行排序的时候,也是可以使用别名来代替我们的字段进行在ORDER BY中的排序的

test=# select sname as name,gender,phone from exam.student ORDER BY name;

image-20241114195917113

引用字段顺序号排序

按照注册日期升序排列

如下,我们进行排序时,为了少一点输入,可以直接输入字段在查询时的顺序

例如这里的ORDER BY 3,就是对查询字段顺序中第三进行排序的,即reg_date

test=# select sno,sname,reg_date from exam.student order by 3;sno  |     sname      |      reg_date       
------+----------------+---------------------1001 | Zhang San      | 2021-01-10 00:00:001002 | Yang Yang      | 2021-01-23 00:00:001003 | Liu Wei        | 2021-07-10 00:00:001005 | Li Xiaofeng    | 2021-09-01 00:00:001004 | Sun Juan       | 2021-09-06 00:00:001006 | Zhang Xiaotian | 2021-10-10 00:00:001007 | Feng Xiaoyue   | 2021-10-13 00:00:001008 | Qin Shanshan   | 2021-10-13 00:00:00
(8 行记录)

多列组合排序

面对不同的输出需求,我么可以先对一个字段进行排序(升序/降序),然后再对另一个字段进行排序(升序/降序)

例如,先在所在城市升序排列,接着在同一个城市中再按日期降序排列

test=# select sno,sname,reg_date,city from exam.student order by city,reg_date DESC;   

image-20241114201055151

小结和扩充

限制返回的行数

1、使用limit子句来限制返回的行数

limit是限制行的输出

test=# select sno,sname,city from exam.student limit 3;

2、使用子查询来限制返回的行数

test=# select * from (select rownum rn,sno,sname,city from exam.student) where rn<=3;

image-20241114201930109

分页查询

当我们面对庞大的数据量,却又不想直接输出的结果太多时,可以是使用SQL语句中的分页查询

使用关键词offset fetch来进行查询,用法offset “从第几行开始” fetch “需要输出几行”

如下,“offset 3 rows fetch next 3 rows”,表示排除掉前三行,从第四行开始输出,输出3行后停止

test=# select sno,sname,city from exam.student offset 3 rows fetch next 3 rows only;

如下是不使用分页查询和使用分页查询的区别

image-20241114203001780

关键字说明
offset表示排除结果集前面的N行记录,即从N+1行开始返回
fetch表示从N+1行开始总共要返回的记录数
next/first两者没有实际差异,都表示返回的行数
row/rows两者没有实际差异,只是为了构建更清晰的语法而已

DISTINCT关键字去重复值

1、查看student表中城市的数量(含重复值),使用count()函数来计算

test=# select count(city) from exam.student;

2、查看student表中城市的数量(去掉重复值)

test=# select count(DISTINCT city) from exam.student;

image-20241114203826189

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习每周学习总结J6(ResNeXt-50 算法实战与解析 - 猴痘识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结ResNeXt基本介绍 1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1a;定义损失函数&…

采用python3.12 +django5.1 结合 RabbitMQ 和发送邮件功能,实现一个简单的告警系统 前后端分离 vue-element

一、开发环境搭建和配置 #mac环境 brew install python3.12 python3.12 --version python3.12 -m pip install --upgrade pip python3.12 -m pip install Django5.1 python3.12 -m django --version #用于检索系统信息和进程管理 python3.12 -m pip install psutil #集成 pika…

【H2O2|全栈】JS进阶知识(八)ES6(4)

目录 前言 开篇语 准备工作 浅拷贝和深拷贝 浅拷贝 概念 常见方法 弊端 案例 深拷贝 概念 常见方法 弊端 逐层拷贝 原型 构造函数 概念 形式 成员 弊端 显式原型和隐式原型 概念 形式 constructor 概念 形式 原型链 概念 形式 结束语 前言 开篇语…

订单日记为“惠采科技”提供全方位的进销存管理支持

感谢温州惠采科技有限责任公司选择使用订单日记&#xff01; 温州惠采科技有限责任公司&#xff0c;成立于2024年&#xff0c;位于浙江省温州市&#xff0c;是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提升运营效率又能节省成本…

【Isaac Sim】配置 Nucleus 本地服务器

Omniverse 提供了本地&#xff08;局域&#xff09;服务器 Nucleus&#xff0c;可以将资产上传到该服务器&#xff0c;Nucleus 能够高效地存储和管理大量三维模型和其他资产&#xff0c;确保用户可以轻松访问这些资源。它还支持多用户环境下的实时协作&#xff0c;使得不同地理…

递归-迭代

24. 两两交换链表中的节点 Leetcode 24 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 递归解法 // 注意&#xff1a;cpp …

小蒋聊技术:大数据驱动决策——技术落地与业务深度融合

时间&#xff1a;2024年 10月 23日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 音频: 喜马拉雅 一.数据决策&#xff0c;真的是企业的“未来”吗&#xff1f; 大家好&#xff0c;欢迎来到“小蒋聊技术”&#xff01;今天&#xff0c;我们继续聊一个让企业关…

无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音

在数字化时代&#xff0c;流媒体播放器已成为信息传播和娱乐消遣的重要工具。随着技术的进步&#xff0c;流媒体播放器的核心技术和发展趋势不断演变&#xff0c;以满足用户对于无缝播放、低延迟和高画质的需求。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放…

UVM 验证方法学之interface学习系列文章(七)高级 《bind 操作》(4)级联

在 SystemVerilog 中,bind 操作符用于将一个模块或接口实例绑定到另一个模块或接口的层次结构中。这在很多情况下非常有用,尤其是当你需要在不修改原始模块代码的情况下,添加或替换某些组件时。bind 操作符常用于仿真和测试平台中,以便灵活地组织测试环境。 前面的文章,我…

Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统

sa-token支持分布式token 前后端代码&#xff0c;地球号: bright12389

Ansys Zemax Optical Studio 中的近视眼及矫正

近视&#xff0c;通常称为近视眼&#xff0c;是一种眼睛屈光不正&#xff0c;导致远处物体模糊&#xff0c;而近处物体清晰。这是一种常见的视力问题&#xff0c;通常发生在眼球过长或角膜&#xff08;眼睛前部清晰的部分&#xff09;过于弯曲时。因此&#xff0c;进入眼睛的光…

利用FileZilla搭建ftp服务器

一 利用windows自带的ftp服务搭建服务器&#xff0c;要复杂一些&#xff0c;好处是无需借用外部软件。 也有一些好的工具&#xff0c;如FileZilla的Server版&#xff0c;构建过程简单&#xff0c;好用。 下面看看。 二 安装FileZilla Server 当前下载版本是0.9.43&#xf…

2022 年中高职组“网络安全”赛项-海南省省竞赛任务书-1-B模块B-1-Windows操作系统渗透测试

前言 本章节我将带领大家一起重新模拟操作一次Windows渗透测试模块&#xff0c;并加固的流程。 任务概览 环境部署 我的实验复现环境&#xff1a; 服务器Windows server 2008 R2 攻击机Kali Linux 场景操作系统Windows 7 额外还有台交换机支持&#xff1a; 这里我使用的是…

【滑动窗口】变种题目:leetcode76:最小覆盖子串

前言 滑动窗口是算法的数组部分中非常重要的一个内容&#xff0c;关于滑动窗口的题目&#xff0c;我已经发布过相关的变种题目文章&#xff0c;链接如下&#xff0c;欢迎访问&#xff1a; 【滑动窗口】相关题目分析讲解:leetcode209,leetcode904 如果你不了解什么是滑动窗口&a…

蚁群算法(Ant Colony Optimization, ACO)

简介 蚁群算法&#xff08;Ant Colony Optimization, ACO&#xff09;是一种基于自然启发的优化算法&#xff0c;由意大利学者马可多里戈&#xff08;Marco Dorigo&#xff09;在1992年首次提出。它受自然界中蚂蚁觅食行为的启发&#xff0c;用于解决离散优化问题。 在自然界…

1-测试go-redis缓存数据

1-测试go-redis缓存数据 1.go-redis缓存数据测试效果 a.测试页面 测试页面&#xff1a;--这里使用 Postman 来做测试 http://127.0.0.1:8000/article/getone/3 http://127.0.0.1:8000/article/getone/4 http://127.0.0.1:8000/article/getone/5b.测试效果 查看终端&#xf…

计算机毕业设计SparkStreaming+Kafka图书推荐系统 豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 知识图谱 图书大数据 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

字符串的常用函数

目录 一、引入 二、13个字符串的常用函数 总结 一、引入 在C语言中&#xff0c;字符串被视为字符数组的序列&#xff0c;以空字符\0结尾。这个空字符不是数字0&#xff0c;而是一个特殊的控制字符&#xff0c;用于标记字符串的结束。例如&#xff0c;声明char name[7] {R,…

丹摩|重返丹摩(下)

目录 四.模型构建与训练 1.模型选择 (1). 机器学习模型 (2). 深度学习模型 (3). AutoML 功能 2.参数配置 (1). 模型参数 (2). 数据划分 (3). 超参数优化 3.模型训练与评估 (1). 训练模型 (2). 查看训练结果 (3). 模型评估 五.模型部署与应用 1.模型部署 (1). 直…

浪潮信息自动驾驶框架AutoDRRT 2.0,赋能高阶自动驾驶

随着自动驾驶技术的迅猛进步&#xff0c;BEVTransformer的感知模式为高阶自动驾驶带来了前所未有的精度、泛化能力和多模态融合效果&#xff0c;已成为众多顶尖汽车制造商的首选方案。然而&#xff0c;当前自动驾驶方案中的大模型算法参数规模剧增&#xff0c;对算力、数据IO及…