【数据库】SQL Server知识点总结

文章目录

  • 【数据库】SQL Server知识点总结
    • 1. 数据库系统概述
      • 1.1数据库技术的产生、发展
      • 1.2数据库系统的组成
      • 1.3数据库系统的内部体系结构
      • 1.4数据库系统的外部体系结构
      • 1.5数据模型
    • 2.关系数据库
      • 2.1关系模式
      • 2.2关系的码与关系的完整性
      • 2.3关系的完整性
      • 2.4关系代数
    • 3.关系数据库标准语言——SQL
      • 3.1SQL的基本概念
      • 3.2数据库的创建和使用
        • 3.2.1创建数据库
        • 3.2.2修改数据库
        • 3.2.3删除用户数据库
      • 3.3数据表的创建和使用
        • 3.3.1数据类型
        • 3.3.2创建数据表
        • 3.3.3定义数据表的约束
        • 3.3.4修改数据表
        • 3.3.5删除基本表
      • 3.4单表的数据查询
        • 3.4.1无条件查询
        • 3.4.2条件查询
        • 3.4.3常用聚合函数
        • 3.4.4分组查询
        • 3.4.5查询结果的排序
      • 3.5多表的连接查询
        • 3.5.1内连接查询
        • 3.5.2外连接查询
        • 3.5.3交叉查询
      • 3.6子查询
        • 3.6.1普通子查询
        • 3.6.2相关子查询
        • 3.6.3其他类型查询
      • 3.7数据表中数据的操纵
        • 3.7.1添加数据到数据表
        • 3.7.2修改数据表中的数据
        • 3,7,3删除数据
  • **算了,后面不想写了。。。**

1. 数据库系统概述

1.1数据库技术的产生、发展

数据处理的中心问题是数据管理,数据管理经历了人工管理、文件系统和数据库系统三个阶段。

各阶段有如下特点

  • 人工管理阶段:(1)数据没有专门的存取设备 (2)数据没有专门的管理软件 (3)数据不共享 (4)数据不具有独立性。
  • 文件系统阶段:(1)数据以文件形式长期保存 (2)由文件系统管理数据 (3)程序和数据间有一定的独立性 (4)文件的形式已经多样化 (5)数据具有一定的共享性。
  • 数据库系统阶段:(1)结构化的数据及其联系的集合 (2)数据共享性高、冗余度低 (3)数据独立性高 (4)有统一的数据管理和控制功能 (4个控制功能:①数据的安全性控制 ②数据的完整性控制 ③并发控制 ④数据恢复)

1.2数据库系统的组成

数据库系统主要由数据库、数据库用户、计算机硬件系统和计算机软件系统等几部分组成

数据库 :是存储在计算机内、由组织的、可共享的数据和数据对象的集合。有集成性和共享性的特点。

数据库用户 :用户是指使用数据库的人,包括第一类用户(即最终用户)、第二类用户(即应用程序员)、第三类用户(即数据库管理员)。

软件系统 : 主要包括操作系统(OS)、数据库管理系统(DBMS)及应用开发工具和应用系统等。DBMS是数据库系统的核心软件。

硬件系统 : 指存储和运行数据库系统的硬件设备,包括CPU、内存、大容量的存储设备、输入输出设备和外部设备。

1.3数据库系统的内部体系结构

数据库系统内部的体系结构从逻辑上分为外模式、模式、内模式三级抽象模式结构和二级映像功能。

(1)模式:也称概念模式,是全体数据的逻辑结构的描述,一个数据库只有一个模式。

(2)外模式:也称子模式或用户模式,是部分数据逻辑结构的描述,外模式一般是模式的子集,一个数据库可以有多个外模式。

(3) 内模式 :也称存储模式或物理模式,是对数据库存储结构的描述,一个数据库只能有一个内模式。

DBMS在三级模式之间提供了二级映像功能,保证了数据库系统的数据独立性,即逻辑独立性和物理独立性

