数据库的概念
数据库是“按照数据结构来构造、存储和管理数据的堆栈”。是一个长期存储在盘算机内的、有构造的、可共享的、同一管理的大量数据的聚集。
数据库是存放数据的堆栈。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据举行存放,是有肯定的规则的,否则查询的服从会很低。当今世界是一个充满着数据的互联网天下,充斥着大量的数据。即这个互联网天下就是数据天下。数据的泉源有很多,比如出行记载、斲丧记载、欣赏的网页、发送的消息等等。
数据库分类
常见的关系型数据库有: 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到体系的情况变量即可。
添加情况变量的方法:
- 右键此电脑,点击属性。桌面上没有的可以在资源管理器找到。
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下令提示符之前就创建,下令如下:
也可以打开后使用.open 下令来创建。
以上两种方式,如果test.db 存在则直接会打开,不存在就创建它。
数据库和表
数据库是个文件,而表实在就是文件里存储数据的容器。可以把数据库明白为excel文件,而表就是excel中一张张数据表,一个数据库可以有多张数据库表。
SQL语句
不管哪一个数据库,它的核心都是SQL语句,SQL语句可以明白为数据库标准,不管哪种数据库都要支持。
- sqlite中SQL语句不必要以.开头,正常输入的内容都会被当成SQL语句分析。
- SQL语句的关键字不区分巨细写,但是通常约定俗成会以大写来誊写关键字。
- SQL语句在sqlite下令终端以分号末端,如果未键入;敲回车,终端会继续等候键入。
创建表
语法
- CREATE TABLE database_name.table_name(
- column1 datatype PRIMARY KEY,
- column2 datatype NOT NULL,
- column3 datatype,
- .....
- columnN datatype,
- );
复制代码 PRIMARY KEY体现主键,能唯一确定一条数据表记载,类似与人的身份证,不肯定非要有。
NOT NULL的束缚体现在表中创建记载时这些字段不能为 NULL。
如果表不存在,再创建
- CREATE TABLE if not exists student(xxx)
复制代码 实例
下面是一个实例,它创建了一个 COMPANY表,ID 作为主键,NOT NULL 的束缚体现在表中创建记载时这些字段不能为 NULL:
- CREATE TABLE COMPANY(
- ID INTEGER PRIMARY KEY,
- NAME TEXT NOT NULL,
- AGE INTEGER NOT NULL,
- ADDRESS TEXT,
- SALARY REAL
- );
复制代码 可以使用 sqlite下令中的.tables下令来验证表是否已乐成创建,该下令用于列出附加数据库中的全部表。
在这里,可以看到我们刚创建的两张表 COMPANY。
可以使用 .schema 下令得到表的完备信息,如下所示:
- sqlite> .schemaCREATE TABLE COMPANY(
- ID INTEGER PRIMARY KEY,
- NAME TEXT NOT NULL,
- AGE INTEGER NOT NULL,
- ADDRESS TEXT,
- SALARY REAL
- );
复制代码 删除表
语法
实例
- sqlite>DROP TABLE COMPANY;
复制代码 插入语句
语法
- INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
- VALUES (value1, value2, value3,...valueN);
复制代码 以上是对指定列添加值,如果对全部列添加,可以不写列名。但要确保值的序次与列在表中的序次同等。
- INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
复制代码 实例
- INSERT INTO COMPANY (ID,NAME,AGE)
- VALUES (1, 'Paul', 32);
- INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (2, 'Allen', 25, 'Texas', 15000.00 );
- INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );
- INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
- INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (5, 'David', 27, 'Texas', 85000.00 );
- INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
- VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
复制代码 大概
- INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
复制代码 查询语句
语法
- SELECT column1, column2, columnN FROM table_name;
复制代码 如果要查询全部的数据,可以用下面的语句。
- SELECT * FROM table_name;
复制代码 实例
可以使用前面的下令先对输出内容做格式化调解。
- sqlite>.header on
- sqlite>.mode column
复制代码 然后使用查询下令:
- 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
| 比力运算符
假设变量 a=10,变量 b=20,则:
运算符
| 形貌
| 实例
| ==
| 查抄两个利用数的值是否相当,如果相当则条件为真。
| (a == b) 不为真。
| =
| 查抄两个利用数的值是否相当,如果相当则条件为真。
| (a = b) 不为真。
| !=
| 查抄两个利用数的值是否相当,如果不相当则条件为真。
| (a != b) 为真。
| <>
| 查抄两个利用数的值是否相当,如果不相当则条件为真。
| (a <> b) 为真。
| >
| 查抄左利用数的值是否大于右利用数的值,如果是则条件为真。
| (a > b) 不为真。
| <
| 查抄左利用数的值是否小于右利用数的值,如果是则条件为真。
| (a < b) 为真。
| >=
| 查抄左利用数的值是否大于便是右利用数的值,如果是则条件为真。
| (a >= b) 不为真。
| <=
| 查抄左利用数的值是否小于便是右利用数的值,如果是则条件为真。
| (a <= b) 为真。
| !<
| 查抄左利用数的值是否不小于右利用数的值,如果是则条件为真。
| (a !< b) 为假。
| !>
| 查抄左利用数的值是否不大于右利用数的值,如果是则条件为真。
| (a !> b) 为真。
| 逻辑运算符
运算符
| 形貌
| 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 子句来过滤记载,只获取必要的记载。
语法
- SELECT column1, column2, columnN
- FROM table_name
- WHERE [condition]
复制代码 可以使用比力或逻辑运算符指定条件,比如 >、<、=、LIKE、NOT,等等。
实例
列出 AGE 大于便是 25 且工资大于便是 65000.00 的全部记载:
- SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
复制代码 列出 AGE 大于便是 25 或工资大于便是 65000.00 的全部记载:
- SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
复制代码 下面的 SELECT 语句列出了 AGE 不为 NULL 的全部记载,结果体现全部的记载,意味着没有一个记载的 AGE 便是 NULL
- SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
复制代码 下面的 SELECT 语句列出了 AGE 的值为 25 或 27 的全部记载:
- SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
复制代码 下面的 SELECT 语句列出了 AGE 的值既不是 25 也不是 27 的全部记载:
- SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
复制代码 下面的 SELECT 语句列出了 AGE 的值在 25 与 27 之间的全部记载:
- SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
复制代码 数据更新
语法
- UPDATE table_name
- SET column1 = value1, column2 = value2...., columnN = valueN
- WHERE [condition];
复制代码 可以使用 AND 或 OR 运算符来团结 N 个数目的条件。
实例
更新 ID 为 6 的客户地点:
- UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
复制代码 修改 COMPANY 表中 ADDRESS 和 SALARY 列的全部值,则不必要使用 WHERE 子句,UPDATE 查询如下:
- UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
复制代码 数据删除
SQLite 的 DELETE 查询用于删除表中已有的记载。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则全部的记载都会被删除。
语法
- DELETE FROM table_name
- WHERE [condition];
复制代码 可以使用 AND 或 OR 运算符来团结 N 个数目的条件。
实例
删除 ID 为 7 的客户
- DELETE FROM COMPANY WHERE ID = 7;
复制代码 想要从 COMPANY 表中删除全部记载,则不必要使用 WHERE 子句
Like子句
SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜刮表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
语法
- SELECT column_list
- FROM table_name
- WHERE column LIKE 'XXXX%'
- or
- SELECT column_list
- FROM table_name
- WHERE column LIKE '%XXXX%'
- or
- SELECT column_list
- FROM table_name
- WHERE column LIKE 'XXXX_'
- or
- SELECT column_list
- FROM table_name
- WHERE column LIKE '_XXXX'
- or
- SELECT column_list
- FROM table_name
- 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 开头的全部记载:
- SELECT * FROM COMPANY WHERE AGE LIKE '2%';
复制代码 体现 COMPANY 表中 ADDRESS 文本里包罗一个连字符(-)的全部记载:
- SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
复制代码 Glob 子句
SQLite 的 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜刮表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符差异的是,GLOB 是巨细写敏感的,对于下面的通配符,它依照 UNIX 的语法。
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。GLOB 使用的通配符和我们反面要学习的Linux下令中用的类似。
语法
- SELECT FROM table_name
- WHERE column GLOB 'XXXX*'
- or
- SELECT FROM table_name
- WHERE column GLOB '*XXXX*'
- or
- SELECT FROM table_name
- WHERE column GLOB 'XXXX?'
- or
- SELECT FROM table_name
- WHERE column GLOB '?XXXX'
- or
- SELECT FROM table_name
- WHERE column GLOB '?XXXX?'
- or
- SELECT FROM table_name
- 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 开头的全部记载
- SELECT * FROM COMPANY WHERE AGE GLOB '2*';
复制代码 体现 COMPANY 表中 ADDRESS 文本里包罗一个连字符(-)的全部记载:
- SELECT * FROM COMPANY WHERE ADDRESS GLOB '*-*';
复制代码 Limit 子句
SQLite 的 LIMIT 子句用于限定由 SELECT 语句返回的数据数目。
根本语法
- SELECT column1, column2, columnN
- FROM table_name
- LIMIT [num]
复制代码 与 OFFSET 子句一起使用时的语法:
- SELECT column1, column2, columnN
- FROM table_name
- LIMIT [no of rows] OFFSET [row num]
复制代码 实例
限定提取的行数:
- SELECT * FROM COMPANY LIMIT 6;
复制代码 在某些情况下,大概必要从一个特定的偏移开始提取记载。下面是一个实例,从第三位开始提取 3 个记载:
- SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
复制代码 结果排序
SQLite 的 ORDER BY 子句是用来基于一个或多个列按升序或降序序次分列数据。
语法
- SELECT column-list
- FROM table_name
- [WHERE condition]
- [ORDER BY column1, column2, .. columnN] [ASC | DESC];
复制代码 ascend:上升;升高;登高
descend:下来;下去;降落;下斜;下倾;到临;到临
实例
将结果按 SALARY 升序排序
- SELECT * FROM COMPANY ORDER BY SALARY ASC;
复制代码 将结果按 NAME 和 SALARY 升序排序:
- SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
复制代码 将结果按 NAME 降序排序:
- SELECT * FROM COMPANY ORDER BY NAME DESC;
复制代码 ORDER BY 后可加2个字段,用英文逗号隔开。当第一个条件相当时,才会用第二个条件去排序。将结果按 SALARY 降序,NAME升序分列:
- SELECT * FROM COMPANY ORDER BY SALARY DESC,NAME DESC;
复制代码 结果分组
SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对雷同的数据举行分组。
在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
语法
- SELECT column-list
- FROM table_name
- WHERE [ conditions ]
- GROUP BY column1, column2....columnN
- ORDER BY column1, column2....columnN
复制代码 实例
统计全部员工都有地点都有哪些分类。
- SELECT ADDRESS FROM COMPANY GROUP BY ADDRESS;
复制代码 统计每个地点的员工数,这里必要一个内置函数count。
- SELECT COUNT(ADDRESS),ADDRESS FROM COMPANY GROUP BY ADDRESS ORDER BY COUNT(ID) DESC;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |