tp5 日期范围查询_[基础篇]-数据库-02-数据库的基本操作1-数据查询

数据库的基本操作1-数据查询

此处以普通用户hr/hr中的相关数据表进行分析

127eb7d5357ec6827510b5886f87e0b3.png

查询数据(基本查询)

1.1 查询(select .. form ..)

基本语法

5a6ad39979d1b794beec08cd9c6473e2.png

简单查询(全部列与指定列)

选择全部列

--查询所有的列:select * from 表名;
select * 
from employees 

选择特定的列

--查询指定的列,不同的列之间用,号隔开:select [列名1,列名2...] from 表名;
select employee_id,first_name
from employees

使用数学运算符

deda8e7905e503cbcb768a21bacd1fb5.png

乘除的优先级高于加减

  • 优先级相同时,按照从左至右运算
  • 可以使用括号改变优先级
--使用数学运算符进行计算:(用列名代替运算,表示对应列的数据参与运算)
select employee_id,first_name,salary,salary+500
from employees

空值(null)与对空值的处理

  • 空值是无效的、是未指定的、是未知的、是不确定的
  • 空值不是空格”” 也不是0
  • 包含空值的数学表达式都是空值
--由于commission_pct列部分数据为空值,则其参与表达式计算得出的值也是空值
select employee_id,first_name,last_name,salary*(1+commission_pct)*12
from employees

列的别名

  • 重命名一个列(给一个列起别名)
  • 便于计算
  • 紧跟在列名之后,加入关键字’as’ 其中as关键字可以省略
--工资增加500后进行打印
select employee_id,first_name,last_name,salary,salary+500 as newSalary
from employees

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

连接符:

  • 把“列与列之间”或者“列与字符之间”联系在一起
  • ’|| ’ 表示
  • 可以’合成 ’列(用指定列合成指定的字符串形式)
--将名与姓之间以空格相连
select employee_id,first_name || ' ' || last_name as name,salary
from employees

对字符串的处理

  • 字符串可以是select列表中的一个字符、数字、或者日期
  • 日期和字符只能出现在单引号中出现
  • 每当返回一行时,字符串被输出一次
--对字符串的处理(合并相关列,打印一行数据作为新的列)
select first_name || ' is_a ' || last_name as sname,email,salary
from employees

删除重复的行

--删除重复的行:distinct关键字
select distinct department_id
from employees

1.2 过滤(Where)

语法

13bd50d32563e80fbc99c795e3342c8d.png
--查询department_id为30
select employee_id,first_name,last_name,department_id
from employees
where department_id=30

处理字符串与日期

  • 字符和日期要包含在单引号之内
  • 字符大小写敏感 日期格式也是敏感的
  • 默认日期格式是DD-MON-RR
--查询first_name = 'lex'的员工信息
--字符串严格区分大小写,如果是‘lex’则无相关员工信息
select employee_id,first_name,last_name
from employees
where first_name = 'Lex'

1.3 比较运算

简单运算符

193bc1387b1934530791f6eb93c41eff.png
--比较运算符的应用
--查询员工的工资、小于等于3000的所有员工的具体信息
select employee_id,first_name,salary
from employees
where salary<=3000

其他运算符

aab12996debedc2ad08baedaff704655.png

BETWEEN

--between...and... 表示数据在什么范围中之间
--查询工资在4000-7000之间的所有员工信息
select employee_id,first_name,salary
from employees
where salary between 4000 and 7000

IN

--in关键字表示数据在指定的范围内(指定的内容中)
--查询员工部门号在90-100-110之内的所有员工的信息
select employee_id,first_name,department_id
from employees
where department_id in (90,100,110)

LIKE

  • 使用like运算是选择类似的值
  • 选择条件可以包含数字和字符
  • %代表零个或者多个字符(任意个字符)
  • _带表一个字符
--  like 关键字表示选择类似的值
-- 下划线_表示单个字符、百分号%表示任意个字符
--查询first_name 包含an的所有的员工信息
select employee_id,first_name,last_name
from employees
where first_name like '%an%'
--查询第first_name以Da开头的所有员工信息
select employee_id,first_name,last_name
from employees
where first_name like 'Da%'
--查询第1个字符任意、第2个字符是oh、第3个字符任意的所有员工信息
select employee_id,first_name,last_name
from employees
where first_name like '_oh%'

1.4 对空值(null)的处理

--对空值null的处理(判断是否为空值用is null进行判断)
--注意的是“=null”、“=‘ ’”均是不合理的判断为空的操作sql
--查询没有部门的员工
select employee_id,first_name||' '||last_name as name,department_id
from employees
where department_id is null
--查询公司boss(manager_id为空值的对应人员)
select employee_id,first_name||' '||last_name as name,manager_id
from employees
where manager_id is null

1.5 逻辑运算

72aff8fcd123743afb438a871145f48f.png

AND

-- and 要求两个条件同时满足(为真)
--查询工资大于10000且job_id包含MAN的所有员工
select employee_id,last_name || ' ' || first_name as name,salary,job_id
from employees
where salary>10000 and job_id like '%MAN%'

OR

-- or 要求其中任意一个条件满足即可(为真)
--查询工资大于10000或者job_id包含MAN的所有员工
select employee_id,last_name || ' ' || first_name as name,salary,job_id
from employees
where salary>10000 or job_id like '%MAN%'

NOT

-- not 取非
--查询员工的job_id不在AD_VP,FI_MGR,ST_MAN中的所有员工
select employee_id,first_name,last_name,job_id
from employees
where job_id not in ('AD_VP','FI_MGR','ST_MAN')

1.6 优先级

ffd4566063e1f19e5a01fa0dab3921aa.png
  • 可以使用括号改变优先级顺序,不需要死记硬背相关的比较级顺序,掌握最基本的即可

