基本查询:

  链接语句: sqlplus scott/tiger@192.168.56.101:1521/orcl

  SQL> --清屏
  SQL> host cls (host clear)

  SQL> --当前用户
  SQL> show user

  SQL> --当前用户下的表
  SQL> select * from tab;

  SQL> --员工表的结构
  SQL> desc emp

  SQL> --查询所有的员工信息
  SQL> select * from emp;

  SQL> --设置行宽(表的显示)
  SQL> show linesize
      linesize 80
  SQL> set linesize 150

  SQL> --设置列宽(表的显示)
  SQL> col ename for a8
  SQL> col sal for 9999
  SQL> /

  SQL> --c命令 change (出错后更改SQL语句)(或者使用eq编辑原语句)
  SQL> 2
         2* form emp
  SQL> c /form/from
              2* from emp
  SQL> /

  SQL中的列别名:
    1:列名后面跟 as;
    2:as可以直接省略:
    3:别名的双引号也可以省略(但是省略引号之后不能在其中加空格之类的);

select  empno  as  "员工号", ename   "姓名",  sal   "月 薪",  sal*12,  comm,  sal*12+nvl(comm,0)   from emp;

  

  distinct去掉重复记录

select distinct deptno from emp;
select distinct deptno, job from emp;(distinct作用于后面所有的列)

  连接符: || 相当于 concat 函数

SQL> select concat('Hello',' World') from emp; (其后面必须查询一张表,一般使用 dual表(伪表) );
SQL> select 'Hello'||' World' from dual;
SQL> select ename||'的薪水是'||sal 信息 from emp;

  在SQL语句中, 字符 和 日期 使用单引号包裹起来,且字符大小写敏感, 日期格式敏感.

    SQL> --修改日期格式

SQL> select * from v$nls_parameters; (查看基本参数)
SQL> alter session|system set NLS_DATE_FORMAT='yyyy-mm-dd';(更改日期格式)

过滤(where)

  SQL> --between and: 1. 含有边界 2. 小值在前 大值在后
  SQL> --查询薪水1000~2000之间的员工

SQL> select  *  from  emp  where  sal  between    and  ; 

  SQL> --in 在集合中

SQL> select * from emp where deptno in (,); 查询10和20号部门的员工
   select * from emp where deptno not in (,);查询不是10和20号部门的员工

     like 模糊查询
      查询名字中含有下划线的员工

SQL> elect  *  rom  emp  where  ename  like  '%\_%'   escape '\' ; (使用escape声明一个转义字符)

排序:

  查询员工信息 按照月薪排序

SQL> select * from emp order by sal; (ASC;DESC)
   (order by后面 可以跟 : 列, 表达式, 别名, 序号)
SQL> select empno, ename, sal, sal* 年薪 from emp order by sal* desc; (年薪,)

  多个列排序: order by 作用于后面所有的列;desc只作用于离他最近的列

SQL> select  *  from  emp  order  by  deptno  desc, sal  desc;

单行函数:
  通用函数
    1.nvl(a,b) 如果a为null,那么返回b.
    2.nvl2(a,b,c) 当a=null的时候,返回c;否则返回b
    3.nullif(a,b) 当a=b的时候,返回null;否则返回a
    3.coalesce(a,b,c...): 从左到右第一个不为null的值

  字符函数

 select  lower('Hello World')  转小写, upper('Hello World')  转大写, initcap('hello world')  首字母大写  from  dual;

    

    substr(a,b,c) 从a中,第b位开始取,取c位(无c取到末尾)
         

 select  substr('Hello World',,)  子串  from  dual;

    instr(a,b) :查询b在a中的位置

select  instr('Hello World','ll')  位置  from  dual;  (结果为3)

    length 字符数    lengthb 字节数

select  length('北京')  字符, lengthb('北京')  字节  from  dual;

    lpad 左填充    rpad 右填充
      SQL> -- abcd ---> 10 位

select  lpad('abcd', , '*')  左, rpad('abcd', , '*')  右  from  dual;

    trim 去掉前后指定的字符

select  trim('H'  from  'Hello WorldH')  from  dual;

    replace(a,b,c) 将a中的b使用c替换

select  replace('Hello World', 'l', '*')  from  dual;

  number函数

    round(a,b) 将a四舍五入留b为小数点
      

select  round(45.926, )  一, round(45.926, )  二, round(45.926, )  三,round(45.926, -)  四,  round(45.926, -)   五   from  dual;

    trunc(a,b) 将a截断保留b为小数点
      

