Oracle数据库中Select语句语法及介绍

SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…]

FROM <表名1>,<表名2>[,…]

[WHERE <筛选择条件表达式>]

[GROUP BY <分组表达式> [HAVING<分组条件表达式>]]

[ORDER BY <字段>[ASC | DESC]]

语句说明:

[]方括号为可选项

[GROUP BY <分组表达式> [HAVING<分组条件表达式>]]

指将结果按<分组表达式>的值进行分组,该值相等的记录为一组,带【HAVING】

短语则只有满足指定条件的组才会输出。

[ORDER BY <字段>[ASC | DESC]]

显示结果要按<字段>值升序或降序进行排序

sql各子句的执行顺序:

1. FROM

2. WHERE

3. GROUP BY

4. HAVING

5. SELECT

6. ORDER BY

www.169it.com

 

  多表关联查询

表的连接是指在一个SQL语句中通过表与表之间的关连,从一个或多个表中检索相关的数据,大体上表与表之间的连接主要可分四种,分别为相等连接,外连接,不等连接和自连接,本文将主要从以下几个典型的例子来分析Oracle表的四种不同连接方式:

  1. 相等连接

  通过两个表具有相同意义的列,可以建立相等连接条件。

  只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。

  例 查询员工信息以及对应的员工所在的部门信息;

  SELECT * FROM EMP,DEPT;

  SELECT * FROM EMP,DEPT;

  WHERE EMP.DEPTNO = DEPT.DEPTNO;

  REM 显示工资超过2000的员工信息以及对应的员工的部门名称。

  2. 外连接

  对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。除了显示匹配相等连接条件的信息之外,还显示无法匹配相等连接条件的某个表的信息。

  外连接采用(+)来识别。

  A) 左条件(+) = 右条件;

  代表除了显示匹配相等连接条件的信息之外,还显示右条件所在的表中无法匹配相等连接条件的信息。

  此时也称为"右外连接".另一种表示方法是:

  SELECT ... FROM 表1 RIGHT OUTER JOIN 表2 ON 连接条件

  B) 左条件 = 右条件(+);

  代表除了显示匹配相等连接条件的信息之外,还显示左条件所在的表中无法匹配相等连接条件的信息。

  此时也称为"左外连接".

  SELECT ... FROM 表1 LEFT OUTER JOIN 表2 ON 连接条件

  例 显示员工信息以及所对应的部门信息

  --无法显示没有部门的员工信息

  --无法显示没有员工的部门信息

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

  --直接做相等连接:

  SELECT * FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

  REM 显示员工信息以及所对应的部门信息,显示没有员工的部门信息

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;

  SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

  REM 显示员工信息以及所对应的部门信息,显示没有部门的员工信息

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO(+);

  SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

  3. 不等连接

  两个表中的相关的两列进行不等连接,比较符号一般为>,<,...,BETWEEN.. AND..

  REM SALGRADE

  --DESC SALGRADE;

  --SELECT * FROM SALGRADE;

  REM 显示员工的编号,姓名,工资,以及工资所对应的级别。

  SELECT EMPNO,ENAME,SAL,SALGRADE.* FROM SALGRADE,EMP

  WHERE EMP.SAL BETWEEN LOSAL AND HISAL;

  REM 显示雇员的编号,姓名,工资,工资级别,所在部门的名称;

  SELECT EMPNO,ENAME,SAL,GRADE,DNAME FROM EMP,DEPT,SALGRADE

  WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.SAL BETWEEN LOSAL AND HISAL;

  4. 自连接

  自连接是数据库中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。下面介绍一下自连接的方法:

  将原表复制一份作为另一个表,两表做笛卡儿相等连接。

  例 显示雇员的编号,名称,以及该雇员的经理名称

  SELECT WORKER.ENAME,WORKER.MGR,MANAGER.EMPNO,MANAGER.ENAME FROM EMP WORKER,EMP MANAGER

  WHERE WORKER.MGR = MANAGER.EMPNO;

本文来源:Oracle 数据库(oracle Database)Select 多表关联查询方式

