本系列是作为学习笔记,用于记录学习过程,加深学习印象,以及自己重新回顾学习内容只用,参考书籍为《oracle 11g从入门到精通(第二版)》,如果需要深入学习,请购买原书籍,谢谢!

1、 检索数据

用户对表或者视图最常进行的操作就是检索数据,检索数据可以通过select语句来实现。语法格式如下


select {[ distinct|all ] columns | *}
[into table_name]
from {tables | views | other select}
[where conditions]
[group by colunms]
[having conditions]
[order by columns]

在上面的语法中包含7个子句:

  • select子句: 用于选择数据表、试图中的列;
  • into子句: 用于将原表中的结构和数据插入新表中;
  • from子句: 用于指定数据来源,包括表,视图和其他select语句。
  • where子句:用于对检索的数据进行筛选
  • group by子句:用于对检索结果进行分组显示
  • having子句: 用于从使用group by自居的分组后的查询记过中筛选数据行
  • order by子句: 用于对结果集进行排序(desc升序,默认降序)

1.1 简单查询

1.1.1 检索所有列

只包含select和from子句。select子句用于选择想要在查询结果中显示的列,也可以使用*来表示检索所有的列。

例1:在scott模式下使用select *检索dept表中所有的数据

select * from dept;

说明:上面的select语句如果在system模式下运行,则需要使用scott.emp。

例2:在scott模式下,在from子句中指定两个数据表dept和salgrade

select * from dept,salgrade;

1.1.2 检索指定的列

用户可以通过在select关键字后,跟具体的列名来查询指定的列,列名直接用逗号分隔,语法格式如下:

select colunm_name1,column_name2,column_name1 from table_name;

例:在scott模式下,检索emp表中指定的列job、ename、empno,如下所示:

在Oracle数据库中,又要给标识行中唯一特性的行标识符,该行标识符的名称为ROWID,表示该行数据在数据库中的物理地址,属于隐藏列,并不定义在表中,所以也成为伪列。

select rowid,job,ename from emp;

1.1.3 查询日期列

日期列是指数据类型为date的列,查询日期列与查询其他列并无区别,但日期列的默认显示格式为DD-MON-YY.

例1:以简体中文显示日期结果


alter session set nls_date_language = 'SIMPLIFIED CHINESE';
select ename,hiredate from emp;

例2:以US-EN显示日期查询结果


alter session set nls_date_language = 'AMERICAN';
select ename,hiredate from emp;

例1:以特定格式显示日期查询记过


alter session set nls_date_format = 'YYYY"年"MM"月"DD"日"';
select ename,hiredate from emp;

例4:使用TO_CHAR函数定制日期显示函数

具体见to_char函数

1.1.4 带有表达式的select语句

使用select语句时,对于数字数据和日期数据都可以使用算数表达式,算数运算符包括:加+、减-、乘*、除/

select sal*(1+10) from emp;

1.1.5 为列指定别名

在Oracle系统中,为列指定别名既可以使用as关键字,也可以直接指定

例1:使用as指定列别名

select empno as "员工编号",ename as "员工名称",job as "职务" from emp;

例2:不使用as指定列别名

select empno "员工编号",ename "员工名称",job "职务" from emp;

1.1.6 显示不重复记录 distinct

在select语句中,可以使用distinct关键字限制在查询结果显示不重复的数据。

select distinct job from emp;

1.1.7 处理NULL值

NULL表示未知值,既不是空格,也不是0。在实际使用中可以使用nal处理NULL,将其转换成合理的显示结果。

例1:显示emp表中的雇员名、工资、奖金以及实发工资,但不处理NULL

select ename,sal,comm,sal+comm from emp;

例2:显示emp表中的雇员名、工资、奖金以及实发工资(SAL+COMM),使用nal处理NULL值

select ename,sal,comm,sal+nal(comm,0) from emp;

1.1.8 连接字符串

当执行查询操作时,为了让显示更有意义,通常需要将多个字符串连接起来,可以使用“||”或者concat函数。

例1:使用"||"操作符链接字符串

select ename,|| ""||'s job is '||job from emp;

例2:使用concat函数链接雇员名和工资信息

