SQL入门

来源:互联网 发布:聚合数据接口开发教程 编辑:程序博客网 时间:2024/06/06 08:50

  • 1 SQL概述
  • 2 数据定义
    • 21 创建模式
    • 22 删除
    • 23 定义基本表
    • 24 删除基本表
    • 25 修改基本表
    • 26 索引的定义
  • 3 查询
    • 31 单表查询
    • 32 连接查询
    • 33 嵌套查询
    • 34 集合查询
    • 35 查询注意事项
  • 4 数据更新
  • 5 视图

3.1 SQL概述

SQL语言所使用的动词

SQL中的数据类型

3.2 数据定义

3.2.1 创建模式

3.2.2 删除

CASCADE(级联):删除模式的同时把该模式中所有的数据库对象全部删除;
RESTRICT(限制):如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行;当该模式中没有任何下属的对象时才能执行;

3.2.3 定义基本表

常用完整性约束

(1) 主码约束:PRIMARY  KEY(2) 唯一性约束(不能取相同值但允许多个空值):UNIQUE(3) 非空值约束:NOT NULL(4) 参照完整性/外码约束(在参照关系中):FOREIGN KEY (<列名>) REFERENCES  <表名>(<列名>) 

比如

3.2.4 删除基本表

RESTRICT(限制):删除表有限制条件

  • 欲删除的表不能被其他表的约束(如外码)所引用
  • 如果存在依赖该表的对象(视图、索引等),则此表不能被删除

CASCADE(级联):删除表没有限制条件

  • 在删除基本表的同时,相关的依赖对象一起删除

3.2.5 修改基本表

[例8] 向Student表增加“入学时间”列,其数据类型为日期型。

ALTER  TABLE  Student  ADD  entrance  DATE ;

注:如基本表中原来有记录,它们在新增加的列上的属性值取空值。
删除entrance列:ALTER TABLE Student DROP entrance ;

[例9] 将年龄的数据类型改为半字长整数。

ALTER  TABLE  Student  ALTER COLUMN Sage  SMALLINT ;

注:修改原有的列定义有可能会破坏已有数据,如缩短字符属性长度,将长整数改为短整数等。

[例10]删除/增加学生姓名必须取唯一值的约束。

ALTER  TABLE   Student  DROP  UNIQUE(Sname) ;ALTER  TABLE   Student  ADD  UNIQUE(Sname) ;

3.2.6 索引的定义

一本书的目录就是索引,通过它可以快速地定位各章节所在的起始页码。

数据库中存放了大量的数据,如何才能快速找到所需要的数据?在数据库中通过对基本表建立索引来提高查询效率。

索引的分类

普通索引(Normal Index):索引表的Search-key项中的每一索引值对应全部取该值的基本表中的记录。普通索引通过索引表的指针项指向一个单链表来实现,该链表的每个结点的数据项指向一条物理记录。

单一索引(Unique Index):每一个索引值只对应唯一的数据记录。当建立单一索引后,索引项不可以再插入已有值,但可以插入多个空值,这等同于在建表时对索引列增加一个UNIQUE约束;同样,如果待索引项存在相同值则不能建立单一索引。

聚簇索引(Cluster Index):索引项顺序与表中数据记录的物理顺序一致。即基本表是按照索引表的Search-key项的排列次序组织存储的,因此,一个基本表只能建立一个聚簇索引。

注:聚簇索引适应于很少对基本表进行增删操作或对 Search-key项进行修改操作的情况。

创建索引

删除索引

