job历史执行记录查询 oracle_SQL语言2--(查询)

本文详细介绍了在Oracle SQL中如何使用ORDER BY进行数据排序,以及各种函数如逻辑运算符、字符函数、数字函数和日期函数的使用方法。通过具体的代码示例,展示了如何查询和处理job历史执行记录,包括单行和多行函数的运用,以及在SELECT、WHERE和ORDER BY语句中的应用。此外,文章还讨论了数据类型的转换和隐式、显示转换的影响,提供了丰富的查询示例帮助读者掌握SQL查询技巧。
摘要由CSDN通过智能技术生成

逻辑条件关系

SQL 的三个逻辑运算符是:AND 、OR 、NOT 。

AND :要求两个条件同时为真。

OR :操作要求两者之一为真即可。

NOT:取反。也可以用于另一个 SQL 运算符,例如,BETWEEN、LIKE、IN 和 NULL。

优先规则:算数运算符>连字操作(||)> 比较运算符>逻辑运算

7a58e047e017597366e1c695c3a880be.png

ORDER BY 排序

用于对结果集进行排序处理,默认升序(asc) desc 降序排列order by 后面跟需要排序的列。

多列排序 第一个列排名相同的列,在按照第二个列的要求排,(在第一个排序的基础上排序)

select语句的执行顺序:

  1. from 语句
  2. where语句
  3. select语句
  4. order by 语句

Oracle 函数

函数:是数据库产品中提供的能够处理查询结果的方法。

函数类型:

单行函数:这些函数仅对单个行进行运算,并且每行返回一个结果。

多行函数(聚合函数):这些函数能够操纵成组的行,每个行组给出一个结果,这些函数

也被称为组函数。

单行函数的特性:

  • 作用于每一个返回行,每行返回一个结果
  • 可能需要一个或多个参数
  • 可以修改结果集的数据类型
  • 可以嵌套
  • 可能返回一个与参数不同类型的数据值
  • 能够用在 SELECT、WHERE 和 ORDER BY 子句中

单行函数分为

  1. 字符函数:接受字符输入,可以返回字符或者数字值
  2. 数字函数:接受数字输入,返回数字值
  3. 日期函数:对 DATE 数据类型的值进行运算 (除了 MONTHS_BETWEEN 函数返回一
  4. 个数字,所有日期函数都返回一个 DATE 数据类型的值。)
  5. 转换函数:从一个数据类型到另一个数据类型转换一个值
  6. 通用函数: NVL NVL2 NULLIF COALSECE CASEDECODE

字符函数

  • 大小写处理函数
  • 字符处理函数

b621f47e863bfe0b788bc0075172102d.png

大小写处理函数

lower 转为小写

upper 转为大写

initcap 每个单词首字母大写,其他小写

91d6435d0129c623e1ca29ed9dee5e61.png

字符处理函数

dual 表:

dual 是一张只有一个字段,一行记录的表。dual 表也称之为'伪表',因为他不存储主题数据。如果我们不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们想得到的信息,并要通过 select 完成时,就要借助 dual 表来满足结构化查询语言的格式。

arg:字符串类型。

CONCAT(arg1,arg2):concat(arg1,arg2)连接值在一起 (CONCAT 函数有两个输入参数)

SUBSTR(arg1,arg2,arg3):substr(arg1,arg2,arg3)截取子串。

  • arg1:原字符串。
  • arg2: 开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则表示倒是第二位以此类推),
  • arg3:整数类型。截取个数。

SUBSTR(arg1,arg2):substr(arg1,arg2)截取子串。

  • arg1:字符串类型。原字符串
  • arg2 开始位置(开始位置可以是一个负数,-1 表示原串的最后一位,-2 则表示倒是第二位以此类推)截取到末尾。

LENGTH(arg1):length()以数字值显示一个字符串的长度。

INSTR(arg1,arg2,arg3,arg4):instr()指定查找位置以及出现的次数。

  • arg1:字符串类型。原字符串
  • arg2:字符串类型。查找内容
  • arg3:整数类型。开始位置。
  • arg4:整数类型。第几次出现

