免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1154 | 回复: 0
打印 上一主题 下一主题

my SQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-26 00:20 |只看该作者 |倒序浏览
my SQL is my (views about) SQL, not mysql!
任何语言都是由语素组成的。SQL也一样。语素指的是有意义的单词组合。
SQL的语素包括:
statement,指的是对数据库的操作。SELECT FROM是最常使用的statement。
statement分为
database manipulate statement:
INSERT, UPDATE, DELETE等;
database definition statement
CREATE, ALTER等;
clause,指的是对statement的功能增强,statement表示操作的类型,clause具体的描述了操作。
常用的有:
WHERE
ORDER BY
GROUP BY
HAVING
expression,指的是返回一定结果的语素;subsquery也返回一定的结果并且可以被当做值使用。
SQL提供了许多operator和function来构成expression。
condition,指的是具有逻辑值的语素。condition也是expression的一种,但是它是和逻辑子语句结合。
option,指的是statement的控制。
DISTINCT, AS等是SELECT的选项。

注:aggregate function(SUM, AVG, COUNT)通常伴随GROUP BY 语句。
   HAVING 语句伴随GROUP BY 语句。
   NULL 值不能用于=等逻辑判断,而是使用 is, is not。即使同为NULL也不说明两个值相等。
语法和语素共同构成语言的。分析语法的过程就是分析SQL的引擎如何解释语句。
必须以;结束。
FROM语句中可以为TABLE创建别名。
TABLE的作用域分析:
一个TABLE除了名字外,还有其他的属性,在SQL语句中,即使subquery使用了相同的TABLE,也并不代表它用的就是那一个TABLE。
具体来说,
SELECT SUM(O.QUANTITY * O.PRICE)
FROM ORDERS O PART P
WHERE P.PARTNUM = O.PARTNUM
GROUP BY O.PARTNUM
HAVING SUM(O.QUANTITY * O.PRICE) >
(SELECT AVG(O1.QUANTITY * P1.PRICE)
FROM PART P1, ORDERS O1
WHERE P1.PARTNUM = O1.PARTNUM

必须用另一个别名O1,而不能用O的理由是,O是GROUP BY的表,它的aggregate function是作用于每个项目的,在内在数值表示中已经和O1不同。
subquery的语法:
除了利用返回值外,还可以使用IN, SOME, ANY, ALL, EXIST。
SOME和ANY是一个意思。

SQL的机制:
事务处理:
BEGIN WORK
ROLLBACK
SAVEPOINT
COMMIT

CREATE VIEW AS作为SELECT的结果的映照,PostgreSQL不允许修改view。
CREATE INDEX作为快速检索的工具。
注意:需要手动删除INDEX。

在C语言代码中访问数据库有两种方法,libpq和ecpg。
使用libpq就是使用函数接口来访问数据库,而是用ecpg比较接近于直接使用SQL语句。一般来说,使用ecpg可以用较少的代码。而是用libpq就稍微显得繁琐。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93494/showart_2060313.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP