【数据库编程-SQLite3(四)】基本常用操作

news2024/11/24 17:37:32

学习分享

  • 1、sql数据类型
    • 1.1、约束
  • 2、数据定义语言DDL(Data Definition Language)
    • 2.1、创建表
    • 2.2、修改表
    • 2.3、删除表
  • 3、 数据操纵语言DML(Data Manipulation Language)
    • 3.1、INSERT语句
    • 3.2、DELETE语句
    • 3.3、UPDATE语句
    • 3.4、SELECT语句
  • 4、高级查询
    • 4.1、SQL通配符
    • 4.2、模糊查询--like
    • 4.3、between…and
    • 4.4、order by 子句
    • 4.5、示例
  • 5、视图
    • 5.1、创建SQLite视图
    • 5.2、修改和删除SQLite视图
  • 6、索引
    • 6.1、创建索引的优缺点
    • 6.2、创建和查看索引
  • 7、连表查询
    • 7.1、内连接-inner join
    • 7.2、外连接-left join
    • 7.3、将查询到的重复行进行过滤
  • 8、子查询
    • 8.1、in子查询
    • 8.2、exists子查询
  • 9、集合操作-并union

1、sql数据类型

Sqlite3主要数据类型如下:
在这里插入图片描述
同时sqlite3也接受如下的数据类型:
在这里插入图片描述

1.1、约束

表的每一列都有一些限制属性,比如有的列的数据不能重复,有的则限制数据范围等,约束就是用来进一步描述每一列数据属性的。SQLite 数据库常用约束如下:
在这里插入图片描述

2、数据定义语言DDL(Data Definition Language)

常用的有CREATE和DROP,用于在数据库中创建新表或删除表,以及为表加入索引等。主要是对数据库中的某些对象(例如,database,table)进行管理

2.1、创建表

表创建时,默认创建了rowid列,作为自增长ID
sqlite的是动态的数据类型,而非一般数据库的静态数据类型

create table 表名(字段名 字段类型 [约束],...);

示例:

-- 用户表
DROP TABLE IF EXISTS tbl_user;											-- 表存在,则删除
CREATE TABLE IF NOT EXISTS tbl_user									-- 表不存在,就创建
(
	user_id integer primary key AUTOINCREMENT,				--主键自增
	user_name varchar(20) not null unique,						-- 唯一   不为空
	user_pwd varchar(20) default '123456' not null,		-- 默认值123456  不为空
	user_status int(11) check(user_status=0 or user_status=1) default 0,	--登录状态类型  默认0
	reg_time datetime not null												-- 系统时间
);

2.2、修改表

修改表的名称:

alter table 表名 rename to 新名字;

增加字段:

alter table 表名 add column 新增加字段名 字段类型 [约束];

2.3、删除表

表删除后,表结构和记录都被删除;在默认模式下,数据库文件不会减少,该空间留给后续操作使用
表删除后,表的索引以及触发器也相应被删除

drop table 表名;

3、 数据操纵语言DML(Data Manipulation Language)

主要有几种形式,是对数据库中的数据进行一些简单操作,如insert,delete,update,select等

3.1、INSERT语句

设置了not null那一列 必须要赋值,而且表名字不区分大小写。

insert into 表名 values(字段值,...);
insert into 表名(字段名,...) values(字段值,...);

示例

insert into t_student values(1001,"xxx",18,"CN");
insert into t_student(sno,sname,sage) values(1001,"xxx",18);

3.2、DELETE语句

and/or 可在where子句中连接多个条件

delete from 表名 where 条件;

示例

delete from t_student where sno=1001;

3.3、UPDATE语句

UPDATE <表名> SET <列名 = 更新值>  [WHERE <更新条件>]

示例

UPDATE student SET sage=29 WHERE sname='xxx';

3.4、SELECT语句

SELECT [*]|[列名] 
   FROM [表名]
   WHERE [查询条件]

示例

select * from tab_student where stu_no=1001’;

