精通SQL结构化查询语言详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关系:是汇集在表结构中的行和列的集合,每个关系由一个或多个属性组成

关系,属性和数组这3个术语在涉及到关系模型时使用,SQL在描述这些术语时,使用的是表,列和行

联系指实体间对应关系

三范式:

1.每一列都是不可分的基本数据项,同一列中不能有多个值,每一行只包含一个实例的信

息,简言之,就是无重复的列

2.属性完全依赖于主关键字,

3.一个数据表中不包含已在其它表中已包含的非主关键字信息

SQL组成

1.数据定义语言(Data Definition Language),用于创建,修改,删除数据库对象,SQL

关键字包括CREATE,ALTER,DROP

2.数据查询语言(Data Query Language),用于检索数据,主要SQL关键字为SELECT

3.数据操纵语言(Data Manipulation Language),用于增,删,改数据库对象中的数据,

主要SQL关键字INSERT,UPDATE和REVOKE

4.数据控制语言(Data Control Language),用于控制用户对数据库的访问,主要SQL关

键字GRANT,DENY 和REVOKE

5.其它语言要素,事务控制,程序化语言

================================== 表=============================== 创建表

增加列

删除列:有默认值,作为主键不能被删除,具有非空约束的列可以被删除

处理办法:先删除约束,再删除列

修改列:TEXT,IMAGE,NTEXT,TIMESTAMP,索引的一部分,是PRIMARY KEY或FOREIGN KEY,有缺省值,有CHECK,UNIQUE时不能改变其类型

重命名表

重命名列

================================ 数据库============================== 创建数据库

创建区分大小写的列(sql server默认不区分大小写)

================================ 索引=============================

索引:一个表的存储是由两部分存放的,一部分用来存储表的数据页面,另一部分存储索引页面,索引就存放在索引页面上。通常,索引面页相对于数据页面来说小得多,当进行数据检索时,系统先搜索索引页面,从中找到所需要数据的指针,再通过指针从数据页面中读取数据

簇索引:簇索引与数据是混为一体的

非簇索引:非簇索引具有与表的数据完全分离的结构,由于非簇索引使用索引页存储,因此比簇索引需要更多的空间,且检索效率低

创建索引

索引改名和删除

============================== 完整性控制============================ 完整性约束分3种类型:

1.与表有关的约束:是在创建有的语句中定义的一种约束,在定义列同时定义该约束称为

列约束;在列定义之后,单独定义多个列的约束称为表约束

上面在name列后面的是列约束,最后一行是表约束,它们都可以实施primary key,foreign key,unique,check约束,除此之外,列约束还可以实施not null约束,也可以这样实现

如果希望删除主表中数据时同时删除子表中相关数据时可采用

2.域约束(只能使用check约束):域可以代替数据类型使用,如

但是在sql server中不支持create domain,不过可以通过给列设置check约束实现

3.断言(只能使用check约束):sql server2k不支持

4.sql server中的完整性控制,包括规则,缺省值,触发器

规则是对表中的列或自定义数据类型的限制,规则是单独存储的,与表对象无关,即表删除不会对规则产生影响,一个规则可应用多个列,一个列最多只能应用一个规则

缺省值:性质同上

============================== 查询=============================

自然连接,自动判断相同的列,匹配连接(不灵活,不能指定匹配列)

CASE WHEN 语句

左外连接= 内连接+ 左边表中不匹配的行

右外连接= 内连接+ 右边表中不匹配的行

全外连接= 内连接+ 左边表中不匹配的行+ 右边表中不匹配的行

不管是哪种连接,DBMS总是一次执行两个表的联合,因此为了在单一查询中连接3个或以上表,就需要进行多次连接,如:查询所有教师的姓名,所在系,开设的课程名以及选修这门课的学生姓名和成绩。总是把前面的结果和后面的表进行连接

交叉连接等同于from后的表用逗号隔开,都是返回两个表中所有行的迪卡尔积

UNION可用于合并查询结果,自动消除重复行,如果不希望消除重复,必须使用UNION ALL 可查不同表中的数据,但列数,类型要匹配,还可以对最后的结果进行排序(列的序号也可)注意:多表进行UNION运算时,(A UNION ALL B)UNION C和A UNION ALL(B UNION C)结果可能不同,括号可改变连接顺序

UNION JOIN把来自一个源表中的行与另一个源表中的行联合起来,生成的结果中包括第一个表中的所有行和列和另一个表中的所有行和列。缺少的属性值用NULL表示(SQL SERVER不支持)

ROLLUP运算符,对分组进行扩展

CUBE运算符,对分组进行扩展

EXISTS子查询:用来测试集合是否为空,它总与子查询一起使用,而且只要子查询中至少返回一个值,则EXISTS判式的值为TRUE,否则为FALSE

UNIQUE子查询:用来测试子查询的结果表是否存在重复行,若没有重复行,则返回TRUE,否则返回FALSE,NOT UNIQUE正好相反,不过SQL SERVER不支持

子查询的执行要依赖于上一层查询行的当前值,这种子查询称为相关子查询,如EXISTS =========================== 存储过程与函数============================ 存储过程的优点:允许组件式编程,较快的执行速度,减少网络流量,安全

常用流程控制语句:

DECLARE用来定义一个局部变量,可用SELECT语句赋值,这个变量必须以@开头,跟着一个标识符,如下:

全局变量:冠以@@ 的变量,由系统定义,常见的有

@@error :当事务成功后,其值为0,否则为由系统产生的,最近的一个错误号(服务器:消息后面的值)

@@textsize :select语句返回的text或image数据的字节数

相关文档
最新文档