SQLServer复习笔记

2023-10-29

第一章 关系数据库基础

  1. 基本概念
  • 数据(Data):是描述事物的符号记录,是数据库中存储的基本对象
    数据的种类:数字、文字、图形、图象、声音、视频等
  • 数据库(Database):是长期存储在计算机内,有组织的、可共享的数据的集合
  • 数据库管理系统(DBMS):是使用户可以定义、创建和维护数据库以及提供数据库有限制访问的软件系统。负责对数据库的数据进行统一的管理和控制
  • 数据库系统(DBS):是采用数据库技术的计算机系统。一般由计算机软硬件系统、数据库、数据库管理系统及用户组成。本质上是一个用计算机存储数据的系统
  1. 数据模型三要素:
  • 数据结构
  • 数据的约束条件
  • 数据操作(增删改查)
  1. 数据模型:是对现实世界数据特征的抽象
    数据模型
  2. 关系模型是目前应用最广泛的数据库系统
  3. 关系数据模型三要素:
  • 数据结构:二维表
  • 数据约束:不说了
  • 数据操作:包括增(insert)删(delete)改(update)查(select),操作对象是集合
  1. 关系模型的数据完整性约束
  • 实体完整性:主键非空,不重复
  • 参照完整性:定义外键与主键之间的引用规则
  • 用户定义的完整性:字段类型、长度
  1. 外键一般符合:值为空或者等于锁应用的关系中的某个元祖的主键
  2. SQL(结构化查询语言)
    SQL

特别特别重要的(很可能考)
where和having的区别

  • where作用于基本表和视图
  • having作用于分组之后的数据

第二章 SQLServer基础

没有

第三章 数据库创建与管理

数据文件最大大小无限制:maxsize = unlimited
每次增加xxx:filegrowth = 2MB
文件组:filegroup GROUP2
添加新文件:alter database 数据库 add file
修改文件:alter database 数据库 modify file
添加新的日志文件:alter database 数据库 add log file
收缩数据库:dbcc shrinkfile(student_data1,4)
删除文件:alter database 数据库 remove file Students_data1

  1. 数据库基本分类
    数据库

  2. 数据文件: ‘.mdf’,’.ndf’

  3. 日志文件:’.ldf’

  4. 特别注意:数据文件和日志文件必须都有一个,次要数据文件可以有多个,日志文件也可以有多个

  5. 文件组只作用在数据文件上

  6. 创建数据库

    create database
    on primary --基本文件组
    (
    name = students_data1, --逻辑文件名
    filename = 'F:\Data\student_data1.mdf', --主数据文件
    size = 5MB, --初始大小
    maxsize = unlimited --最大大小无限制
    ), --如果有次要数据文件,这里必须加逗号
    (
    name = students_data2,
    filename = 'D:\Data\students_data2.ndf',
    size = 8MB,
    maxsize = 20MB,
    filegrowth = 2MB --每次增加xxx
    ) --不加逗号
    log on
    (
    name = students_log,
    filename = 'E:\log\students_log.ldf',
    size = 2MB,
    maxsize = 6MB,
    filegrowth = 10%
    ),
    filegroup GROUP2 --新的文件组
    ...
    
  7. 添加新的数据文件

    alter database 数据库
    add file
    (
    name = ...
    ....
    )
    
  8. 修改数据文件的初始大小

    alter database 数据库
    modify file
    (
    name = Students,
    size = 8MB
    )
    
  9. 添加新的日志文件

    alter database 数据库
    add log file
    (
    ...
    )
    
  10. 收缩数据库

    dbcc shrinkfile(student_data1,4)
    
  11. 删除文件

    alter database 数据库
    remove file Students_data1
    
  12. 创建文件组

    alter database Students
    add filegroup Group1
    
  13. 删除文件组

    alter database Students
    remove filegroup Group
    
  14. 将文件组设为默认文件组

    alter database Students
    modify filegroup Group default
    
  15. 删除数据库

    drop database Students
    
  16. 分离数据库

    exec sp_detach_db 'Students','true'
    
  17. 附加数据库

    create database Students
    on (filename = 'F:\Data\Students.mdf')
    for attach
    