4、高级查询

4.1、SQL通配符

在这里插入图片描述

4.2、模糊查询–like

查询班级编号以jn开头所有学生
select * from t_student where sclass like 'jn%'
查询2004入学的所有学生
select * from tab_t_student where sclass like ‘__2004%’
查询2001~2005年间入学的所有学生
select * from tab_t_student where sclass like%200[1-5]%'

4.3、between…and

查询jn205班02课程成绩在60~80分的成员记录

select * from t_score where sno like 'jn205%' and Cno='02' and  score between 60 and 80

说明:选取该列数据属于between… and区间,包含边界值的

4.4、order by 子句

将查询后结果集重新排序
排序:order by (升序 asc,降序 desc)

select * from t_stu order by sno desc/asc;

4.5、示例

–播放量前三的视频

select video_id video_name
from tbl_video
order by play_counts desc
limit 3

–分页 limit num offset start
当前页(pagenow)=1 start =(pagenow-1)*3

select *from  tbl_user limit 3 offset 0;  --第一页
select *from  tbl_user limit 3 offset 3;  --第二页
select *from  tbl_user limit 3 offset 6;  --第三页

5、视图

视图是查看数据库表中数据的一种方式。视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。视图是一种逻辑对象,是一种虚拟表。

5.1、创建SQLite视图

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

其中,view_name是要创建的视图名称,column1, column2, …是要查询的列名,table_name是要查询的表名,condition是可选的查询条件。

5.2、修改和删除SQLite视图

要修改已存在的SQLite视图,可以使用CREATE OR REPLACE VIEW语句来替换原有的视图定义。例如:

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

删除一个SQLite视图,可以使用DROP VIEW语句。例如:

DROP VIEW view_name;

6、索引

索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。使用索引可以利用索引快速访问数据库表中的特定信息。

6.1、创建索引的优缺点

优点:
快速访问数据;
加强数据行的唯一性;
缺点:
占用硬盘存储空间;
在插入、修改、删除数据时将产生额外开销;

6.2、创建和查看索引

index_name 是你为索引指定的名称,table_name 是你的表名,column_name 是你想为其创建索引的列。

CREATE INDEX index_name ON table_name (column_name);

查看索引:

PRAGMA index_list(table_name) 

7、连表查询

7.1、内连接-inner join

在这里插入图片描述

select *from tbl_struct
inner join
tbl_result
on tbl_struct.strcut_id = tbl_result_id

表取别名----as可写可不写

select a.name,b.age  from tbl_struct as a
inner join
tbl_result b
on a.strcut_id = b.result_id

字段取别名

select a.name ‘学生姓名’,b.age ‘学生年龄’  from tbl_struct as a
inner join
tbl_result b
on a.strcut_id = b.result_id

7.2、外连接-left join

外连接分为左外连接和右外连接,但是在sqlite3中只有左外连接

  • 查询到的数据是以左表的主键为主,一 一对应的。会出现空数据
  • 不想查询到空数据,需让成绩表为(左表)主表。【一般尝试多次确定主表】
select *from tbl_struct
left join
tbl_result
on tbl_struct.strcut_id = tbl_result_id

7.3、将查询到的重复行进行过滤

Distinct子句

select distinct ssex from t_student

示例

select distinct *from tbl_struct
left join
tbl_result
on tbl_struct.strcut_id = tbl_result_id

8、子查询

子查询:一个 SELECT 语句嵌套在另一个 SELECT 语句中。

8.1、in子查询

查询有成绩的学生信息

select * from tab_student 
where stu_id in (select stu_id from tab_score)

查询1课程有成绩的学生信息

select * from t_student 
where sno in (select sno from t_score  where cno='1')

8.2、exists子查询

判断是否有行存在
如果有行存在,语句返回true;否则false

查询有成绩的学生列表

 select * from t_student a
   where exists (select sno from t_score b where a.sno=b.sno)

查询没有成绩的学生列表

