查询数据

1. 查询(select .. form ..   

(1)普通查询

  1. select * from employees --代表查询employees表中所有数据
  2. select last_name, job_id from employees--查询特定的列
  3. select email,salary*10+100 from employees --运用+-*/运算符
  4. /*
  5. 空值(null)与对空值的处理
  6. 空值是无效的未指定的未知的不可预知的值
  7. 空值不是指空格也不是0
  8. 包含空值的数学表达式都是空值
  9. */

(2)列的别名

规则:重命名一个列,紧跟在列名之后 ,关键字as  也可以省略

  1. */
  2. select salary*(commission_pct+12) as yearsalary ,commission_pct jiangjing from employees
  3. /*
  4. 通过as对列明重新命名,也可以不写as中间不加逗号。
  5. commission_pct中有空值,包含空值的数学表达式都是空值,比如:100*(null+12),结果不是0,不是1200,而是null
  6. */

(3) 使用连接符(连接字符串或列)

  1. select first_name||'is a like'||last_name as names from employees
  2. /*
  3. 类如:first_name的一行为zhang, last_name一行为san
  4. 那么通过||,那就代表他们列为一列,两列中的内容合并为zhangsan,列名改为names
  5. */
  6. select first_name||'is a like'||last_name as names from employees
  7. --相当于变成了zhangis a likesan,中间添加固定字符串,这里只能是单引号

(4)删除相同的行

  1. select distinct department_id from employees
  2. /*
  3. 有相同的id,那么只显示一个,这并不是真正删除数据,只是你看到的是没有重复的数据
  4. */

2.过滤(select...from... where...)

 注意:Where:使用WHERE 子句是不能使用别名,因为where的执行顺序优于select

  1. --查询部门编号为90号所有员工id,员工工资,员工姓名
  2. select employee_id,salary,last_name
  3. from employees
  4. where department_id=90
  1. /*处理字符串需要注意的:
  2. 字符和日期必须出现在单引号中
  3. 字符大小写敏感日期格式敏感
  4. 默认的日期格式 DD-Mon-RR
  5. */
  6. select employee_id,salary,last_name
  7. from employees
  8. where last_name='Weiss'

3.运算符

BETWEENAND(包含边界);  IN(包含); like(像)

  1. WHERE salary BETWEEN 2500 AND 3100; --代表工资在25003100之间,包括左右
  2. WHERE manager_id in (100,101,201); --只包含100,101,201的部门
  3. WHERE first_name like 'S%'; --只要是s开头的first_name都能查询到
  4. /*
  5. LIKE
  6. 1 使用LIKE运算符选择类似的值
  7. 2 选择条件 可以包括字符或者数字
  8. 3 % 代表的0个或者多个字符(任意个字符)
  9. 4 _代表一个字符
  10. */
  1. --筛选出 last_name 首字母任意字母 第二个字母必须是o 后方任意
  2. SELECT first_name,last_name,salary
  3. FROM employees
  4. WHERE first_name like '_o%';

对空值(null)的处理:is null来判断当前是否为空

  1. --得到当前公司的老板是谁?
  2. SELECT first_name,last_name, manager_id
  3. FROM employees e
  4. WHERE manager_id IS NULL;

逻辑运算符:  AND  OR  NOT

  1. WHERE salary>=10000 AND job_id LIKE '%MAN%' --AND是并关系
  2. WHERE salary>=10000 OR job_id LIKE '%MAN%' --or或关系
  3. WHERE job_id NOT IN('MK_MAN','AD_VP','ST_MAN','SH_CLERK')--NOT IN 不包含关系

3.排序(ORDER BY)

ASC:升序排序(可以省略  默认), DESC:降序排序.  ORDER BY子句 必须在SELECT语句结尾处

排序规则:

1)可以按照select出现的列名排序

2)按照列名的别名排序

3)可以按照select语句中的列名的顺序值排序

  1. --查找部门为101,的员工的姓名,工资,同时工资按升序排序,如果工资相同员工编号按降序排序
  2. SELECT employee_id ,last_name,salary as ids, manager_id
  3. FROM employees e
  4. where manager_id=101
  5. order by ids,employee_id DESC