第四章 SQL基础

  1. 数据类型
    数值类型
    数据类型 说明 存储空间
    bigint 从–263到263-1范围的整数 8字节
    int 从–231到231-1范围的整数 4字节
    smallint 从–215到215-1范围的整数 2字节
    tinyint 从0到255之间的整数 1字节
    近似数值数类型
    数据类型 说明 存储空间
    float[(n)] 存储从-1.79E+308到-2.23E-308,0以及2.23E-308到1.79E+308范围的浮点数 当1<=n<=24,占四字节,当25<=n<=53,占8字节,默认n=53
    real 存储从–3.40E + 38到3.40E + 38范围的浮点型数 4字节
    字符串类型
    字符串
    普通编码字符串类型
    数据类型 说明 存储空间
    char(n) 固定长度的普通编码字符串类型,n表示字符串的最大长度,取值范围为1~8000 n个字节。当实际字符串所需空间小于n时,系统自动在后边补空格
    varchar(n) 可变长度的字符串类型,n表示字符串的最大长度,取值范围为1~8000 字符数+2字节额外开销
    text 最多可存储232-1个字符 每个字符1字节
    统一字符编码字符串类型
    数据类型 说明 存储空间
    nchar(n) 固定长度的统一编码字符串类型,n表示字符串的最大长度,取值范围为1~4000 2n字节。当实际字符串所需空间小于2n时,系统自动在后边补空格
    nvarchar(n) 可变长度的统一编码字符串类型,n表示字符串的最大长度,取值范围为1~4000 2*字符数+2字节额外开销
    ntext 最多存储230-1个字符 每个字符2个字节
    日期时间类型
    数据类型 存储空间
    date 3字节
    time 3~5字节
    datetime 8字节
  2. 标识符
    • 常规标识符
      规则
      第一个字符:字母,_,@,#
      其它:字母,数字,$,_,@,#
      不能是保留字
      不能有空格
      字符数必须在1~128之间
    • 分隔标识符
      不符合标识符基本规则时用这个(一般不会出现,除非老板特殊要求)
      select * from "Black in Table Name"
      select * from [Black in Table Name]
      
    1. 变量
      局部变量:@变量名 用户使用
      全局变量:@@变量名 系统用于记录信息

第五章 架构与基本表

主键:primary key
取值不重复:unique
默认值:default ‘x’
取值范围:check(Sage>=15 and Sage<=45)
表级主键:primary key(Sno,Cno)
表级外键:foreign key(Sno) references Student(Sno)
自增:identity(1,1)

  1. 创建表
    create table SC(
    Sno char(7) not null,
    Cno char(6) not null,
    Grade tinyint,
    primary key (Sno,Cno),
    foreign key (Sno) references Student(Sno),
    foreign key (Cno) references Student(Cno)
    )
    
  2. 创建有计算列的表
    create table Test(
    low int,
    high int,
    myavg as (low+high)/2
    )
    
  3. 为已有表添加一个字段
    alter table 表名 add 列名 属性
    alter table SC add Type NCHAR(1) NULL
    
  4. 为已有字段添加取值范围
    alter table SC
    add check (type in ('必修','重修','选修'))
    
  5. 删除某字段
    alter table SC drop column 字段名
    
  6. 删除表
    drop table 表名
    

第六章 数据操作语言