(1)外模式 / 模式映像:数据库的同一模式可以有任意多个外模式,对于每一个外模式,都存在一个外模式 / 模式映像,确定了数据的局部逻辑结构与全局逻辑结构的对应关系。外模式 / 模式映像保证了数据与程序间的逻辑独立性。

(2)模式 / 内模式映像:数据库中的模式和内模式都只有一个,所以模式 / 内模式映像是唯一的,确定了数据的全局逻辑结构和存储结构之间的关系。模式 / 内模式映像保证了数据的物理独立性。

1.4数据库系统的外部体系结构

  1. 单用户结构的数据库系统 2.主从式结构的数据库系统 3.分布式结构的数据库系统 4.客户机 / 服务器结构的数据库系统(C/S) 5.浏览器 / 服务器结构的数据库系统(B/S)

1.5数据模型

数据模型分为以下三类:

  • 第一类是概念模型,是对现实世界的第一级抽象。
  • 第二类是逻辑模型(或称数据模型),是对现实世界的第二级抽象,逻辑模型主要包括层次模型、网状模型、关系模型和面向对象模型等。
  • 第三类模型是物理模型,是对数据的最底层抽象。

数据模型主要由数据结构、数据操作和数据的完整性约束三部分组成

2.关系数据库

2.1关系模式

关系模式的表示R(U)或R(A1,A2,…An),R为关系名,U为属性名的集合;A1,A2,…An为各属性名

2.2关系的码与关系的完整性

候选码:能唯一标识关系中元组的一个属性或属性集,称为候选码或候选键。

主码:如果一个关系中有多个候选码,可以从中选择一个作为操作变量,被选用的候选码称为主码。

主属性与非主属性:主属性:包含在主码中的各个属性称为主属性。

​ 非主属性:不包含在任何候选码中的属性称为非主属性。

外码(外部关系键):如果R2的一个或一组属性X不是R2的主码,而是另一个关系R1的主码,则该属性或属性组X称为R2的外码。并称R2为参照关系,R1为被参照关系。

2.3关系的完整性

  1. 实体完整性:实体完整性是指主码的值不能为空或部分为空。
  2. 参照完整性:如果R2的外码X与关系R1的主码相符,则X的每个值或者等于R1中主码的某一个值或者取空值。
  3. 用户自定义的完整性:用户自定义完整性是针对某一具体关系数据库的约束条件。

2.4关系代数

传统的集合运算:并(∪)、交(∩)、差(—)、广义笛卡儿积

专门的关系运算:选取、投影、连接、除法

3.关系数据库标准语言——SQL

SQL是结构化查询语言,是关系型数据库的标准语言,其功能包括数据查询(select)、数据定义(create、drop、alter)、数据操纵(insert、update、delete)和数据控制(grant、revoke)。

3.1SQL的基本概念

1.基本表:一个关系对应一个基本表。

2.视图:视图是从一个或多个基本表导出的表,是一个虚表。数据库只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。

SQL支持数据库的三级模式结构,外模式对应视图和部分基本表,模式对应基本表,内模式对应存储文件。

3.2数据库的创建和使用

创建一个数据库时,将至少产生两个文件:数据文件和事务日志文件。其中,数据文件又分为主数据文件,用来存储数据库的启动信息和部分或全部数据(扩展名为.mdf)和次数据文件,用来存储主数据文件未存储的其他数据(扩展名为.ndf)。事务日志文件,保存用于恢复数据库的日志信息(扩展名为.ldf)。

3.2.1创建数据库

create database 数据库名称
on
(name = 数据文件名,filename = '路径+数据文件名',size = 数据文件初始大小,maxsize = 数据文件最大容量,filegrowth = 数据文件自动增长容量
)
log on
(name = 日志文件逻辑名称,filename = '路径+日志文件名',size = 日志文件初始大小,maxsize = 日志文件最大容量,filegrowth = 日志文件自动增长容量
)例如:
create database Study
on
(name = Study,filename = 'D:\Study.mdf',size = 5,maxsize = 50,filegrowth = 5
)
log on
(name = Study_log,filename = 'D:\Study_log.ldf',size = 5,maxsize = 50,filegrowth = 5
)

