使用连接
SQL 1999
SELECT table1.column, table2.column
FROM table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];

自然连接:
SELECT department_id, department_name, location_id, city
FROM departments NATURAL JOIN locations ;

select department_id, department_name,department.location_id, city
from departments, locations
where departments.location_id = locations.location_id

create table t1(c1 number, c2 number, c3 number, c4 number);
create table t2(c1 number, c2 number, c3 number);
insert into t1 values(1,1,1,1);
insert into t1 values(2,2,11,11);
insert into t1 values(3,3,3,4);
insert into t2 values(1,11,11);
insert into t2 values(1,11,11);
insert into t2 values(2,2,111);
insert into t2 values(2,2,111);
insert into t2 values(3,3,3);
insert into t2 values(3,3,3);
select * from t1 natural join t2;
select t1.c1,t1.c2,t1.c3 from t1,t2
where t1.c1 = t2.c1
and t1.c2 = t2.c2
and t1.c3 = t2.c3

using子句
select * from t1 join t2 using(c1);
select * from t1 join t2 using(c1,c2);
oracle语法
select t1.c1,t1.c2,t1.c3 from t1,t2 where t1.c1 = t2.c1
select t1.c1,t1.c2,t1.c3 from t1,t2 where t1.c1 = t2.c1 and t1.c2 = t2.c2;

SELECT employee_id, last_name,
location_id, department_id
FROM employees JOIN departments
USING (department_id) ;

using列出现在别的位置,不能用别名限定
SELECT l.city, d.department_name
FROM locations l JOIN departments d
USING (location_id)
WHERE d.location_id = 1400; (Not OK)

SELECT l.city, d.department_name
FROM locations l JOIN departments d
USING (location_id)
WHERE location_id = 1400; (OK)

on子句
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);

SELECT e.employee_id, e.last_name, department_id, d.location_id
FROM employees e JOIN departments d
USING (department_id);

SELECT employee_id, city, department_name
FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;

oracle语法
SELECT employee_id, city, department_name
FROM employees e,departments d, locations l
WHERE d.department_id = e.department_id
AND d.location_id = l.location_id;

在join中应用额外条件
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149 ;

SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
WHERE e.manager_id = 149 ;

自连接:
SELECT worker.last_name emp, manager.last_name mgr
FROM employees worker JOIN employees manager
ON (worker.manager_id = manager.employee_id);

非等值连接
select ename, sal, grade
from emp join salgrade
on (sal between losal and hisal);

select ename, sal, grade
from emp,salgrade
where sal between losal and hisal;

外连接
create table e as select * from emp;
create table d as select * from dept;
select distinct deptno from e;
select deptno from d;
select ename, e.deptno,d.deptno from e join d on (e.deptno = d.deptno);
select ename, e.deptno,d.deptno from e right join d on (e.deptno = d.deptno);
select ename, e.deptno,d.deptno from e,d where e.deptno(+) = d.deptno;

insert into e values(8888,'ZhangHua','salesman',7698,'08-SEP-87',800,0, 50);
select ename, e.deptno,d.deptno from e left join d on (e.deptno = d.deptno);
select ename, e.deptno,d.deptno from e,d where e.deptno = d.deptno(+);

交叉连接(笛卡尔积)
SELECT ename,dname FROM emp cross join dept;
SELECT ename,dname FROM emp,dept;