distinct 去除重复值
top 几 with ties
字符匹配
_:任意单个字符
%:0个或者多个任意字符
[]:里边的任意一个
[^]:除了里边的
只有count能出现*,sum,avg只能操作数值类型字段
insert into 表名 values (xxx)
update 表名 set 列名 = xxx
delete from 表名 where …

  1. 查询年龄
    select Sname,year(getdate())-year(Birthdate) from Student
    
  2. 去掉重复值
    select distinct Sno from SC
    
  3. 在某个范围
    select Sno where Grade between 80 and 90
    
  4. 查询信息系,机械系的学生
    select Sname from Student where Dept in ('信息系','机械系')
    
  5. 字符串匹配
    select * from Student where Sname like '章%'
    
  6. escape 转义
    -- 感叹号后边的一个字符作为普通字符处理,不作为通配符处理
    select * from num where num like '%30!%%' escape '!' 
    
  7. 排序
    -- DESC是降序,默认是升序(ASC)
    select * from SC order by SCORE DESC
    
  8. 聚合函数
    count(*)
    count(distinct Sno) 去重统计
    sum(列名)
    avg(列名)
    max(列名)
    min(列名)
  9. 分组 一旦出现每xxx,一定会有分组
    select count(*) from SC group by CNO
    
    特别注意:分组之后只能返回分组对象和聚合函数
  10. 内联
    比如有两张表T1和T2
    T1:
    TNO TNUM
    001 one
    002 two
    T2:
    TNO TNAME
    001 la
    002 lala
    003 lalala
    如果运行下边的语句,将会把两张表合成一张
    select * from T1 join T2 on T1.TNO = T2.TNO
    
    TNO TNUM TNAME
    001 one la
    002 two lala
    然后就可以从里边找东西了
  11. 自连 :通过给表取别名实现
    比如找和张小明同系的学生
    select S2.Sname 
    from Student S1 join Student S2
    on S1.Dept = S2.Dept 
    where S1.Sname = '张小明' and S2.Sname != '张小明' --这句一定要记得加
    
  12. 外联:主表中的数据全部返回,从表中有的字段值为null
    没有选课的学生
    select * from Student left outer join SC 
    on Student.Sno = SC.Sno
    where SC.SNO is null
    
  13. top :一定要搭配order by子句
    select Top 3 with ties Sname from Student order by Grade desc
    
  14. 将查询结果保存到新表中
    select xxx into 新表名 from 表名
    
  15. 插入数据
    insert into 表名 values (xxx)
    insert into 表名(字段名) values (xxx)
    
  16. 更新数据
    update 表名 set 列名 = xxx
    
  17. 删除数据
    delete from 表名 where ...
    

第七章 高级查询

  1. 子查询
    通常有以下几种形式
    where 列名 [NOT] IN (子查询语句)
    where 列名 比较运算符 (子查询语句)
    where exists (子查询语句)
    
    例如:查询选了C004课程的所有考试中,成绩高于此课程平均成绩的学生的学号和成绩
    select SNO,SCORE from SC
    where Cno = 'C004' and 
    Grade > (select avg(Grade) from SC where Cno = 'C004')
    
  2. SOME和ALL
    当子查询返回一个结果集时,SOME表示符合子查询中的其中一个就行,ALL表示要符合子查询中的所有数据
    题目标志:有一次、全部
    例如:查询至少有一次成绩大于或等于90的学生的姓名、所修课程的课程号和成绩
    select Sname,Cno,Grade from Student S
    join SC on S.Sno = SC.Sno
    where S.Sno = SOME(
    select Sno from SC where Grade >=90
    )
    
  3. 上边的都是不相关子查询,相关子查询是两个select语句存在一定的交流
    如:查询每门课程考试成绩最高的两个学生的学号以及相应的课程号和成绩。不包括没考试的课程
    select Sno,Cno,Grade from SC SC1
    where Sno in(
    select top 2 with ties Sno from SC SC2
    where SC1.Cno = SC2.Cno
    order by Grade desc
    )
    and Grade is not null
    order by Cno ASC,Grade DESC
    
  4. exists
    存在则返回TRUE,不存在则返回FALSE
    如:查询选了C002课程的学生的姓名
    select Sname from Student
    where exists
    (
    select * from SC where Sno = Student.Sno and Cno = 'C002'
    )
    
  5. 查询的交差并
    select COL1 from T1
    union
    select COL3 from T2
    
    交:intersect
    差:except

