数据库----SQL

[复制链接]
发表于 2025-12-30 11:16:21 | 显示全部楼层 |阅读模式
数据库的概念

数据库是“按照数据结构来构造、存储和管理数据的堆栈”。是一个长期存储在盘算机内的、有构造的、可共享的、同一管理的大量数据的聚集。
数据库是存放数据的堆栈。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据举行存放,是有肯定的规则的,否则查询的服从会很低。当今世界是一个充满着数据的互联网天下,充斥着大量的数据。即这个互联网天下就是数据天下。数据的泉源有很多,比如出行记载、斲丧记载、欣赏的网页、发送的消息等等。
数据库分类

常见的关系型数据库有: MySQL、SQL Server、Oracle、SQLite。
MySQL:免费产物,内存存储引擎使用较少。
SQL Server:微软的贸易化产物,是为了顺应大数据等业务产物新添加的存储引擎,微软SQL语句兼容性好,贸易化成熟度高。
Oracle :基于内存盘算的关系数据库, 提供了相应时间极短且吞吐量极高的应用步调。
SQLite:专为嵌入式计划的一款轻型的数据库,是服从ACID的关系型数据库管理体系。
不管哪一个数据库,它的核心都是SQL语句:SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理体系(RDBMS)。 SQL 的范围包罗数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。以是,学习的重点应该放到怎样使用SQL语句举行利用数据库。
数据库安装

下面以SQLite数据库为例,来举行学习。SQLite是一个软件库,实现了自给自足的、无服务器的、零设置的、变乱性的 SQL 数据库引擎。SQLite安装步调如下:


  • 从SQLite 下载页面,下载Windows 区预编译的二进制文件。下载 sqlite-tools-win32-*.zip。
  • 创建文件夹 C:\bin,并在此文件夹下解压上面的压缩文件。
  • 添加 C:\bin到体系的情况变量即可。
添加情况变量的方法:

  • 右键此电脑,点击属性。桌面上没有的可以在资源管理器找到。




  • 找到高级体系设置选项。



  • 点击情况变量。



  • 找到Path,然后点编辑。



  • 点击新建,增长解压的目次,然后点确定即可。


SQLite下令

在恣意位置创建一个工作目次,然后在文件夹内按住Shift键,点击鼠标右键,会出现PowerShell选项,点击打开(如果没有PowerShell,使用cmd也可)。


在下令提示符下键入 sqlite3,在 SQLite下令提示符下,可以使用各种 SQLite 下令。


SQLite的下令都是以.开头的,比如输入.help即可检察下令的资助文档


注:清屏的下令是clear大概cls
常用的下令聚集

help:打开资助
quit:退出SQLite 下令提示符
database:体现当前打开的数据库文件
tables:体现数据库中全部表名
schema <table_name>:检察表的结构
mode column:列模式体现
header on:打开表头
SQLite 数据范例

存储类
形貌
NULL
值是一个 NULL 值。
INTEGER
值是一个带符号的整数,根据值的巨细存储在 1、2、3、4、6 或 8 字节中。
REAL
值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
TEXT
值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
BLOB
值是一个 blob 数据,完全根据它的输入存储。
数据库利用

创建数据库

数据库本质就是一个文件,通常以db作为后缀名。使用sqlite3 下令来创建,可以在打开sqlite下令提示符之前就创建,下令如下:
  1. $ sqlite3 test.db
复制代码
也可以打开后使用.open 下令来创建。
  1. sqlite>.open test.db
复制代码
以上两种方式,如果test.db 存在则直接会打开,不存在就创建它。
数据库和表

数据库是个文件,而表实在就是文件里存储数据的容器。可以把数据库明白为excel文件,而表就是excel中一张张数据表,一个数据库可以有多张数据库表。


SQL语句

不管哪一个数据库,它的核心都是SQL语句,SQL语句可以明白为数据库标准,不管哪种数据库都要支持。


  • sqlite中SQL语句不必要以.开头,正常输入的内容都会被当成SQL语句分析。
  • SQL语句的关键字不区分巨细写,但是通常约定俗成会以大写来誊写关键字。
  • SQL语句在sqlite下令终端以分号末端,如果未键入;敲回车,终端会继续等候键入。
创建表

语法

  1. CREATE TABLE database_name.table_name(
  2.    column1 datatype  PRIMARY KEY,
  3.    column2 datatype NOT NULL,
  4.    column3 datatype,
  5.    .....
  6.    columnN datatype,
  7. );
复制代码
PRIMARY KEY体现主键,能唯一确定一条数据表记载,类似与人的身份证,不肯定非要有。
NOT NULL的束缚体现在表中创建记载时这些字段不能为 NULL。
如果表不存在,再创建
  1. CREATE TABLE if not exists student(xxx)
