第一章 T-SQL查询和编程基础 T-SQL语言基础(1)
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)的更多相关文章
- SQL查询和编程基础
本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...
- Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解
Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...
- oracle学习 第一章 简单的查询语句 ——03
1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
- 20165310 学习基础和C语言基础调查
学习基础和C语言基础调查 做中学体会 阅读做中学之后,了解老师关于五笔练习.减肥.乒乓和背单词的经历,不禁联想到自己学古筝的经历. 成功的经验 兴趣 我其实小时候学过一段时间古筝,但是那时候是因为父母 ...
- 20165234 预备作业2 学习基础和C语言基础调查
学习基础和C语言基础调查 一.技能学习经验及体会 你有什么技能比大多人(超过90%以上)更好? 看到这个问题,我仔细想了想,好像的确没有什么特别出众的技能,但是我想到了许多我个人的爱好. 我从小喜欢五 ...
- 20165318 预备作业二 学习基础和C语言基础调查
20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...
- 20165230 学习基础和C语言基础调查
20165230 学习基础和C语言基础调查 技能学习经验 我擅长弹钢琴.小时候我曾上过很多兴趣班,比如钢琴.跳舞.书法.绘画等等,唯一坚持至今的只有钢琴.仔细一算学习钢琴至今已有12年,不能说已经精通 ...
- 学习基础和C语言基础调查
学习基础和C语言基础调查 一.一种比大多数人(超过90%以上)更好的技能 说句实话,我还没有那种特别特别自信的.说我能拿得出手的.所谓能超过百分之九十以上的人的技能.毕竟人外有人,天外有天. 姑且算上 ...
- 20165235 学习基础和C语言基础调查
20165235 学习基础和C语言基础调查 首先第一个问题:你有什么技能比大多人(超过90%以上)更好?感觉很难回答这种问题,其实我对很多东西挺感兴趣的,如果非要拿出一种比较突出的技能的话我感觉就是象 ...
随机推荐
- leetcode 547朋友圈
方法一:染色法 类似于岛屿的个数也可以用染色法:通过深度优先搜索来做 使用一个数组来表示当前朋友a是否已经包含到已经遍历的朋友圈中,遍历所有的朋友,如果当前朋友没有在已经访问的朋友圈中,即visite ...
- Cookie类
Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.String name, java.lang.String value) 2)设置cookie void ...
- 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...
- 安装Redis-cluster-gem install redis报错的解决方案
错误描述: [root@eshop-cache01 local]# gem install redis ERROR: Loading command: install (LoadError) cann ...
- k8s报错解决
. Jul :: lab3 etcd[]: the server is already initialized as member before, starting as etcd member... ...
- C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化
C++类有几种类型的数据成员:普通类型.常量(const).静态(static).静态常量(static const).这里分别探讨以下他们在C++11之前和之后的初始化方式. c++11之前版本的初 ...
- springboot 多线程的使用
int pageSize = 10000; int totalCount = doctorDAO.selectDatasByMapCount2(jsonArray, false, null); int ...
- python-Web-django-钩子验证
全局钩子验证: ‘’’ 打包前端input,views数据处理,链接moduls数据库,用来验证 ’’’ Views: Form=UserForm(request.POST)实例化对象 Form.cl ...
- __setattr__,__getattr__,__delattr__
class Foo: x = 1 def __init__(self,y): self.y = y def __getattr__(self,item): print("---->fr ...
- 【Linux开发】彻底释放Linux线程的资源
Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的.而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出 ...