select * from t_student a
   where not exists (select sno from t_score b where a.sno=b.sno)

9、集合操作-并union

并的前提-------表或虚拟表必须拥有相同数量的列,列也必须拥有相似的数据类型

select * from tab_student where ssex=‘女’
union
select * from tab_student where ssex=‘男’

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

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

相关文章

JAVA的优势是什么?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; java编程语言自1995年问世…

基于 Vitis HLS 的单个乘法 DSP 映射研究

文章目录 1 自媒体账号2 引言3 整数乘法4 定点乘法5 浮点乘法6 总结 1 自媒体账号 目前运营的自媒体账号如下&#xff1a; 哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.com 如果觉得有所收获的话&#xff0c;可以点击我的主页 -> 充电 -> 自定义充电 支持一下&#…

人工智能在癌症新辅助治疗领域的研究|顶刊速递·24-06-18

小罗碎碎念 本期推文主题——人工智能在肿瘤新辅助治疗领域中的研究进展。 这一期推文谋划已久&#xff0c;最早可以追溯到五一假期。五一的时候&#xff0c;我第一站去的就是北大。当时和北医的一个师兄&#xff08;博士&#xff09;聊天&#xff0c;主要聊的就是新辅助治疗AI…

摄像头图像矫正的表格生成方法

1.设置单元格高宽 点击表格左上角 的 小三角 列宽: HOME -> Rows and Columns -> Column Width 5 CM 行高: HOME -> Rows and Columns -> Row Height 5 CM 2.设置 条件格式 HOME -> Conditional Formatting-> Manager Rules 点击 左上方 New Rule…

老杨说运维 | 如何结合现状进行运维路径建设(文末附演讲视频)

青城山脚下的滔滔江水奔涌而过&#xff0c;承载着擎创一往无前的势头&#xff0c;共同去向未来。2024年6月&#xff0c;双态IT成都用户大会擎创科技“数智化可观测赋能双态运维”专场迎来了完满的收尾。 本期回顾来自擎创科技CTO葛晓波的现场演讲&#xff1a;数智化转型的核心目…

PCI-E 5.0固态硬盘温度价格「双降」,速度近15GB/s

都 2024 年了&#xff0c;相信各位同学对固态硬盘都不陌生了吧。 随着技术的不断更新迭代&#xff0c;固态硬盘接口速率如今最高已经来到了 PCI-e 5.0 了。 其实这不算什么新技术了&#xff0c;早在2023年5月美光就上市了全球首款 PCI-e 5.0 固态硬盘&#xff0c; 英睿达 T700…

推动电子凭证服务革新,加速政务数字化转型

随着“互联网政务”的深入实施&#xff0c;电子凭证已成为政务服务数字化升级的关键要素。电子凭证不仅极大地方便了企业和群众&#xff0c;而且作为国家信息资源的重要组成部分&#xff0c;对于优化政务服务、加强社会治理和行业监管具有深远的影响。然而&#xff0c;由于政务…

Android-apk自动签名

一、创建apk签名 1、有得话忽略 Build->Generate Signed Bundle or APK&#xff0c;选择APK&#xff0c;然后Next&#xff0c;然后选择Create new 2、 2.在app/build.gradle中&#xff0c;在android{…}中添加以下内容 signingConfigs { release { storeFile file(androi…

Mojo崛起:AI-first 的编程语言能否成为新流行?

眨眼之间&#xff0c;你可能会错过又一种编程语言的发明。 有个笑话说&#xff0c;程序员花费20%的时间编写代码&#xff0c;80%的时间决定使用什么语言。 事实上&#xff0c;编程语言如此之多&#xff0c;以至于我们不确定实际有多少种。据估计&#xff0c;至少有700种编程语…

HarmonyOS角落里的知识:一杯冰美式的时间 -- 之打字机

