zoukankan      html  css  js  c++  java
  • Oracle数据库2--Select查询语句

    1.Select查询

    select 用于从数据看查询数据。语法:

    select field1,filed2,.. .

    from tablename

    [where condition]

    -- 查询所有员工的名字和雇员号
    select empno,ename from emp;
    
    -- 查询所有员工的雇员号、姓名、岗位
    select empno,ename,job from emp;
    
    -- 字段的别名 as
    select ename as "姓名" from emp;
    select ename as "姓名",job as "岗位" from emp;
    
    -- 别名一定要用双引号,不能用单引号
    select ename "姓名",job "岗位" from emp;
    -- 双引号可以省略
    select ename 姓名 from emp;
    
    -- 表的别名
    select emp.ename,emp.job from emp;
    select e.ename,e.job from emp e;

    2.where语句

    where 表示查询的条件。

    [1] =,!= ,<>,<,>,<=,>= 关系运算符

    -- where 子句
    
    -- 把部分10的雇员查询出来
    select * 
    from emp 
    where deptno = 10;
    
    -- 把名称为smith的雇员
    select e.*
    from emp e
    where e.ename = 'SMITH';
    
    -- 查询底薪大于等于1000的员工
    select e.*
    from emp e
    where e.sal >= 1000;
    
    select e.*
    from emp e
    where e.sal <> 800

     【2】any/some/all (list)

    any/some(list) 满足list列表中的任意一个条件

    all(list) 满足list列表的中所有条件

    -- any some all
    
    -- 查询薪资大于1000或者薪资大于800的雇员
    select e.*
    from emp e
    where e.sal > some(1000,800);
    
    -- 查询薪资大于1000
    select e.*
    from emp e
    where e.sal > all(1000,800);

    【3】null

    null 在sql中表示的是不确定 => 可以认为没有值

    -- null/not null
    -- 查询没有津贴的雇员
    select e.*
    from emp e
    where e.comm is null
    
    select e.*
    from emp e
    where e.comm is not null

    【4】between x and y 

    表示一个值位于[x,y]区间,x/y 一般都是数字。

    -- between x and y
    -- 查询薪资在1000-5000之间的雇员
    select e.*
    from emp e
    where e.sal between 1000 and 5000
    
    -- 查询薪资在(3000,5000]之间的雇员
    select e.*
    from emp e
    where e.sal between 3000.01 and 5000

    【5】 in/not in list

    表示字段值是否在list列表中

    -- in/not in(list)
    -- 查询部分号是10和20的员工
    select e.*
    from emp e
    where e.deptno in(10,20);
    
    select e.*
    from emp e
    where e.deptno not in(10,20);
    
    -- 查询薪资是1000,2000,5000的员工
    select e.*
    from emp e
    where e.sal in (1000,2000,5000);

    【6】模糊查询

    like 关键字用于模糊查询,其中

    %:表示任意字符出现多次(含0次),

    _:表示任意字符出现1次。

    escape(‘x’) 表示指定转义字符为x,一般指定为

    -- 查询名字是c开头的雇员
    
    select e.*
    from emp e
    where e.ename like 'c%';
    
    -- 查询名字中第二个字母是M的雇员
    select e.*
    from emp e
    where e.ename like '_M%'
    
    -- 查询名字中含有M的雇员
    select e.*
    from emp e
    where e.ename like '%M%';
    
    -- 查询名字中含有%的雇员
    select e.*
    from emp e
    where e.ename like '%\%%' escape('');

    3.复杂查询(and/or)

    where 后面的条件可以跟多个通过and 或者 or 连接

    and:且、并且

    or: 或、或者

    -- 查询部门10且薪资大于等2000的雇员
    select e.*
    from emp e
    where e.deptno = 10 and e.sal >= 2000;
    
    -- 查询名字中含M且薪资大于1000的雇员
    select e.*
    from emp e
    where e.ename like '%M%' and e.sal > 1000
    
    -- 查询部门在10或20的雇员
    select e.*
    from emp e
    where e.deptno = 10 or e.deptno = 20

    where 中and、or的执行效率问题

    -- 思考:查询条件的顺序对查询速度是否有影响?
    
    /*
    分析:
    and 表示且,条件越多,检索的数据量越来越少
    or 表示或,条件越多,检索的数据量越来越多
    where 条件的执行顺序从后向前
    */
    
    -- 优化后的sql
    select e.*
    from emp e
    where e.sal>=2000 and e.deptno = 10
    -- 结论
    -- AND:  把检索结果较少的条件放到后面
    
    -- 查部门10或30的雇员
    select e.*
    from emp e
    where e.deptno = 10 or e.deptno = 30;

    and 和 or同时存在时,and先执行。

    案例:

    --使用in查询部门名称为 SALES 和 RESEARCH 的雇员姓名、工资、部门编号
    -- 思考:部门名称位于dept,雇员信息位于emp表
    select e.ename,e.sal,e.deptno
    from emp e
    where e.deptno in 
    (
    select d.deptno
    from dept d
    where d.dname = 'SALES' or d.dname = 'RESEARCH'
    );
  • 相关阅读:
    Python数据分析的几种绘图方式——数据可视化(附源码)
    Python GUI项目实战:主窗体的界面设计与实现
    Python Scrapy框架:数据爬取全流程
    python来爬取煎蛋网随手拍小姐姐图片
    有意思的逻辑小练习:函数做参数进行传递
    python值*args和**kwargs的总结思考
    数据类型的基础知识补充,字典的并交集、空集合、可作为字典元组的元素、删除字典中的元素
    python里面为什么shell和保存文件运行结果不一样的相关思考(内存相关)
    代码:购物车(待修改)
    python里面为什么shell和保存文件运行结果不一样?
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/10859223.html
Copyright © 2011-2022 走看看