复制代码
实例

下面是一个实例,它创建了一个 COMPANY表,ID 作为主键,NOT NULL 的束缚体现在表中创建记载时这些字段不能为 NULL:
  1. CREATE TABLE COMPANY(
  2.    ID INTEGER PRIMARY KEY,
  3.    NAME           TEXT    NOT NULL,
  4.    AGE            INTEGER     NOT NULL,
  5.    ADDRESS        TEXT,
  6.    SALARY         REAL
  7. );
复制代码
可以使用 sqlite下令中的.tables下令来验证表是否已乐成创建,该下令用于列出附加数据库中的全部表。
  1. sqlite>.tables
  2. COMPANY
复制代码
在这里,可以看到我们刚创建的两张表 COMPANY。
可以使用 .schema 下令得到表的完备信息,如下所示:
  1. sqlite> .schemaCREATE TABLE COMPANY(
  2.    ID INTEGER PRIMARY KEY,
  3.    NAME           TEXT    NOT NULL,
  4.    AGE            INTEGER     NOT NULL,
  5.    ADDRESS        TEXT,
  6.    SALARY         REAL
  7. );
复制代码
删除表

语法

  1. DROP TABLE table_name;
复制代码
实例

  1. sqlite>DROP TABLE COMPANY;
复制代码
插入语句

语法

  1. INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
  2. VALUES (value1, value2, value3,...valueN);
复制代码
以上是对指定列添加值,如果对全部列添加,可以不写列名。但要确保值的序次与列在表中的序次同等。
  1. INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
复制代码
实例

  1. INSERT INTO COMPANY (ID,NAME,AGE)
  2. VALUES (1, 'Paul', 32);
  3. INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
  4. VALUES (2, 'Allen', 25, 'Texas', 15000.00 );
  5. INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
  6. VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );
  7. INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
  8. VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
  9. INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
  10. VALUES (5, 'David', 27, 'Texas', 85000.00 );
  11. INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
  12. VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
复制代码
大概
  1. INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
复制代码
查询语句

语法

  1. SELECT column1, column2, columnN FROM table_name;
复制代码
如果要查询全部的数据,可以用下面的语句。
  1. SELECT * FROM table_name;
复制代码
实例

可以使用前面的下令先对输出内容做格式化调解。
  1. sqlite>.header on
  2. sqlite>.mode column
复制代码
然后使用查询下令:
  1. SELECT ID, NAME, SALARY FROM COMPANY;
复制代码
运算符

运算符用于指定 SQLite 语句中的条件,并在语句中毗连多个条件。运算符分为:


  • 算术运算符
  • 比力运算符
  • 逻辑运算符
  • 位运算符
注:此部门作为参考手册,无需影象,用到时间返来自查即可。
算术运算符

假设变量 a=10,变量 b=20,则:
运算符
形貌
实例
+
加法 - 把运算符两边的值相加
a + b 将得到 30
-
减法 - 左利用数减去右利用数
a - b 将得到 -10
*
乘法 - 把运算符两边的值相乘
a * b 将得到 200
/
除法 - 左利用数除以右利用数
b / a 将得到 2
%
取模 - 左利用数除以右利用数后得到的余数
b % a 将得到 0
  1. select 10 + 20;
复制代码
比力运算符

假设变量 a=10,变量 b=20,则:
运算符
形貌
实例
==
查抄两个利用数的值是否相当,如果相当则条件为真。
(a == b) 不为真。
=
查抄两个利用数的值是否相当,如果相当则条件为真。
(a = b) 不为真。
!=
查抄两个利用数的值是否相当,如果不相当则条件为真。
(a != b) 为真。
<>
查抄两个利用数的值是否相当,如果不相当则条件为真。
(a <> b) 为真。
>
查抄左利用数的值是否大于右利用数的值,如果是则条件为真。
(a > b) 不为真。
<
查抄左利用数的值是否小于右利用数的值,如果是则条件为真。
(a < b) 为真。
>=
查抄左利用数的值是否大于便是右利用数的值,如果是则条件为真。
(a >= b) 不为真。
<=
查抄左利用数的值是否小于便是右利用数的值,如果是则条件为真。
(a <= b) 为真。
!<
查抄左利用数的值是否不小于右利用数的值,如果是则条件为真。
(a !< b) 为假。
!>
查抄左利用数的值是否不大于右利用数的值,如果是则条件为真。
(a !> b) 为真。
  1. select 10==20;
复制代码
逻辑运算符

