Oracle笔记_查询
2.1 单条件查询
select ……
from ……
where 条件
-- = > >= < <= != <>
-- 单引号用于数据表示字符串
-- 双引号用于数据库对象名,列名,表名……
-- 数据区分大小写,数据库不区分大小写
2.2 多条件查询
--与and 或or 非not
select * from emp where deptno in (10,20);
-- in表示deptno取值在10和20其中一个,not in表示不在集合中;如果结果中含有NULL,不能使用not in,但可以使用in。
select * from emp where sal between 1000 and 2000;
-- between and 是包括边界值
--SQL在解析where时,是从右向左解析的;使用and时应将易假的值放在右侧,or时应将易真的值放在右侧;
2.3 模糊查询
select ...
from ...
where 列名 like '模式字符串'
-- % 表示若干个字符
-- _ 表示一个字符
select * from emp where ename like '%\_%' escape '\'; -- 以反斜杠作为转义字符
2.4 排序
select ...
from ...
where 条件
order by 列名1 asc|desc,列名2....
-- asc表示升序(不填则默认是升序)
-- desc表示降序
select * from emp order by 2; --按照输出结果集的第2列来进行排序
select ename 名字,sal 月薪 from emp order by 月薪
2.5 单行函数
单行函数:只对一行数据进行计算,产生一个结果。函数可以没有参数,但必须要有返回值。
2.5.1 字符函数
lower --将字符串转小写
upper --将字符串转大写
initcap --将首字母变成大写
concat --字符串连接
select concat(concat('hello','world'),'123') --支持两个参数
select 'hello'||'world'||123 --字符串拼凑
substr --提取子串
select substr('helloworld',3), --从第三个字符开始一直取子串到最后
select substr('helloworld',3,5) --从第三个字符开始取5个字符
instr --查找某个字符串是否另一个字符串的子串
select instr('hello world', 'llo') from dual --结果为3
lpad,rpad --左右填充
select lpad('hello','10','#') from dual;
--填充字符到达指定的长度
--往hello左边填充字符#,使字符串长度到达10
--如果字符串长度大于指定长度,就截取
trim --裁剪
select trim ( ' Hello world ') from dual; --默认裁剪空白字符
select trim ( 'H' from 'Hello worldHHHH') from dual; --左右裁剪H字符
replace --替换子串
select replace('Hello world','l','#') from dual;
length --长度,length(last_name)
2.5.2 数值函数
round --四舍五入
trunc --截取
ceil --向上取整
floor --向下取整
mod --取模 %
select round(45.926,2) from dual; --45.93
2.5.3 转换函数
to_char --数字转字符串
select ename ,sal ,to_char(sal,'L9999') from emp;
--L 表示本地货币字符
--9 表示一位数字
to_number --字符串转数字
to_date --字符串转日期,以什么格式转化为字符串,就以什么格式转回date类型
select to_char(sysdate,'dd-mm-yyyy dy hh24:mi:ss') from dual;
select to_date('30-05-2019 星期四 17:01:57','dd-mm-yyyy dy hh24:mi:ss') from dual;
2.5.4 日期函数
now --mysql中获取系统当前时间
sysdate --oracle中获取系统当前时间
select sysdate from dual ;
select sysdate-1 昨天,sysdate 今天 ,sysdate +1 明天 from dual;
months_between --计算两个时间相差的月份,自动计算大小月
select
(sysdate-hiredate)/30 月,
months_between(sysdate,hiredate)
from emp;
add_months --计算明年今日
select add_months(sysdate,12) from dual;
last_day --获取当前月份最后一天
select last_day(sysdate) from dual
next_day --获取下一个星期几是哪一天
select next_day(sysdate,'星期二') from dual
2.5.5 通用函数
nvl(exp,val) --如果exp为null,那么返回val,否则返回exp的值
nvl2(exp,val1,val2) --如果exp为null,返回val2 ,否则返回val1
select distinct deptno from emp; --去重
--distinct作用于后面所有列;
dual --虚表
select 3+2 from dual;
nullif(exp1,exp2) --当exp1=exp2时返回null,不等时返回exp1值
coalesce(a,b,c...,n) --从左到右找参数中第一个不为空的值
2.5.6 条件语句
--总裁决定给大家涨工资,主管涨1000,销售涨500,其他涨200
case when then else end
select ename,job,sal 涨前工资,
case job
when 'MANAGER' then sal+1000
when 'SALESMAN' then sal+500
else sal + 200
end 涨后工资
from emp
decode(expr,val1,val2,val3,val4,....,defaultValue)
--如果expr 值是val1 那么返回val2,如果是val3,那么返回val4,以此类推,都不是,那么就返回最后一个defaultValue的值
2.6 多行函数
2.6.1 统计函数
sum --总和
select sum(sal) from emp
count --计数函数,某行数据有值,那么就计数+1
--*表示该行数据不管哪列有数据都会统计
--最终只统计comm该列不为空的数量
--null不会参与统计函数的计算
select count(comm) 员工数量 from emp;
max/min --求最高和最低
select max(sal) 最高工资,min(sal) 最低工资 from emp
avg --求平均
select avg(sal) from emp
2.6.2 分组统计
select ...
from ...
where cond
group by 列名1[,列名2,....]
having cond
order by ...
--按照group by后给定的表达式,将from后面的table进行分组。
--在select列表中,所有没有包含在组函数中的列,都必须在group by的后面出现。
--统计函数,在没有分组的情况,统计的是全表,在有分组的情况下,统计的是对应的分组
--where里边不允许使用分组函数,改用having
--having里边能够使用统计函数的结果进行比较
--能使用where不要使用having
group_concat(xxx)
select gender,group_concat(name, age, id) from students where gender=1 group by gender;
where 和 having区别
从表集合中查询数据,首先要满足where条件 cond1 ,满足的数据就筛选出来,成为结果集1
从结果集1中使用group by 指定的列进行分组,计算统计函数的值,成为结果集2
结果集2继续进行筛选,筛选条件就是having的条件cond2 ,最终通过筛选之后,成为结果集3
结果集3经过order by 的条件进行排序 ,得到最终的结果集
数据越早能够得到筛选越好,对于后面计算量控制有优势
2.7 字符格式
9 | 数字 |
---|---|
0 | 零 |
$ | 美元符 |
L | 本地货币符号 |
. | 小数点 |
, | 千位符 |
2.8 分页
--limit start, count
-- 限制查询出来的数据个数
select * from students where gender=1 limit 2;
-- 查询前5个数据
select * from students limit 0, 5;
Oracle笔记_查询的更多相关文章
- Oracle笔记_多表查询
1 执行sql文件 @文件地址名 --执行某个sql文件: 2 多表查询 想要的数据不在同一张表,就需要多个表进行联查. 多表查询也叫做表连接查询,其中的where条件就是连接条件. 可以使用join ...
- Oracle笔记_基础
1 登录启动 sqlplus / as sysdba #以管理员方式登录 sqlplus 用户名/密码 #本地登录 sqlplus 用户名/密码@//主机IP/实例名(默认orcl) #远程登录 sq ...
- Oracle笔记(1) 简单查询、限定查询、数据的排序
Oracle笔记(四) 简单查询.限定查询.数据的排序 一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...
- oracle笔记1:-安装-体系结构-基本查询
一.Oracle数据库的安装(安装在虚拟机的xp系统里) 1.安装虚拟机 2.虚拟机内安装xp系统,以下步骤在虚拟机内进行 3.双击setup.exe,在出现的界面中设置口令, ...
- Oracle笔记 多表查询
Oracle笔记 多表查询 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...
- 韩顺平Oracle笔记
韩顺平Oracle笔记 分类: DataBase2011-09-07 10:24 3009人阅读 评论(0) 收藏 举报 oracle数据库sqljdbcsystemstring 目录(?)[-] ...
- Oracle笔记1-数据库概念
数据库: 基本的概念:数据库管理系统(Database Management System,DBMS):管理数据的一个软件系统关系型数据库管理系统(RDBMS)数据库(Database):存放数据的磁 ...
- Oracle笔记 目录索引
Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...
- oracle 笔记
1.Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create databas ...
随机推荐
- 给自己的网站加上HTTPS
前言 现在谷歌等厂商大力推行https协议,如果你的网站不支持https,在使用谷歌浏览器时,会被警告网站不安全.w(゚Д゚)w,不安全?哪里不安全了?OK,那我改成支持https好吧.关于http怎 ...
- Java EE.JSP.概述
JSP最终会被转换成标准Servlet,该转换过程一般出现在第一次请求页面时. JSP页面的主要组成部分如下: HTML 脚本:嵌入Java代码 指令:从整体上控制Servlet的结构 动作:引入现有 ...
- 说说Java线程间通信
序言 正文 [一] Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在 ...
- Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two
传送门 D. Divide by three, multiply by two •题意 给你一个数 x,有以下两种操作,x 可以任选其中一种操作得到数 y 1.如果x可以被3整除,y=x/3 2.y= ...
- HDU 多校 第三场 Fansblog
代码千万条,规范第一条 训练赛的时候打表找规律,发现答案是1/(st-pre-1)!,奈何用错了模板,一直TLE到比赛结束,一直以为是卡什么输入输出或者是两个素数相差太大导致复杂度过高,读入优化啥的都 ...
- jQuery写toTop(回到顶部)效果
在通常的网站开发中,页面有时候会很长,尤其是一些电商网站,为了提高用户的体验效果,我们通常会增加一个回到顶部的按钮,这个按钮我们同城会使用fixed定位,将其定位在当前可视区域某一固定位置.这个效果用 ...
- Android 开发环境之 VMware 虚拟机(android8.1)
VM版本14 在官网下载androidx86的VMDK文件 官方下载地址 (VMDK文件是VMware的专用文件,比iso镜像文件安装要简便许多,内部已经配置好了,只需要按照虚拟机安装普通流程即可) ...
- js 实现 联动
使用jQuery实现联动效果 应用场景:收货地址 1.准备三个下拉框 <select class="changeArea" id='province'> <opt ...
- php 获取未来七天的日期和星期
php获取未来七天的日期和星期代码 for($i=4;$i<8;$i++){ $dateArray[$i]=date('Y-m-d',strtotime(date('Y-m- ...
- 使用vue实现行列转换的一种方法。
行列转换是一个老生常谈的问题,这几天逛知乎有遇到了这个问题.一个前端说,拿到的数据是单列的需要做转换才能够绑定,折腾了好久才搞定,还说这个应该后端直接出数据,不应该让前端折腾. 这个嘛,行列转换在后端 ...