第八章 索引

  1. 聚集索引和非聚集索引的区别
    数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引,相当于字典中拼音查询的。
    非聚集索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引,相当于字典中的偏旁字典。
  2. 创建聚集索引
    create clustered index Idx_Sname on Student(Sname)
    
  3. 创建唯一非聚集索引
    create unique index AK_UnitMeasure_Name
    on Production.UnitMeasure(Name)
    
  4. 删除索引
    drop index Idx_Sname on Student
    
  5. 例题
    在Teacher表的TNAME列上按升序和AGE列上按降序创建非聚集索引IND_TNO_AGE
    create index IND_TNO_AGE on Teacher(TNAME ASC,AGE DESC)
    
    为Course表在CNAME列上按升序创建唯一索引IND_CN。
    create unique index IND_CN on Course(CNAME ASC)
    
    索引根据存储结构分为聚集索引非聚集索引两类。
    索引在执行插入、修改、删除时节省时间? ×
    索引加快数据的查询效率? ×
    索引节省磁盘空间? ×
    在数据库中建立的索引越多越能提高操作效率? ×
    聚集索引一定是唯一索引? ×

第九章 视图

只有单表时才能进行增删改
有函数或者连接时不能进行增删改
透过视图的操作也就是对基本表做的操作

  1. 创建视图
    创建视图View_S,利用视图可以查询学生学号、姓名、性别和系别。
    create view View_S(SNO,SNAME,SEX,DEPT)
    as
    select SNO,SNAME,SEX,DEPT from Student
    
  2. 修改视图View_S,利用视图可以查询学生学号、姓名和系别。
    alter view View_S(SNO,SNAME,DEPT)
    as
    select SNO,SNAME,DEPT from Student
    
  3. 创建视图View_S_CS,通过视图只能对计算机系学生信息进行操作,其他系学生信息操作均非法。
    create view View_S_CS
    as
    select * from Student where DEPT = '计算机'
    with check option
    
  4. 删除视图
    drop view View_S
    

补充

  1. union
    union操作符用于合并两个或多个select语句的结果集
    union内部的select语句必须有相同数量的列,列也必须有相同的数据类型,同时,每条select语句中的列的顺序必须相同
  2. 全局变量(@@)是系统内部的变量,不能自定义
  3. 系统数据库不能分离
  4. 在SQL Server服务器上,存储过程是一组预先定义并编译的T-SQL语句
  5. 数据库中只存放视图的定义
  6. 各个连接的区别
    比如有表a,b
    a表
    x y z
    1 2 3
    2 3 4
    3 4 5
    b表
    x q w
    1 2 3
    2 3 4
    3 4 5
    4 5 6
    内联
    返回表 最多返回条数是条数最小的那张表的条数
    a.x y z b.x q w
    1 2 3 1 2 3
    2 3 4 2 3 4
    3 4 5 3 4 5
    外联
    返回条数是主表的条数,即主表的数据全部返回
    a left outer join b返回结果为
    a.x y z b.x q w
    1 2 3 1 2 3
    2 3 4 2 3 4
    3 4 5 3 4 5
    b left outer join a返回结果为
    b.x q w a.x y z
    1 2 3 1 2 3
    2 3 4 2 3 4
    3 4 5 3 4 5
    4 5 6 NULL NULL NULL
    自联
    如查询a表中和x=1的w相等的数据
    select from a a1 join a a2 on a1.x = a2.x
    a.1x a1.y a1.z a2.x a2.y a2.z
    1 2 3 1 2 3
    2 3 4 2 3 4
    3 4 5 3 4 5
    左边三列是数据源,右边三列是结果所在的位置,切记最后一定不要返回左边三列和右边三列完全相同的数据

课后习题答案:https://www.docin.com/p-1996215595.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLServer复习笔记 的相关文章

  • A Comprehensive Survey on Graph Neural Networks

    本文是对 A Comprehensive Survey on Graph Neural Networks 论文的一个翻译 主要针对文字部分 插图和表格不添加 需要请看原论文 图神经网络综述 摘要 1 引言 2 背景和定义 A 背景 B 定义
  • 解读R-FCN的position-sensitive score map

    R FCN的位置敏感分数图灵感来自Instance sensitive Fully Convolutional Networks这篇论文 该论文是针对FCN不能对同类型物体分割的缺点的改进 具体说明见下面 本论文的出发点 FCN可以用来做s
  • Anaconda cloud参考指令

    命令参考 另请参见 API参考 Anaconda客户端是Anaconda Cloud的命令行界面 CLI 可用于登录 注销 管理帐户 上传文件 生成访问令牌 查看令牌以及运行以下所示的其他任务 anaconda h 完整命令参考 anaco
  • VBA判断函数IsArray、IsDate、IsEmpty、IsEmpty、IsError等

    我给VBA的定义 VBA是个人小型自动化处理的有效工具 利用好了 可以大大提高自己的劳动效率 而且可以提高数据处理的准确度 我推出的VBA系列教程共九套和一部VBA汉英手册 现在已经全部完成 希望大家利用 学习 如果您只是一般的职场VBA需
  • ES6迭代器、set、map知识点

    1 迭代器 迭代器 Iterator 就是这样一种机制 它是一种接口 为各种不同的数据结构提供统一的访问机制 任何数据结构只要部署Iterator接口 就可以完成遍历操作 即依次处理该数据结构的所有成员 Iterator 的作用有三个 一是

