学习笔记2:select,insert,update,delete语句

1.select语句

SELECT语句的通用形式:

subquery::=
SELECT [ALL | DISTINCT] { * | expr [ [AS] c_alias] {, expr [ [AS] c_alias]...}} 
        FROM tableref {, tableref...} 
        [WHERE search_condition] 
        [GROUP by colname {, colname...}] 
        [HAVING search_condition] 
        [ORDER BY  result_colunm [ASC | DESC] {, result_colunm [ASC | DESC] ...}]

subquery {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL] subquery }


select语句的求解过程:

1.对form中的表做笛卡尔积
2.删除不满足where子句条件的行
3.根据group by子句对相应的行进行分组
4.删除不满足having子句的组
5.求出select子句中表达式的值
6.若有关键字distinct,那么删除重复的行
7.对子查询进行union ,intersect,except操作
8.对查询的结果进行order by操作

SQL-99标准规定了select语句中的from子句执行的是连接运算。但是实际上大多数厂商并没有实现,而是通过表之间的笛卡尔积并在where子句中包含特定条件来模拟连接运算。
非相关子查询:如果内层的子查询完全独立于外层的子查询,即没有接受任何来自外层的输入数据。不然就是相关子查询。
在非相关子查询中时,内层的子查询会向外层提供一个查询结果集,然后外层根据条件来利用这个结果集。

 

 


一些谓词:IN,θ,EXISTS(有待补充
IN谓词:

expr [NOT] IN (subquery) | expr [NOT] IN (val {,val...})

    很显然,in谓词有两种用法,第一种是后面是接一个子查询,判断expr是否在子查询返回的结果集当中; 
    还有一种后面直接跟一个显式定义的set,判断expr是否在(val,val,val...)中  

θ谓词:

expr θ{SOME | ANY | ALL} (subquery)

    其中的&theta;可以取六种比较运算符:<,>,<=,>=,=,<> 
    需要特别注意的是SQL标准中对ANY和SOME的定义是相同的。 
    比如说我们需要表达“小于任何一个”的意思:

    应该表示成  < ALL (subquery)  而不是 < ANY (subquery) 

θ谓词于IN谓词间的等价形式:

=SOME 于 IN 具有完全相同的效果

<>ALL 于 NOT IN 具有完全相同的效果 

EXISTS谓词:

[NOT] EXISTS (subquery)

    注意在子查询的select子句中为*,而不是某个属性或者属性集。

    EXISTS谓词需要注意两点:

    第一,NOT EXISTS谓词实现了关系代数中的MINUS运算

    第二,双重NOT EXISTS实现了关系代数中的DIVIDE运算 

    详见http://fengyapizi.iteye.com/admin/blogs/359941

 

 

 

 

三种运算,UNION,INTERSECT,EXCEPT:加上关键字ALL会使得SQL考虑重复的行

<1>.UNION

它实现了关系代数里面的“并运算”。union用于两个兼容表,它可以连接任意数目的子查询。SQL-99标准定了union可以在任何子查询的地方使用。但是实际上大部分数据库产品只支持在完整的select语句中使用,而不支持在包含了子查询的谓词中使用。

<2>.INTERSECT 实现了关系代数里面的“交运算”。

<3>.EXCEPT实现了关系代数里面的“差运算”。

注意其中的INTERSECT,EXCEPT并没有增强SQL的能力,通过上面的not in谓词或者not exists谓词,我们已经具备了这种能力。所以,很多的数据库实际上并未实现以上两种谓词。

 

 

 

SQL提供的5个集合函数:

<1>.count,作用在有多个列值的行集上

<2>.max,min,sum,avg 作用在由简单值组成的集合上

注意集合函数与标量函数(例如upper,mod,abs,substr,length)的区别:

1.内置函数于标量函数均可以出现在select语句中

2.标量函数以单个行为参数,并且返回与这个行对应的单值

3.内置函数以表中所以满足条件的结果集为参数,返回对应这个结果集的单值

 

 

2.Insert语句

INSERT INTO TABLE [(colname {, colname...})]
    { values (expr | NULL {, expr |NULL...}) | subquery}

 需要注意的是两点:

1.insert语法不支持表别名,因此不能用别的限定名

2.insert有两种用法,一种是后面接vlaues定义的值的集合,还有一种后面接子查询

 

3.Update语句

UPDATE table
    SET cloname={expr | null | (subquery)}
            {,cloname={expr | null | (subquery)...}}
    [WHERE condition]

 

4.delete语句

DELETE FROM TABLE
    [WHERE condition]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值