T-SQL查询和编程基础(1)

1.1 理论背景

SQL是为查询和管理关系型数据库管理系统(RDBMS)中的数据而专门设计的一种标准语言.

RDBMS是一种基于关系模型的数据库管理系统,关系模型则是一种用于表示数据的语义模型,基于两种数学理论:集合论和谓词逻辑.

1.1.1 SQL

SQL是基于关系模型的ANSI和ISO标准语言,专门设计用于查询和管理RDBMS中的数据.

SQL有几种不同类型的语句,包括:

数据定义语句:用于处理数据对象的定义 (DDL,Data Definition Language----CREATE,ALTER,DROP)

数据处理语言:用于查询和修改数据 (DML,Data Manipulation Language----SELECT,INSERT,UPDATE,DELETE,MERGE)

数据控制语言:用于处理权限管理 (DCL,Data Control Language----GRANT,REVOKE)

1.1.2 集合论

所谓'集合'是把我们直观或思维中确定的,相互间有明确区别的那些对象m视为一个整体M,这一整体M就称为集合(称m为集合M的元素)

1.1.3 谓词逻辑(Predicate Logic)

谓词逻辑是关系模型基于的另一个数学分支.

谓词就是用来刻画事物是否具有某种性质或满足某种表达式条件的一个词项,也就是true或false.在关系模型中,谓词用于维护数据的逻辑 完整性和定义它的结构.

谓词也可以用于对数据进行过滤以定义其子集等多种应用场合,

例如:要查询Employee表,而且只要返回来自销售部门的雇员信息,就可以在查询过滤条件中使用谓词"部门(department)为销售(sales)"--(T-SQL表达式就是:department='sales').

例如:在Employee表中定义一个约束(constraint),只有薪资大于0的雇员数据才可以保持到表中.这里的谓词是"薪资(salary)大于0"--(T-SQL表达式就是:salary>0)

注:在集合论中,可以用谓词来定义集合.

1.1.4 关系模型(Relational Model)

关系模型是一个用于表示数据的语义模型,其理论基础是集合论和谓词逻辑.

关系模型的目标是要用最少的或完全无冗余地支持完整数据的持久化表示,而且还要将数据完整性(强制的数据一致性)定义为模型的一部分.(RDBMS则可以实现这样的关系模型,并提供存储,管理,实施强制的数据完整性,以及查询数据的手段).

关系模型也有与之相关的概念,例如:命题(proposition),域(domain),n元关系(n-ary relation),n重元祖(n-tuple),序偶(ordered pair),等等.......

a.命题,谓词和关系

关系:

在集合论中,关系是集合的一种表示.在关系模型中,关系是相关信息的一个集合,在数据库的实现中就表现为数据表.

关系模型的一个关键要点就是:一个关系代表一个集合.对关系进行操作(基于关系代数)的结果,得到的还是一个关系.

命题,谓词

为数据库设计数据模型时,所有数据都是用关系(数据表)来表示的.

确定一个命题(proposition),用于表示数据库中要保存的信息.命题就是必须为真(true)或假(false)的一个断言或语句.

例如:为真的一行插入到某个表中,为假不插入到这张表中!

对命题进行形式化(formalize)处理,也就是从命题中分析出具体的数据(关系本身),并定义其结构(关系的标题)

例如:根据命题来创建它的谓词.而关系的标题则组成了属性的一个集合(set).在关系模型中,属性是没有顺序的.

b.缺少的值

二值谓词逻辑,三值谓词逻辑,四值谓词逻辑

二值:true,false

三值:true,false,unknown(null)

四值:true,false,有用的unknown,没有用的unknown

c.约束(Constraint)

关系模型最大的优点之一就是数据完整性定位为模型的一部分.完整性是通过规则(或约束)来实施的.

实施完整性:

1.最简单的方法,设置属性的类型和是否允许空值(即是否支持NULL)--实施所谓的域完整性

2.约束的例子--提供完整性的候选键

候选键是指在关系中能够防止同一元祖(数据行)多次出现的属性集(一个或多个属性).候选键的谓词能够唯一地标识一行数据,在关系中可以定义多个候选键!(候选键具有唯一性)

当然,可以任意选择一个候选键作为主键.

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键

3.约束的例子--提供完整性的外键

外键是在关系(称为引用关系,referencing relation)中的一个或多个属性上定义的,通过它来引用另一个(或者,也可能是同一个)关系中的候选键.

这种约束要求引用关系中外键的属性值要与被引用关系的候选键的属性值相一致.

d.规范化(Normalization)

第一范式----表中的行必须是唯一地.行的唯一性是通过在表中定义一个唯一地主键而实现的.

第二范式----满足第一范式;其次要求非键属性(nonkey attribute)和候选键属性之间必须满足一定的条件.

(如果要获得任何非键属性值,就必须提供同一行中某个候选键的所有属性值.如果知道了一个候选键的所有属性值,就能够找到任意行的任意属性值.)

第三范式----满足第二范式;其次,所有非键属性必须非传递依赖于候选键.意味着所有非键属性都必须互相独立,也就是说,一个非键属性不能依赖于其他非键属性.

1.1.5 数据生命周期

联机事务处理(OLTP,Online Transactional Processing)

数据仓库(DW,Data Warehouse)