select concat(concatK(ename,'''s salary is'),sal) from emp;

1.2、筛选查询

在select语句中可以通过where语句实现对数据行筛选,筛选出符合条件的数据行。

语法格式如下:

select columns_list from table_name where conditional_expression

  • colunms_list:字段列表。
  • table_name:表名。
  • conditional_expression:筛选条件表达式

1.2.1 比较筛选

在where语句中可以通过比较运算符来筛选数据。

  • A=B: 比较A与B是否相等。
  • A!B: 或者A<>B,比较A与B是否不相等。
  • A>B: 比较A是否大于B.
  • A<B: 比较A是否小于B。
  • A>=B: 比较A是否大于等于B。
  • A<=B: 比较A是否小于等于B。

例1:在scott模式下,查询emp工资表中sal大于1500的数据记录

select empno,ename,sal from emp where sal > 1500;

另外,除了基本的”比较筛选“操作外,还有以下两个特殊的”比较筛选“操作/

  • A{operator}ANY(B): 表示A与B中的任何一个元素进行opertor运算符的比较,只要有一个比较值为TURE,就返回数据行
  • A={operator}ALL(B): 表示A与B中的所有元素进行opertor运算符的比较,只有与所有元素比较直为徒惹,才返回数据行

select empno,ename,sal from emp where sal <> all(3000,950,800);

1.2.2 使用特殊关键字筛选

1.2.2.1 like关键字

like关键字可以使用以下两个通配符:

  • %:代表0个或者多个字符
  • _: 代表一个且只能是一个字符。

例1:在emp表中,使用like关键字匹配以字母S开头的任意长度的员工名称

select empno,ename,job from emp where ename like 'S%';

例2: 在emp表中,使用_匹配,员工职位第一个字符是S,第三个字符是L,第5个字符是S的值

select empno,ename,job from emp where job like 'S_L_S%';

注意:可以在like、in、between、is null关键字前面加上NOT,表示否定的判断

如果要查询的字符串含有%、——等字符时,可以使用转义字符实现查询,如下所示


create table dept_temp as select * from dept; --新建表dept_temp表结构和dept一致
insert into dept_temp values('60','IT_RESEARCH','BEIJING');
select * from dept_temp where dname like 'IT\_%' escape '\';

1.2.2.2 IN关键字

格式:IN(目标值1,目标值2。。。 目标值n)

例子1:

select empno,ename,job from emp where job in ('PRESIDENT','MANAGER','ANALYST');

例子2:

select empno,ename,job from emp where job in ('PRESIDENT','MANAGER','ANALYST');

1.2.2.3 between关键字

用于需要返回一个值是否位于范围之间,通常使用between。。。and...和not between。。。and。。。来指定范围条件。

例子1:在emp表中,使用between...and...关键字查询工资在2000到3000之间的员工信息

select empno,ename,sal from emp where sal between 2000 and 3000;

例子2:在emp表中,使用not between...and...关键字查询工资不在2000到3000之间的员工信息

select empno,ename,sal from emp where sal between 2000 and 3000;

1.2.2.4 IS NULL关键字

使用IS NULL来检测是否为空值。

1.2.3 逻辑筛选

逻辑筛选是指在where子句中使用AND\OR\NOT进行数据筛选操作

AND逻辑与,可以代替between...and...

例子1:

select empno,ename,sal from emp where sal >= 2000 and sal <= 3000;

OR逻辑运算符表示逻辑或

例子2:

select empno,ename,sal from emp where sal < 2000 or sal > 3000;

NOT运算符表示对表达式执行逻辑非运算。

学习笔记:oracle学习三:SQL语言基础之检索数据:简单查询、筛选查询的更多相关文章

  1. 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式

    目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...

  2. 数字图像处理学习笔记之一 DIP绪论与MATLAB基础

    写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...

  3. 【Unity Shaders】学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert

    [Unity Shaders]学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert 转载请注明出处:http://www.cnblogs.com/-867259 ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换 学习目标 理解如何用矩阵表示线性变换和仿射变换: 学习在 ...

  5. 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势

    0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...

  6. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  7. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  8. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  9. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

随机推荐

  1. CF837D Round Subset 动态规划

    开始的时候数据范围算错了~ 我以为整个序列 2 和 5 的个数都不超过 70 ~ 一个非常水的 dp code: #include <bits/stdc++.h> #define M 75 ...

  2. hive tez调优(3)

    根据.方案最右侧一栏是一个8G VM的分配方案,方案预留1-2G的内存给操作系统,分配4G给Yarn/MapReduce,当然也包括了HIVE,剩余的2-3G是在需要使用HBase时预留给HBase的 ...

  3. [Shell]CVE-2019-0708漏洞复现及修复补丁

    0x01 漏洞原理 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广,windows2003.windows2008.windows2008 R2.windows 7 ...

  4. VSCode前端文件(html文件)如何以服务器模式打开?

    方法1: VSCode前端文件(html文件)如何以服务器模式打开?比如工程下有一个A.html文件,想在VSCode里面直接操作,就想Webstorm一样,以http://localhost/xxx ...

  5. IIS7下搭建PHP(FastCgiModule)

    windows2008和windows vista都可以安装IIS7 第一步: 下载软件, php官方网站:www.php.net(下载winfows版本) phpmyadmin官方网站:www.ph ...

  6. 如果前面的IO操作出问题了,按照我们代码的意思,不就try catch 了吗,这样的话线程就没关闭了,就会造成线程泄露。 那怎么解决这个问题呢,其实也简单,把关闭线程的方法写到finally里就可以了。

    https://mp.weixin.qq.com/s/WaNVT2bZFGHNO_mb5nK6vw 连HDFS源码大神都会犯的错之线程泄露(1) 西瓜老师 西瓜老师爱大数据 1月11日  

  7. python @classmethod

    写在前面 写博客的时候,我发现拖延症很严重,本来昨天要开始写的,结果东看看,西翻翻,啥也没落实下来.时间过去了,口袋里的收获却寥寥无几.讨厌这样的自己.我要戒掉这个不好的毛病. 拖延症的底层原因之一是 ...

  8. Windows10+VMware Workstation Pro+Ubuntu 16.04+Hadoop-2.6.5+IDEA环境搭建(单机&伪分布式&集群)

    (注:下面出现的"czifan"为用户名,需替换成自己的用户名) 本篇博客是在实践该篇博客的过程中的一些补充和修改~ 0 - 安装VMware Workstation Pro 首先 ...

  9. 001-poi-excel-基础、单元格使用操作

    一.概述 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI ...

  10. 123456---com.twoapp.huanYingMotro--- 幻影摩托

    123456---com.twoapp.huanYingMotro--- 幻影摩托