zoukankan      html  css  js  c++  java
  • Oracle SQL Lesson (6)

    使用连接
    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;

  • 相关阅读:
    SVN的使用
    ajax 显示,删除,批量删除,修改反填功能实现
    Linux 安装软件的几种方式
    《面向对象软件开发实践》笔记一
    Entity Framework 新手入门友好实例
    MIT 计算机科学及编程导论 Python 笔记 1
    JetBrains套装免费学生授权申请(IntelliJ, WebStorm...)
    我的十月
    关于《未成年人网络保护条例(草案征求意见稿)》的意见
    C# 分隔字符串成为字符串数组的方法(保留分隔符)
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3404800.html
Copyright © 2011-2022 走看看