注意:(1)如果只使用第一条语句“create database 数据库名称”,系统会按照默认属性创建数据库。

​ (2)filegrowth可以是具体的容量,也可以是unlimited,表示无增长容量限制。

​ (3)用()括起来的语句,除了最后一个命令外,其余的命令都要用逗号作为分隔符。

3.2.2修改数据库

//像数据库中添加数据文件
alter database 数据库名称
add file
(name = 数据文件名,filename = '路径+数据文件名',size = 数据文件初始大小,maxsize = 数据文件最大容量,filegrowth = 数据文件自动增长容量
)//向数据库中添加日志文件
alter database 数据库名称
add log file
(name = 日志文件逻辑名称,filename = '路径+日志文件名',size = 日志文件初始大小,maxsize = 日志文件最大容量,filegrowth = 日志文件自动增长容量
)//从数据库中删除逻辑文件,并删除物理文件
alter database 数据库名称
remove file 文件逻辑名称//指定要修改的文件
alter database 数据库名称
modify file
(name = 要修改的逻辑文件名,修改的内容(如:filegrowth = 20)
)

3.2.3删除用户数据库

drop database 数据库名称

3.3数据表的创建和使用

3.3.1数据类型

常用的数据类型有整数型(bigint、int、smallint、tinyint、bit),数值型(numeric、decimal、float、real),货币型(money、smallmoney),日期型(datetime、smalldatetime),字符型(char、varchar、nchar、nvarchar、text、ntext)等

3.3.2创建数据表

create table 表名(列名 数据类型)
例如:
create table Student
(s_no char(6),class_no char(6),s_name varchar(10),s_sex char(2) default '男',s_birthday datetime
)

default为默认值,当该字段未输入数据时,以该默认值自动填入字段。

3.3.3定义数据表的约束

约束分为列约束和表约束,列约束是对某一个特定列的约束,包含在列定义中。表约束不包含在列约束中,通常用于对多个列一起进行约束。

完整性约束的基本语法格式为:constraint 约束名 约束类型,其中约束名可省略,系统会指定一个名称。

在SQL Server中可以定义5种完整性约束

  1. NULL/NOT NULL
create table Student
(s_no char(6) constraint sno not null,age int
)
也可省略名称,如下:
create table Student
(s_no char(6) not null,age int
)

有了NOT NULL约束,当s_no为空时,系统会给出错误提示。

  1. UNIQUE约束(唯一约束)
create table Student
(s_no char(6) unique,class_no char(6)
)
unique也可用于表约束,如下:
create table Student
(s_no char(6),class_no char(6),sex char(2),constraint s_uniq unique(s_no,sex)
)

unique约束用于指明基本表在某一列或多个列的组合上的取值必须唯一,唯一约束可以为NULL,但为了保证唯一性,只能有一个NULL值。

  1. PRIMARY KEY约束(主键约束)
create table Student
(s_no char(6) primary key,class_no char(6),s_name varchar(10),
)
primary key也可用于表约束,如下:
create table Student
(s_no char(6),class_no char(6),s_name varchar(10),primary key(s_no,s_name)
)

primary key约束用于定义基本表的主键,起到唯一标识的作用,其值不能为NULL,也不能重复。

  1. FOREIGN KEY(外键约束)
//主表
create table S
(class_no char(6) primary key
)//从表
create table Student
(s_no char(6),class_no char(6) foreign key references S(class_no),s_name varchar(10),
)

FOREIGN KEY约束指定某一列或几列作为外部键,其中包含外部键的表称为从表,包含外部键所引用的主键的表称为主表。

  1. CHECK约束
create table Student
(sex char(2) check(sex = '男' or sex = '女') default '男',age int check(age between 20 and 25)
)

CHECK约束用来检查字段值所允许的范围。

3.3.4修改数据表

(1)ADD方式:用于增加新列和完整性约束