对于数据库的一些理解

  • 数据库相当于一个容器,它包含了基本表、索引、视图、存储过程、触发器、约束、角色等数据库对象,这些对象都是通过SQL中的数据定义语言来建立的;
  • 数据库具有很高的安全性,不是什么人都可以创建基本表、索引等数据库对象。只有DBA创建某一数据库用户,并将创建基本表等数据库对象的权力赋予该用户时,他才可以创建权力范围内的数据库对象;
  • 创建基本表的只能是DBA或者得到DBA授权创建表的用户;
  • 创建基本表时应指定表的主码、外码(如果有的话)及其他约束,当更新表时才能由DBMS系统自动核查数据的正确性。
  • 创建索引只能由DBA或表的属主(owner,即表的建立者) 建立;
  • 有些DBMS自动建立PRIMARY KEY和UNIQUE列上的索引;
  • 索引的维护由DBMS自动完成,不需要任何人的干预,当索引列上的数据变动时,系统自动修改索引表;
  • 索引的使用由 DBMS自动完成,系统会根据查询条件选择是否使用索引以及使用哪些索引。

3.3 查询

3.3.1 单表查询

选择表中的若干列(π)

我们可以用表达式对列进行操作

同时我们也可以对列名进行重命名

消除重复的行

注意: DISTINCT短语的作用范围是所有目标列

选择表中的若干元组

WHERE子句常用的查询条件

关于使用的例子由于太多,直接见PPT.

对查询结果排序输出

ASC(DESC):排序列为空值的元组最后(先)显示

使用集函数

对查询结果分组输出

3.3.2 连接查询

将两个表连接进行查询

连接查询的执行过程

1) 首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组;
2) 表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组;
3) 重复上述操作,直到表1中的全部元组都处理完毕 。

对自身进行连接时,需要给表起别名以示区别. 同时对于表中的同名属性加别名前缀

外连接


但是需要注意的是由于自然连接是对列进行”压缩”了的,而这些连接操作均没有压缩操作. 需要我们手动实现自然连接

复合条件连接

3.3.3 嵌套查询

一个SELECT-FROM-WHERE语句称为一个查询块;
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。

带有IN谓词的子查询

带有比较运算符的子查询


带有ANY或者ALL谓词的子查询

带有EXISTS谓词的子查询

用EXISTS/NOT EXISTS实现全称量词(难点)

3.3.4 集合查询

UNION自动去掉重复元组,如果要保留使用UNION ALL

3.3.5 查询注意事项

可以对列取别名

也可以对表取别名

其中,FIRST,SECOND,SCX,SCY都是自己命名的

对不相关子查询可以不使用别名

DISTINCT将多条相同的记录作为一条处理。

集函数只能用于 SELECT子句和 HAVING短语之中,而绝对不能直接出现在 WHERE子句中。


这就是错误的

集函数不能嵌套

使用了分组的查询语句,其SELECT子句中只能出现分组属性和集函数,而不能有在GROUP BY没有出现的属性。

ORDER BY子句用于对查询结果进行排序后再输出,故只用于最外层的查询,而子查询中不应该出现ORDER BY子句。

关于ORDER BY还有一点需要注意

查询的输出只能取自最外层查询所使用的表,对于子查询中的属性是不能作为最终的输出的。如果输出的属性涉及多个表,则最外层查询只能使用这些表的连接查询

子查询的结果集可以看作基本关系一样作为查询的数据源。此时必须对子查询命名别名,否则为语法错误。

3.4 数据更新

数据更新是指对数据库基本表进行数据的插入、修改和删除操作,SQL提供了丰富的数据更新操作。

插入数据

修改数据

删除数据

3.5 视图

  • 视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表,一般不保存数据;
  • 在数据字典中只存放视图的定义,不会出现数据冗余;
  • 基本表中的数据发生变化,从视图中查询出的数据也随之改变;
  • 视图一经定义,就可以和基本表一样被查询、更新和删除,并且可以在视图之上再定义新的视图;
  • 视图的更新(增加、删除、修改)操作会受到一定的限制,更新的结果会反馈到基本表上;
  • 视图对应三级模式体系结构中的外模式。

创建视图

删除视图

查询视图

和基本表一样,视图定义之后也可以进行插入、删除和修改这三种更新操作。
(1) 用户角度:更新视图与更新基本表语法相同
(2) DBMS实现视图更新的方法
视图实体化(View Materialization)
视图消解(View Resolution)

原创粉丝点击