LPAD(arg1,arg2,arg3):用给定的字符左填充字符串到给定的长度

  • arg1:字符串类型。原字符串
  • arg2:整数类型。总长度。
  • arg3:字符串类型。填充的子字符串。

RPAD(arg1,arg2,arg3):用给定的字符右填充字符串到给定的长度。

  • arg1:字符串类型。原字符串
  • arg2:整数类型。总长度。
  • arg3:字符串类型。填充的子字符串。

7f83f240da27a84e7429e0d9ac80d999.png

数字函数

round 四合五入

round(a,b) a代表一个数字 b代表保留的小数位数

round(45.925,1)-->45.9 负数代表 小数点前面的位数 一个参数 是取整

trunc 不会做四舍五入 和round 用法一样

mod 去余数

日期函数

  1. round (date, 'month') 月份四舍五入 也可以用作时间 day,month,year
  2. months_between(date1,date2) 计算date1和date2之间的月数 返回的是数字
  3. add_months(date,n) 添加n个月 n必须是整数 可以为负数
  4. next_day(date1,‘星期几’) 得到一个日期类型 距离 下个 星期几最近的日期 next_day(date1,1-7) 或者数字1-7 注意 1代表周日 以此类推
  5. last_day(date) 返回一个日期 date月最后一天日期

65dbc55563667489787bfa8c4956acaf.png

数据类型装换

包括 隐式数据类型转换 和显示数据类型转换

隐式转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换。

隐式转换的问题

1.性能影响:

隐式转换的最大问题就是转换时会导致索引的无效,进而可能导致全表扫描。当表的数据量很大的时候,产生会很大的性能问题。比如说,VARCHAR2 和 NVARCHAR2 隐式数据类型转换导致的性能问题。

2. 不便于阅读

由于隐式转换使得数据库编程人员和 DBA 难以了解到究竟发生了怎样的类型转换,而且如果代码很多很长的话要查出错误就需要费很大的劲.

显示数据类型转换

通过数据库中的转换函数完成数据类型的转换。

  1. To_char 数字转为字符 日期转为字符
  2. To_number 将字符转为数字
  3. To_date 将字符转为日期

代码展示(使用hr用户登录)

查询雇员的 last_ name,job ID 和 department_ id号,要求这些雇员的 department_id 是90。

select last_name,job_id,department_id from employees where department_id=90;

查询员工表中名字为 King 的员工的工作编号。

select employee_id from employees where last_name ='King';

查询 2006 年 1 月 24 日入职的员工的姓名、部门编号以及工作 ID

select last_name,department_id,job_id from employees where hire_date='24,1月,06';

查询员工薪水小于等于 3000 的员工的姓名与薪水。

select last_name,salary from employees where salary<=3000;

查询薪水在$2,500 和$3,500(包含 2500 与 3500) 之间的那些雇员的姓名以及薪水。

select last_name,salary from employees where salary between 2500 and 3500;

查询所有经理号(manager_id )为 100、101 或 201 的雇员的 employee_id, last names, salary。

select employee_id,last_name,salary from employees where manager_id in(100,101,201);

查询 EMPLOYEES 表中名字以一个大写字母 S 开始的雇员的名字。

select last_name from employees where last_name like'S%';

查询所有在 2005 年进入本公司的雇员的名字和受雇日期。(05/6/28)

select last_name,hire_date from employees where hire_date like '%05';

查询员工表中工作 ID 中包含 SA_的员工姓名以及工作 ID。‘SA_’的字符串可以使用escape 对表示该符号为转义符号。

select last_name,job_id from employees where job_id like '%SA_%'escape'';

查询所有没有佣金的雇员的 last name, job ID 和 commission。

select last_name,job_ id,commission_pct from employees where commission_pct is null;

查询所有有佣金的雇员的 last name, job ID 和 commission。

select last_name,job_id,commission_pct from employees where commission_pct is not null;

查询工作岗位包含字符串 MAN 并且收入大于等于$10,000 的那些雇员的编号、工作ID、名字以及薪水。

select employee_id,job_id,last_name,salary from employees where job_id like '%MAN%' and salary >=10000;

