sqlite--SQL语句进阶

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 语句:

创建视图:

触发器

查询优化-索引

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

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

相关文章

【阿里云】在云服务器ECS 安装MySQL、本地远程连接或宝塔连接(手动部署)

目录 一、安装MySQL 二、配置MySQL 三、远程访问MySQL数据库 四、Navicat本地连接远程MySQL 五、宝塔连接MySQL 如果你是使用宝塔安装的MySQL请绕过,以下是通过命令行模式(手动部署)进行安装、配置及运行。 安装:MySQL8.0 …

C#WPF数字大屏项目实战02--主窗体布局

1、主窗体起始属性 设置有关属性如下: WindowStyle"None"-》无边框 AllowsTransparency"True" -》允许透明 WindowStartupLocation"CenterScreen"-》启动时位于屏幕中间 FontFamily"Microsoft YaHei"-》字体微软雅黑 …

更新mirh connect 内置derby数据库密码

更新mirh connect 内置derby数据库密码 1、下载derby连接客户端 https://archive.apache.org/dist/db/derby/ 选择任意版本即可,比如 https://archive.apache.org/dist/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.zip 2、连接mirh文件数据库 1、把mi…

Linux主机安全可视化运维(免费方案)

本文介绍如何使用免费的主机安全软件,在自有机房或企业网络实现对Linux系统进行可视化“主机安全”管理。 一、适用对象 本文适用于个人或企业内的Linux服务器运维场景,实现免费、高效、可视化的主机安全管理。提前发现主机存在的安全风险,全方位实时监控主机运行时入侵事…

单片机原理及应用复习

单片机原理及应用 第二章 在AT89S52单片机中,如果采用6MHz晶振,一个机器周期为 2us 。 时钟周期Tocs1focs 机器周期 Tcy12focs 指令周期:一条指令所用的时间,单字和双字节指令一般为单机器周期和双机器周期。 AT89S5…

深色系的B端界面,特定场景非常适合。

深色系B端界面有以下几个好处: 提供更好的可读性:深色背景可以提供更高的对比度,使文字和图标更加清晰易读,尤其在低光环境下或者长时间使用的情况下,可以减少眼睛的疲劳。强调重要内容:深色背景可以使重要…

第 11 章 排序

第 11 章 排序 Abstract 排序犹如一把将混乱变为秩序的魔法钥匙,使我们能以更高效的方式理解与处理数据。 无论是简单的升序,还是复杂的分类排列,排序都向我们展示了数据的和谐美感。 本章内容 11.1 排序算法11.2 选择排序11.3 冒…

EitbaseEX香港业务开展,提升用户友好交易体验

在全球范围内备受瞩目的加密货币交易平台Coinbase,宣布正式入驻香港市场,并命名为EitbaseEX。这一战略性扩展举措,旨在为香港提供先进的加密货币交易技术和服务,同时将香港打造为其在亚太地区的重要枢纽。 作为国际金融中心&#…

基于云服务器使用DreamBooth训练主体

资源整理 参考教程:StableDiffusion/NAI DreamBooth自训练全教程 - 知乎 (zhihu.com) 云服务器平台:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 镜像链接:CrazyBoyM/dreambooth-for-diffusion/dreambooth-for-diffusion、 代码仓…

[Linux]vsftp配置大全---超完整版

[Linux]vsftp配置大全---超完整版 以下文章介绍Liunx 环境下vsftpd的三种实现方法 一、前言 Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。…

Ubuntu20.04 Mysql基本操作知识

#Mysql基本知识 运行环境Ubuntu20.04 1.开启mysql服务 sytemctl start mysql不然,命令行进入myql交互行提交命令后,就会出现4200错误。 2.显示所有数据库 SHOW DATABASES;注意复数s,毕竟很多数据库 3.新建数据库test CREATE DATABASE …

推理和行动协同(Reason and Act,ReAct)和代码生成

文心一言 当我们将“推理和行动协同(Reason and Act,ReAct)”的概念应用于代码生成时,我们可以理解为一种指导原则或方法论,它强调了在代码生成过程中进行深思熟虑的决策(Reason)和有效执行&am…

Python | Leetcode Python题解之第123题买卖股票的最佳时机III

题目: 题解: class Solution:def maxProfit(self, prices: List[int]) -> int:n len(prices)buy1 buy2 -prices[0]sell1 sell2 0for i in range(1, n):buy1 max(buy1, -prices[i])sell1 max(sell1, buy1 prices[i])buy2 max(buy2, sell1 - …

C#WPF数字大屏项目实战01--开发环境与项目创建

1、学习目标 -界面布局 ,- 模板调整,- 控件封装,- 图表,- 通信对接,- 动态更新 2、开发环境 开发工具:Visual Studio-2022-17.8.6-Community 运行时框架:.Net 6或Framework 4.5以上 UI框…

链表(2)反转链表

题目描述 反转一个单链表。(题目来源) 思路一 其实,反转一个单向链表,我们可以看成是将链表中的每个结点的指向反向(即从后一个结点指向前一个结点)。 我们在考虑情况的时候,还是可以先考虑一般…

【环境栏Composer】Composer常见问题(持续更新)

1、执行composer install提示当前目录中没有 composer.lock 文件时 No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information. Composer 在执行 install 命令时会…

在龙芯安装docker compose

安装过程报错:pynacl无法安装 原因:未知 解决尝试:单独安装pynacl 执行:pip install pynacl 报错: 再次执行dockerscompose撒谎啥 少了头文件 dev,表示c编译器有问题 python是c编写的 喵的 搞了半天是我…

github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)

DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys(这里是 Github 存储库),它有一个配套项目 yosys2digitaljs,它可以转换 Yosys 将文…

独立开发的轻量级简洁开源论坛BBS PHP源码

最新的轻量级开源论坛php源码发布啦!这是一款独立开发的论坛系统,可以帮助你快速地开发出你想要的网站。 如果你是PHP初学者,这款论坛系统非常适合你入门学习。不过,需要注意的是,由于它并没有进行商业化改造&#xf…

mysql定时备份数据库

一、使用navicat进行自动备份 1、选择自动运行;2、创建批处理作业;3、选中需要操作的数据库;4、保存; 1、设置任务计划;2、新建触发器;3、选择执行时间; 完成这些之后,就可以了。 my…