T-SQL基础教程Day1

发布时间 2023-04-12 14:51:40作者: kingster

 

 

1.1 理论背景
SQL代表结构化查询语言(Structured Query Language),是一种在关系数据库系统(Relational Database Management Systems,RDBMS)中查询和管理数据的标准语言。
RDBMS是基于关系模型的数据库管理系统,
它基于两个数学分支:集合理论和谓词逻辑。

1.1.1 SQL
SQL是一种基于关系模型的ANSI和ISO标准语言,用于查询和管理RDBMS中的数据。
SQL语句包括
数据定义语言Data Definition Language, DDL
数据操作语言Data Manipulation Language, DML
数据控制语言Data Control Language, DCL

1.1.2 集合理论
集合,我们的意思是:任意集合体M使我们感知或想到的,能够确定的、互异对象m(称为M的元素)的整体。
——Georg Cantor
一个“集合”应将其视为单个实体。
“互异”指集合中的每个元素必须是唯一的。
“我们感知或想到的”意味着集合的定义是主观的。
“对象”集合的定义不限于物理对象,更与抽血的对象相关。
请注意,定义中没有提到集合元素间的任何顺序,集合元素的列出顺序并不重要。

1.1.3 谓词逻辑
谓词是一个属性或是一个表示“持有”或“不持有”的表达式,
换句话说,也就是“真”或“假”。
关系模型就是依靠谓词来维护数据的逻辑完整性并定义其结构的。
谓词用于实施完整性的一个例子就是:在一个名为Employees的表中定义了约束,仅允许工资(Salary)大于0的雇员存储在表中。
谓词是“工资大于0”(T-SQL表达式:salary>0)。
通过筛选数据来界定子集等操作时,也可以使用谓词。

1.1.4 关系模型
关系模型的目标是确保数据的一致性表示,最小化或是没有冗余且不牺牲完整性,并将定义数据的完整性作为模型的一部分。
1.关系
普通的想法是,“关系”术语源于表之间的关系,这是不正确的。
“关系”实际上是数学术语的关系。
在集合理论中,关系是集合的表现形式。在关系模型中,关系是相关的信息的集合,与SQL中相对应的就是表——尽管不能完全对应。
2. 缺失值
三值谓词逻辑是指来自谓词结果的3中可能逻辑值
——“真”、“假”、“未知”
3. 约束
数据完整性通过在数据模型中定义的约束规则实现,并由RDBMS实施。
4. 规范化
关系模型还定义了规范化规则,也称范式。
1NF,2NF,3NF(具体上网查阅定义)

1.1.5 数据生命周期
1 联机事务处理
OLTP系统的重点是数据输入,而不是数据报告。
2 数据仓库
DW是一个以检索数据和报告为目的设计的环境。
3 商业智能语义模型
BISM是微软支持完整BI堆栈应用的最新模型,目的是提供丰富、灵活、高效、可扩展的分析和报告功能。
4 数据挖掘
数据挖掘模型可以替代用户在数据海洋中查找有用的信息。

1.2 SQL Server体系结构
1.2.1 SQL Server的ABC特色
A是应用(Appliance)
“应用”特色背后的理念是提供包括硬件、软件和服务在内的完整解决方案,应用是在客户端本地托管的。
B是盒子(Box)
“盒子”是企业内部部署的SQL Server,这是传统的部署方式。
C是云(Cloud)
微软支持两种SQL Server云特色:私有云和公共云。

1.2.2 SQL Server实例
可以在同一台计算机上安装基于企业内部部署的SQL Server的多个实例。每个实例完全独立于其他实例。
默认实例和命名实例

1.2.3 数据库
系统数据库介绍如下:
master:存储实例范围的元数据信息、服务器配置、实例中的所有数据库信息和初始化信息。
resource:Resource数据库是一个隐藏、制度数据库,存储所有系统对象的定义。当查询数据库中的系统对象时,似乎位于当前数据库的sys架构中,但实际上他们的定义位于Resource数据库中。
model:用作创建新数据库的模板,创建的每个新数据库是有model的副本初始化创建的。
tempdb:是SQL Server存储临时数据的地方,如工作表、排序空间、行版本控制信息等。
msdb:是一个成为“SQL Server代理”的服务存储数据的地方。还存储其他SQL Server功能的相关信息,如Database Mail,Service Broker、备份等等。

1.3.1 创建表

-- Create table Employees
USE TSQL2012;

IF OBJECT_ID( 'dbo.Employees' ,  'U' )  IS NOT NULL
  DROP TABLE dbo.Employees;

