oracle——学习之路(select检索)
select语法:
select [distinct|all] 列名 from 表名 [where] [group by] [having] [order by] ps:[] 表示可以省略
举几个栗子:
select * from emp; ps:* 表示所有字段即把要查询的表的所有字段都显示出来,并不建议使用因为网络消耗大,效率也不高

select empno from emp; ps:筛选指定字段,可以筛选多个,字段之间用逗号隔开

select empno,ename,job from emp; ps:筛选指定字段,可以筛选多个,字段之间用逗号隔开

select job from emp;

select distinct(job) from emp; ps:all是默认的即有重复也会显示,distinct消除重复

select * from emp where comm is not null; ps:null表示空值

select job,count(*),sum(sal) from emp group by job; ps:count() sum()为聚合函数后面会讲

select sum(sal), count(*), (sum(sal)/count(*)) from emp group by job having (sum(sal)/count(*))>2000; ps:having 要与group by 连用 having 要放在group by后面,group by 可以单独使用

select * from emp order by empno desc; ps:desc是按降序排序,asc是按升序排序,默认是asc

select empno as 雇员编号 from emp order by 雇员编号; ps:雇员编号是别名,别名中英文不限,当然你要用阿拉伯语,德语什么的只要可以打出来识别也没问题,as可以省略也可以写,都是一样的道理,order by后应该使用别名,只有order by 可以这样,having后面都不可以

select * from emp order by empno desc ,job; ps:可以根据两个字段进行排序,先按照empno进行降序排序,如果相等对job进行升序排序

select job,sum(sal) from emp group by job ; ps:group by 后的字段必须在查询字段出现,查询字段还可以出现聚合函数

select job,sum(sal)*2 from emp group by job ; ps:不表示数据库的数据被改变只表示显示的结果

select ename ,sal from emp where sal not between 4000 and 5000; ps:between 4000 and 5000 相当于 >=4000 and <=5000

select job , ename from emp where sal in(800,1600,1500); ps:在集合中选取符合条件的

select ename from emp where ename like '__A%'; ps:模糊查询,_代表匹配一个字符,%代表匹配至少0 个字符

select ename from emp where ename like '%A%' or ename like '%E%';

使用where来进行筛选时,常用的操作符:< 小于 >大于 = 等于 !=不等于 <>不等于 <=小于等于 >=大于等于
having是对group分的组进行筛选,不同于where group要分的组是where筛选过后的
子查询:
select empno, ename from emp where empno in (select empno from emp where comm is not null);

any 和<any <=any表示小于或小于等于列表中最大值,与 in配合使用 和> any >=any表示大于或大于等于列表中的最小值 =any 相当于in
all 和<all <=all表示小于或小于等于列表中的最小值,与in配合使用 和>all >=all表示大于或大于等于列表中的最大值 <>all相当于 not in
举几个栗子:
select sal from emp where comm is not null;(1)

select * from emp where sal =any(select sal from emp where comm is not null);(2)

select * from emp where sal in(select sal from emp where comm is not null);(3)

select * from emp where sal <any(select sal from emp where comm is not null);

select * from emp where sal <=any(select sal from emp where comm is not null);

select * from emp where sal >any(select sal from emp where comm is not null);

select * from emp where sal >=any(select sal from emp where comm is not null);

select * from emp where sal <>all(select sal from emp where comm is not null);

select * from emp where sal >all(select sal from emp where comm is not null);

select * from emp where sal >=all(select sal from emp where comm is not null);

select * from emp where sal <all(select sal from emp where comm is not null);

select * from emp where sal <=all(select sal from emp where comm is not null);

注意看这几句的关系
连接查询:
select * from emp, dept; 产生笛卡儿积

内连接:等值连接、不等值连接
等值连接:连接中使用“=”(等号) 连接两个条件列表
select * from emp e, dept d where e.deptno=d.deptno; select * from emp e inner join dept d on e.deptno=d.deptno; //功能相等 ps:inner可以省略,系统自动识别为内连接

不等值连接:连接时使用<、 > 、>=、 <=、 between ……and ……、in等连接两个条件列表
自连接:把自身表的一个引用作为另一个表来处理
select e.empno 雇员编号, e.ename 雇员姓名,m.empno 领导编号 from emp e, emp m where e.mgr=m.empno;

外连接:左外连接、右外连接、全外连接
左外连接:返回结果不仅仅符合连接条件的行记录,左表全部记录都会包含,右表不满足的用NULL填充
右外连接:返回结果不仅仅符合连接条件的行记录,右表全部记录都会包含,左表不满足的用NULL填充
全外连接:无论是否成功匹配,左右表记录都返回,不满足用NULL填充
oracle使用外连接有一种特殊的方法,用(+)表示外连接,放在非主表的一方
举几个栗子:
dept是左表,采用左外连接
select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal from dept d ,(select empno, ename, job ,sal ,deptno from emp where comm is null) a where d.deptno=a.deptno(+);
select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal from dept d left join (select empno, ename, job ,sal ,deptno from emp where comm is null) a on d.deptno=a.deptno;
以上两个查询语句相等

