目录
1、概述
-
数据库(Database,DB)
数据库是存放数据的仓库,是长期存储在计算机内、有组织有结构的、可共享的数据集合。
-
数据库管理系统(Database Management System,DBMS)
数据管理系统是为数据库的建立、使用和维护而配置的数据库管理软件,是数据库系统的核心。
-
数据库应用系统(Database Application Systems,DBAS)
数据库应用系统是基于数据库的应用软件,由数据库和应用程序组成。数据库由数据库管理系统创建,而应用程序可以由任何支持数据编程的程序设计语言编写。
-
数据库系统(Database System,DBS)
数据库系统是指引入数据库技术的计算机应用系统,通常由数据库(DB)、数据库管理系统(DBMS)、应用程序、数据库系统管理员(DSA)和用户(user)组成。
-
结构化查询语言(Structured Query Language,SQL)
结构化查询语言是一种用于操作关系型数据库的标准化语言。
1.1 常用数据库语句
DDL(Data Definition Language,数据定义语言):用于创建、修改和删除数据库中的对象。
DML(Data Manipulation Language,数据操作语言):用于对数据库中的数据进行操作。
DQL(Doctrine Query Language,数据库查询语言):用于查询和操作数据库。
1.2 常用字符类型
- 字符串(CHAR、VARCHAR、TEXT等)
- 数值(NUMERIC、INTEGER、FLOAT等)
- 日期和时间(DATE、TIME、DATETIME等)
- 布尔类型(BOOLEAN)
2、DDL数据库操作
2.1 数据库
- 创建数据库
create database 数据库名称
- 查看数据库
show databases 数据库名称
- 修改数据库
alter database 数据库名称
- 删除数据库
drop database 数据库名称
- 使用数据库
use 数据库名称;
2.2 数据表
- 数据完整约束
主键约束:PRIMARY KEY,非空且唯一;
外键约束:FOREIGN KEY,定义外键并指定它引用另一个表格的主键;
唯一约束:UNIQUE,列的值是唯一(值可取NULL,但须使用NULL或NOT NULL声明);
非空约束:NOT NULL,列的内容不能为NULL;
列的默认值:DEFAULT;
检查约束:CHECX,用于确保某个属性中的值符合特定条件或规则。
一个数据表中只能创建一个主键,但可以有若干个UNIQUE键;
- 创建数据表
create table 表名
- 复制数据表
create table if not exists 表名
like 参照表名
as (select语句)
LIKE:复制表的结构
AS:复制表结构的同时复制其数据
- 删除数据表
drop table 表名
DROP TABLE语句删除一个表,则所有完整性约束也都被删除了。
alter table 表名 drop 完整性约束
使用ALTER TABLE语句,可以独立地删除完整性约束,不会删除表本身。
- 显示数据表信息
(1)、显示数据表文件名
show tables;
(2)、显示数据表结构
describe 表名;
3、DML数据库操作
- 插入数据
insert [into] 表名 (列名,...)
values ({表达式},...)
- 修改数据
update 表名
set 列名1 = 表达式1[ ,列名2 = 表达式2 ...]
[where 条件]
多表修改数据
update 表名列表
set 列名1 = 表达式1[ ,列名2 = 表达式2 ...]
[where 条件]
- 删除数据
delete from 表名
[where 条件]
多表删除数据
delete 表名1[,表名2...]
from 表名列表
[where 条件]
DELETE语句删除一行数据,TRUNCATE TABLE清除表中所有记录
truncate table 表名
4、DQL数据库操作
4.1 单表查询
4.1.1 选择列
查询指定列
select 列名
from 表名
全表查询
select * from 表名;
4.1.2 定义列别名
定义的列别名有空格时,必须使用'引号'将其括起来。
不允许在使用WHERE子句中使用列别名。
select 列名 [as] 别名
4.1.3 替换查询结果中的数据
select 列名
case
when 条件1 then 表达式1
when 条件2 then 表达式2
......
else 表达式n
end
from 表名;
4.1.4 计算列值
使用SELECT语句对列进行查询时,在结果中可以输出对列值进行计算后的值,即SELECT子句可使用表达式作为结果。
select 列名,round(表达式)
from 表名
4.1.5 消除重复行
select distinct 列名1[,列名2...]
4.2 WHERE子句
where <判定运算>
4.2.1 比较运算
表达式{ = | < | <= | > | >= | <=> | <> | != }
4.2.2 逻辑运算
4.2.3 匹配模式
表达式 [not] like 表达式
使用LIKE进行模式匹配时,常用特殊符号“_” “%”进行模糊查询,“%”代表0个或多个字符,“_”代表单个字符。
4.2.4 范围比较
范围比较的关键字有BETWEEN和IN两个。
表达式 [not] between 表达式1 and 表达式2
若表达式expression的值在表达式1与表达式2之间(包括两值),返回TRUE,否则返回FALSE;表达式1的值不能大于表达式2的值。
4.2.5 空值比较
需判定一个表达式的值是否为空值时,可使用IS NULL关键字。
表达式 is [not] null
4.2 多表查询
4.2.1 FROM子句
FROM子句中将各个表用逗号分隔,这样就指定了全连接。
from 表名1[,表名2...] /*查询表*/
join子句 /*连接表*/
4.2.2 多表连接
1.连接方式:
全连接:是指将每个表的每行都与其他表中的每行交叉,以产生所有可能的组合,列包含了所有表中出现的列,也就是笛卡尔积。
FROM 子句中将各个表用逗号分隔,这样就指定了全连接,全连接得到的表产生了数量非常多的行。经常需要用 WHERE 子句来筛选满足条件的记录。
内连接:它将两个表格中的匹配记录组合成一个结果集。内连接仅包括那些在两个表格中都有匹配记录的行。
[inner] join
外连接:包括左外连接和右连接
左外连接:结果表中除了匹配行外,还包括左表有但右表中不匹配的行,对于这样的行,从右表中选择的列被设置为 NULL。
LEFT OUTER JOIN
右外连接:结果表中除了匹配行外,还包括右表有但左表中不匹配的行,对于这样的行,从左表中选择的列被设置为 NULL。
RIGHT OUTER JOIN
2.join连接
表名1 inner join 表名2
on 连接条件
1.内连接
指定了INNER 关键字的连接是内连接。内连接是在 FROM子句产生的中间结果中应用 ON条件后得到的结果。
内连接是系统默认的,可以省略 INNER 关键字。使用内连接后,FROM 子句中的 ON条件主要用来连接表,其他并不用来连接表的条件可以使用 WHERE 子句来指定。
2.外连接
指定了OUTER关键字的连接为外连接。
4.2.3 子查询
在查询中,另一个查询的结果可以作为条件的一部分,例如,判定列值是否与某个查询的结果集中的值相等,作为查询条件的一部分的查询称为子查询。SQL 标准允许 SELECT语句多层嵌套使用,用来表示复杂的查询。子查询除了可以用在 SELECT 语句中,还可以用在INSERT、UPDATE 及 DELETE 语中。查询通常与IN、EXISTS 谓词及比较运算符结合使用。
1.IN子查询
IN子查询用于进行一个给定值是否在子查询结果集中的判断。
表达式 [not] in (子查询)
2.比较查询
可认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算。
表达式{ < | <= | = | > | >= | != | <>} { ALL | SOME | ANY }(子查询)
3.EXISTS子查询
FXISTS 谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,EXISTS派回TRUE,否则返回 FALSE。EXISTS 还可与 NOT 结合使用,即NOT EXISTS、其返回值与EXISTS刚好相反。
[ NOT ] EXISTS (子查询)
4.2.4 联合查询
两个表的数据按照一定的查询条件查询出来以后,需要将结果合并到一起显示出来。这个时候就需要用到 UNION 关键字。
SELECT 语句1 UNION [UNION选项] SELECT 语句2;
4.3 分类汇总与排序
4.3.1 聚合函数
聚合函数是一种在SQL中用于计算和处理数据的函数。它们通常用于对查询结果进行汇总,并返回单个值。SQL中的聚合函数包括SUM、AVG、MAX、MIN和COUNT等。
1.COUNT函数
用于统计表中满足条件的行数或总行数,返回SELECT语句检索到的行中非NULL值的数目,若找不到匹配的行,则返回0。
COUNT ( { [ ALL | DISTINCT ] 表达式 } | * )
2.MAX函数和MIN函数
MAX 函数和MIN 函数分别用于求表达式中所有值项的最大值与最小值。
MAX / MIN ( [ ALL | DISTINCT ] 表达式 )
3.SUN函数和AVG函数
SUM函数和AVG函数分别用于求表达式中所有值项的总和与平均值。
SUM / AVG ( [ ALL | DISTINCT ] 表达式)
4.3.2 GROUP BY子句
GROUP BY子句主要用于根据字段对行进行分组。
GROUP BY ( 列名 | 表达式 }[ ASC | DESC ],...[ WITH ROLLUP ]
4.3.3 HAVING子句
使用HAVING 子句的目的与 WHERE 子句类似,不同的是 WHERE子句用来在FROM子句之后选择行,而HAVING 子句用来在 GROUPBY子之后选择行。
HAVING 条件
4.3.4 ORDER BY子句
ORDER BY子句可以保证结果中的行按一定顺序排列。
ORDER BY { 列名 | 表达式 | 列编号 } [ ASC | DESC ] ,...
关键字ASC表示升序排列,DESC表示降序排列,系统默认为ASC。
4.3.5 LIMIT子句
LMIT子句是SELECT语句的最后一个子句,主要用于限制被SELECT语句返回的行数。
LIMIT {[偏移量,]行数| 行数OFESET 偏移量}