该笔记的所观看的视频为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

查询基础

查询的过程

image-20221014190839018

树立思想

  1. 除了关注结果,还需要关注性能
  2. 随时准备应对错误、排查原因

SELECT语法定义

SELECT语句是SQL查询中最核心的语句。其呈现一种嵌套的形态,各级语法元素层层展开:

image-20221015171333331

问题一:表示三种可能 整个表达式不出现、AC、BC

问题二:最简形式即SELECT <select_list>

<select_list>可以让服务器运行的一个运算,例如SELECT 100+100则会让服务器运行100 + 100这个运算,然后返回运算后的结果到客户端:

image-20221016013805527

我们在这个运算中,也可以加入设定自变量,通过DECLARE @变量名 数据类型 = 初始值可以声明一个变量。

问题三:在语法定义中,会出现一个套一个的操作,例如:

image-20221016025343088

这种属于是直接的套娃,还有一种是间接的套娃:

image-20221016025618921

<table_source>表示的是一张“源表格”,“源表格”除了数据库原生的表格,还可以将SELECT语句查询的结果作为一个“源表格”,提供在<table_source>中使用。我们使用AS关键词可以声明一个新的“源表格”:

image-20221016030218768

这种嵌套的方式,可以称之为递归。在SELECT语句的定义中是存在递归的解释的。

SELECT具体使用

From子句基础用法

From涉及到“数据从何而来”的问题。

From子句最重要的部分是<table_source>,即数据源,一个From子句可以带有多个<table_source>,多个可以产生正交组合。正交组合就是将两个表的数据取出来进行两两组合(笛卡尔乘积)。

<table_source>也具有非常丰富的展开,这里暂时仅解释两个基础的用法

image-20221017231151461

<joined_table><pivoted_table>也是非常重要的用法,这四个用法,是From最重要四个用法。

table_or_view_name

table的概念:

表并不是我们看见的执行结果所出现的“表格”,“表格”是对表的抽象逻辑的具体化。

  1. 表是数据库存储数据的地方,而且所有的数据都是存储在表中。

  2. 在表里面,是以行和列的逻辑进行存储的,行是表里"唯一"的一条数据记录,列是表里所有记录某一个字段的所有记录

    行的"唯一性"由主键来保证,当我们在设计表的时候,我们需要通过某行某列的组合保证行的唯一性。

视图view的概念:

  1. 视图是一张由查询query定义出来的虚拟表virtual table
  2. 可以将其视作查看一组数据的时候的过滤器filter

derived_table

  1. derived_table是来自于数据库的一个子查询
  2. 其用于作为其他查询的数据输入
  3. derived_tableview可以相互转换,当derived_table比较常用于作为其他查询的数据输入的时候,我们可以将其固化为一个view