oracle数据库操作---2 基本 SELECT 语句 查询数据(单表中的数据查询)

蓝咒 提交于 2020-02-01 04:18:27

基本 SELECT 语句 查询数据(单表中的数据查询)

具体语句展示

需要注意的是在这里我使用的是PLSQL连接到oracle数据库然后登录hr用户后,在SQL语句窗口中运行的代码,hr用户默认会有很多张表可供练习。

  1. 选择全部列

    select * from employees;
    

    在这里插入图片描述

  2. 选择特定的列

    select first_name,last_name
    from employees;
    

    在这里插入图片描述
    注意
    SQL 语言大小写不敏感。
    SQL 可以写在一行或者多行
    关键字不能被缩写也不能分行
    各子句一般要分行写。
    使用缩进提高语句的可读性。

  3. 算术运算符在SQL中的使用
    数字和日期使用的算术运算符 (+ - * /)
    使用数学运算符
    运算时也拥有优先级

    1. 乘除的优先级高于加减。
    2. 同一优先级运算符从左向右执行。
    3. 括号内的运算先执行。
    select first_name,last_name,2*(salary+100)
    from employees;
    

    在这里插入图片描述

  4. 定义空值
    空值是无效的,未指定的,未知的或不可预知的值
    空值不是空格或者0。

    select first_name,last_name,salary,commission_pct,(salary + salary * commission_pct)*12 
    from employees;
    

    在这里插入图片描述
    这里你会发现,没有奖金的人的年薪并不会被计算,为什么呢?
    那是因为含有空值的数学表达式的值都为空值
    因此这时候我们需要对空值进行处理以期达到我们的预期目的,输出所有人的年薪,即使他没有奖金,代码如下:

    /*计算每一个员工的年薪 包括奖金
    -- 当员工commission_pct为null的时候 则得到的计算结果也为null
    --在一个运算中 如果有null值参与 则结果为null
    --nvl函数 是进行空值处理 NVL(commission_pct,0) 表示对于该字段中的null在运算中使用0来替代*/
    select first_name,last_name,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12 
    from employees;
    

    在这里插入图片描述

  5. 列的别名
    列的别名:
    重命名一个列。
    便于计算。
    紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
    比如我将上面的结果命名为year_salary(as也可以省略):

    select first_name,last_name,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12 as year_salary 
    from employees;
    

