星期三, 三月 07, 2007

SQL学习笔记(转)

SQL

1 1. 一张表不能同时和复数张表外连接。

2只有当同一张表的多个连接条件均为外连接时,外连接才起作用。

3同一张表的多个外连接条件中,只要一个不满足条件,该表的记录则为空。

4使用集合函数的SQL中,可用HAVING指定集合后结果的条件。

例:SELECT x,SUM(i) FROM A GROUP BY x HAVING SUM(i) > 100

5排序操作中,NULLSQLSERVER中被作为最小值,在ORACLE DB2中被作为最大值。

ORACLE9i中,可用NULLS FIRST,NULLS LAST来改变NULL 记录的位置。

例:SELECT * FROM foo ORDER BY a DESC NULLS LAST

6WHERE条件中的子查询,会与主表中的记录逐条匹配,因此效率低下。

7INSERT ALL(*ORACLE)可以同时登录多条记录,可以同时登录多张表。

语法中SELECT 是必须的。例:INSERT ALL INTO foo VALUES(1,2) INTO

foo VALUES(3,4) SELECT * FROM DUAL

INSERT ALL

WHEN a < 10000 THEN

INTO bar1

ELSE

INTO bar2

SELECT a,b FROM foo

8(*ORACLE) 符合条件的记录存在时更新,不存在时登录。

MERGE INTO bar USING foo ON (foo.a = bar.a)

WHEN MATCHED THEN UPDATE SET bar.b = foo.b,bar.c = foo.c

WHEN NOT MATCHED THEN INSERT(bar.a,bar.b,bar.c)

VALUSE(foo.a,foo.b,foo.c)

9. SELECT FOR UPDATE OF 锁记录

SELECT * FROM foo ,bar WHERE foo.a = bar.a AND bar.b = abc FOR UPDATE

OF foo.a NOWAIT

10. LOCK TABLE 锁表

11. 记录集合差运算MINUS,只取得主表中,从表中没有的记录。

例:SELECT a FROM foo MINUS SELECT a FROM bar

12. 记录集合交集运算INTERSECT ,取出两张表中都存在的记录。

例:SELECT a FROM foo INTERSECT SELECT a FROM bar

13. 字符串连接运算符:

例:SELECT 姓名 '(' 性别 ')' FROM 个人信息