采用右外连接:
select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal from dept d right join (select empno, ename, job ,sal ,deptno from emp where comm is null) a on d.deptno=a.deptno;
select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal from dept d , (select empno, ename, job ,sal ,deptno from emp where comm is null) a where d.deptno(+)=a.deptno;
以上两个查询语句相等

采用全外连接:
select d.deptno, d.dname,a.empno, a.ename,a.job,a.sal from dept d full join (select empno, ename, job ,sal ,deptno from emp where comm is null) a on d.deptno=a.deptno;

献给和我一样的小白,有关查询还有很多知识点,这里只写了常用的,如有错误请指出,谢谢!
oracle——学习之路(select检索)的更多相关文章
- [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记89:Hibernate学习之路-- -Hibernate检索方式(5种),HQL介绍,实现功能,实现步骤,
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记88:Hibernate学习之路-- -Hibernate检索策略(立即检索,延迟检索,迫切左外连接检索)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Oracle 学习之路开始
今年刚毕业,从毕业到现在工作正式工作四个多月了(实习的几个月就不算了).工作之中遇到的困难不少,学到的东西也不少:但是感觉学到的东西还是不够,毕竟java水很深啊. 现在工作中并不是每天都能学到新的东 ...
- oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)
LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...
- oracle学习之路(二)------数组类型/记录类型的使用
Oracle记录类型介绍 RECORD:用户自己定义数据类型,由单行多列的标量构成的复合数据类型.它将一个或多个标量封装成一个对象进行操作记录不能够总体拿来比較也不能够总体推断为空.能够总体拿来赋值. ...
- oracle——学习之路(oracle内置函数)
oracle与很多内置函数,主要分为单行函数与集合函数. 首先要提一下dual表,它oracle的一个表,没有什么实质的东西,不能删除它,否则会造成Oracle无法启动等问题,他有很大用处,可以利用它 ...
- Oracle学习之路-- 案例分析实现行列转换的几种方式
注:本文使用的数据库表为oracle自带scott用户下的emp,dept等表结构. 通过一个例子来说明行列转换: 需求:查询每个部门中各个职位的总工资 按我们最原始的思路可能会这么写: ...
随机推荐
- LibreOJ #6000. 「网络流 24 题」搭配飞行员
二次联通门 : LibreOJ #6000. 「网络流 24 题」搭配飞行员 /* LibreOJ #6000. 「网络流 24 题」搭配飞行员 二分图最大匹配 Dinic最大流 + 当前弧优化 */ ...
- 数据结构实验之二叉树二:遍历二叉树 SDUT 3341
#include <bits/stdc++.h> using namespace std; struct Tree { char data; struct Tree *right; str ...
- MySQL数据分析-(14)表补充:字符集
大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,本节课程jacky分享的主题是表补充之字符集 在分享课程之前,jacky在跟大家强调一下逻辑的重要性,我们学习 ...
- MySQL数据分析-(2)数据库的底层逻辑
(一) 数据库存在的逻辑 1.案例开篇-大部分公司对于数据和数字的管理都是低效率的 我们要学习数据库,就必须要搞清楚数据库是在什么样的情景下发明并流行的?学习新知识就要搞清楚每个知识点的来龙去脉,这样 ...
- MONGODB 数据库回复备份
1.导出工具:mongoexport 1.概念: mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指 ...
- Ubuntu 在VirtualBox里无法联网【已解决】
1. 在virtualBox中设置网络:设置->网络->将连接方式选定为“网络地址转换(NAT)” 点确定 2.进入Ubuntu系统中:系统设置->网络, 在弹出的对话框中选择:有线 ...
- OpenJudge1.5.6:整数序列的元素最大跨度值
描述 给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值). 输入一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不 ...
- HDU 2859 Phalanx ——(DP)
感觉是个n^3的dp,只是可能上界比较松吧..转移见代码.值得注意的一个地方是如果n是1,那么在for里面是不会更新答案的,因此ans要初始化为1. 代码如下: #include <stdio. ...
- C语言中内存对齐规则讨论(struct)
C语言中内存对齐规则讨论(struct) 对齐: 现代计算机中内存空间都是按着byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地 ...
- APP界面架构设计
作为PM,信息架构和页面流的设计想必烂熟于心,当确定好产品战略层和范围层即为何种目标用户提供何种服务后,就要着手搭建功能架构,将目标功能通过良好的用户体验传递给用户,目的是高效解决用户痛点,从而实现价 ...