Oracle 学习:PL/SQL循序渐进全面学习教程
课程三 从多个表中提取数据
本课重点:
1、SELECT from 多个表,使用等连接或非等连接
2、使用外连接OUTER JOIN
3、使用自连接
注意:以下实例中标点均为英文半角
一、连接的概念:
是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。
连接类型:
等连接、不等连接、外连接、自连接
二、Cartesian product :
指的是当JOIN条件被省略或无效时,所有表的行(交叉)都被SELECT出来的现象。
Cartesian product可以产生大量的记录,除非是你有意如此,否则应该加上某种条件限制。
SQL> SELECT name, last_name
2 from s_dept, s_emp;
300 rows selected. 其中一个表12行,一个表25行。
三、简单连接查询:
SELECT table.column, table.column...
from table1, table2
WHERE table1.column1 = table2.column2;
如:SQL> SELECT s_emp.last_name, s_emp.dept_id,
2 s_dept.name
3 from s_emp, s_dept
4 WHERE s_emp.dept_id = s_dept.id;
注意:表前缀的重要性:
SQL> SELECT s_dept.id ”Department ID”,
2 s_region.id ”Region ID”,
3 s_region.name ”Region Name”
4 from s_dept, s_region
5 WHERE s_dept.region_id = s_region.id;
在WHERE 段中,如果没有前缀,两个表中都有ID字段,就显得的模棱两可,AMBIGUOUS。
这在实际中应该尽量避免。
WHERE 字段中,还可以有其他的连接条件,如在上例中,加上:
INITCAP(s_dept.last_name) = ’Menchu’;
再如:WHERE s_emp.dept_id = s_dept.id AND s_dept.region_id = s_region.id AND s_emp.commission_pct > 0;
四、表别名ALIAS:
1、使用别名进行多表查询 。
2、仅在这个查询中生效,一旦用了表别名,就不能再用表的原有的名字进行连接。
实例:
SQL> SELECT c.name ”Customer Name”,
2 c.region_id ”Region ID”,
3 r.name ”Region Name”
4 from s_customer c, s_region r
5 WHERE c.region_id = r.id;
别名最多可以30个字符,但当然越少越好。最好也能容易识别。
五、非等连接
非等连接一般用在没有明确的等
相关文档:
--行列转换 行转列
DROP TABLE t_change_lc;
CREATE TABLE t_change_lc (card_code VARCHAR2(3), q NUMBER, bal NUMBER);
INSERT INTO t_change_lc
SELECT '001' card_code, ROWNUM q, trunc(dbms_random.VALUE * 100) bal from dual CONNECT BY ROWNUM <= 4
UNION
SELECT '002' card_code, ROWNUM q, trunc(d ......
5.2 Clustered Indexes(聚集索引) (page 122)
聚集索引決定了一個表數據的物理排列順序,所以,一個表隻能有一個聚集索引。圖5.1表示了一個聚集索引的結構。
Figure 5.1
The structure of a clustered index
一個聚集索引的最底& ......
SQL时间函数
--日期转换参数,值得收藏
select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')20040912110608
select CONVERT(varchar(12) , getdate(), 111 )2004/09/12
select CONVERT(varchar(12) , get ......
【SQL SERVER 数据库实用SQL语句】
1.按姓氏笔画排序:
Select * from TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.分页SQL语句
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 结束位置
......
ORACLE 10G中新增的MODEL子句可以用来进行行间计算。MODEL子句允许像访问数组中元素那样访问记录中的某个列。这就提供了诸如电子表格计算之类的计算能力。
1、MODEL子句示例
下面这个查询获取2003年内由员工#21完成的产品类型为#1和#2的销量,并根据2003年的销售数据预测出2004年1月、2月、3月的销量。
......