一、前言 模拟编辑器或者模拟输入框中文字啪啦啪啦输入的效果&#xff0c;往往能够吸引人们的眼球&#xff0c;让用户的注意力聚焦在输入的内容上&#xff0c;本文将和大家探讨打字机效果的实现方式以及应用。Demo基于API12。 二、思路 拆分开来很简单&#xff0c;将字符串拆…

高等数学笔记(三):导数

一、导数概念 1.1 导数的定义 1.1.1 函数在一点处的导数与导函数 1.1.2 单侧导数 1.2 导数的几何意义 1.3 函数可导性与连续性的关系 二、函数的求导法则 2.1 函数的和、差、积、商的求导法则 2.2 反函数的求导法则 2.3 复合函数的求导法则 2.4 基本求导法则与导数公式 三…

以太坊智能合约不能调用:一定注意智能合约地址,每次部署地址都会变化;nonce值 什么作用,是什么;在交易中调用智能合约添加附加信息

目录 以太坊智能合约不能调用 一定注意智能合约地址,每次部署地址都会变化 Transaction must include these fields: %r" % missing_keys 缺少nonce nonce值 什么作用,是什么 在交易中调用智能合约添加附加信息 1. 定义智能合约 2. 部署并调用智能合约 注意事项…

如何恢复iPhone iCloud云盘资料删除?给出建议

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

JAVAEE之网络原理(2)_传输控制协议(TCP)、概念、格式、确认应答及超时重传机制

前言 在上一节中&#xff0c;我们介绍了 UDP (用户数据报) 的相关知识&#xff0c;在这一节中我们将继续介绍传输层中另一种更为重要的协议。 一、什么是TCP协议&#xff1f; 1.1 TCP 基本概念 TCP协议全称&#xff1a;传输控制协议&#xff08;TCP&#xff0c;Transmission C…

redhat 7.8修改网卡名称,最佳实践

背景&#xff1a; 因业务需求&#xff0c;需要将新创建的redhat7.8服务器的网卡名称修改为ens160&#xff0c;目前服务器的网卡名称是ens192。 一、修改网卡配置信息&#xff1a; 查看当前网卡信息&#xff0c;并获取到网卡到Mac地址 [rootlocalhost ~]# ip addr 1: lo: <L…

【CT】LeetCode手撕—103. 二叉树的锯齿形层序遍历

目录 题目1- 思路2- 实现⭐103. 二叉树的锯齿形层序遍历——题解思路 2- ACM实现 题目 原题连接&#xff1a;103. 二叉树的锯齿形层序遍历 1- 思路 二叉树的层序遍历&#xff0c;遇到奇数时&#xff0c;利用 Collections.reverse() 翻转即可 2- 实现 ⭐103. 二叉树的锯齿形层…

QT修改界面图标及exe程序图标

目录 步骤1. 添加图标文件2. 添加保存图标变量3. 窗口启动初始化图标文件4. 构建后即可完成图标的更改 步骤 1. 添加图标文件 如下&#xff0c;添加一个名为 favicon.ico 的文件到.pro 工程文件所在的目录中。 2. 添加保存图标变量 RC_ICONS是一个变量&#xff0c;它被用于存储…

项目准备和启动

1.什么是项目建议书&#xff1f; 2.项目建议书的内容 3.可行性分析方法 4.项目组织结构&#xff08;职能型 项目型 矩阵型&#xff09; 5.项目管理层决策层执行层之间的关系 6.软件项目的可行性分析包括哪几个方面&#xff1f;影响决策的关键因素又是什么&#xff1f; 软件项目…

88. 合并两个有序数组(简单)

88. 合并两个有序数组 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;88. 合并两个有序数组 2.详细题解 两个数组均有序&#xff08;非递减&#xff09;&#xff0c;要求合并两个数组&#xff0c;直观的思路&#xff0c;借助第三个数…

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020&#xff0c;基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV&#xff0c;主要用于优化彩色视频信号的传输。与RGB视频信号传输相比&#xff0c;它最大的优点在于只需占用极少的频宽&#xff08;RGB要求三个独立的视频信号同时传输&#xff09;。其…