您的位置:首页 > 数据库

SQL DML-数据查询

2015-06-28 09:19 232 查看
        SQL DML,数据操纵语言,分成数据查询和数据更新两类。而数据更新分为插入、删除和修改三种操作。

        SQL DDL是对表结构的构建操作,SQL DML是对已经构建好的表结构内增加数据的操作。对于整个数据库来说,前者是框架,后者是内容。

        先来看查询:

        select语句基本句法:  select<属性>

            
           
           from<关系>

             
           
          where<条件表达式>

    where子句的条件表达式中的运算符:

    算术比较运算符:<,<=,>,>=,=,<>或!=

    逻辑运算符:and,or,not

    集合成员资格运算符:in,not in

    谓词:exists(存在量词),all,some,unique

    聚合函数:avg(平均值),min(最小值),max(最大值),sum(和),count(计数)

    另一个select子句:select子句嵌套

    select子句的查询结果可以进行集合的并、交、差操作。

    集合运算符:union(并),intersect(交),except(差)

    关键是where子句中条件表达式可以很复杂,因此select句型能表达所有的关系代数表达式。

select语句三种写法:连接查询、嵌套查询、带存在量词的嵌套查询

        1、连接查询:select s.s#,sname

             
           
      from s,sc

             
           
      where s.s#=sc.s#  and  c#='c2'

             
  先对from后的基本表s和sc做笛卡尔积操作,然后再做等值连接、选择和投影等操作。

        2、嵌套查询:select s#,sname

             
           
      from s

             
           
      where s# in(select s#

         
           
           
           
      from sc

         
           
           
           
      where c#='c2')

             
  嵌套的子查询先执行,然后执行外层查询。

         查询涉及多个基本表时用嵌套结构逐次求解层次分明,具有结构程序设计特点。

        嵌套查询的执行效率比连接查询的笛卡尔积效率高。

        在嵌套查询中,in是常用谓词,结构“元组in(集合)”,表示元组在集合内。

             
           
      select s#,sname

             
           
      from s

             
           
      where 'c2' in(select c#

         
           
           
           
      from sc

         
           
           
           
       where s#=s.s#)

        3、使用存在量词的嵌套查询:select s#,sname

             
           
           
           
      from s

             
           
           
           
      where exists(select *

         
           
           
           
           
           
      from sc

         
           
           
           
           
           
      where sc.s#=s.s#  and  c#='c2')

            谓词exists表示存在量词符号,语义是内层查询的结果应该为非空(至少存在一个元组)。   
  

 
      select语句完整句法:select<目标表的列名或列表达式序列>

             
           
         from<基本表名和(或)视图序列>

             
           
         [where<行条件表达式>]

             
           
         [group by<列名序列>]

             
           
           
      [having<组条件表达式>]

             
           
          [order by<列名[asc|desc]>,...]

            

        (1)读取from子句中基本表、视图的数据,执行笛卡尔积操作

        (2)选取满足where子句中给出的条件表达式的元组

        (3)按group子句中指定列的值分组,同时提取满足having子句中组条件表达式的那些组

        (4)按select子句中给出的列名或列表达式求值输出

        (5)order子句对输出的目标表进行排序,按附加说明asc升序排列,或按desc降序排列。

        select子句中,where子句称为“行条件子句”,group子句称为“分组子句”,having子句称为“组条件子句”,order子句称为“排序子句”。

        与查询有关的,DDL中创建的索引、视图等,其功能仅限于查询时起作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: