SQL Server笔记(1)
该笔记的所观看的视频为Timothy Liu的"SQL速通"
所使用的数据库为微软官方提供的学习用数据库:AdventureWorks sample databases - SQL Server | Microsoft Learn
基础概念
-
数据库管理系统 Database Management System DBMS
-
DBMS客户端 Client/Server C/S架构
客户端:与数据库管理系统交互的程序,分为两种图形和命令行,而SQL Server的客户端就是SQL Server Management Studio SSMS
服务器:正在运行的数据库管理系统,一个服务器可以为多个客户端提供服务
-
数据库:真正存放数据的地方;数据的存储结构针对速度与安全性进行了优化
数据库的类型有多种,如关系型数据库、文档型数据库等,而SQL Server就是一种关系型数据库,关系型数据库是建立在关系模型基础上的数据库,常用在对数据的完整性要求比较高的场景,比如银行系统、销售系统等。文档型数据库是一种非关系型数据库,数据作为单条记录保存在数据库,主要应用在大数据处理、应用与分析方面,比如购物应用与页面的广告展示记录系统等。关系型数据库与文档型数据库并不是相对立的,而是互补而成的,关系型数据库存放经过处理后的文档型数据库,而文档型数据库可以存大量未经处理的数据。
-
查询(query)
英文 中文 C:Create 增 R:Read 查 U:Update 改 D:Delete 删
查询基础
查询的过程
树立思想
- 除了关注结果,还需要关注性能
- 随时准备应对错误、排查原因
SELECT语法定义
SELECT语句是SQL查询中最核心的语句。其呈现一种嵌套的形态,各级语法元素层层展开:
问题一:表示三种可能 整个表达式不出现、AC、BC
问题二:最简形式即SELECT <select_list>
<select_list>
可以让服务器运行的一个运算,例如SELECT 100+100
则会让服务器运行100 + 100
这个运算,然后返回运算后的结果到客户端:
我们在这个运算中,也可以加入设定自变量,通过DECLARE @变量名 数据类型 = 初始值
可以声明一个变量。
问题三:在语法定义中,会出现一个套一个的操作,例如:
这种属于是直接的套娃,还有一种是间接的套娃:
<table_source>
表示的是一张“源表格”,“源表格”除了数据库原生的表格,还可以将SELECT语句
查询的结果作为一个“源表格”,提供在<table_source>
中使用。我们使用AS
关键词可以声明一个新的“源表格”:
这种嵌套的方式,可以称之为递归。在SELECT语句
的定义中是存在递归的解释的。
SELECT具体使用
From子句基础用法
From涉及到“数据从何而来”的问题。
From子句最重要的部分是<table_source>
,即数据源,一个From子句可以带有多个<table_source>
,多个可以产生正交组合。正交组合就是将两个表的数据取出来进行两两组合(笛卡尔乘积)。
<table_source>
也具有非常丰富的展开,这里暂时仅解释两个基础的用法
<joined_table>
与<pivoted_table>
也是非常重要的用法,这四个用法,是From最重要四个用法。
table_or_view_name
表table
的概念:
表并不是我们看见的执行结果所出现的“表格”,“表格”是对表的抽象逻辑的具体化。
-
表是数据库存储数据的地方,而且所有的数据都是存储在表中。
-
在表里面,是以行和列的逻辑进行存储的,行是表里"唯一"的一条数据记录,列是表里所有记录某一个字段的所有记录
行的"唯一性"由主键来保证,当我们在设计表的时候,我们需要通过某行某列的组合保证行的唯一性。
视图view
的概念:
- 视图是一张由查询query定义出来的虚拟表virtual table
- 可以将其视作查看一组数据的时候的过滤器filter
derived_table
derived_table
是来自于数据库的一个子查询- 其用于作为其他查询的数据输入
derived_table
与view
可以相互转换,当derived_table
比较常用于作为其他查询的数据输入的时候,我们可以将其固化为一个view