select  trunc(45.926, )  一, trunc(45.926, )  二,  trunc(45.926, )   三,trunc(45.926, -)  四, trunc(45.926,  -)  五   from   dual;

  date函数
    查询当前时间
     

 select sysdate from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
 select (sysdate-) 昨天,sysdate 今天,(sysdate+) 明天 from dual;

    months_between 两个日期之间间隔的月数
      

select ename,hiredate,months_between(sysdate,hiredate) from emp;

    add_months 当前日期下加上多少个月
      

select add_months(sysdate,) from dual;

      last_day:日期所在月的最后一天
     

 select last_day(sysdate) from dual;

    next_day :某日期的下一个某一天(多有于分布式数据库,触发器,快照)
      下一个星期日
     

 select next_day(sysdate,'星期日') from dual;

  显式类型转换
    TO_NUMBER   <>    TO_CHAR(number,'format')   数字和字符串类型的转换
      

select to_char(sal,  'L9,999.99')   from    emp;

    TO_DATE     <>  TO_CHAR('date','format')   时间和字符串类型的转换
     

 select to_char(sysdate,  'yyyy-mm-dd hh24:mi:ss')   from   dual;

  条件表达式(类似 if else ):
    

case :
      select ename, job, sal 涨前,
          case job when 'PRESIDENT' then sal+
               when 'MANAGER' then sal+
             else sal+
          end 涨后
        from emp;
   decode:
      select ename, job, sal 涨前,
          decode(job, 'PRESIDENT', sal+,
               'MANAGER', sal+,
               sal+) 涨后
         from emp;

多行函数:

    count(); 计数
    sum(); 求和
    avg(); 平均值
    max(); 最大值
    min(); 最小值
    wm_concat(); 列转行

    

select deptno,avg(sal)    from emp group by deptno having avg(sal) > ; 

      : 在select中没有在 组函数中的列必须要在 group by 子句中
      : where后面不能有 组函数, having后面可以有组函数.

    group by 语句的增强:

      select deptno,job,sum(sal) from emp group by deptno,job
        +
      select deptno,sum(sal) from emp group by deptno
        +
      select sum(sal) from emp
        合成:
      select deptno,job,sum(sal) from emp group by rollup(deptno,job);

    作用: sql*plus报表

多表查询
  等值连接(内连接)
    

select  e.empno, e.ename, e.sal, d.dname  from  emp  e, dept  d  where  e.deptno = d.deptno;

  不等值连接
   

 select  e.empno, e.ename ,e.sal, s.grade  from  emp  e, salgrade  s where  e.sal  between  s.losal  and  s.hisal;

  左外连接:当where e.deptno=d.deptno不成立的时候,等号左边的表任然被包含
    写法:where e.deptno=d.deptno(+)
   右外连接:当where e.deptno=d.deptno不成立的时候,等号右边的表任然被包含
    写法: where e.deptno(+)=d.deptno

  自连接
    

select  e.ename  员工姓名, b.ename  老板姓名  from  emp  e, emp  b  where  e.mgr=b.empno;

  层次查询

select level,empno,ename,mgr from emp connect by prior empno=mgr start with mgr is null order by ;

子查询
注意的问题:

  1. 括号
    子查询(内查询)语句必须写在括号中
  2. 合理的书写风格
    子查询语句必须要有合理的书写规范
  3. 可以在where  select  having  from 后面 都可以使用子查询

select empno,ename,sal,(select job from emp where empno=) 第四列 from emp;

    (select 子句中只能使用的单行子查询)
  4. 不可以在group by后面使用子查询

  5. 强调from后面的子查询

select * from (select empno,ename,sal from emp);

    (性能同select empno,ename,sal from emp; 一样)
  6. 主查询和子查询可以不是同一张表;只要子查询返回的结果 主查询可以使用 即可

select * from emp where deptno=(select deptno from dept where dname='SALES');

  7. 一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序(rownum为伪列)

select rownum,ename,sal from (select * from emp order by sal desc) where rownum<=;

  8. 一般先执行子查询,再执行主查询;但相关子查询例外
    相关子查询:将主查询中的值 作为参数传递给子查询

select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e where sal > (select avg(sal) from emp where deptno=e.deptno);

  9. 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
   在集合中
    查询部门名称是SALES和ACCOUNTING的员工

select * from emp where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');

    any: 和集合中的任意一个值比较
    查询工资比30号部门任意一个员工高的员工信息

select * from emp where sal > any (select sal from emp where deptno=);

    all 和集合中的所有值比较
    查询工资比30号部门所有员工高的员工信息

select * from emp where sal > all (select sal from emp where deptno=);

  10.子查询中的null

  分页:

