目录
一、数据库基础
1.1数据库
1.1.1数据库系统的组成
1.1.2主流数据库
1.2数据库的安装
二、表的管理
2.1.1关系数据库
2.1.2数据类型
2.2SQL server范式
2.3数据完整性
2.3.1实体完整性
2.3.2域完整性
2.3.3参照完整性
三、SQL的增删改查
3.1 DML语句
3.2 insert新增数据
3.2.1、增加一行数据
3.2.2、增加多行数据
3.3 UPDATE更新(修改)数据
3.4 DELETE删除数据
3.5 SELECT查询表的数据
3.5.1 select概述
3.5.2 distinct查询去重
3.5.3 as查询的列起别名
一、数据库基础
1.1数据库
数据库系统的模型主要有层次性、网状型、关系型以及对象关系型。目前,数据库烯烃的主流模型就是关系型。
关系模型:采用二维表的形式表示实体和实体间相联系的数据模型。关系是一个行与列交叉的二维表,,每一列都有唯一的列名,且所有数据均为同一种数据类型,列在表中的次序无关紧要;表的每一行代表一条记录,表中任意两行记录不能完全相同,行在表中的顺序也无关紧要
数据库(DataBasr即DB):是长期存储与计算机内的、有组织的、可共享的数据集合。简单而言,数据库就是按照数据结构来组织、存储和管理数据的仓库。
数据库管理系统(DataBase Management System,即DBMS):是位于用户和操作系统之间的管理软件,是个数据库系统的核心。在操作系统的支持下,DBMS能够科学的组织和存储数据,以及高效的获取和维护数据库的系统软件。其主要功能包括数据库的创建和维护、数据定义、数据操纵和数据库的运行管理。
数据库管理员(DataBase Administrator,即DBA):是一个负责管理和维护数据库服务器的人员。数据库管理员负责全面管理和控制数据库管理系统
1.1.1数据库系统的组成
数据库系统是采用数据库技术的计算机系统,它是由数据库(数据)、数据库管理软件(软件)、数据库管理员(人员)、硬件平台和软件平台五个部分组成的运行实体。其中数据库管理员是对数据库进行规划、设计、维护和监视的专业管理人员,在数据库系统中起着非常重要的作用。
1.1.2主流数据库
目前主流的数据库包括SQL Server、ORACLE、DB2、SYBASE和MySQL等,它们均为关系型数据库。
1.2数据库的安装
下载网址:https://go.microsoft.com/fwlink/?linkid=866662
在这里我只做简单介绍。大家根据图片提示来
1、通过网址下载好安装包,代开后,看到如图形式,选择自定义
2、位置选自,最好不要在C盘即主磁盘即可
3、等待下载完成,下载完成后会得到一下样式,选择安装,选择安装全新SQL
后面将全是图片形式
然后官网下载SQL Server Management Studio:https://aka.ms/ssmsfullsetup
将其直接安装即可。
二、表的管理
2.1.1关系数据库
关系数据库是以关系模型为基础的数据库,是一种根据表、元组以及字段之间的关系进行组织和访问的数据库,其通过若干个表来存储数据,并通过关系将这些表联系在一起。
2.1.2数据类型
主要包括字符类型、数字类型和日期类型等。
类型分类 | 类型 | 取值范围和描述 | 使用场景 |
整数类型 | int | ~ | 如商品的个数之类 |
小数类型 | decimal(len,n) | ~ | 如工资之类 |
固定长度非Unicode字符 | char | 最多可存储8000个字符 | 如名称 |
可变长度非Unicode字符 | varchar(len) | 可根据实际存储的字符改变存储控件,最多可存储8000个字符 | 如地址名称 |
可变长度Unicode字符 | nvarchar(len) | 与varchar类似,最多可存储4000个字符 | 可存储中、日、韩字符 |
日期 | date | 用于存储日期;从 0001-01-01至9999-12-31 | 出生年月 |
日期时间 | datetime | 用于存储时间和日期 | 生成订单时间 |
2.2SQL server范式
第一范式(1NF):确保表中每列原子性(不可拆分)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。
第二范式(2NF):确保表中每列与逐渐相关,但不能只与主键的某部分相关(主要针对联合函数),主键列与非主键列遵循完全函数依赖关系(完全依赖)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式(3NF):非主键列之间没有传递函数依赖关系(消除传递依赖)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
第四范式(4NF):禁止主键列和非主键列一对多关系不受约束
第五范式(5NF):将表分割成尽可能小的块,消除表中的冗余
2.3数据完整性
数据完整性即用于保证数据库中的数据在逻辑上的一致性、正确性和可靠性。数据完整性主要包含实体完整性、域完整性和参照完整性
2.3.1实体完整性
实体完整性规定表的每一行记录在表中是唯一的,他主要包含主键约束、自增约束和唯一约束
1、主键约束(Primary Key):用于唯一标识每一条记录,数据表中具有唯一值得字段可设定为主键字段。
注:每个数据表只能有一个主键。设定为逐渐的字段内容不能有重复值,且不能为空(NULL 值)
2、自增约束(IDENTITY):表的某个字段如果需要按照一定的增长规则自增,即在这个字段上设置自增约束。
注:在主键上可设定自增约束;设定了自增约束的字段,不能再进行输入操作
3、唯一约束(Unique):与主键相比,唯一约束也用来确保列中不存在重复值,但其列值可以是NULL。
2.3.2域完整性
域完整性指给定列输入的有效值,即保证指定列的数据具有正确的数据类型、格式和有效的数据范围。实现域完整性可以通过定义NOT NULL、CHECK约束和默认值约束(Default)等方法来实现
1、非空约束(NOT NULL):指这个数据必须填写,不能为null
2、检查约束(check):用于在表中定义一个对输入的数据进行逻辑检查,一旦在表中某列设置了检查约束,则在向表中添加数据时,会使用这个约束对输入的数据按照设置的逻辑进行检查。
注:用MYsql的小伙伴,这个约束在Mysql中不支持。
2.3.3参照完整性
参照的完整性要求关系中不允许引用不存在的实体。实体完整性是关系模型必须满足的完整性约束条件,目的是确保数据的一致性,参照完整性又称引用完整性。
外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。即外键表示了两个关系之间的相关联系。外键又称为外关键字。
三、SQL的增删改查
3.1 DML语句
DML(Data Manipulation Language)即数据操纵语言,为SQL分类之一。用户使用该语言可以对数据库进行操作,DML语句包括insert新增、update更新、delete删除、select查询。
此外还有DDL(Data Definition Language)数据定义语言和DCL(Data Control Language)数据控制语言
3.2 insert新增数据
3.2.1、增加一行数据
格式:insert [into] 表名[(列名,列名……)] values (元素,元素……)
概述:表中的方括号都可以省略,但是列名省略表示该表中的所有列名都要为之新增元素。元素对应前面的每个列名。
列:
--为员工表中姓名,年龄,性别新增元素insert employee(name,age,gender) values('小明',18,'男')
3.2.2、增加多行数据
格式:insert [into] 表名(列名,列名……) select values(元素,元素……) union select values(元素,元素……)
概念:UNION译为‘联合’,用于多行新增时的连接
--为员工表新增两行姓名、年龄、性别insert employee(name,age,gender) select values('小王',18,'男') unionselect values('小芳',18,'女')
3.3 UPDATE更新(修改)数据
格式:update 表名 set 列名=元素,列名=元素…… [where 条件]
概述:如果后面不加where条件,则指定列的每一行都会更改。
--将员工表的所有所在地更改为'中国大陆'update employee set country='中国大陆'--将员工表中小明年龄修改为20update employee set age=20 where name='小明'
3.4 DELETE删除数据
格式:delete from 表名 [where 条件]
概述:如果此处不加where则将整个表删除。
--删除整张表delete from mytabe--删除员工表中的小明delete from employee where name='小明'
3.5 SELECT查询表的数据
3.5.1 select概述
格式:select [指定列]或* from 表名 [where 条件] [group by 列名 having 条件] [order by [desc/asc]]
概述: *:表示查询所有
[where 条件]:不加则查询整张表指定列,或所有列
[group by 列名 having 条件]:用于分组,后面详解
[order by [desc/asc] ] :用于排序,后面详解
--查询整张表select * from employee--查询指定姓名列数据select name from employee--查询姓名为小王的数据select * from employee where name='小王'
3.5.2 distinct查询去重
如一张表中地址列同一地址名重复,而只想看有哪些的时候就可以用distinct.其主要功能就是过滤重复行。
注:必须放在查询字段的开头;只能在select语句中使用;不能与all同时使用,默认情况下,查询时返回的就是所有的结果
--查询表中的城市有哪些select distinct address from employee
3.5.3 as查询的列起别名
一般我们查询指定列的时候所输出的数据的列名都是我们之前在创建表时所定义的名称,但是在查询指定列后面加as或者空一格加上别名名称,再次输出时列名就变成了我们所起的别名
--给name和age起别名为姓名和年龄select name 姓名,age as 年龄 from employee
四、定制查询
4.1运算符
运算符实现运算功能,用来指定在一个或多个表达式中执行操作的符号,以产生新的结果。运算符一般分为算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串连接运算符和一元运算符
4.1.1算术运算符
运算符 | 含义 |
+ | 加法运算 |
– | 减法运算 |
* | 乘法运算 |
/ | 除法运算,返回商 |
% | 求余运算,返回余数 |
例:
--查询语句如下select UnitPrice,UnitPrice+1 加,UnitPrice-5 减,UnitPrice*2 乘,UnitPrice/3 除,UnitPrice%4 取余 from Goods
注:除数不可为0,否则报错
4.1.2比较运算符
比较运算符测试两个表达式是否相同。除了text、ntext或image数据类型的表达式外,比较运算符可以用于所有的表达式。比较运算符的结果是布尔数据类型true、false、unknown
Unknown
普通编程语言里的布尔型只有 true
和 false
两个值,这种逻辑体系被称为二值逻辑。而 SQL 语言里,除此之外还有第三个值 unknown
,因此这种逻辑体系被称为三值逻辑(three-valued logic)。
三个真值之间有下面这样的优先级顺序。
AND 的情况:false > unknown > true
OR 的情况:true > unknown > false
unknown是因关系数据库采用了 NULL 而被引入的,他不是“未知”的这个意思,而是“无意义”的这个意思。而null是指“未知”的意思。
注意:unknown不能像true或者false一样,直接在SQL中使用,比如where Tel=unknown 。
运算符 | 含义 |
= | 等于 |
或!= | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
< | 小于 |
> | 大于 |
is null | 判断是否为NULL |
is not null | 判断是否不为NULL |
4.1.3NULL
null不是值,null与数学运算符一起使用的结果永远是unknown
为什么对 NULL 使用比较谓词后得到的结果永远不可能为真呢?这是因为,NULL 既不是值也不是变量。NULL 只是一个表示“没有值”的标记,而比较谓词只适用于值。因此,对并非值的 NULL 使用比较谓词本来就是没有意义的。
常听到的“列的值为 NULL
” 、“NULL
值”这样的说法本身就是错误的。因为 NULL
不是值!(如果有人认为 NULL
是值,那么它是什么类型的值?关系数据库中存在的值必然属于某种类型,比如字符型或数值型等。所以,假如 NULL
是值,那么它就必须属于某种类型。)
消除 NULL 的具体方法,这里总结如下。
(1) 首先分析能不能设置默认值。
(2) 仅在无论如何都无法设置默认值时允许使用 NULL。
笔者认为,如果遵守这两条原则,那就足以避免 NULL 带来的各种问题,使系统开发能够更加顺利地进行。
另外,注意:要想 和 null 比较 只能用 is null
或者 is not null
,这样才会返回true或者false。另外永远记住一点,null和,=,这些放在一起结果永远是unknown,比如如 2=null,结果肯定是unknown,而unknown在三值逻辑中不是true也不是false
以上NULL的定论来自:https://www.cnblogs.com/idasheng/p/15425110.html