随机推荐

  • FastAPI从入门到实战(3)——Hello World(安装与运行)

    本文详细记录FastAPI本地的安装和运行 都很简单 主要记录验证一些特性 安装FastAPI 安装就非常简单 只需要安装两个包就行 FastAPI pip install fastapi uvicorn 用于加载和提供应用程序的服务器 p
  • DOS网络启动盘

    DOS网络启动盘 这张从97年到现在我一直保留并维护的工具盘 也许平时用的机会不多 但总在关键时刻救急 它能帮你在无法通过光驱安装操作系统时 通过网络或USB移动盘把几百兆的Windows系统安装文件复制到本地硬盘来进行安装 当然还可以用它
  • 图像分类_PyTorch图像数据分类

    图像分类数据集中最常用的是手写数字识别数据集MNIST 但大部分模型在MNIST上的分类精度都超过了95 为了更直观地观察算法之间的差异 我们将使用一个图像内容更加复杂的数据集Fashion MNIST 这个数据集也比较小 只有几十M 没有
  • 数字后端各种Cell相关概念汇总

    数字后端各种Cell相关概念汇总 数字电路器件 反相器 逻辑门 触发器 锁存器 半加器 全加器 半减器 全减器 数字后端常见Cell相关名词 buffer repeater delay cell endcap cell tap cell d
  • 2018计算机四级网络工程师笔记,全国计算机四级网络工程师刷题笔记

    全国计算机四级网络工程师刷题笔记 操作系统原理部分 单选题 1 批处理 2 操作系统体系整体式结构 层次式结构 微内核 客户机 服务器 结构 主要部分 进程管理 存储管理 文件管理 作业管理 设备管理 3 内核状态监控程序 特权指令 输入输
  • Linux配置浮动IP

    在高可用集群环境中 一般都需要使用浮动IP来实现web高可用 High Availability 浮动IP的概念以及为什么需要浮动IP请参考 https blog csdn net readiay article details 53538
  • jdbc:mysql://localhost:3306/test是什么?jdbc代表什么?

    jdbc mysql 是指JDBC连接方式 localhost 是指你的本机IP地址 在本地等同于127 0 0 1 3306 数据库所使用的端口号 默认3306 test 就是你要连接的数据库的地址 后面如果为jdbc test则同理 J
  • 神经网络学习小记录66——Keras版 Vision Transformer(VIT)模型的复现详解

    神经网络学习小记录66 Keras版 Vision Transformer VIT 模型的复现详解 学习前言 什么是Vision Transformer VIT 代码下载 Vision Transforme的实现思路 一 整体结构解析 二
  • 索引-mysql详解(三)

    上篇文章说了 mysql可以指定行格式 compact dynamic 他结构有变长字段长度列表 null值 头部和真实数据存储 compact真实数据会存一定量的页 后面指向页的页码 dynamic全部存的页码 char会根据字符集来变换
  • Qt之自定义提示框(类似QMessageBox)

    Qt中经常会用到提示框 用于交互操作 QMessageBox是被大多数人用到的 用起来是很方便 但是控件类型 大小 布局 样式 往往不是开发者想要的 如果使用一套不经过样式处理的界面交给用户 那么结果可想而知 简单举个例子吧 QMessag
  • 【C语言】 getchar()与EOF的疑难杂症

    C语言程序设计 大师写的书本 需要字斟句酌 在接触到getchar 和EOF 文件结束符 感觉到疑惑 特此记录下来 一 getchar 总结如下 1 getchar是以行为单位进行存取的 当调用getchar函数读取输入时 只有当输入字符为
  • Windows 2008 R2配置IIS环境搭建网站(一)

    目录 IIS服务器的基本概念 安装IIS 添加配置站点 权限设置 网站的停止与启动 高级设置 http重定向 错误页 虚拟目录 结合DNS配置带有域名访问的网站 IIS服务器的基本概念 IIS即英特网信息服务器 Internet Infor
  • linux简答题34道

    Linux 系统是什么样的系统 由哪几部分组成 分别属于哪种模式 Linux 系统是一种金字塔模型的系统 由用户 标准实用程序 标准库 Linux操作系统 硬件组成 前三者属于用户模式 Linux操作系统属于内核模式 Linux 有几种不同
  • c 调用java程序,从C ++调用Java必须使用什么类和方法?

    I m currently working with Djinni and would like to call Java methods from C I have the following interface description
  • Docker学习(二)——编写shell脚本

    TOC 一 编写登录欢迎脚本welcome sh 要求 在用户目录 root下编写存储welcome sh脚本 赋予执行权限 并在 bash profile中调用该脚本 使得在用户登录时显示欢迎信息 uname a 查看内核 操作系统 CP
  • C++创建单链表,完整代码

    前端时间搜了下创建单链表 发现全是些片段 创完我都不知道如何声明 气煞我也 下面是我自己的代码 包括对单链表的增删查改操作 以及应用实例 include
  • 视觉目标检测和识别之过去,现在及可能(2017.06.28)

    计算机视觉中目标检测 跟踪 识别是最基本的几个task 尤其又以检测最为重要和基础 同时基本上所有的检测任务都需要在给出物体的bounding box之后 给出物体的类别 也就是给识别物体 所以文章中不区分检测和识别任务 笔者从事计算机视觉
  • JDBC三步连接MySql

    一 导入依赖文件 编写配置文件 在依赖文件中添加JDBC的依赖文件 如果是Maven项目也可以在Pom xml中导入依赖 文件下载 https pan baidu com s 1ktMMhzG8cHKOa 2VpcqvrQ pwd 882i
  • Ansible-playbook-roles安装lnmp

    使用roles安装lnmp nginx 1 准备四台主机 192 168 142 10 192 168 142 20 192 168 142 30 192 168 142 40 2 10作为ansible管理端 首先ssh连接剩下三台主机
  • SQLServer复习笔记

    目录 第一章 关系数据库基础 第二章 SQLServer基础 第三章 数据库创建与管理 第四章 SQL基础 第五章 架构与基本表 第六章 数据操作语言 第七章 高级查询 第八章 索引 第九章 视图 补充 第一章 关系数据库基础 基本概念 数