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操作的更多相关文章

  1. DBA操作常用命令

    一.ORACLE的启动和关闭   1.在单机环境下   要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下   su - oracle      a.启动ORACLE系统   orac ...

  2. dba操作之archivelog清理

    下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,列出几种常用的: crosscheck archivelog all;                        ...

  3. oracle DBA操作

    sqlplus sys/tiger  as sysdba; alter user scott account unlock; 用户已更改 切换用户:conn scott/tiger as sysdba ...

  4. 在SQL Server 2014里,如何用资源调控器压制你的存储?

    在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入 ...

  5. oracle的sid

    SID是一个数据库的唯一标识符!是你在建立一个数据库时系统自动赋予的一个初始ID,虽说他和数据库名(DB_NAME)都是一个数据库的唯一标识符,但是在作用上就有不小区别.SID主要用于在一些DBA操作 ...

  6. 程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法

    一.异常{ ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connect ...

  7. MySQLHA系列MHA(一)

    MHA,这是Master High Availability Manager and Tools for MySQL,一个日本MySQL专家们使用Perl语言编写的一个脚本管理工具.该工具仅适用于My ...

  8. 理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...

  9. 如何在linux环境安装数据库

    1.1      获取oracle 数据库安装包: 注意:获取的是database的安装包,不是客户端的安装包 1.2      以root用户登陆云主机,修改主机名 Hostname 1.2.1   ...

随机推荐

  1. linux 网络安全不完全笔记

    一.安装Centos二.Linux网络网络环境设置 a.配置linux与客户机相连通 b.配置linux上网三.Yum详解 yum 的基本操作 a.使用 yum 安装新软件 yum install – ...

  2. PHP zhuaq

    change_html_img_src.php <?php $url=$_GET['url']; $id=$_GET['id']; $type=$_GET['type']; $redis_key ...

  3. 前端最全的 API 集锦

    window.getComputedStyle(el,':after')[attrName]------------------------------------------------------ ...

  4. Caused by:java.lang.IllegalStateException at android.media.MediaPlayer._setDataSource(Native Method)

    使用Mediaplayer播放本地音频,在第二次调用mediaplayer.setDataSource()时报错如下: Caused by: java.lang.IllegalStateExcepti ...

  5. T-SQL 错误状态

    MS Windows Error Messages Code Error Message 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文 ...

  6. discuz X论坛技术架构 MVC结构浅析

    摘自:http://yeyuan.iteye.com/blog/930727 PS:本人刚接触discuz论坛,php水平有限,当中的理解,如有不正确之处,欢迎指出 ----------------- ...

  7. Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.【转】

    今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者 如果你使用的数据库连接类是 the Data Access Application Blocks "SqlHelper" ...

  8. IntelliJ IDEA 2017 汉化包及教程

    一.准备 官网下载IntelliJ IDEA 2017 并安装好 下载汉化包 (百度云链接:http://pan.baidu.com/s/1slS9ZMP 密码:gp79) 二.汉化 此处有两种方法, ...

  9. SSH命令详解2

    ssh命令详解     目录         前言     一.ssh命令         1.Ssh参数解释         2.如何连接远程主机         3.利用Xstart 在windo ...

  10. C# 中base和this关键字

    base: 用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数.实例方法和实例属性访问器中. MSDN中小结的具体功能包括: ()调用基类上已被其他方法重写的方法. ()指定创建派 ...