运算符
形貌
AND
AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。
BETWEEN
BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜刮值。
EXISTS
EXISTS 运算符用于在满足肯定条件的指定表中搜刮行的存在。
IN
IN 运算符用于把某个值与一系列指定列表的值举行比力。
NOT IN
IN 运算符的对立面,用于把某个值与不在一系列指定列表的值举行比力。
LIKE
LIKE 运算符用于把某个值与使用通配符运算符的相似值举行比力。
GLOB
GLOB 运算符用于把某个值与使用通配符运算符的相似值举行比力。GLOB 与 LIKE 差异之处在于,它是巨细写敏感的。
NOT
NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。
OR
OR 运算符用于团结一个 SQL 语句的 WHERE 子句中的多个条件。
IS NULL
NULL 运算符用于把某个值与 NULL 值举行比力。
IS
IS 运算符与 = 相似。
IS NOT
IS NOT 运算符与 != 相似。
||
毗连两个差异的字符串,得到一个新的字符串。
UNIQUE
UNIQUE 运算符搜刮指定表中的每一行,确保唯一性(无重复)。
位运算符

p
q
p & q
p | q
0
0
0
0
0
1
0
1
1
1
1
1
1
0
0
1
条件查询

SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。
如果满足给定的条件,即为真(true)时,则从表中返回特定的值。可以使用 WHERE 子句来过滤记载,只获取必要的记载。
语法

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. WHERE [condition]
复制代码
可以使用比力或逻辑运算符指定条件,比如 >、<、=、LIKE、NOT,等等。
实例

列出 AGE 大于便是 25 且工资大于便是 65000.00 的全部记载:
  1. SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
复制代码
列出 AGE 大于便是 25 或工资大于便是 65000.00 的全部记载:
  1. SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
复制代码
下面的 SELECT 语句列出了 AGE 不为 NULL 的全部记载,结果体现全部的记载,意味着没有一个记载的 AGE 便是 NULL
  1. SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
复制代码
下面的 SELECT 语句列出了 AGE 的值为 25 或 27 的全部记载:
  1. SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
复制代码
下面的 SELECT 语句列出了 AGE 的值既不是 25 也不是 27 的全部记载:
  1. SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
复制代码
下面的 SELECT 语句列出了 AGE 的值在 25 与 27 之间的全部记载:
  1. SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
复制代码
数据更新

语法

  1. UPDATE table_name
  2. SET column1 = value1, column2 = value2...., columnN = valueN
  3. WHERE [condition];
复制代码
可以使用 AND 或 OR 运算符来团结 N 个数目的条件。
实例

更新 ID 为 6 的客户地点:
  1. UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
复制代码
修改 COMPANY 表中 ADDRESS 和 SALARY 列的全部值,则不必要使用 WHERE 子句,UPDATE 查询如下:
  1. UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
复制代码
数据删除

SQLite 的 DELETE 查询用于删除表中已有的记载。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则全部的记载都会被删除。
语法

  1. DELETE FROM table_name
  2. WHERE [condition];
复制代码
可以使用 AND 或 OR 运算符来团结 N 个数目的条件。
实例

删除 ID 为 7 的客户
  1. DELETE FROM COMPANY WHERE ID = 7;
复制代码
想要从 COMPANY 表中删除全部记载,则不必要使用 WHERE 子句
  1. DELETE FROM COMPANY;
复制代码
Like子句

SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜刮表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:


  • 百分号 (%)
  • 下划线 (_)
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
语法

  1. SELECT column_list
  2. FROM table_name
  3. WHERE column LIKE 'XXXX%'
  4. or
  5. SELECT column_list
  6. FROM table_name
  7. WHERE column LIKE '%XXXX%'
  8. or
  9. SELECT column_list
  10. FROM table_name
  11. WHERE column LIKE 'XXXX_'
  12. or
  13. SELECT column_list
  14. FROM table_name
  15. WHERE column LIKE '_XXXX'
  16. or
  17. SELECT column_list
  18. FROM table_name
  19. WHERE column LIKE '_XXXX_'
复制代码
您可以使用 AND 或 OR 运算符来团结 N 个数目的条件。在这里,XXXX 可以是任何数字或字符串值。
实例

下面一些实例演示了 带有 '%' 和 '_' 运算符的 LIKE 子句差异的地方:
语句
形貌
WHERE SALARY LIKE '200%'
查找以 200 开头的恣意值
WHERE SALARY LIKE '%200%'
查找恣意位置包罗 200 的恣意值
WHERE SALARY LIKE '_00%'
查找第二位和第三位为 00 的恣意值
WHERE SALARY LIKE '2_%_%'
查找以 2 开头,且长度至少为 3 个字符的恣意值
WHERE SALARY LIKE '%2'
查找以 2 末端的恣意值
WHERE SALARY LIKE '_2%3'
查找第二位为 2,且以 3 末端的恣意值
WHERE SALARY LIKE '2___3'
查找长度为 5 位数,且以 2 开头以 3 末端的恣意值
体现 COMPANY 表中 AGE 以 2 开头的全部记载:
  1. SELECT * FROM COMPANY WHERE AGE  LIKE '2%';
