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. TCP套接字选项SO_LINGER与TCP_LINGER2

    概述 本文对两个LINGER相关的套接字选项进行源码层面的分析,以更明确其各自的作用和区别: man page SO_LINGER,该选项是socket层面的选项,通过struct linger结构来 ...

  2. Linux 解压小全

    .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .zip 解压:unzip FileName.zip 压缩:zi ...

  3. 【黑马Javaweb】1.1Junit单元测试

    黑马第一天学习 今日内容 Junit单元测试: 测试分类: Junit使用:白盒测试 今日内容 1.1Junit单元测试 1.2.反射 1.3.注解 Junit单元测试: 测试分类: 1.黑盒测试:不 ...

  4. MVC中上传文件

    与asp.net中几乎一样,使用表单提交的方式上传文件(如果是使用了第三方插件的话,那么就另当别论) @{ ViewBag.Title = "Index"; Layout = nu ...

  5. 石川es6课程---9、面向对象-基础

    石川es6课程---9.面向对象-基础 一.总结 一句话总结: js老版本的面向对象和继承都不是很方便,新版的面向对象向其它语言靠拢,有了class,extends,constructor等关键字,用 ...

  6. 开源运维自动化平台-opendevops

    开源运维自动化平台-opendevops 简介 官网 | Github|  在线体验 CODO是一款为用户提供企业多混合云.自动化运维.完全开源的云管理平台. CODO前端基于Vue iview开发. ...

  7. 用Intellij idea搭建solr调试环境

    最近在使用solr时,配置会有一些问题,log里面打印出日志了,但是还是不知道发生这样错误的原因.于是想学习一下相关的solr源码,以下是如何搭建solr调试环境步骤. solr调试环境搭建,首先下载 ...

  8. Zabbix - LINUX下CPU,硬盘,流量,内存监控

    转载自:https://blog.csdn.net/jxzhfei/article/details/47191431 1.LINUX下zabbix客户端安装 [root@mongodb114 ~]# ...

  9. OOP、DI、IOC的关系

    此随笔的重点在“Demo分析”一章,以代码的分阶段变化讲述了DI,DIP,IOC的演变,写在前面文字均为铺垫. 希望各位园友拍砖,促使流浪者的进步,现在有很多问题想讨论,即以此文寻找志同道合的园友,另 ...

  10. Django Auth模块及User对象方法

    一:Django的用户认证 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1:authenticat ...