//向Student中增加新列name和address
alter table Student
add
name char(6),
address char(20)

(2)ALTER方式:用于修改某些列

//将Student表中的name列加宽到10个字符
alter table Student
alter column
name char(10) 

(3)DROP方式:用于删除完整性约束

alter table Student
drop constraint 约束名

3.3.5删除基本表

drop table 表名

3.4单表的数据查询

创建一个基本表,如下:

create table Student
(s_no char(6) primary key,class_no char(6) not null,s_name varchar(10) not null,s_sex char(2) check(s_sex = '男' or s_sex = '女'),s_birthday datetime
)
s_no class_no s_name s_sex s_birthday99120
991201 js0001 徐辉 1978-08-01 00:00:00.000
991101 js0002 王一山 1980-12-04 00:00:00.000
991104 js0002 牛莉 1981-06-09 00:00:00.000
002101 xx0001 李丽丽 1981-09-19 00:00:00.000
991102 xx0001 李王 1980-09-23 00:00:00.000

3.4.1无条件查询

格式为:select 列名 from 表名

select s_no,class_no,s_name,s_sex,s_birthday
from Student
或
select *
from Student

用 * 表示Student表的全部列名,而不必逐一列出

select distinct s_no,class_no as c_s
from Student

distinct 会消去重复行;as可以为查询结果的列名重新命名

3.4.2条件查询

格式为:select 列名 from 表名 where 条件

以下是条件查询中常用的几种比较运算符

  1. 比较大小(包含=、>=、<=、<、>、<>、!=)
//查询出生日期在1980年以后的学生的学号
select s_no
from Student
where s_birthday > '1980-01-01'//查询所有男同学,要求显示其学号s_no、姓名s_name、出生日期s_birthday
select s_no,s_name,s_birthday
from Student
where s_sex = '男'
  1. 多重条件(包含AND、OR、NOT)
//查询所有出生日期在“1980-01-01”前的女同学,要求显示其学号s_no、姓名s_name、性别s_sex
select s_no,s_name,s_sex
from Student
where s_birthday < '1980-01-01' and s_sex = '女'
  1. 确定范围(BETWEEN…AND)
//查询出生日期在1980-1-1和1982-1-1之间的学生的姓名和出生日期
select s_name,s_birthday
from Student
where s_birthday between '1980-1-1' and '1982-1-1' 
  1. 确定集合(IN)
//查询班号为js0001和js0002的学生的姓名和班号
select s_name,class_no
from Student
where class_no in('js0001','js0002')
此语句也可用OR实现
select s_name,class_no
from Student
where class_no = 'js0001' or class_no = 'js0002'
  1. 字符匹配(LIKE)
//查询所有姓“李”的男同学,要求显示其学号s_no、姓名s_name、性别s_sex、出生日期s_birthday
select s_no,s_name,s_sex,s_birthday
from Student
where s_sex = '男' and s_name like '李%' //查询所有姓名中含有“一”字的同学,要求显示其学号s_no、姓名s_name。
select s_no,s_name
from Student
where s_name like '%一%'

%代表0个或多个字符;_(下划线)代表一个字符

  1. 空值(IS NULL)
//查询出生日期为空的学生姓名
select s_name
from Student
where s_birthday is null

is null不能写成= null

3.4.3常用聚合函数

AVG(按列计算平均值)、SUM(按列计算值的总和)、MAX(求一列中的最大值)、MIN(求一列中的最小值)、COUNT(按列值统计个数)、COUNT(*)用来统计元组的个数,不消除重复行。

//查询有多少个班级
select count(distinct class_no) as classnum
from Student    

distinct 表示消除重复行,as为查询的每一项内容取一个别名,否则查询结果中就不显示列名

3.4.4分组查询

GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。

HAVING子句和WHERE子句一样是条件筛选,不同的是,WHERE子句是作用于基本表或视图,选出满足条件的元组,而HAVING子句是作用于组,选择满足条件的组。其顺序是WHERE 、GROUP BY、HAVING。