联机分析处理(OLAP,Online Analytical Processing)

数据挖掘(DM,Data mining)

1.2 SQL Server 体系结构

SQL Server体系结构,涉及的实体有:SQL Server实例,数据库,模式,以及数据库对象.

1.2.1 SQL Server实例

SQL Server实例是指安装的一个SQL Server数据库引擎/服务.

(同一台计算机上可以安装多个SQL Server 的实例)

1.2.2 数据库

可以将数据库认为是各种对象的容器,这些对象可以是,表(table),视图(view),存储过程(stored procedure),等等......每个SQL Server实例可以包含多个数据库.

系统数据库包括:master,Resource,model,tempdb,msdb...

(数据库在物理上由数据文件和事务日志文件组成.)

(SQL Server可以同时写多个数据文件,但某一时刻只能以顺序方式写一个日志文件.)

(多个数据文件在逻辑上按照文件组(filegroup)的形式进行分组管理)

(文件扩展名:.mdf .ldf .ndf)

1.2.3 架构和对象

数据库是一种对象的容器.一个数据库包含多个架构,而每个架构则又包含多个对象,这些对象可以是表,视图,存储过程等.

可以在架构级别上控制对象的访问权限.例如:可以为一个用户授予某个架构上的SELECT权限.对于决定在架构中如何组织对象,安全性是应该考虑的因素.

架构也是一个命名空间,用作对象名称的前缀.(当在代码中引用对象时,推荐总是使用由两部分构成的对象名称,也就是,架构+对象名)

第一章 T-SQL查询和编程基础 T-SQL语言基础(1)的更多相关文章

  1. SQL查询和编程基础

    本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...

  2. Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...

  3. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

  4. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

  5. 20165310 学习基础和C语言基础调查

    学习基础和C语言基础调查 做中学体会 阅读做中学之后,了解老师关于五笔练习.减肥.乒乓和背单词的经历,不禁联想到自己学古筝的经历. 成功的经验 兴趣 我其实小时候学过一段时间古筝,但是那时候是因为父母 ...

  6. 20165234 预备作业2 学习基础和C语言基础调查

    学习基础和C语言基础调查 一.技能学习经验及体会 你有什么技能比大多人(超过90%以上)更好? 看到这个问题,我仔细想了想,好像的确没有什么特别出众的技能,但是我想到了许多我个人的爱好. 我从小喜欢五 ...

  7. 20165318 预备作业二 学习基础和C语言基础调查

    20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...

  8. 20165230 学习基础和C语言基础调查

    20165230 学习基础和C语言基础调查 技能学习经验 我擅长弹钢琴.小时候我曾上过很多兴趣班,比如钢琴.跳舞.书法.绘画等等,唯一坚持至今的只有钢琴.仔细一算学习钢琴至今已有12年,不能说已经精通 ...

  9. 学习基础和C语言基础调查

    学习基础和C语言基础调查 一.一种比大多数人(超过90%以上)更好的技能 说句实话,我还没有那种特别特别自信的.说我能拿得出手的.所谓能超过百分之九十以上的人的技能.毕竟人外有人,天外有天. 姑且算上 ...

  10. 20165235 学习基础和C语言基础调查

    20165235 学习基础和C语言基础调查 首先第一个问题:你有什么技能比大多人(超过90%以上)更好?感觉很难回答这种问题,其实我对很多东西挺感兴趣的,如果非要拿出一种比较突出的技能的话我感觉就是象 ...

随机推荐

  1. Retrofit 使用简介

    一,简介 Retrofit 是目前使用广泛的 Http Client 框架,它适用于 Android 和 Java. 但需要注意的是,Retrofit 本身并不是一个网络请求框架,而是一个网络请求框架 ...

  2. Java内存缓存-通过Map定制简单缓存

    缓存 在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快.通过缓存,可以高效地重用之前检索或计算的数据. 为什么要用缓 ...

  3. 【python / mxnet / gluoncv / jupyter notebook】基于mxnet和gluoncv的图像内容识别

    程序环境为高性能集群:CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2 In  ...

  4. 大牛们是如何开发 WordPress 主题的?

    自己算是写过一个主题,目前也在用( 这里 -> http://udonmai.com/ ),所以多少想说两句. 当初走上web开发的路之后最想干的事情就是写个自己的WP主题...所以网上搜罗了很 ...

  5. 配置Log4j 详解

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  6. LC 961. N-Repeated Element in Size 2N Array【签到题】

    In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...

  7. JavaScript this的使用

    当作用域不同时,我们可以将this暂时性的保存下来. 例如: _this =  this.

  8. IIS 报错试图加载格式不正确的程序集解决办法

    原因: 64位系统和32系统不匹配导致. 解决办法: 方法一.注册32位IIS(必须卸载64位IIS) 使用命令 X:WindowsMicrosoft.NETFramework64v4.0.30319 ...

  9. python格式化字符串format的用法

    填充与对齐 填充常跟对齐一起使用 ^.<.>分别是居中.左对齐.右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充 比如 In [15]: '{:> ...

  10. 有关命令行的vue操作

    1.安装node.js ,通过node -v  和  npm -v  来查看node 和 npm 版本. 2. 安装bower,bower 可以说是(前端)包管理器 npm install bower ...