在这里插入图片描述

  1. 连接符
    把列与列,列与字符连接在一起。
    用 ‘||’表示。
    可以用来‘合成’列。

    -- 连接符的使用
    -- 将frist_name 和last_name 拼接起来 形成fullname
    select  first_name ,last_name,first_name||' '||last_name full_name 
    from employees;
    

    在这里插入图片描述

  2. 字符串
    字符串可以是 SELECT 列表中的一个字符,数字,日期。
    日期和字符只能在单引号中出现。
    每当返回一行时,字符串被输出一次。

    SELECT last_name  ||' is a '||job_id "Employee Details"
    FROM   employees;
    

    在这里插入图片描述

  3. 重复行
    在 SELECT 子句中使用关键字 ‘DISTINCT’ 删除重复行。

    SELECT department_id
    FROM   employees;
    

    在这里插入图片描述

    select distinct department_id
    from employees;
    

    在这里插入图片描述

  4. 统计

    -- 统计
    --查询表中的记录数
    -- 在统计的时候 如果选择根据某一个字段来统计 则如果该字段包含null值 则null不会被统计
    --在统计的选择中 一般可以使用*  但是* 表示根据所有的字段进行统计 效率相对较低
    --所以根据某一个字段统计 是一种比较好的选择 但是不能选择包含null值的列 
    --一般选择主键列来作为统计列
    select count(*) from employees;
    select count(employee_id) from employees;
    select count(commission_pct) from employees;
    
  5. 过滤查询(where)
    •使用WHERE 子句,将不满足条件的行过滤掉。
    •WHERE 子句紧随 FROM 子句。

    --where  后边所跟的就对数据的过滤条件
    --查询id为90的部门的所有员工
    select * from employees where department_id =90;
    

    在这里插入图片描述

    --查询last_name为Whalen的员工
    -- 在过滤条件中 字符串必须使用单引号引起来 同时对值的过滤 是区分大小写
    -- = 表示严格匹配
    select * from employees where last_name = 'Whalen';
    

    在这里插入图片描述

  6. 一般比较运算符
    一般比较运算符
    在这里插入图片描述

    --查询薪资小于等于3000的雇员信息
    select * from employees where salary <= 3000;
    --查询工龄大于Steven的雇员信息
    select * from employees where hire_date<'17-JUN-2003';
    --查询不是90部门的所有的雇员信息
    select * from employees where department_id <>90;
    select * from employees where department_id !=90;
    

    都有结果一一对应不再赘述

  7. 其他比较运算符
    在这里插入图片描述

    1. 使用 BETWEEN 运算来显示在一个区间内的值
    2. IN
    3. LIKE
      使用 LIKE 运算选择类似的值
      选择条件可以包含字符或数字:
      % 代表零个或多个字符(任意个字符)。
      _ 代表一个字符。
    4. ESCAPE
      回避特殊符号的:使用转义符。例如:将[%]转为[%]、[_]转为[_],然后再加 上[ESCAPE ‘\’] 即可。
    5. NULL
      使用 IS (NOT) NULL 判断空值。
    6. and or not 这些逻辑运算符
      AND 要求并的关系为真
      OR 要求或关系为真。
      NOT 没啥说的
    7. 优先级在这里插入图片描述

    下面是一些具体应用的代码:

    --工资在2500到3500之间的雇员信息 包含边界值
    --使用 BETWEEN 运算来显示在一个区间内的值
    select *from employees where salary between 2500 and 3500;
    select * from employees where salary >= 2500 and salary <= 3500;
    
    -- IN  查询雇员编号为 115 116 117 的雇员信息
    select * from employees where employee_id = 115 or employee_id=116 or employee_id=117;
    select * from employees where employee_id in(115,116,117);
    
    --like  查询雇员名以字母A开头的雇员信息 需要结合% 、_两个通配符使用
    select * from employees where first_name like 'A%';
    
    --查询雇员名中的第二个字母为a的雇员信息
    select * from employees where first_name like '_a%';
    
    --查询雇员名字中包含字母a的雇员信息
    select * from employees where first_name like '%a%';
    
    select * from employees where first_name like '%A%';等同与
    select * from employees where first_name like 'A%';
    
    --IS NULL 查询没有奖金的雇员信息
    select * from employees where commission_pct is null;
    
    --IS not NULL 查询有奖金的雇员信息
    select * from employees where commission_pct is not null;
    
    SELECT job_id
    FROM   jobs
    WHERE  job_id LIKE 'IT\_%' escape '\';
    

    每段都有相应的结果,不再赘述

  8. ORDER BY子句的使用
    使用 ORDER BY 子句排序
    ASC(ascend): 升序
    DESC(descend): 降序
    ORDER BY 子句在SELECT语句的结尾。

    --ORDER BY 
    --查询所有的雇员信息 并根据薪资进行排序  当不指明排序规则时 默认时升序
    select * from employees order by salary;
    ----查询所有的雇员信息 并根据薪资进行排序 从大到小 降序
    select * from employees order by salary desc;
    
    --查询所有的雇员信息 根据first_name 进行降序排序 
    --对于值为字符串的字段的排序 是根据字典顺序
    select * from employees order by first_name ;
    
    --查询所有的100部门的员工信息 并根据入职时间进行升序显示
    select * from employees where department_id =100 order by hire_Date;
    
    

    使用别名排序

    -- 计算所有的雇员的年薪(yearSalary)包含奖金 并按照年薪进行排序
    select  first_name ,last_name ,salary ,salary * (1 + NVL(commission_pct,0))*12 YEARSALARY  
    from employees 
    ORDER BY YEARSALARY;
    

    多字段排序
    在order by 后边可以跟多个字段 当第一个字段的值相同时 则根据第二个字段进行排序 并且可以分别为每个字段指定排序规则

    --查询所有的雇员信息 并按照入职时间排序 如果入职时间相同 则按照薪资从高到底排序
    select * from employees order by hire_date desc ,salary asc;
    

附加部分,SQL 语句与 SQL*Plus 命令

  • SQL(sql窗口中可以运行)
    一种语言
    ANSI 标准
    关键字不能缩写
    使用语句控制数据库中的表的定义信息和表中的数据
  • SQL*Plus(oracle命令行窗口中可以运行)
    一种环境
    Oracle 的特性之一
    关键字可以缩写
    命令不能改变数据库中的数据的值
    集中运行
  • 在sql窗口中 只能执行sql语句 不能执行oracle的命令
    • 使用SQLPlus可以:
      描述表结构。
      编辑 SQL 语句。
      执行 SQL语句。
      将 SQL 保存在文件中并将SQL语句执行结果保存在文件中。
      在保存的文件中执行语句。
      将文本文件装入 SQL
      Plus编辑窗口。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!