4.oracle单行函数

  1. --trim 没有任何参数默认去除首尾空格
  2. select trim(' hello world ') from dual;
  3. --指定c2参数 去除头尾
  4. select trim ('o' from 'oHello oWorldoo') from dual;
  5. --指定leading参数 去除头部
  6. select trim(leading 'W' from 'WWhat is this W w W')from dual; //两个ww都去除了
  7. --指定trailing 去除尾部
  8. select trim( trailing 'W'from 'WWhat is this W w W')from dual;//之去除最后一个W,小w不去除

数字函数

 (1)ROUND: 四舍五入  例:ROUND(45.926, 2) ,结果45.93

(2) TRUNC: 截断 例:TRUNC(45.926, 2) ,结果45.92TRUNC(364, 25,-2) ,结果300

 (3)   MOD: 求余 例:MOD(1600, 300) ,结果100

  1. --日期 sysdate是指当前系统时间,trunc没有说明的话默认保留0
  2. select first_name, trunc((sysdate-hire_date)/7) as week
  3. from employees e
  4. where department_id=90;

通用函数 这些函数适用于任何数据类型,同时也适用于空值

  1. NVL (expr1, expr2),--函数将空值转换成一个已知的值
  2. select first_name,salary, nvl(commission_pct,0) from employees --把没有奖金的空值变成0,没有新建列
  3. NVL2 (expr1, expr2, expr3) :-- expr1不为NULL,返回expr2;为NULL,返回expr3
  4. select first_name ,commission_pct,nvl2(commission_pct,'','') from employees --这个会新建列,如果为空,为0,如果不为空则为1,也可以把“1”改成 commission_pct,结果和nvl一样,但它新建列了。
  5. NULLIF (expr1, expr2) : --相等返回NULL,不等返回expr1
  6. --COALESCECOALESCE NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值
  7. select first_name,commission_pct,salary,coalesce(commission_pct,salary,10) comm from employees
  8. --()中可以一直写

条件表达式

  1. --CASE
  2. select e.first_name,e.last_name,e.salary ,e.job_id,
  3. case e.job_id when 'IT_PROG' then 2.2*salary
  4. when 'ST_MAN' then 1.3*salary
  5. when 'HR_REP' then 1.2*salary
  6. else e.salary
  7. end "REVISED_SALARY"
  8. from employees e;
  9. --DECODE 函数
  10. select last_name ,job_id,salary,
  11. decode(job_id, 'IT_PROG',2.2*salary,
  12. 'ST_MAN',1.3*salary,
  13. 'HR_REP',1.2*salary,
  14. salary) REVISED_SALARY
  15. from employees e; --效果和上面作用是一样的,只是格式简单点

5.分组函数(多行函数)

什么是分组函数:分组函数作用于一组数据,并对一组数据返回一个值。

类型:AVG 平均值 COUNT 数量MAX 最大值MIN 最小值SUM总和

  1. --组函数忽略空值:
  2. 1) select avg(commission_pct) from employees;
  3. 在组函数中使用NVL函数,NVL函数使分组函数无法忽略空值。
  4. 2)select avg(nvl(commission_pct,0)) from employees;
  5. --上面两组得出的结果是不一样的,第一个空值不计算,所以行数也不包括,下面一组,空值变成了0,那这一行也算一行了,所以平均值会小点

分组数据(GROUP BY)

  1. select department_id,job_id ,avg(salary)
  2. from employees
  3. group by department_id, job_id --先根据部门排序,在部门里有效的部门在排序
  4. order by department_id

非法使用组函数

(1)所有包含在select列表中 而未包含在组函数中的 必须包含在Group by 子句中

(2) 不要在where子句中 使用组函数

(3) 使用HAVING子句中可以使用组函数

  1. --求员工的工资 高于平均工资的所有员工
  2. select first_name,avg(salary),salary
  3. from employees
  4. where salary>avg(salary) ----这个是错误的 不能在where子句中使用组函数

过滤分组(Having)

使用HAVING 子句过滤分组

  1. 行数据已经被分组
  2. 使用了组函数
  1. --部门工资比10000高的
  2. select department_id,max(salary),avg(salary) from employees
  3. group by department_id
  4. having max(salary)>10000 --having语句是可以对分组在刷选的,只要符合逻辑咯

组函数嵌套

  1. --最多嵌套两次
  2. select max(avg(salary))--多嵌套也没有意义了,第二次嵌套就剩下一个值了
  3. from employees
  4. group by department_id

6.集合运算  UNION/UNION ALL 并集 INTERSECT 交集  MINUS 差集

UNION运算符返回两个集合去掉重复元素后的所有记录。