Oracle SQL Lesson (6) - 使用Join进行联合查询的更多相关文章

  1. SQL Server中INNER JOIN与子查询IN的性能测试

    这个月碰到几个人问我关于"SQL SERVER中INNER JOIN 与 IN两种写法的性能孰优孰劣?"这个问题.其实这个概括起来就是SQL Server中INNER JOIN与子 ...

  2. Oracle SQL——inner jion;left join;right join的区别和使用场景

    背景 在一次面试的时候,面试官让我说一下这三者的使用场景和区别,当时瞬间懵逼,哈哈.回来赶快看一看,记下来. 详解 inner join 等值查询:返回两张表中,联结字段值相等的组合记录 举例:所有学 ...

  3. Oracle SQL Lesson (9) - 操作数据(增删改)

    使用INSERT语句INSERT INTO table [(column [, column...])]VALUES (value [, value...]); INSERT INTO departm ...

  4. Oracle SQL Lesson (2) - 限制和排序数据

    重建scott用户@?/rdbms/admin/utlsampl.sql@--执行?--$ORACLE_HOME 字符区分大小写:SELECT last_name, job_id, departmen ...

  5. Oracle SQL Lesson (1) - 使用SQL Select语句获取数据

    第一节课: 启动数据库并且使用特定用户连接:su - oracle; 启动sqlplus并且使用sys连接:conn / as sysdba; 启动数据库:startup; 解锁用户:alter us ...

  6. Oracle SQL Lesson (3) - 使用单行函数自定义输出

    大小写转换函数LOWER('SQL Course') = sql courseUPPER('SQL Course') = SQL COURSEINITCAP('SQL Course') = Sql C ...

  7. Oracle SQL Lesson (4) - 使用转换函数和条件表达式

    隐式转换select * from emp where empno='7788'字符(char,varchar2)转换为数字(number)或日期(date)数字或日期转换为字符 显式转换字符转换为数 ...

  8. Oracle SQL Lesson (11) - 创建其他数据库对象(试图/序列/索引/同义词)

    schema(模式)一个用户下一组对象的集合,一般与用户名一致. 视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias].. ...

  9. Oracle SQL Lesson (5) - 使用组函数输出聚合数据

    组函数AVGCOUNTMAXMINSUMVARIANCE:方差STDDEV:标准差 SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)F ...

随机推荐

  1. SRM 624 Building Heights DivI 解读

    几乎相同的一标题.欲了解更多请参阅:http://community.topcoder.com/stat?c=problem_statement&pm=13211&rd=15857 思 ...

  2. Response.Redirect 打开这两种方法的一种新形式

    在一般情况下.Response.Redirect 该方法是在server年底转向,因此,除非 Response.Write("<script>window.location='h ...

  3. Mysql自增主键ID重新排序方法详解

    Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2 ...

  4. Android服务之PackageManagerService启动源码分析

    了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中.SystemServer进程在启 ...

  5. java学习笔记-Thread

    java定义了创建线程的两种方法 1.实现Runnable接口 2.扩展Thread类本身 1.实现Runnable接口: 可以依托任何Runnable接口的对象来创建线程.但是为了实现Runnabl ...

  6. apk应用的反编译和源代码的生成

    对于反编译一直持有无所谓有或无的态度.经过昨天一下午的尝试,也有了点心得和体会: 先给大家看看编译的过程和我们反编译的过程概图吧: 例如以下是反编译工具的根文件夹结构: 三个目录也实际上是下面三个步骤 ...

  7. 【夯实基础】Spring在ssh中的作用

    尊重版权:http://blog.csdn.net/qjlsharp/archive/2009/03/21/4013255.aspx 写的真不错. 在SSH框假中spring充当了管理容器的角色.我们 ...

  8. Android开发之Sqlite的使用

    在Android中存储数据可以用文件.数据库.网络,其中文件和数据库是最常用的,数据库我们常用的就是Sqlite,它是一种经量级的.嵌入式的关系型数据库:在android中当需要操作SQLite数据库 ...

  9. ORACLE数据库常见问题汇总

    提交事务的时候提示(数据库被一个用户锁住的解决方法) select object_id,session_id,locked_mode from v$locked_object; select t2.u ...

  10. hdu 1392(凸包)

    传送门:Surround the Trees 题意:求凸包的周长. 分析:凸包模板题,先按极角排好序后,然后根据叉积正负确定凸包. #include <stdio.h> #include ...