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