UNION ALL 返回两个集合的所有记录,包括重复的。

  1. select employee_id,job_id
  2. from employees
  3. Minus --返回属于第一个集合(上面),但不属于第二个集合的记录
  4. select employee_id,job_id
  5. from job_history

这篇文件就讲到这里,有不足之处欢迎大家留言指点!

oracle系列笔记(1)---查询数据的更多相关文章

  1. oracle系列笔记(2)---多表查询

    多表查询     这篇文章主要讲四点: (1)oracle多表查询    (2)SQL99标准的连接查询   (3)子查询     (4)分级查询 oracle多表查询有两种方式,一种是oracle所 ...

  2. asp.net core系列 32 EF查询数据 必备知识(1)

    一.查询的工作原理 Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据. 通过 LINQ 可使用 C#(或你选择的其他 .NET 语言)基于派生上下文和实 ...

  3. EntityFramework Core笔记:查询数据(3)

    1. 基本查询 1.1 加载全部数据 using System.Linq; using (var context = new LibingContext()) { var roles = contex ...

  4. PostgreSQL自学笔记:8 查询数据

    8 查询数据 8.1 基本查询语句 select语句的基本格式是: select {* | 字段1[,字段2,...]} [ from 表1,表2... [where 表达式] [group by & ...

  5. EFCore笔记之查询数据

    查询数据 基础查询,Linq100实例: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b using (var context = ...

  6. Oracle学习笔记(1)——查询及删除重复数据

      1.查找表中多余的重复记录(根据单个字段studentid)   select * from table_name where studentid in (select studentid fro ...

  7. MySQL 5.6学习笔记(查询数据、插入、更新、删除数据)

    1. 查询语法 SELECT {*|<字段列表>} [FROM table_references [WHERE where_condition] [GROUP BY {col_name | ...

  8. asp.net core系列 33 EF查询数据 (2)

    一. 原生SQL查询 接着上篇讲.通过 Entity Framework Core 可以在使用关系数据库时下降到原始 SQL 查询. 在无法使用 LINQ 表达要执行的查询时,或因使用 LINQ 查询 ...

  9. 03-EF Core笔记之查询数据

    EF Core使用Linq进行数据查询. 基本查询 微软提供了一百多个示例来演示查询,地址:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb98 ...

随机推荐

  1. CastleWindsor 使用说明

    1.引用DLL Castle.Core.dll  和Castle.Windsor.dll 2. 引用命名空间 using Castle.MicroKernel.Resolvers.Specialize ...

  2. php+jquery+ajax+json简单小例子

    直接贴代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Conte ...

  3. 12.TCP的成块数据流

    1.滑动窗口协议             TCP滑动窗口的可视化表示       我们将字节从1到11进行标号,接收方通告的窗口称为提供的窗口,它覆盖了第4字节到第9字节的数据,且通告窗口大小为6.发 ...

  4. 05 Linux字符驱动---静态注册

    1. mycdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h& ...

  5. html块级元素和内联元素区别详解

    块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示; 宽度(width).高度(height).内边距(padding)和外边距(margin)都可控制; ...

  6. Log4j的扩展-支持设置最大日志数量的DailyRollingFileAppender

    Log4j现在已经被大家熟知了,所有细节都可以在网上查到,Log4j支持Appender,其中DailyRollingFileAppender是被经常用到的Appender之一.在讨论今天的主题之前, ...

  7. SpringMVC 前端获得定义JSON对象的方法

    SpringMVC 前端获得定义JSON对象的方法: 可以使用map进行对象的创建,这样就会解析成键值对,不需要为前端专门定义对象.

  8. Android离线缓存

    android做到一定程度,需要考虑缓存的问题,不信可以掏出手机看看淘宝等一些app是否无网的情况下还可以浏览,不过大部分app并没有考虑到这些问题,解决Android的缓存有哪些方法呢 1.IO流读 ...

  9. Angularjs^1.2.9 搜索关键字高亮显示

    需求分析: 根据关键字搜索网页内容,并且高亮显示内容中的关键字细节分析: 1.每次执行搜索操作,需清空上一次结果 2.需区分html标签和正常文本内容,否则为关键字添加样式以后会出现标签内容被显示的情 ...

  10. 导入android工程没有R文件的解决办法

    第一种: 千万不要重启Eclipse.也不自己创建R.java 类文件! 右击你的工程(项目)——>Android Tools——>Fix Project Properties       ...