sqlite--SQL语句进阶

news2025/1/23 6:20:44

SQL语句进阶

函数和聚合

函数:

SQL 语句支持利用函数来处理数据, 函数一般是在数据上执行的, 它给数据的转换和处理提供了方便常用的文本处理函数:

常用的文本处理函数:

// 返回字符串的长度
length();
//将字符串转换为小写
lower();
// 将字符串转换为大写
upper();

语法:

select 函数名(列名) from 表名;
select * from cpucode;

image-20200810143450457

select id upper(name) from cpucode;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常用的聚集函数:

使用聚集函数, 用于检索数据, 以便分析和报表生成

--返回某列的平均值
avg()
--返回某列的行数
count()
-- 返回某列的最大值
max()
-- 返回某列的最小值
min()
-- 返回某列值之和
sum()

插入一列分数 score

alter table cpucode add score integer;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改内容

update cpucode set score=66 where name='cpu';
update cpucode set score=77 where name='code';
update cpucode set score=88 where name='test';

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

select max(score) from cpucode;

image-20200810144730589

select avg(score) from cpucode;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

select count(*) from cpucode;

image-20200810144817464

判断数据库中是否有 cpucode 这张表

sqlite_master 是数据库自带的一个表。 当用户创建一张表时, 数据库会将用户新建的表的信息存放在 sqlite_master 这张表中

select count(*) from sqlite_master where type = 'table' and name = 'cpucode';

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据分组 group by

分组数据, 以便能汇总表内容的子集, 常和聚集函数搭配使用。

select 列名 1[, 列名 2, ...] from 表名 group by 列名
alter table cpucode add class text;

update cpucode set class='class_a' where name='cpu';
update cpucode set class='class_b' where name='code';
update cpucode set class='class_b' where name='test';

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

select class, count(*) from cpucode group by class;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

select class, avg(score) from cpucode group by class;

image-20200810155236737

group by 子句必须出现在 where 子句之后

select class, avg(score) from cpucode where class='class_a' group by class;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

过滤分组 having

除了能用 group by 分组数据外, 还可以包括哪些分组, 排除哪些分组。

通过 having 实现

语法:

select 函数名(列名 1) [, 列名 2, ...] from 表名 group by 列名 having 函数名 限制值
select class, avg(score) from cpucode group by class having avg(score) >=80;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

约束

管理如何插入或处理数据库数据的规则

常用约束分类 :

主键唯一约束检查约束

主键:

惟一的标识一行( 一张表中只能有一个主键 )

主键应当是对用户没有意义的( 常用于索引 )

永远不要更新主键, 否则违反对用户没有意义原则

主键不应包含动态变化的数据, 如时间戳、 创建时间列、 修改时间列等

主键应当有计算机自动生成( 保证唯一性 )

语法:

create table 表名称 (列名称1 数据类型 primary key, 列名称2 数据 类型,列名称3 数据类型, ...);

唯一约束:

用来保证一个列(或一组列) 中数据唯一, 类似于主键, 但跟主键有区别

表可包含多个唯一约束, 但只允许一个主键

唯一约束列可修改或更新

创建表时, 通过 unique 来设置

语法:

create table 表名 (列名称 1 数据类型 unique[, 列名称 2 数据类型 unique,...]);
create table test (id integer primary key, name text unique);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

insert into test values(1, 'cpu');
insert into test values(1, 'code');

image-20200810164549086

insert into test values(2, 'cpu');

image-20200810164626151

检查约束:

用来保证一个列(或一组列) 中的数据满足一组指定的条件。

指定范围, 检查最大或最小范围, 通过 check 实现

create table 表名 (列名 数据类型 check (判断语句));
create table test2 (id integer, age integer check(age > 0));

image-20200810164838299

insert into test2 values(1, 30);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

insert into cpucode values(1, -20);

image-20200810164941123

联结表(多表操作)

概念:

保存数据时往往不会将所有数据保存在一个表中, 而是在多个表中存储, 联结表就是从多个表中查询数据。

在一个表中不利于分解数据, 也容易使相同数据出现多次, 浪费存储空间; 使用联结表查看各个数据更直观,这使得在处理数据时更简单。

例如: 学生每年的考试成绩, 学生个人信息基本固定(包括学号、 姓名、 地址等); 把所有信息放在同一个表中必然会造成学生的学号等基本信息重复。

对比:

学生信息和成绩在一个表中

单表缺点:

  • 每年记录的成绩都需要添加重复的学生信息, 如: name, addr
  • lucy 的地址(addr)修改, 整个表所有的关于 lucy 的 addr 都需更改, 处理复杂。

学生信息和成绩在不同的表中

学生信息(persons):

学生成绩(grade):

每个人的信息只需保存一份, 没有重复, 成绩 id 与学生信息 id 相同, 作为关联, 用于查找相应学生的成绩

lucy 的地址(addr)修改, 只需修改 persons 表中的 addr

分表优点:

将学生信息和成绩分开存储, 节省空间, 处理简单, 效率更高, 在处理大量数据时尤为明显。

使用关系型数据库存储数据, 各个表的设计是非常重要的, 良好的表设计, 能够简化数据的处理, 提高效率, 提高数据库的健壮性。

使用联结:

通过 select 语句将要联结的所有表以及它们如何关联

select 列名 1,列名 2,.. from 表 1,表 2,.. where 判断语句;
select name , addr, score, year from cpucode, grade where cpucode.id = grade.id;

在联结两个表时, 实际上是将第一个表中的每一行与第二个表中每一行配对, where 子句作为过滤条件,只有满足条件的才显示出来

匹配语句: persons.id = grade.id

完全限定列名, 用一个点(.)分隔表名和列名

终端输入(输出指定学生的信息和分数):

select name, addr, score, year from cpucode, grade where cpucode.id = greade.id and name='cpu';

select 语句中可以联结的表的数目没有限制

当前面指定列名二义性时, 需要通过完全限定名引用

视图(虚拟的表)

重用 SQL 语句

简化复杂的 SQL 操作(如:多表查询)

使用视图, 将整个查询包装成一个名为 PersonsGrade 的虚拟表, 简化了查询的 SQL 语句:

创建视图:

触发器

查询优化-索引

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QWidget成员函数功能和使用详细说明(二)(文字+用例+代码+效果图)

文章目录 1.测试工程配置2.成员函数2.1 void setFixedHeight(int h)2.2 void setFixedSize(const QSize &s)2.3 void setFixedSize(int w, int h)2.4 void setFixedWidth(int w)2.5 void setFocus(Qt::FocusReason reason)2.6 void setFocusPolicy(Qt::FocusPolicy policy)…

【LeetCode算法】第101题:对称二叉树

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路:递归判定左子树和右子树是否对称。用一个新函数sym来递归判定左子树和右子树是否对称。该函数细节:判定当前传入的两个根节点是否为空,若均为空…

移动电商服务器单点部署

知识图谱 任务一:Web服务器部署 1.知识结构 2.WEB服务器的介绍 Web服务器一般指网站服务器,是指驻留于因特网上提供某种特定类型计算机的程序,Web服务器可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界…

23种软件设计模式——工厂模式

工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使…

laravel项目配置Facades Redis自动补全,方法查看