复制代码
体现 COMPANY 表中 ADDRESS 文本里包罗一个连字符(-)的全部记载:
  1. SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';
复制代码
Glob 子句

SQLite 的 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜刮表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符差异的是,GLOB 是巨细写敏感的,对于下面的通配符,它依照 UNIX 的语法。


  • 星号 (*)
  • 问号 (?)
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。GLOB 使用的通配符和我们反面要学习的Linux下令中用的类似。
语法

  1. SELECT FROM table_name
  2. WHERE column GLOB 'XXXX*'
  3. or
  4. SELECT FROM table_name
  5. WHERE column GLOB '*XXXX*'
  6. or
  7. SELECT FROM table_name
  8. WHERE column GLOB 'XXXX?'
  9. or
  10. SELECT FROM table_name
  11. WHERE column GLOB '?XXXX'
  12. or
  13. SELECT FROM table_name
  14. WHERE column GLOB '?XXXX?'
  15. or
  16. SELECT FROM table_name
  17. WHERE column GLOB '????'
复制代码
实例

下面一些实例演示了 带有 '*' 和 '?' 运算符的 GLOB 子句差异的地方:
语句
形貌
WHERE SALARY GLOB '200*'
查找以 200 开头的恣意值
WHERE SALARY GLOB '*200*'
查找恣意位置包罗 200 的恣意值
WHERE SALARY GLOB '?00*'
查找第二位和第三位为 00 的恣意值
WHERE SALARY GLOB '2??'
查找以 2 开头,且长度至少为 3 个字符的恣意值
WHERE SALARY GLOB '*2'
查找以 2 末端的恣意值
WHERE SALARY GLOB '?2*3'
查找第二位为 2,且以 3 末端的恣意值
WHERE SALARY GLOB '2???3'
查找长度为 5 位数,且以 2 开头以 3 末端的恣意值
体现 COMPANY 表中 AGE 以 2 开头的全部记载
  1. SELECT * FROM COMPANY WHERE AGE  GLOB '2*';
复制代码
体现 COMPANY 表中 ADDRESS 文本里包罗一个连字符(-)的全部记载:
  1. SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';
复制代码
Limit 子句

SQLite 的 LIMIT 子句用于限定由 SELECT 语句返回的数据数目。
根本语法

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. LIMIT [num]
复制代码
与 OFFSET 子句一起使用时的语法:
  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. LIMIT [no of rows] OFFSET [row num]
复制代码
实例

限定提取的行数:
  1. SELECT * FROM COMPANY LIMIT 6;
复制代码
在某些情况下,大概必要从一个特定的偏移开始提取记载。下面是一个实例,从第三位开始提取 3 个记载:
  1. SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
复制代码
结果排序

SQLite 的 ORDER BY 子句是用来基于一个或多个列按升序或降序序次分列数据。
语法

  1. SELECT column-list
  2. FROM table_name
  3. [WHERE condition]
  4. [ORDER BY column1, column2, .. columnN] [ASC | DESC];
复制代码
ascend:上升;升高;登高
descend:下来;下去;降落;下斜;下倾;到临;到临
实例

将结果按 SALARY 升序排序
  1. SELECT * FROM COMPANY ORDER BY SALARY ASC;
复制代码
将结果按 NAME 和 SALARY 升序排序:
  1. SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
复制代码
将结果按 NAME 降序排序:
  1. SELECT * FROM COMPANY ORDER BY NAME DESC;
复制代码
ORDER BY 后可加2个字段,用英文逗号隔开。当第一个条件相当时,才会用第二个条件去排序。将结果按 SALARY 降序,NAME升序分列:
  1. SELECT * FROM COMPANY ORDER BY SALARY DESC,NAME DESC;
复制代码
结果分组

SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对雷同的数据举行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
语法

  1. SELECT column-list
  2. FROM table_name
  3. WHERE [ conditions ]
  4. GROUP BY column1, column2....columnN
  5. ORDER BY column1, column2....columnN
复制代码
实例

统计全部员工都有地点都有哪些分类。
  1. SELECT ADDRESS FROM COMPANY GROUP BY ADDRESS;
复制代码
统计每个地点的员工数,这里必要一个内置函数count。
  1. SELECT COUNT(ADDRESS),ADDRESS FROM COMPANY GROUP BY ADDRESS ORDER BY COUNT(ID) DESC;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表