2.排序

2.1语法

  • 使用oreder by 子句排序
  • ASC 升序排序 (ASC是默认的排序方式,可以省略)
  • DESC 降序排序
  • Order by子句是在select语句的结尾处
  • 排序规则:
  • 可以按照select语句的别名排序
  • 可以按照select语句中的列名的顺序排序
  • 如果有多个列进行排序,则规则是先按照第一排序,如果第一列相同,则按照第二列排序,依次类推即可
--排序:使用rder by子句
--默认是升序排序asc、降序排序为desc
--按照雇佣日期进行升序排序
select employee_id,first_name,last_name,hire_date
from employees
order by hire_date
--按照工资高低进行降序排序
select employee_id,first_name,last_name,salary
from employees
order by salary desc

2.2按别名排序

--按照年薪方式进行降序排序(此处直接为月工资*12,不考虑奖金)
select employee_id,first_name,last_name,(salary*12) as yearSal
from employees
order by yearSal desc

2.3多个列排序

  • 按照order by列表的顺序排序
  • 可以使用不在select列表中的列排序
--按照部门编号进行升序排序,如果部门编号相同则按照工资进行降序排序
select employee_id,first_name,last_name,department_id,salary
from employees
order by department_id ,salary desc

3.单行函数

3.1 单行函数说明

单行函数:

4a2a3b507b5c915a3be27c7b956e199d.png

3.2 字符函数

a58039207ef7d0ef8ce3804283b1247e.png

大小写控制函数

  • 这类函数用于改变字符的大小写

5074b6f044f0f369a92ee778b2469af6.png
-- 此处的 dual 是一张万能表、虚表,能够提供任何数据
--大小写控制函数:LOWER小写、UPPER大写、INITCAP首字母大写
select LOWER('HAHAbIBU') from dual
select UPPER('hahabIBU') from dual
select INITCAP('haHAbIBU') from dual
select first_name
from employees
where  LOWER(first_name) = 'lex'

字符控制函数

  • 这类函数用于控制字符

9f9011405685c078501bbeccba78afd9.png

--7.2字符控制函数

/*
  CONCAT(STR1,STR2):将STR2字符串数据拼接在STR1字符串之后
  SUBSTR(STR,a,b):截取字符串STR从第a个字符开始往后截取b个字符(计数从1开始)
  LENGTH(STR):取STR字符串的长度
  INSTR(STR,CH):得到指定的CH(字符或是字符串)在STR中的位置,不存在则返回0
  LPAD(STR,i,CH):在字符串STR左侧用字符CH填充字符串(总共位数为i)
  RPAD(STR,i,CH):在字符串STR右侧用字符CH填充字符串(总共位数为i)
  TRIM('H' FROM 'HelloWorld'):去除字符串首尾的空格或首尾的单个字符
  replace(str,ch1,ch2):以ch2替换str中的ch1(ch1、ch2可为字符或者是字符串)
*/
/*
  使用字符控制函数完成下述操作
  1.将first_name与last_name进行拼接后作为sname输出
  2.将job_id的长度作为len输出
  3.获取字符a在last_name出现的位置后作为结果输出
  4.在first_name左侧填充字符‘*’,总的位数为10位后输出
  5.选择的条件是从job_id的第4个位置开始往后截取3个字符的结果为大写的‘rep’
*/
select employee_id,concat(first_name,last_name) as sname,
       length(job_id) as len,instr(last_name,'a'),
       lpad(first_name,10,'*'),job_id
from employees
where substr(job_id,4,3)=upper('rep');
--trim:去除字符串首尾的空格、也可去除指定的首部或者尾部的字符
select '     Hello World  '
from dual
select trim(' Hello World  ')
from dual
--截取掉的部分只能是一个字符
select trim('H' from 'Hello')
from dual
select trim('o' from 'Hello')
from dual
--replace:用给定字符(字符串)替换指定字符串的指定字符(字符串)
--如果字符串中没有指定字符则视为无效替换,返回原有的字符串
select replace('abcd','b','x')
from dual
select replace('abcd','s','x')
from dual
select replace('abcd','bc','xx')
from dual

3.3 数字函数

  • ROUND: 四舍五入

例:ROUND(45.926, 2) ,结果45.93

  • TRUNC: 截断

例:TRUNC(45.926, 2) ,结果45.92

  • MOD: 求余

例:MOD(1600, 300) ,结果100

/*
     round(num,i):将数字num进行四舍五入,保留i位小数
     trunc(num):将小数点之后的内容截断舍弃
     trunc(num,i):小数点之前(i为负整数)或之后(i为正整数)第|i|位之后的内容					均以0记
     mod(num1,num2):将num1对num2求余
*/
select round(36.973,2),round(36.966,2)
from dual --36.97  36.97
select trunc(36.973,2),trunc(36.973,-2),trunc(362.973,-2)
from dual --36.97  00.000-->0  300.000-->300
select mod(1000,300)
from dual --100

3.4 日期

  • Oracle 中的日期型数据实际含有两个值:日期和时间
  • 默认的日期格式是 DD-MON-RR

根据操作系统的不同,需要使用不同的内容,如果是英文的系统使用DD-MON-RR

如果是中文的,可以使用汉字的年月日

日期的数学运算

  • 在日期上加上或减去一个数字结果仍为日期
  • 两个日期相减返回日期之间相差的天数
  • 可以用数字除24来向日期中加上或减去小时
--获取系统当前的时间(日期)
select sysdate
from dual
--计算80号部门所有员工从入职到现在工作了多少周,按照工作时间进行降序排序
select employee_id,concat(last_name,first_name) as sname,department_id,
       trunc((sysdate-hire_date)/8,2) as weeks,hire_date
from employees
where department_id = 80
order by weeks desc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值