CREATE TABLE dbo.Employees
(
  empid      INT NOT NULL ,
  firstname  VARCHAR (30)  NOT NULL ,
  lastname   VARCHAR (30)  NOT NULL ,
  hiredate   DATE NOT NULL ,
  mgrid      INT NULL ,
  ssn        VARCHAR (20)  NOT NULL ,
  salary    MONEY        NOT NULL
);

1.3.2 定义数据完整性

--------------------------------------------------------
-- Data Integrity
--------------------------------------------------------
-- Primary key
ALTER TABLE dbo.Employees
  ADD CONSTRAINT PK_Employees
  PRIMARY KEY (empid);
-- Unique
ALTER TABLE dbo.Employees
  ADD CONSTRAINT UNQ_Employees_ssn
  UNIQUE (ssn);
-- Table used in foreign key example
IF OBJECT_ID( 'dbo.Orders' ,  'U' )  IS NOT NULL
  DROP TABLE dbo.Orders;
CREATE TABLE dbo.Orders
(
  orderid    INT NOT NULL ,
  empid      INT NOT NULL ,
  custid     VARCHAR (10)  NOT NULL ,
  orderts   DATETIME2    NOT NULL ,
  qty        INT NOT NULL ,
  CONSTRAINT PK_Orders
    PRIMARY KEY (orderid)
);

-- Foreign keys
ALTER TABLE dbo.Orders
  ADD CONSTRAINT FK_Orders_Employees
  FOREIGN KEY (empid)
  REFERENCES dbo.Employees(empid);

ALTER TABLE dbo.Employees
  ADD CONSTRAINT FK_Employees_Employees
  FOREIGN KEY (mgrid)
  REFERENCES dbo.Employees(empid);

-- Check
ALTER TABLE dbo.Employees
  ADD CONSTRAINT CHK_Employees_salary
  CHECK (salary > 0.00);

-- Default
ALTER TABLE dbo.Orders
  ADD CONSTRAINT DFT_Orders_orderts
  DEFAULT (SYSDATETIME())  FOR orderts;

 

附第一章配套代码:  

---------------------------------------------------------------------
-- Microsoft SQL Server T-SQL Fundamentals
-- Chapter 1 - Background to T-SQL Querying and Programming
--2008 Itzik Ben-Gan 
---------------------------------------------------------------------

---------------------------------------------------------------------
-- Creating Tables
---------------------------------------------------------------------

-- Create a database called testdb
IF DB_ID('testdb') IS NULL
  CREATE DATABASE testdb;
GO

-- Create table Employees
USE testdb;

IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL
  DROP TABLE dbo.Employees;

CREATE TABLE dbo.Employees
(
  empid     INT         NOT NULL,
  firstname VARCHAR(30) NOT NULL,
  lastname  VARCHAR(30) NOT NULL,
  hiredate  DATE        NOT NULL,
  mgrid     INT         NULL,
  ssn       VARCHAR(20) NOT NULL,
  salary    MONEY       NOT NULL
);

---------------------------------------------------------------------
-- Data Integrity
---------------------------------------------------------------------

-- Primary key
ALTER TABLE dbo.Employees
  ADD CONSTRAINT PK_Employees
  PRIMARY KEY(empid);
  
-- Unique
ALTER TABLE dbo.Employees
  ADD CONSTRAINT UNQ_Employees_ssn
  UNIQUE(ssn);

-- Foreign key
IF OBJECT_ID('dbo.Orders', 'U') IS NOT NULL
  DROP TABLE dbo.Orders;

CREATE TABLE dbo.Orders
(
  orderid   INT         NOT NULL,
  empid     INT         NOT NULL,
  custid    VARCHAR(10) NOT NULL,
  orderts   DATETIME    NOT NULL,
  qty       INT         NOT NULL,
  CONSTRAINT PK_Orders
    PRIMARY KEY(OrderID)
);

ALTER TABLE dbo.Orders
  ADD CONSTRAINT FK_Orders_Employees
  FOREIGN KEY(empid)
  REFERENCES dbo.Employees(empid);

ALTER TABLE dbo.Employees
  ADD CONSTRAINT FK_Employees_Employees
  FOREIGN KEY(mgrid)
  REFERENCES Employees(empid);

-- Check
ALTER TABLE dbo.Employees
  ADD CONSTRAINT CHK_Employees_salary
  CHECK(salary > 0);

-- Default
ALTER TABLE dbo.Orders
  ADD CONSTRAINT DFT_Orders_orderts
  DEFAULT(CURRENT_TIMESTAMP) FOR orderts;