查询:
查看表的结构:desc table_name;
查询所有列:select * from table_name; 效率低下,程序维护困难
查询指定列:select column_name1,column_name2… from table_name;
打开显示操作时间的开关:set timing on;
返回当前有多少条记录: select count(*) from user;
查询取消重复行:select distinct column_name1, column_name2 from table_name
select 语句不区分大小写,但是字段区分。
使用算数表达式:
select sal*13 + nvl(comm,0)*13 "年工资",ename,comm from emp;
使用where子句:
select hiredate from emp where hiredate > '1-1月-1992';
select ename,sal from emp where sal>=2000 and sal<=3000;
like操作符:
%代表0到多个字符
_代表热议单个字符
in操作符:
select * from emp where empno in(123,234,567); 速度比较快,比多个 or 语句实用
is null操作符:
select * from emp where mgr is null;
order by操作符:
order by empno,sal desc;
使用列的别名排序:
select ename,sal*12 "年薪" from emp order by "年薪";
分页查询-->子查询(待续。。。)
---------------------------------------------------------------------------------------------------------------------
Oracle表的复杂查询
数据分组:-max -min -avg -sum -count
group by: 分组字段一定要出现在查询的字段里面
having:函数条件
对数据分组的总结:
1、分组函数只能出现在选择列表、having、order by 子句中
2、如果在select语句中同时包含有group by、having 、order by那么他们的顺序是group by, having、order by
3、在选择列中如果有列、表达式、和分组函数、那么这些列和表达式必须有一个出现在group by子句中,否则就会出错
多表查询:
多表查询是基于两个和两个以上的表或是视图的查询,在实际应用中,查询单个表可能不能满足你的需求。
规定:多表查询的 条件 是至少不能少于 表的个数-1
自连接:指在同一张表的连接查询
子查询:嵌入在其他SQL语句中的 select 语句,也叫嵌套查询
数据库在执行sql语句是,是从左到右扫描的。
1、单行子查询:select * from emp where deptno=(select deptn from emp where ename='SMITH');
select * from emp where job in(select distinct job from emp where deptno=10);
All操作符 :select * from emp where sal>All(select * from emp where deptno=30);
select * from emp where sal > (select max(sal) from emp where deptno=30);此语句效率大于上面的All操作符(建议使用)
Any操作符:select * from emp where sal>Any(select * from emp where deptno=30);
select * from emp where sal > (select min(sal) from emp where deptno=30);此语句效率大于上面的All操作符(建议使用)
2、多列子查询:select * from emp where (deptno,job) = (select deptno,job from emp where ename='SMITH');
3、from子句子查询:select a2.ename, a2.sal, a2.deptno,a1.mysql from emp a2,
(select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.sal
当在from子句中使用子查询你的时候,该子查询会被当做一个视图来对待,因此也叫内嵌视图,
当在from子句中使用子查询时,必须给子查询指定别名,而且不可以加as,
Oracle分页:
1、rownum分页
select * from emp;
2、显示rownum[oracle 分配的]
select a1.*, rownum rn from (select * from emp) a1;
3、筛选小于等于10的记录,rownum不能重复用
select a1.*, rownum rn from (select * from emp) a1 where rownum<=10;
4、在(3)的筛选基础上再次筛选rownum大于等于6的记录
select * from (select a1.*, rownum rn from (select * from emp) a1 where rn<=10) where rn >=6
查询变化:
a. 指定查询列,只需要更改最里面的语句即可。
b. 如何排序,只需要更改最里面的语句即可。
用查询结果创建新表:
create table table_name1 (column_name1, column_name2,column_name3,…) as select column1_name1,column2_name2,column3_name3 … from table_name2;
合并查询(比and / or速度快):
union、union all、 intersect 、 minus
union:取得两个结果集的合集,并且自动去掉重复行
union all:取得两个结果集的合集,并且不会去掉重复行
intersect:取得两个结果集的交集
minus:取得两个结果集的差集