SQL DML-数据查询

        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中创建的索引、视图等,其功能仅限于查询时起作用。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值