Oracle 数据库(oracle Database)Select 多表关联查询方式的更多相关文章

  1. ORACLE数据库多表关联查询效率问题解决方案

    最近在做项目中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询一次大概要20多秒,经过一番苦思冥想,处理方案如下: 1.软件设计初期,需要一对一关联的表应该设计在一张大表里,这样虽然字 ...

  2. 多表关联查询(ORACLE版)

    前言:这几天学习oracle,把自己对于关联查询的理解,记录下.如有错误请指正! 交叉连接: 交欢连接又称为“笛卡儿积连接”,是两个或多个表之间的无条件连接.一个表中所有的记录与其它表的所有的记录进行 ...

  3. oracle 两表关联查询

      oracle 两表关联查询 CreationTime--2018年7月4日17点27分 Author:Marydon 情景描述 查询学生表student,sname,sex,age信息及所在班级c ...

  4. 查看Oracle数据库被锁住的表,删除锁表的进程

    锁表处理及查询 查看Oracle数据库被锁住的表,删除锁表的进程 1.查看被锁住的表 SELECT dob.object_name table_name,    lo.locked_mode, lo. ...

  5. 查看oracle数据库下面的所有的表,执行某个sql脚本:

    查看oracle数据库下面的所有的表: select * from user_tables;//user为用户名 执行某个sql脚本: SQL>@e 文件名.sql

  6. Oracle\MS SQL Server Update多表关联更新

    原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...

  7. oracle多表关联查询和子查询

    oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...

  8. Oracle数据库delete删除普通堆表千万条记录

    Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操作. ...

  9. 在mysql数据库中创建Oracle数据库中的scott用户表

    在mysql数据库中创建Oracle数据库中的scott用户表 作者:Eric 微信:loveoracle11g create table DEPT ( DEPTNO int(2) not null, ...

随机推荐

  1. acm位运算应用 搜索

    acm位运算应用 搜索 搜索    此处不讲题目,只讲位运算是怎样在这些题中实现和应用的.由于搜索题往往是基于对状态的操作,位运算往往特别有效,优化之后的效果可以有目共睹.    例1.POJ 132 ...

  2. c++11 lambda递归调用写法

    偶然想到要在函数内部使用lambda递归调用,以下是可行的写法,可参考 std::function<void(Node * container,const BlendFunc &blen ...

  3. sed命令教程

    转载自:http://coolshell.cn/articles/9104.htmlawk于1977年出生,今年36岁本命年,sed比awk大2-3岁,awk就像林妹妹,sed就是宝玉哥哥了.所以 林 ...

  4. HW2.5

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. HDU2196 - Computer(树形DP)

    题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了.我们可以发现,对于每个结点的最长路,要么是从子树得 ...

  6. HDU1671 - Phone List(Trie树)

    题目大意 给定一些电话号码,判断是否有电话号码是其他电话号码的前缀 题解 裸Trie树嘛~~~~只需要一个插入过程即可,假设X是Y的前缀,在插入的过程中有两种情况,X在Y之前插入,那么在插入Y的时候经 ...

  7. HDU1075 - What Are You Talking About(Trie树)

    题目大意 给定一些火星文单词以及对应的英语单词,然后给你一些火星文,要求你翻译成对应的英文 题解 第一次写Trie树! 把所有火星文单词插入到Trie树中,并且每个火星文单词结尾的节点记录相应英文单词 ...

  8. fzu2109--Mountain Number(数位dp)

     Problem Description One integer number x is called "Mountain Number" if: (1) x>0 and x ...

  9. URL参数带中文,后台接收乱码解决方案

    1.前台中文参数用encodeURIComponent()进行编码,如: var textName= encodeURIComponent(name); 2.对整个URL用encodeURI()进行编 ...

  10. 问题-[Access]“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法

    问题现象:ado.net oledb方式访问Access数据库文件时报错“无法打开工作组信息文件中的表 'MSysAccounts'”的问题的解决方法  问题处理:1.数据库名称不能命名为:Syste ...