SQL入门

   在基本了解过关系模型后,我们来看一门基于关系代数的,十分具影响力的语言--SQL。

   尽管我们说SQL语言是一门“查询语言”,但除了数据库查询,它还具有很多别的功能---定义数据结构、修改数据库中数据以及说明安全性约束条件等。

  

 Part One----SQL语言几个主要组成部分:

   数据定义语言DDL:SQL DDL提供定义关系模式、删除关系以及修改关系模式的命令。

  交互式数据操纵语言DML(interactive data-manipulating language):包括基于关系代数和元组关系演算(这部分会在“其他关系语言的介绍中了解到)的查询语言,还包括在数据库中插入、删除、修改元组的命令。

  完整性:任何破坏完整性约束关系的更新将被禁止。保存在数据库中的数据必须满足的完整性约束条件将在DDL中定义。

  视图定义、事务控制、嵌入式SQL和动态SQL(如何将SQL语言嵌入到通用变成语言中)、授权。共七部分。


Part Two--基本DML、DDL特征的描述:

  (一)数据定义(DDL能够定义的内容包括---每个关系的模式、每个属性的值域、完整性约束、每个关系维持的索引集合blablablabla。。。。)

      这里主要介绍基本模式定义,SQL采用定义表(create table)的方式定义SQL关系。值得注意的是在定义关系同时应给出必要的完整性约束(包括主码约束等)。

     前面提到过,SQL的一个重要组成成分就是完整性,任何破坏完整性约束关系的更新将被禁止。以主码约束为例,若关系中一条新插入或修改的元组在任意一个主码属性上有空值(或出现相同取值),SQL将标记一个错误,并阻止更新。

   (二)SQL查询的基本结构

     SQL查询有三个基本的子句。执行的基本顺序为---先构造from子句中关系的笛卡尔积,再根据where子句中的谓词进行关系代数的选择运算,然后将结果投影到select子句中的属性上!!!查询的结果当然也是一个关系。

    A.select子句:返回若干属性组成的关系,若需要去除重复需使用distinct关键字。子句中还可对属性值使用加减乘除算数表达式(注意该属性要更名否则无名)。                         B.元组变量:当我们用“关系名.属性名”这种形式书写表达式时,关系名即是隐含定义的元组变量。

     一个十分典型的用法如下   

select distinct T.branch_name

from branch as T, branch as S

where T.assets>S.assets and S.branch_city='Brooklyn'

 这里不能直接引用branch.assets,会造成表意不明。(这里还用到了更名运算as)

   C.排列元组的显示顺序order by(desc表示降序,asc表示升序。默认升序)

  (三)集合运算:包括union、intersect、except运算,此三者均默认去除重复(for...集合元素重复性..)。要保留重复 使用union all类似。

  (四)聚集函数:聚集函数是以值得集合为输入,返回单个值得函数。但查询结果仍是关系(仅含一个值的关系)!!!

     A.可用group by子句扩展聚集函数的作用~用法示例-------    select branch_name,avg(balance)

   from account

   group by branch_name

    关于 where、group by、having三个子句:

     SQL首先应用where子句中的谓词,满足where谓词的元组通过group by子句形成分组。最后having子句作用于每一个元组,不符合having子句的分组将被抛弃,剩余的组被select自己用来产生查询结果。

    

  接下来是嵌套子查询。。。复杂查询。。等。。。过段时间再学习= =    心猿意马的去看操作系统啦哈哈哈


  (五)嵌套子查询(嵌套在另一个查询中的select-from-where表达式。一般子查询的使用有以下几个用途。

      A.集合成员资格:SQL允许测试元组在关系中的成员资格。 关键字 in/not in     

      B.集合的比较:some、all与大小于符号的结合使用。

      C.测试是否为空关系:测试一个子查询的结果中是否有元组。关键字exists   

   

  (六)复杂查询:可以包括多个SQL块。两种方法:

        A.派生关系:允许在from子句中使用子查询表达式。(但必须as命名)

        B.with子句:可以定义一个仅对此条查询有效的临时视图。

  

  (七)视图:任何不是逻辑模型的一部分但作为虚关系对用户可见的关系[1] 。

       A.作用?--可隐藏不必要的信息,也可把信息多个关系收集到单一视图。

       B.一般的,每次查询视图时都应重新计算,以免数据库更新而视图未更新。因此数据库存储视图的定义本身(由一系列关系代数表达式组成)而非计算结果。

       C.只要没有更新在其上进行,视图可出现在任何地方。关于视图的更新在数据库的修改部分会介绍到。


  (八)数据库的修改

        A.删除、插入和更新均是对元组进行的,插入时还要注意属性域。

insert into account

             select *

            from account

上述例子将会插入无数个元组。就这个问题要思考语句执行的顺序。

        B.更新视图:视图一般不允许更新,只有符合条件(略)的视图才允许更新。

可能带来的问题:a.视图可能不包含所有属性,更新时可能null,可能被拒绝;b.比如向一个由两关系合并的视图插入("hhh",900),则需插入(null,null,900),("hhh",null)。而此时合并后视图仍不含("hhh",900)。「for空值匹配时默认不相等」


  (八)连接关系

连接类型『如何处理连接条件不匹配的元组』

inner join leftouter join         right outer join   full outer join

连接条件『决定两关系中哪些元组相互匹配以及结果中出现哪些属性』

natural            on<谓词>      using(A1,A2,...An)「选择一些公共属性」


以上,SQL入门部分已经初步学习完毕,后续将要学习到的是“高级SQL”。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值