Chinaunix首页 | 论坛 | 博客
  • 博客访问: 511922
  • 博文数量: 174
  • 博客积分: 8001
  • 博客等级: 中将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 19:30
文章分类

全部博文(174)

文章存档

2011年(1)

2010年(24)

2009年(149)

我的朋友

分类: LINUX

2009-09-26 00:20:47

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就稍微显得繁琐。
阅读(1242) | 评论(0) | 转发(0) |
0

上一篇:overview

下一篇:安装POSTGRESQL并启动

给主人留下些什么吧!~~