select * from (select rownum r,e1.* from (select * from emp order by sal) e1 where rownum <=)
where r >=;

Oracle的DQL的更多相关文章

  1. oracle(5)--DQL查询语句

    DQL 数据查询语句(data query language) 1.查询条件符号: < ,  > ,  = ,    <= ,  >= ,    != ,  < > ...

  2. oracle之DQL

    一.单表查询 语法:select * from table where 条件 group by 分组 having 过滤分组 order by 排序 --查询平均工资低于2000的部门的最大工资和平均 ...

  3. Oracle查询DQL脚本记录

    --查询列 Select t.sname,t.ssex,t.class from student t --t 别名; Select *from student t; --* 代表查询表内所有数据 '; ...

  4. oracle学习笔记(四) DQL数据查询语言和TCL 事务控制语言

    DML 数据管理语言 Data manage language insert, update, delete以及select语句,不过,有人也把select单独出来,作为DQL 数据查询语言 data ...

  5. Oracle——DQL、DML、DDL、DCL

    1.DQL:数据查询语言 基本结构:由select.from.where组成 子句组成的查询块:    SELECT <字段名表>    FROM <表或视图名>    WHE ...

  6. Oracle数据库基本操作(三) —— DQL相关内容说明及应用

    本文所使用的查询表来源于oracle数据中scott用户中的emp员工表和dept部门表. 一.基本语法 SQL语句的编写顺序: select 输出的列 from 表名 where 条件 group ...

  7. Oracle DQL查询语言整理

    select * from t_hq_ryxx; select nianl, xingm from t_hq_ryxx; select nianl as 年龄, xingm as 姓名 from t_ ...

  8. [原创]关于ORACLE的使用入门

    Oracle===============================数据库:Oracle------>甲骨文(Oracle) 49+%DB2---------->IBM 49+%Sq ...

  9. Oracle的SQL基础

    1.了解SQL的种类 (1)DDL 数据定义语言:定义数据库中数据要如何存储的,包括对数据库对象的创建(create)修改(alter)删除(drop)的操作,这些对象主要有数据库,数据表,视图,索引 ...

随机推荐

  1. jenkins插件findbugs+pmd+checkstyle结合sonar与maven(java环境代码质量和代码规范管理)

    一.下载jdk并安装(最好jdk官网下载解压安装的) 二.下载maven并安装maven 三.安装jenkins及插件 安装checkstyle.pmd.findbugs.maven.sonar等相关 ...

  2. vue開發環境搭建

    npm(node package manager),nodejs的包管理器,用於nodejs插件的安裝.卸載和管理依賴. 安裝npm: 檢查npm是否安裝成功及版本:npm -v 卸載npm: 更新n ...

  3. jQuery插件开发的基本形式

    (function ($, window, document, undefined) { "use strict"; var defaults = { pageIndex: 0, ...

  4. Paint it really, really dark gray CodeForces - 717E

    Paint it really, really dark gray CodeForces - 717E 题意 有一棵树 每个结点是粉色或黑色 每经过一个结点 就改变他的颜色 从1开始遍历 打印出一条路 ...

  5. 【数学建模】day09-聚类分析

    0. 多元分析之聚类分析. 聚类分析是一种定量方法,从数据的角度,对样本或指标进行分类,进而进行更好的分析. 分为Q型聚类和R型聚类. 1. Q型聚类分析是对样本进行分类.有若干样本,我们把这些样本分 ...

  6. sql server2012学习笔记

    第1章 SQL安装   1-1 [SQL Server基础]前言 (10:44) 1-2 SQL Server安装 (08:29) 1-3 第一次登陆 SQL Server (02:58) 1-4 [ ...

  7. BZOJ1449[JSOI2009]球队收益&BZOJ2895球队预算——最小费用最大流

    题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示   要求总费用最低 ...

  8. 洛谷P1402 酒店之王

    传送门:>Here< 题意:有N个人去酒店,酒店共有P个房间,Q道菜.已知每个人喜欢特定的几个房间和几道菜,一个人是满意的当且仅当住了喜欢的房间,吃了喜欢的菜(一个人只能选一个房间一道菜) ...

  9. git 提交报错 : The file will have its original line endings in your working directory.

    报错现象 git  add . 的时候发现此报错 报错分析 看情况应该是不同系统对换行的识别不到位导致的 就常识来说文件是在windows下生成的所以换行和 linux 确实不同可能是因为这个导致的 ...

  10. Failed to load package MonoAndroidDesignerPackage

    from : https://developercommunity.visualstudio.com/content/problem/160124/failed-to-load-package-mon ...