in 的用法:
继续引用上面的例子
“2) select * from T1 where T1.a in (select T2.a from T2) ”
这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。
打个比方:T1,T2表都有一个字段,表示工单号,但是T1表示工单号的字段名叫“ticketid”,T2则为“id”,但是其表达的意义是一样的,而且数据格式也是一样的。这时,用 2)的写法就可以这样:
“select * from T1 where T1.ticketid in (select T2.id from T2) ”
EXISTS操作符
EXISTS 操作符检查在子查询中是否存在满足条件的行
- 如果在子查询中存在满足条件的行:
– 不在子查询中继续查找
– 条件返回TRUE
- 如果在子查询中不存在满足条件的行:
– 条件返回FALSE
– 继续在子查询中查找
相关子查询
相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。子查询使用了主查询中的列。
SELECT column1, column2, ...
FROM table1 outer
WHERE columnk operator (SELECT colum1, colum2
FROM table2
WHERE expr= outer.expr);
相关更新
使用相关子查询依据一个表中的数据更新另一个表的数据。
UPDATE table1 alias1
SET column = (SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);
相关删除
使用相关子查询依据一个表中的数据删除另一个表的数据。
DELETE FROM table1 alias1
WHERE column operator (SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);
WITH子句
- 使用WITH子句,可以避免在SELECT语句中重复书写相同的语句块
- WITH子句将该子句中的语句块执行一次,并存储到用户的临时表空间中
- 使用WITH子句可以提高查询效率
我们可以使用WITH Clause来定义一个query block,然后在SELECT statement的其它地方使用这个query block。如果在一个很复杂的 Query 里,我们必须重复地使用某个 subquery,那么使用WITH Clause可以降低Query的复杂度以及提高 performance。因为WITH Clause 所读出的资料会暂存在User的temporary tablespace中。
WITH子句应用举例:
WITH
dept_costs AS (SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost AS (SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|