select count(s_no) as s_num
from Student
group by class_no
having(count(s_no) >= 2)

3.4.5查询结果的排序

ORDER BY子句可以为查询结果排序,DESC为降序,ASC为升序,默认时为升序。

select s_no
from Student
order by s_no asc

3.5多表的连接查询

inner join(内连接):显示符合条件的记录。

left outer join(左外连接):显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行以NULL显示。

right outer join(右外连接):显示符合条件的数据行以及右边表中不符合条件的数据行,此时左边数据行以NULL显示。

full outer join(全外连接):显示符合条件的数据行以及左边表和右边表中不符合条件的数据行,此时缺乏数据的数据行会以NULL显示。

cross join(交叉查询):将一个表中的每一个记录和另一个表中的每个记录匹配成新的数据行。

创建一个数据表如下:

create table Choice
(s_no char(6),course_no char(5),score numeric(6,1)
)
s_no course_no score
991104 01001 78.0
991201 01001 67.0
991101 01002 90.0
991102 01002 58.0

3.5.1内连接查询

//查询所有同学的选课及成绩情况,要求显示学生的学号s_no,姓名s_name,课程号course_no和课程的成绩score
//隐式内连接查询
select Student.s_no,s_name,course_no,score
from Student,Choice
where Student.s_no = Choice.s_no //显示内连接查询
select Student.s_no,s_name,course_no,score
from Student inner join Choice
on Student.s_no = Choice.s_no

3.5.2外连接查询

外部链接分为左外部连接和右外部连接两种。以主表所在的方向区分外部链接,主表在左边,则为左外部连接;主表在右边,则为右外部连接。

//查询所有同学情况,要求显示学生的学号s_no,姓名s_name,成绩score
select Student.s_no,s_name,score
from Student left outer join Choice
on Student.s_no = Choice.s_no

3.5.3交叉查询

select *
from Student cross join Choice

3.6子查询

3.6.1普通子查询

先执行子查询,然后把子查询的结果作为父查询的查询条件的值。

(1)返回一个值的普通子查询

当子查询的返回值只有一个时,可以使用比较运算符(= 、>、<、!=、>=、<=)将父查询和子查询连接起来。

//查询和王一山是同一班级的同学的姓名(使用子查询)
select s_name
from Student
where class_no = (select class_nofrom Studentwhere s_name = '王一山')

(2)返回一组值的普通子查询

当子查询的返回值不是一个值,而是一组值的时候,不能用比较运算符,而应使用ANY或ALL或IN。

//查询教授课程号为01001的教师姓名
select s_name
from Student
where s_no = any( select s_nofrom Choicewhere course_no = '01001')

= ANY等价与IN;NOT IN等价于<>ALL;>ALL等价于>MAX( );<ALL等价于<MIN( );>ANY登记于>MIN( );<ANY等价于<MAX( )。

3.6.2相关子查询

首先选取父查询表中的第一行记录,内部的子查询利用此行中相关的属性值进行查询,然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则把该行放入父查询的查询结果集合中.

3.6.3其他类型查询

(1)集合运算查询(union)

(2)存储查询结果到表中(select…into)

3.7数据表中数据的操纵

3.7.1添加数据到数据表

insert into 表名(列名)

values(值)

3.7.2修改数据表中的数据

updata 表名

set 列名 = 表达式

where 条件

可用子查询选择要修改的行。

3,7,3删除数据

delete

from 表名

where 条件

可用子查询选择要修改的行。

算了,后面不想写了。。。

