Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等
count组函数:(过滤掉空的字段)
select count(address),count(*) from b_user
max() avg() min(),sum()
select sum(age),max(age),min(age),avg(nvl(age,0)) from b_user
1 260 70 10 37.1428571428571
group by:如果前面定义了该字段名 则groupby必须也写上该字段
select name,pwd,sum(age) from b_user group by name,pwd
//如果取消group by name,age则报错,而且执行结果中如果有相同的则只取一条记录
select name,sum(age) from b_user group by name,age
不能在where语句中使用组函数,having则可以
having可以过滤分组结果
select name,sum(age) from b_user group by name,age having sum(age) >=50
select name,case when address is null then '无地址' else address end from b_user
case when语句
select name,case name
when '1' then age+10
else age+100
end 变后年龄
from bgt
select name,decode(name,'1',age+10,'2',age+100) 年龄 from bgt
select name,decode(name,'1',age+10,age+100) 年龄 from bgt 去掉后表示其他的默认为age+100
多表查询:
等值连接
select * from inter_00201 a,inter_00202 b where a.ahd010401=b.ahd010401
不等值连接
select * from res_00201 a,res_00202 b where a.ahd050203 between 300.00 and 10000.00
外连接
左外连接
select * from res_00201 a,res_00202 b where a.intype=b.intype(+)
右外连接
select * from res_00201 a,res_00202 b where a.intype(+)=b.intype
自连接(使用小表)
select * from inter_00201 a,inter_00202 b
层次查询
子查询:
子查询应该在括号里面
子查询相对于主查询往右缩进
在主查询的where from select having后面可以添加子查询
selct * from (select * from user where username='柳条')
该处子查询必须是单行子查询即是一条
select ename,(select job from emp where id='1000') from emp
在主查询的group by后边不可以放子查询
主查询和子查询可以不是同一张表,只有返回结果主查询可用即可.
select * from user where username=(select username from role where roleid='1012')
子查询中null值问题
如果存在null,且使用 not in subquery 则等同于<> all 返回未选定行
多行子查询操作符
in 等于列表中的任何一个
any 和子查询返回的任意一个值比较
select * from bgt where age< any (10,20,30,40)
任意小于10,20,30,40的符合条件的记录 即小于40的所有符合的记录.如果是大于则刚好相反,大于最小的
all 和子查询返回的所有值比较.
select * from bgt where age< all (20,30,40)
即所有小于20符合条件的记录.如果是大于则刚好相反
关于行号rownum
一旦生成就不变了
行号只能使用< <=不能使用> >=
select * from (select rownum r,age from (select rownum,age from bgt order by age desc) where rownum <=3 ) where r >=2
可以用此方式改变rownum,查询2--3条
select name,wm_concat(age) from bgt group by name可以进行分类拼接 比如等级为1的成员姓名
group by rollup()增强版的group by
select name,job,sum(sal) from emp group by rollup(name,job)
该sql相当于:
select name,job,sum(sal) from emp group by name,job
union
select name,to_char(null),sum(sal) from emp group by name
union
select to_char(null),to_char(null),sum(sal) from emp
集合运算符
并集 union/union all
交集 intersect
差集 minus
集合运算一般操作小表
set timing on 打开执行开关
set timing off 打开执行开关
set feedback off 关闭类型已选择14行.的提示
加载外部sql
@c:\sql.sql
特殊的插入(地址符):
insert into tablename(列1,列2,列3) values(&列1,&列2,&列3)
回车后会提示:
输入列1的值:..
输入列2的值:..
输入列3的值:..
select name,pwd,&unknown from user
输入unknown值:
result....
创建表结构的一种特殊方式:
create table user2 as select * from user where 1=2
如果表结构相同可以直接这样插入(没有会自动创建该表)
insert into user2 select * from user where username like 'b%'
输入列1的值:..
清空表
truncate table tablename(摧毁表再新建,释放空间,不会产生碎片,不可返回)
delete from tablename(逐个删除记录,可能产生碎片,且不会释放空间,可撤销操作)
定义保存点:
savepoint 保存点名
rollback to savepoint 保存点名
在jdbc中设置保存点
oracle数据库的事务隔离级别
READ COMMITED,SERIALIZABLE两种以及自身的READ ONLY
而数据库提供的有四种:
READ UNCOMMITED(读未提交的数据)
READ COMMITED(读已提交的数据)
REPEATABLE READ (可重复读)
SERIALIZABLE(串行化)
oracle回收站功能
查看回收站:
show recyclebin
清空回收站:
purge recyclebin
彻底删除某张表:
drop table tablename purge
create table person(
pid number, pname varchar(20), gender varchar2(2) check (gender in('男','女')), age number check (age>0));
create table yueshu(
yid number constraint yushu_PK primary key,
yname varchar2(20) constraint yushu_Name not null,
email varchar2(30) constraint yushu_Email unique,
sal number constraint yushu_sal check(sal>10),
sex varchar2(2) constraint yushu_sex check(sex in('男','女')),
deptno number constraint yushu_deptno references dept(deptno) on delete cascade);
批注:deptno外键是dept表的主键deptno
表:基本的数据存储集合,由行和列组成。
视图:从表中抽出的逻辑上相关的数据集合。
select * from user_role_privs; 该语句可查出当前用户所有的权限
视图的优点:
限制数据访问,简化复杂查询,提供数据的相互独立,同样的数据,可以有不同的显示方式。
但视图不能提供性能
视图是一种虚表。
视图建立在已有表的基础上,视图赖以建立的这些表称为基表。
向视图提供数据内容的语句为select语句,可以将视图理解为存储起来的select语句。
视图向用户提供基表数据的另一种表现形式。
Create or replace view myView (列1,列2,列3,列4…) as select列1,列2,列3,列4…from tablename where 列1=10 with read only
加上with read only 表示只读
With check option 表示检测数据是否符合查询条件(比如insert视图时不能插入不符合条件的数据。)
Drop view viewname
序列:提供有规律的数值。
可供多个用户用来产生唯一数值的数据库对象。
自动提供唯一的数值,共享对象,主要用于提供主键值,将序列值装入内存可以提高访问效率。
create sequence mysequence increment by 1 start with 4 maxvalue 10 cache 3 cycle;
insert into table tablename values (mysequence.nextval,?,?,?,?)
alter sequence mysequence increment by 1 start with 4 maxvalue 10 cache 3 cycle;
drop sequence;
索引:提高查询的效率。
一种独立于表的模式对象,可以存储在与表不同的磁盘或者表空间中
索引被破坏或者损坏,不会对表产生影响,其影响的只是查询的速度。
索引一旦建立,oracle管理系统会对其进行自动维护,而且由oracle管理系统决定何时使用索引。用户不用在查询语句中指定使用哪个索引。
在删除一个表时,所有基于该表的索引会自动被删除。
通过指针加速oracle服务器的查询速度
通过快速定位数据的方法,减少磁盘I/O。
自动创建:定义primary key 或者unique等系统会自动在相应列上创建唯一性索引
手动创建:在其他列上创建非唯一性索引,已加速查询
Created index indexname on table (coloumn)
什么情况下创建索引:
列中数据值分布范围很广
列经常在where子句或连接条件中出现
表经常被访问而且数据量很大,访问数据大概占总量的2%~4%
什么情况下不合适创建索引
表很小
列不经常作为连接条件或出现在where子句中
查询数据大于2%~4%
表经常更新。
可以使用数据字典视图 USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息
Drop index indexname
同义词:给对象起别名。
使用同义词访问相同对象
方便访问其他用户的对象
缩短对象名称的长度
Create [public] synonym synonymname for object
Drop synonym name
Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等的更多相关文章
- Oracle入门第五天(上)——数据库对象之视图
一.概述 1.什么是视图(VIEW) 视图 从表中抽出的逻辑上相关的数据集合(是一张虚表). 2.为什么使用视图 1.控制访问 2.简化查询 3.视图的分类 二.视图管理 1.创建视图 CREATE ...
- oracle 组函数
一.组函数嵌套 ORACLE中规定,组函数嵌套只能嵌两层.其实多层嵌套并没有实际的用途,因此ORACLE没有提供组函数的多层嵌套.但是,单行函数是可以多层嵌套的. 二. 1.Oracle包含以下组函数 ...
- 数据库Oracle组函数和分组函数
组函数: 组函数操作行集,给出每组的结果.组函数不象单行函数,组函数对行的集合进行操作,对每组给出一个结果.这些集合可能是整个表或者是表分成的组. 组函数与单行函数区别: 单行函数对查询到每个结果集做 ...
- 在一般处理程序中,把Form Post过来的表单集合转换成对象 ,仿 MVC post,反射原理
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.L ...
- 查询Sql Server数据库对象结构
查询Sql Server数据库对象结构 查询数据库 查询架构 查询表 查询列 查询存储过程 查询视图 1.查询某一服务器下所有数据库 select t.[name] as 数据库 from sys.d ...
- Oracle(2)之多表查询&子查询&集合运算
多表查询 笛卡尔积 同时查询多张表时,每张表的每条数据都要和其它表的每条数据做组合.如下栗子,我们发现产生的总记录数是 56 条,还发现 emp 表是 14 条,dept 表是 4 条,56 条正是 ...
- Oracle数据库多表查询,子查询,集合运算
记得自己要敲o~~~ select * from bonus; select * from salgrade; from dual; --笛卡尔积:两张表的乘积 select * from emp,d ...
- oracle 常用的系统表查询
(转自:http://blog.csdn.net/marshalchen/article/details/6552103) select * from user_tab_cols where colu ...
- Oracle笔记_多表查询
1 执行sql文件 @文件地址名 --执行某个sql文件: 2 多表查询 想要的数据不在同一张表,就需要多个表进行联查. 多表查询也叫做表连接查询,其中的where条件就是连接条件. 可以使用join ...
随机推荐
- web开发性能优化---UI接口章
1.尽可能的远div+css设计 DIV+CSS与表相比格优势布局: a.精简代码 采用DIV+CSS设计,页面代码精简.这是为了XHTML了解都知道. 代码精简所带来的直接优点有两点:一是提高蜘蛛爬 ...
- [Mac] Mac book pro互换SSD硬盘、生产启动U菜、TimeMachine恢复 小记
Mac book pro 硬盘故障.互换SSD硬盘.启动U磁盘生产 小记 2012新年买Mbp了.尽管各种功能都能用,但常常频繁的出现鼠标风火轮,已经下好的电影在本地播放时都会隔个几分钟卡一下. 拿到 ...
- SQL随着子查询结果更新多个字段
笔者:iamlasong 要求:表格内容需要改变,在临时表中内容的变化,使用SQL官方声明更新表若干领域. 假设更新一个字段,直接用字段名=子查询就能够了,多个字段更新,将字段在括号里并列写出就可以, ...
- 用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能
一.搭建開始前的准备 1.我用的MyEclipse2014版,大家也能够用IDEA. 2.下载Tomcat(免安装解压包).MySQL(zip包下载地址 免安装解压包,优点就是双击启动,最后我会把ba ...
- 不能交换到解决jenkins用户的问题
su - jenkins始终有效,今centos无效,因为 /etc/password在文档/bin/bash是yum当安装到/bin/false. 之后可以改变. ubuntu安装包和yum安装包的 ...
- Android手游《》斗地主完整的源代码(支持单机和网络对战)
Android手游<斗地主>完整的源代码(支持单机和网络对战)下载.一个很不错的源代码. 斗地主掌游是一个独特的国内社会斗地主棋牌游戏,之后玩家可以下载网上斗地主和全世界.掌游斗地主特点: ...
- Mysql编写定时任务事件
原文:Mysql编写定时任务事件 场景: 例如:某系统,用户每天只能拥有一次的抽奖机会,抽过后当天就不可再抽,但是过了24:00点后用户就重新拥有一次抽奖机会.像这种需要数据库定时对某个字段进行更新操 ...
- 信号量机制DOWN操作和UP操作的详细说明
DOWN操作:linux内核.信号DOWN例如,下面的操作: void down(struct semaphore *sem); //不间断 int down_interruptible(struct ...
- 优秀的前端project如何制定一个老师--html学习路径
一个好的前端project教师发展,不是一蹴而就,它需要大量的学习和积累. 至于谁刚开始学习的人,如何入门.学习如何选择我的路线,做了各种工具? 1. 学习之前 1.不要着急看一些复杂网页效果的代码 ...
- Swift入门教程:基本语法大全
原文:Swift入门教程:基本语法大全 简介: ...