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

学习分享

1、sql数据类型

Sqlite3主要数据类型如下:

同时sqlite3也接受如下的数据类型:

1.1、约束

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

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

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

2.1、创建表

表创建时,默认创建了rowid列,作为自增长ID

sqlite的是动态的数据类型,而非一般数据库的静态数据类型

sql 复制代码
create table 表名(字段名 字段类型 [约束],...);

示例:

sql 复制代码
-- 用户表
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、修改表

修改表的名称:

sql 复制代码
alter table 表名 rename to 新名字;

增加字段:

sql 复制代码
alter table 表名 add column 新增加字段名 字段类型 [约束];

2.3、删除表

表删除后,表结构和记录都被删除;在默认模式下,数据库文件不会减少,该空间留给后续操作使用

表删除后,表的索引以及触发器也相应被删除

sql 复制代码
drop table 表名;

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

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

3.1、INSERT语句

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

sql 复制代码
insert into 表名 values(字段值,...);
insert into 表名(字段名,...) values(字段值,...);

示例

sql 复制代码
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子句中连接多个条件

sql 复制代码
delete from 表名 where 条件;

示例

sql 复制代码
delete from t_student where sno=1001;

3.3、UPDATE语句

sql 复制代码
UPDATE <表名> SET <列名 = 更新值>  [WHERE <更新条件>]

示例

sql 复制代码
UPDATE student SET sage=29 WHERE sname='xxx';

3.4、SELECT语句

sql 复制代码
SELECT [*]|[列名] 
   FROM [表名]
   WHERE [查询条件]

示例

sql 复制代码
select * from tab_student where stu_no='1001';

4、高级查询

4.1、SQL通配符

4.2、模糊查询--like

sql 复制代码
查询班级编号以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分的成员记录

sql 复制代码
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)

sql 复制代码
select * from t_stu order by sno desc/asc;

4.5、示例

--播放量前三的视频

sql 复制代码
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

sql 复制代码
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视图

sql 复制代码
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语句来替换原有的视图定义。例如:

sql 复制代码
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

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

sql 复制代码
DROP VIEW view_name;

6、索引

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

6.1、创建索引的优缺点

优点:

快速访问数据;

加强数据行的唯一性;
缺点:

占用硬盘存储空间;

在插入、修改、删除数据时将产生额外开销;

6.2、创建和查看索引

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

sql 复制代码
CREATE INDEX index_name ON table_name (column_name);

查看索引:

sql 复制代码
PRAGMA index_list(table_name) 

7、连表查询

7.1、内连接-inner join

sql 复制代码
select *from tbl_struct
inner join
tbl_result
on tbl_struct.strcut_id = tbl_result_id

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

sql 复制代码
select a.name,b.age  from tbl_struct as a
inner join
tbl_result b
on a.strcut_id = b.result_id

字段取别名

sql 复制代码
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中只有左外连接

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

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

Distinct子句

sql 复制代码
select distinct ssex from t_student

示例

sql 复制代码
select distinct *from tbl_struct
left join
tbl_result
on tbl_struct.strcut_id = tbl_result_id

8、子查询

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

8.1、in子查询

查询有成绩的学生信息

sql 复制代码
select * from tab_student 
where stu_id in (select stu_id from tab_score)

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

sql 复制代码
select * from t_student 
where sno in (select sno from t_score  where cno='1')

8.2、exists子查询

判断是否有行存在

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

查询有成绩的学生列表

sql 复制代码
 select * from t_student a
   where exists (select sno from t_score b where a.sno=b.sno)

查询没有成绩的学生列表

sql 复制代码
select * from t_student a
   where not exists (select sno from t_score b where a.sno=b.sno)

9、集合操作-并union

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

sql 复制代码
select * from tab_student where ssex='女'
union
select * from tab_student where ssex='男'
相关推荐
Python私教2 小时前
model中能定义字段声明不存储到数据库吗
数据库·oracle
BestandW1shEs5 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师5 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球5 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...5 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00015 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502775 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度6 小时前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)6 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符