问题原因: 因为Laravel的Redis连接实例是通过RedisManger的工厂类创建的,返回的是一个mixin的类型,因此在IDE中不能自动补全Redis的方法,缺少这个功能,使用起来有些麻烦,尤其是Redis有数十个方法,每个方法也有不少参数。 相关部分的代码如下: /*** @mixin \Illumina…

【Python】解决Python报错:AttributeError: ‘generator‘ object has no attribute ‘xxx‘

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

python weakref的应用举例

问题: 有很多时候, 我们想拥有一个实例, 但是不增加引用计数. 怎么解决呢? 场景: 英雄击打怪物, 如果怪物在受到英雄打击前就死了, 我们可以在英雄的实例里面, 使用一个弱引用来引用怪物, 如果还存在就击打, 不存在就不击打.一般的ui系统都有事件系统, ui上触发一个事件, 然…

TCP协议详解及其相关的10个核心机制(面试重点)

TCP协议的报文格式 TCP协议有连接,可靠性传输,面向字节流,全双工。 他的数据格式如图: 根据他的数据格式,在这里我们只知道 16位源端口号(表示客户端这里的端口号),16位目的端口号&…

Maven 中的 classifier 属性用过没?

最近训练营有小伙伴问到松哥一个关于 Maven 依赖的问题,涉及到 classifier 属性,随机问了几个小伙伴,都说工作中没用到过,因此简单整篇文章和小伙伴们分享下。 Maven 大家日常开发应该都有使用,Maven 中有一个比较好玩…

读:《An Overview of Diffusion Models Applications……》导览

读:《An Overview of Diffusion Models: Applications,Guided Generation, Statistical Rates and Optimization》 简单说明 这篇文章也是关于 Diffusion 模型的综述,但是这一篇讲的显然不如 2022出的这篇综述 [2209.00796] Diffusion Models: A Compreh…

微信小程序-网络数据请求(配置request合法域名)

1.小程序中网络数据请求的限制 出于安全方面的考虑,小程序官方对数据接口的请求做出了如下两个限制: (1)只能请求HTTPS类型的接口 (2)必须将接口的域名添加到信任列表中 如果要请求某个域名下的接口&am…

优化基础(二):线性组合、仿射组合、锥组合、凸组合、线性集合、仿射集合、锥集合、凸集合的理解

文章目录 前言组合线性组合 (linear combination)仿射组合 (affine combination)锥组合 (conic combination)凸组合 (convex combination) 集合仿射集合凸集合 练习:哪个图形是凸的,哪个是仿射的?参考资料 前言 组合侧重于描述由一些基点生成…

MySQL数据库--从创建数据库到删库跑路

目录 MySQL安装: 1. 数据库基本操作1.1 创建数据库1.2 显示当前数据库1.3 删除数据库1.4 使用数据库/选中数据库 2. SQL中的数据类型2.1 数值类型2.2 字符串类型2.3 时间类型 3. 表的操作3.2 创建表3.1 显示数据库中的表3.3 查看表的详细情况3.4 删除表3.5 注释3. 修改列(了解即…

超大功率光伏并网逆变器学习(三相)

1.超大功率用的IGBT开关频率通常很低,比如6KHz 2.线电压和相电压的关系 相电压 A AB线电压-CA线电压 相电压 B BC线电压-AB线电压 相电压 C CA线电压-BC线电压 3.坐标变换 ABC三相信号通过Clark坐标变换得到αβ两相静止信号,其中α与A相重合,β与α…

用任务监听RTOS各任务的运行状态

使用rtos时内存对于单片机来说总是非常抠搜的。 任务分配多了浪费,少了跑不动。 最近看到这个监听任务还是很好用的。 废话不多说。开始操作 第一步在配置文件中打开这几个宏 #define configUSE_TRACE_FACILITY 1 /*为1时启用可视化跟踪调试*/ #define conf…

VBA代码解决方案第十四讲 如何利用VBA检查单元格中是否含有公式

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

[论文笔记]MemGPT: Towards LLMs as Operating Systems

引言 今天介绍一篇论文MemGPT: Towards LLMs as Operating Systems。翻过过来就是把LLM看成操作系统。 大语言模型已经在人工智能领域引起了革命性的变革,但受到有限上下文窗口的限制,在扩展对话和文档分析等任务中的效用受到了阻碍。为了能够利用超出…

短视频自己怎么配音:四川京之华锦信息技术公司

短视频自己怎么配音:揭秘配音技巧与创作流程 在短视频盛行的当下,配音作为提升视频质量、增强观众体验的重要环节,越来越受到创作者的关注。四川京之华锦信息技术公司将为您详细解读如何为短视频自己配音,包括配音技巧、创作流程…

echarts学习:将echats实例代理为响应式对象可能带来的风险

1.起源 最近我在学习如何封装echarts组件,我所参考的其中一篇博客中提到了一个“图表无法显示的问题”。 根据其中的介绍,造成此种问题的原因是因为,使用ref接受了echarts实例,使得echarts实例被代理为了响应式对象,进…

【移动端】商场项目路由设计

1:路由设计配置: 一级路由配置 分析项目,设计路由,配置一级路由 一级路由:单个页面独立展示的,都是一级路由,例如:登录页面,首页架子,报错页面 二级路由&…