DBA操作
sqlplus sys/tiger as sysdba;
alter user scott account unlock;
用户已更改
切换用户:conn scott/tiger as sysdba;
修改密码:alter user scott indentified by tiger;
1.select语句:
select sysdate from dual;
select ename,sal*12+comm from emp;(结果是错的,如果comm为空,那么sal*12+comm整个为空)
select ename ,sal*12 year_sal from emp;
select ename||sal from emp;
select ename || 'dhfaf' from emp;
select ename || 'jfkjdk''kdjfkla' from emp;
distinct:
select distinct deptno from emp; //重复的编号去除掉
select distinct deptno,job from emp; //查询的结果会出现重复的编号和job,但deptno+job不重复
2.where:
select ename,sal,comm from emp where comm is null;
select ename,sal,comm from emp where comm is not null;
select ename,sal,comm from emp where sal in (800,1500,2000);
select ename,sal,comm from emp where sal in ('Simth','abc','ABC');
如果想查询大于2007年2月25日以后入职的员工信息
首先select sysdate from emp;
查询结果是25-2月-07
必须得按这个字符串特定的格式来写:
select ename,sal,hiredate from emp where hiredate >'25-2月-07';
select ename,sal,from emp where deptno =10 and/or sal>1000;
where ename,sal from emp where sal not in (800,1500); //取反
select ename from emp where ename like '%ALL%'; //%表示0个或多个字母
select enaem from emp where ename like '_A%'; //_表示占位符
如果名字里面本身就有%:
select ename from emp where ename like '%$%%' escape '$'; //指定$为转义字符
3.order by
select * from dept order by deptno desc; //降序排列
select empno,ename from emp order by empno asc; //升序排列
select empno,ename from emp where empno <>10 order by empno asc;//先过滤再排序
按照两个字段排序:
select ename,sal,deptno from emp order by deptno asc,ename desc; //先按deptno升序排列再在相同deptno中ename用降序排列
4.函数lower
select lower(ename) from emp;
查询员工名字不管大小写,第二个字母是a的名字:
select ename from emp where lower(ename) like '_a%';
或者:select ename from emp where ename like '_a%' or ename like '_A%';
5.函数substr 截取
select substr(ename,1,3) from emp; //从第一个字符开始截取,长度为3
6.函数chr 把而刺客码转换成字符
select chr(65) from dual; //查询结果为A
7.函数ascii 把字符转换成ASCII
select ascii('A') from dual; //查询结果为65
8.函数round 四舍五入
select round(23.652) from dual; //24
select round(23.652,2) from dual; //23.65
select round(23.652,1) from dual; //23.7
select round(23.652,-1) from dual; //20
*9.函数to_char 把数字/日期转换成相关字符串并且有特定的格式控制
select to_char(sal,'$99,999.9999') from emp;
select to_char(sal,'L99,999.9999') from emp; //人民币
select to_char(hiredate,'YYYY-MM-DD HH24:MI:SS') from emp;
*10.to_date 把特定格式的字符串转换成日期类型
select ename,hiredate from emp where hiredate >to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');
*11.to_number 把特定格式的数字转换成相关类型
select sal from emp where sal > to_number('$1.250.00','$9,999.99');
*12.nvl 处理空值的
select ename,sal*12 + nvl(comm,0) from emp;
*13.组函数:输入好多条记录,输出只有一条
max(sal) min(sal) avg(sal) sum(sal)
select to_char(avg(sal),'99999.99999') from emp;
select round(avg(sal),2) from emp;
count(*) //表示表中有多少条记录(不是空值的有多少个)
select count(*) from emp where deptno=10;
select count(distinct deptno) from emp; //部门编号有多少个
*14.group by
哪个部门的平均薪水是多少:
select deptno,avg(sal) from emp group by deptno;
按照多个字段进行分组:
select deptno,job,max(sal) from emp group by deptno,job;
输出薪水最高的员工的名字:
错误的是:select ename,max(sal) from emp;
真确的是:select ename from emp where sal=(select max(sal) from emp);
输出每个部门挣钱最多人的名字
错误的是:select ename,max(sal) from emp group by deptno;
真确的是:select deptno,max(sal) from emp group by deptno; //deptno在分组里面确确实实只有一个
*15.having 是对分组进行限制
where语句是对单条的记录进行过滤
把平均薪水大于2000的部门取出来
select avg(sal),deptno from emp group by deptno having avg(sal)>2000;
顺序:select * from emp
where sal>1000
group by deptno
having
order by
例子:薪水大于1200的雇员按照部门编号进行分组,分组后的平均薪水必须大于1500,查询分组后的平均工资,按工资的倒叙排列
select avg(sal) from emp where sal>1200 group by deptno having avg(sal)>1500 order by avg(sal) desc;
*16.子查询:在一个select语句里面套了个另外的select语句
套的select语句可以出现在where里面,也可以出现在from语句后面
求哪些人的工资位于所有平均工资之上
select ename,sal from emp where sal>(select avg(sal) from emp);
按照部门进行分组后,每个部门里面挣钱最多的员工信息
select ename,sal,deptno from emp
where sal=(select max(sal) from emp group by deptno);//错误的
select ename,sal,deptno from emp
where sal in (select max(sal) from emp group by deptno);//错误的
select ename,sal from emp
join (select max(sal) max_sal,deptno from emp group by deptno ) t
on (emp.sal=t.max_sal and emp.deptno=t.deptno); //正确的
*17.自连接:其实是在同一张表内进行两次查询.为同一张表其不同别名,当成两张表来用
找出员工对应的经理的名字(分析:员工名字和经理名字都在emp表的ename列中)
select t1.ename,t2.ename from emp t1 ,emp t2 where t1.mgr=t2.empno;
*18.
等值连接:找出每位员工的部门名称
select ename,dname from emp join dept on (emp.deptno=dept.deptno);
求部门平均薪水的等级
select deptno,avg_sal,grade from
(select avg(sal) avg_sal,deptno from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal);
求部门平均的薪水等级
select deptno ,avg(grade) from
(select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal)) t
group by deptno;
雇员中有哪些人是经理
select ename from emp where empno in (select distinct mgr from emp);
面试题:
1.不用组函数,求出薪水的最高值(自连接)
左边的一张表中的薪水小于右边一张表的薪水,有一条或多条是连接不上右边,就是左边的最大值没有小于右边表的薪水
select distinct sal from emp where sal not in
(select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal));
2.平均薪水最高的部门的部门编号
select deptno,avg_sal from
(select avg(sal) avg_sal,deptno from emp group by deptno) t
where avg_sal=
(select max(avg_sal) from t);
3.平均薪水最高的部门的部门
select dname from dept where deptno =
(
select deptno,avg_sal from
(select avg(sal) avg_sal,deptno from emp group by deptno) t
where avg_sal=
(select max(avg_sal) from t)
);
DBA操作的更多相关文章
- DBA操作常用命令
一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 orac ...
- dba操作之archivelog清理
下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,列出几种常用的: crosscheck archivelog all; ...
- oracle DBA操作
sqlplus sys/tiger as sysdba; alter user scott account unlock; 用户已更改 切换用户:conn scott/tiger as sysdba ...
- 在SQL Server 2014里,如何用资源调控器压制你的存储?
在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入 ...
- oracle的sid
SID是一个数据库的唯一标识符!是你在建立一个数据库时系统自动赋予的一个初始ID,虽说他和数据库名(DB_NAME)都是一个数据库的唯一标识符,但是在作用上就有不小区别.SID主要用于在一些DBA操作 ...
- 程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法
一.异常{ ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connect ...
- MySQLHA系列MHA(一)
MHA,这是Master High Availability Manager and Tools for MySQL,一个日本MySQL专家们使用Perl语言编写的一个脚本管理工具.该工具仅适用于My ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...
- 如何在linux环境安装数据库
1.1 获取oracle 数据库安装包: 注意:获取的是database的安装包,不是客户端的安装包 1.2 以root用户登陆云主机,修改主机名 Hostname 1.2.1 ...
随机推荐
- Hbase 学习(十一)使用hive往hbase当中导入数据
我们可以有很多方式可以把数据导入到hbase当中,比如说用map-reduce,使用TableOutputFormat这个类,但是这种方式不是最优的方式. Bulk的方式直接生成HFiles,写入到文 ...
- Redis列表
Redis列表是简单的字符串列表,排序插入顺序.您可以在头部或列表的尾部Redis的列表添加元素. 列表的最大长度为232 – 1 (每个列表超过4十亿元素4294967295)元素. 例子 redi ...
- Android开发-新建线程崩溃
一直不满意车机不能实现屏保,最近发现可以通过设置亮度实现,顾萌生了自己写程序的来实现的念头,遂修改原来练手的app.毕竟过去了1年,各类程序.sdk都已经更新了不知道多少版本.经历了痛苦的升级.更新, ...
- JAVA :Jpanel 控件 无法显示问题
http://blog.csdn.net/gcangle/article/details/8222005 ——————————————————————————————————————————————— ...
- IT 运营架构杂谈【前言】
[ 什么是IT 服务 ?] OGC官方的ITIL 服务定义: 中文定义:实施和管理 IT 服务,满足业务的需要.IT 服务管理由IT 服务提供方通过人员.流程和信息技术的适当组合而进行. [ ...
- Mybatis set标签
set - 更新语句 当 update 语句中没有使用 if 标签时,如果有一个参数为 null,都会导致错误. 当在 update 语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误 ...
- FusionCancer-人类癌症相关的融合基因的数据库
RNA-seq 测序可以用于融合基因的发现,在过去的十几年里,RNA-seq 测序数据不断增加,发现的融合基因的数据也不断增加: FusionCancer 是一个人类癌症相关的融合基因的数据库,利用N ...
- bioerl 获取gi号
代码示例: use Bio::DB::EUtilities; my @ids = qw(CAB02640 EAS10332 YP_250808 NP_623143 P41007); my $facto ...
- windows上開啟多個apache服務器
1.安裝apache(這裡我用的是集成環境) 比較php版本 5.6 與 7.2 比較mysql版本 拓展: 注意:對個不同的版本的mysql,命令行進入,需要指明端口號,如:mysql -uroo ...
- c++ windows下计时
多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 陈硕Blog.csdn.net/Solstice 自从 Intel Pentium 加入 RDTSC 指令以来,这条指令是 micro ...