查询任何 job ID 中包含 MAN 或者收入大于等于$10,000 的雇员编号、工作 ID、名字以及薪水。

select employee_id,job_id,last_name,salary from employees where job_id like '%MAN%' or salary >=10000;

查询那些工作岗位不是 IT_PROG、ST_CLERK 或 SA_ REP 的雇员的名字和工作岗位。

select last_name,job_id from employees where job_id not in('IT_PROG','ST_CLERK','SA_REP');

查询工作岗位是 SA_REP 或者工作岗位是 AD_ PRES 并且薪水大于 15000 的员工姓名、工作 ID 以及薪水。

select last_name,job_ id,salary fromemployees where job_id = 'SA_ REP' or job_id='AD_PRES' and salary > 15000;

查询工作岗位是 SA_REP 或者是 AD_ PRES 并且他们的薪水大于 15000 的员工姓名、工作 ID 以及薪水。

select last_name,job_ id,salary fromemployees where (job_id = 'SA_ REP' or job_id='AD_PRES') and salary > 15000;

显示所有薪水不在 5000 和 12000 之间的雇员的名字和薪水。

select last_name ,salary from employees where salary not between 5000 and 12000;

显示受雇日期在 2002 年 2 月 20 日 和 2007 年 5 月1 日 之间的雇员的名字、岗位和受雇日期。按受雇日期顺序排序查询结果。

select last_name,job_id,hire_date from employees where hire_date between '20/2月/02' and '1/5月/07' order by hire_date;

显示所有在部门 20 和 50 中的雇员的名字和部门号,并以名字按字母顺序排序。

select last_name,department_id from employees where department_id between 20 and 50 order by department_id;

列出收入在 $5,000 和 $12,000 之间,并且在部门 20或 50 工作的雇员的名字和薪水。将列标题分别显示为Employee 和 Monthly Salary。

select last_name "Employee",salary "Monthly Salary" from employees where (salary between 5000 and 12000) and (department_id between 20 and 50) ;

显示每一个在 2004 年受雇的雇员的名字和受雇日期.

select last_name,hire_date from employees where hire_date like '%04';

显示所有没有主管经理的雇员的名字和工作岗位。

select last_name,job_id from employees where manager_id is null;

显示所有有佣金的雇员的名字、薪水和佣金。以薪水和佣金的降序排序数据。

select last_name,salary,commission_pct from employees where commission_pct is not null order by salary desc ,commission_pct desc;

显示所有名字中第三个字母是 a 的雇员的名字。

select last_name from employees where last_name like '__a%';

显示所有名字中有一个 a 和一个 e 的雇员的名字。

select last_name from employees where last_name like '%a%' and last_name like '%e%';

显示所有工作是销售代表(SA_REP)或者普通职员(ST_CLERK),并 且薪水不 等于 $2,500、$3,500 或$7,000 的雇员的名字、工作和薪水。

select last_name,job_id,salary from employees where job_id in('SA_REP','ST_CLERK') and salary not in(2500,3500,7000);

显示所有佣金总计为 20% 的雇员的名字、薪水和佣金。

select last_name,salary,commission_pct from employees where commission_pct=0.2;

查询所有受雇在 15 年 (180 个月) 以内的雇员的 employee_id,hire_date,显示他们已被雇用的月,从受雇日期开始加 6 个月的试用期后的日期,受雇日期后的第一个星期五几号,以及受雇月的最后一天是几号。

select employee_id ,hire_date,months_between(sysdate,hire_date),add_months(hire_date,6),next_day(hire_date,' 星 期 五 '),last_
 day(hire_date) from  employees where months_between(sysdate,hire_date) < 180;

查询受雇日期,找出 2002 年开始工作的哪些人。用 ROUND 和 TRUNC 函数显示开始的月份。

select round(hire_date,'month'),trunc(hire_date,'month')  from employees where hire_ date like'%02';

显示所有雇员的名字和受雇日期,受雇日期以 2007 年 8 月 10 日 12:00:00 AM 显示。

select last_name,to_char(hire_date,'yyyy" 年 "MM" 月"DD"日" HH:MI:SS AM') from employees;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值