【数据库】SQL Server知识点总结相关推荐

  1. mysql union all sum_[数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失

    [数据库]SQL Server UNION ALL 结果 SUM函数造成精度丢失 0 2020-08-03 18:00:30 SQL Server 数据类型 使用场景: 在进行多维度汇总数据时,需要将 ...

  2. NickLee.FortuneBase数据库sql server版本系统配置说明

    最近在51aspx.com上面发布了NickLee.FortuneBase数据库sql server版本,不少朋友对此源码比较感兴趣,针对51aspx上的一些朋友的问题,在这里做一些说明.      ...

  3. NickLee.FortuneBase数据库sql server版工具篇

    在51aspx上面发布了NickLee.FortuneBase数据库sql server版后,很多朋友是第一次接触到,尤其是一些新手朋友,对于系统框架的使用,环境的配置,页面的生成等等存在着一些疑问, ...

  4. 2010数据库SQL Server 盘点

    让我们一起来盘点一下2010数据库SQL Server 发布了那些给力的新品. 1. 微软发布SQL Server 2008 R2 微软公司于2010年4月21日宣布推出Microsoft SQL S ...

  5. 数据库sql server 2008安装。

    数据库sql server 2008安装     当然你也可以安装sql2005或根据情况安装更低的版本或只安装access,这根据你所要使用的数据库而定.这里我带领大家部署最新的架构,当然要使用sq ...

  6. 数据库SQL Server 如何将数据库表名等前缀转换成dbo

    数据库SQL Server 如何将数据库表名前缀,框架名前缀,视图前缀,存储过程前缀转换成dbo exec sp_msforeachtable 'sp_changeobjectowner ''?'', ...

  7. 数据库SQL server mangement studio服务器名称是什么

    数据库SQL server mangement studio服务器名称是什么怎么填 1 点击服务器名称最右边的<向下箭头> 2 点击<浏览更多> 3 点击(双击或点前面的加号展 ...

  8. ## **#安装数据库SQL Server 2008R2 时,提示安装或配置microsoft.net framework 3.5 sp1**

    #安装数据库SQL Server 2008R2 时,提示安装或配置microsoft.net framework 3.5 sp1 安装数据库时,总是提示你安装或配置Microsoft.netframe ...

  9. 数据库sql server 2008 r2 RTM版本升级到sql server 2012 r2

    (数据库sql server 2008 r2 RTM版本升级到2012) 1.先介绍sql 2008数据库的几个版本 10.00.1600其实就是SQL 2008 10.50.1600其实就是SQL ...

最新文章

  1. 关于分页的解决方案收集
  2. iMeta期刊推特官方帐号@iMetaJournal上线
  3. 软件使用说明书模板_想要快速定制表单模板?请收下这份浩辰3D设计攻略
  4. java 中while编译之后_从APK反编译的Java-while循环什么也不做
  5. java集合根据值排序_Java 8:对集合中的值进行排序
  6. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
  7. C# WebService发布 未能创建类型 问题
  8. Vue3.0 + Ts 项目使用element-plus 自动按需导入 使用v-loading报错
  9. matlab可以用python代替吗_Python 会不会替代 MATLAB
  10. Linux下安装Scala
  11. mbot机器人自动超声波模式程序_测评 | mBot机器人秒变编程达人
  12. 5.郝斌C语言笔记——运算符
  13. 高通平台 LCD 的 LK部分代码解析
  14. Keras框架使用Vnet2d模型对遥感图像语义分割
  15. 大数据分析:将大数据转化为巨额资金 第2章和第3章
  16. 外星人笔记本计算机在哪里,笔记本电脑没声音,教您外星人笔记本没声音如何解决...
  17. MFC 隐藏/显示鼠标图标
  18. flash3D引擎对比分析
  19. java.awt.Color 颜色代码对照表
  20. 人生感慨,神马都是浮云

热门文章

  1. Unity学习笔记——坦克大战敌人AI
  2. Shiro RememberMe反序列化漏洞复现(Shiro-550)
  3. 《微服务设计原理与架构》书籍知识点总结
  4. IAP-应用内购买(部分)
  5. 极坐标t1t2几何意义_参数方程与极坐标高考理科数学考点解析
  6. 在加入ALL函数后,CALCULATE函数内外筛选器的交互过程
  7. 项目之相对路径、绝对路径, 路径问题
  8. html a标签字体间距,html之a标签
  9. 起飞的 python!!!
  10. Unity3d-粒子光环特效