`
l_rui_ci
  • 浏览: 40056 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

oracle 视频笔记1(select)

阅读更多

下面是用scott用户测试的。

如果不知道当前用户是什么用户,可以输入: show user ,这样它就显示出当前用户是什么用户了.
如果想编辑已经输入到sqlplus中的代码,可以输入“ed”,然后回车就能弹出一个记事本,记事本里面有上一步输入的代码,修改代码并保存后关闭记事本,最后在sqlplus中输入“/”并击回车就执行了。

1.不等于号是:<>
如:select ename, sal from emp where deptno <> 10;

2.SQL中的字符串大小写不一样
如:select ename ,sal from emp where ename = 'CLASD';
与 select ename ,sal from emp where ename = 'clasd';
是不一样的.

3.between 与 >=和<=
如: select ename, sal from emp where sal between 800 and 1500; 的意思与
select ename, sal from emp where sal >= 800 and sal <= 1500; 一样

4.把空值选出来
如: select ename, sal, comm from emp where comm is null;

5.把非空值选出来
如: select ename, sal, comm from emp where comm is not null;

6.in的用法
如:select ename, sal, comm from emp where sal in (800, 1500, 2000); 意思是把sal等于800 或者1500或者2000的 ename、sal、comm 拿出来。
select ename, sal, comm from emp where sal not in (800, 1500, 2000); 意思是把sal不等
800或者1500或者2000的ename、sl、comm 拿出来。

7.日期:1981年2月20日以后的表示为: select ename, sal, hiredate from emp where hiredate > '20-2月-81'; 或:select ename, sal, hiredate from emp where hiredate > '20-2月-1981';
先转换格式再取日期与时间:select ename, hiredate from emp where hiredate > to_date('1981-2-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS');

8.或者的连接用"or"
如:select ename, sal, comm from emp where sal>1000 or deptno=10;

9.模糊查找:like表示模糊查找,"%"表示零个或多个字母,"_"代表一个字母.
如:select ename from emp where ename like '%ALL%'; 表示查找符合ALL前面和后面有零个或多 个字母的ename;
select ename from emp where ename like '_A%';表示查找符合每二个字母是A的ename;
查找带有%的字符串,用转义字符"\",如:select ename from emp where ename like '%\%%';表示查找 带有"%"的字符串。也可以自己设置 转义字符,如:select ename from emp where ename like '%$%' escape '$'; 表示用$作为转义字 符.

10.排序:order by 。
降序:desc, 如:select * from dept order by deptno desc;
升序:asc, 默认情况下是升序,如:select empno, ename from emp order by empno asc;
或:select empno, ename from emp;
升降综合:select ename, sal, deptno from emp order by deptno asc, ename desc;表示先按 deptno的升序,如果有相同的deptno,再按照ename的降序排序。

11.select lower(ename) from emp; 表示取出的ename的字段的字母都是小写字母。

12.取子字符串(substr)。如:select substr(ename, 2, 3) from emp;表示取出ename中的从每2个字母开始的3个字母的字符串。

13.将chr形转换成ascii码。如:select chr(65) from dual; 表示将65转换成ascii码(A)。
将ascii形转换成chr码。如:select ascii('A') from dual; 表示将ascii码(A)转换成65。

14.select round(25.562) from dual;表示取到25.562的整数部分
select round(25.562, 2) from dual;表示取到25.562的两位小数
select round(25.562, -1) from dual;表示取到25.562的十位

15.to_char:
如:select to_char(sysdate, 'YYYY-HH-DD HH:MI:SS') from dual;表示将sysdate时间格式转化为YYYY-HH-DD HH:MI:SS
select to_char(sysdate, 'YYYY-HH-DD HH24:MI:SS') from dual;表示将sysdate时间格式转化为YYYY-HH-DD HH:MI:SS 其中时间是24小时制

16.select ename, sal*12 + comm from emp;这句SQL语句中,如果comm是空值,则加起来的结果也是空值 。为了避免这种情况,可以select ename, sal*12 + nvl(comm, 0) from emp; nvl(comm, 0)的意思是如果comm是空值,则用0来取代它.

17.求最大值(max)。如:select max(sal) from emp; 表示从emp中求出最大的sal.

18.求最小值(min)。如:select min(sal) from emp; 表示从emp中求出最小的sal.

19.求平均值(avg)。如:select avg(sal) from emp; 表示从emp中求出平均的sal.

20.精确到小数点后两位。如:select to_char(avg(sal), '99999999.99') from emp;

21.四舍五入到小数点后两位。如:select round(avg(sal), 2) from emp;

22.求和。如:select sum(sal) from emp; 表示sal的和为sum(sal)。

23.求出表中一共有多少条记录。
如:select count(*) from emp; 表示emp表中一共有多少条记录。
select count(*) from emp where deptno=10; 表示求出emp表中deptno=10的记录一共有多少条。
select count(*) from emp; 与select count(comm) from emp; 是不一样的。前一个*表示所有的记录;后面一个表示comm的记录。
select count(distinct deptno) from emp; 表示除去重复的deptno后一共有多少条记录。

24.分组函数(group)。
如:select deptno, avg(sal) from emp group by deptno; 表示按deptno分组显示sal的平均值。
select deptno, job, max(sal) from emp group by deptno, job; 表示按照deptno和job的组合分组显示deptno, job, max(sal) 。
select ename, max(sal) from emp;这句SQL是不对的,因为如果最大的sal有不同的ename,那么就会出错(由于输出是只有一条数据的);所以要改成select ename from emp where sal = (select max(sal) from emp);

25.having。where是对单条数据进行限制的,如果要限制查询出来后的多条数据,一般用having。如果一条SQL中有where和其他限制条件,那么先执行where限制条件。
如:select avg(sal), deptno from emp group by deptno having avg(sal) >2000; 表示通过deptno取出acv(sal)和deptno后,再从取出的数据中查询出avg(sal) 大于2000的数据。

26.限制词的执行顺序:where --> group by--> having --> order by
如:select deptno, avg(sal) from emp where sal > 1200 group by deptno having avg(sal) > 1500 order by avg(sal) desc; 表示按组deptno 取出sal > 1200 的deptno, avg(sal),然后选出avg(sal)大于1500的deptno, avg(sal),最后按agv(sal)的倒序排列。

27.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); 表示取出各组(deptno)中sal最大的ename和sal。

28.自连接,给一张表起两个别名,把一张表当成两张表用。
如:select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;

29.左外连接(left (outer)) outer可以省略。
如:select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.deptno);
表示把左边e1的没有符合连接的数据也拿出来(全部数据)。

30.右外连接(right (outer)) outer可以省略。
如:select ename, dname from emp e right outer join dept d on (e.deptno = d.deptno); 表示把右边d的没有符合连接的数据也拿出来(全部数据)。

31.全外连接(full)。
如:select ename, dname from emp e full join dept d on (e.deptno = d.deptno); 表示把表e表d的两个没有正确连接的数据全部取出来。

32.部门平均薪水的等级: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, grade, sal from emp join
salgrade s on (emp.sal between s.losal and s.hisal)) t group by deptno

33.三个表建立关系。
如:select ename, dname, grade from emp e join dept d on (e.deptno = d.deptno)
join salgrade s on (e.sal between s.losal and s.hisal) where ename not like '_A%';

34.雇员中有哪些人是经理人:select ename from emp where empno in (select distinct mgr from emp);

35.不用组函数求最高薪水
select distinct sal from emp where sal not in (select distinct e1.sal from
emp e1 join emp e2 on (e1.sal < e2.sal));

36.求出平均薪水最高的部门编号
写法一:select deptno from
(select avg(sal) avg_sal, deptno from emp group by deptno)
where avg_sal =
(select max(avg_sal) from
(select avg(sal) avg_sal, deptno from emp group by deptno)
);
写法二:select deptno from
(select avg(sal) avg_sal, deptno from emp group by deptno)
where avg_sal =
(select max(avg(sal)) from emp group by deptno);

37.求出平均薪水最高的部门名称
select dname from dept where deptno =
(
select deptno from
(select avg(sal) avg_sal, deptno from emp group by deptno)
where avg_sal =
(select max(avg_sal) from
(select avg(sal) avg_sal, deptno from emp group by deptno)
)
)

38.平均薪水的等级最低的部门名称
方法一:select dname, t1.deptno, grade, avg_sal from
(
select deptno, avg_sal, grade from
(select deptno deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on
(t.avg_sal between s.losal and s.hisal)
) t1
join dept on (t1.deptno = dept.deptno)
where t1.grade =
(
select min(grade) from
(
select deptno, avg_sal, grade from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on
(t.avg_sal between s.losal and s.hisal)
)
)


方法二:select dname from dept where deptno =
(
select deptno from
(select deptno, avg_sal, grade from
(select deptno, avg(sal) avg_sal from emp group by deptno) t join salgrade s on
(t.avg_sal between s.losal and s.hisal)
)
where avg_sal =
(select min(avg_sal) from
(select deptno, avg_sal, grade from
(select deptno, avg(sal) avg_sal from emp group by deptno) t join salgrade s on
(t.avg_sal between s.losal and s.hisal)
)
)
)

39.使用视图简化SQL
将下面这段代码简化:
平均薪水的等级最低的部门名称
方法一:select dname, t1.deptno, grade, avg_sal from
(
select deptno, avg_sal, grade from
(select deptno deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on
(t.avg_sal between s.losal and s.hisal)
) t1
join dept on (t1.deptno = dept.deptno)
where t1.grade =
(
select min(grade) from
(
select deptno, avg_sal, grade from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on
(t.avg_sal between s.losal and s.hisal)
)
)
简化为:授权
conn sys/520419 as sysdba
grant create table, create view to scott;
conn scott/tiger
创作视图
create view v$_dept_avg_sal_info as
select deptno, avg_sal, grade from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on
(t.avg_sal between s.losal and s.hisal)

简化:
select dname, t1.deptno, grade, avg_sal from
v$_dept_avg_sal_info t1
join dept on (t1.deptno = dept.deptno)
where t1.grade =
(
select min(grade) from v$_dept_avg_sal_info
)

40.比普通员工的最高薪水还要高的经理人名称
select ename from emp where empno in (select mgr from emp where mgr is not null)
and sal >
(
select max(sal) from emp where empno not in
(select mgr from emp where mgr is not null)
)

41.rownum,其实每个表中都有一个隐藏的列,是用来标记行号的,但是它只能与<、<=在一起用,不能与>、>=、=在一起用。
如:select empno, ename from emp where rownum <=5;

42.求薪水最高的前5名雇员。
方法一:select ename, sal from
(select ename, sal from emp order by sal desc)
where rownum <= 5
方法二:select ename, sal, r from
(
select ename, sal, rownum r from
(select ename, sal from emp order by sal desc)
)
where r <=5

43.求薪水最高的第6到每10名雇员(重点掌握)。
select ename, sal, r from
(
select ename, sal, rownum r from
(select ename, sal from emp order by sal desc)
)
where r >=6 and r<=10

分享到:
评论

相关推荐

    尚学堂视频笔记-oracle

    文档部分内容如下, 全部是尚学堂课堂原笔记.. 第一课:客户端 1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。 2. 从开始程序运行:sqlplus,是图形版的sqlplus. 3. ...

    Oracle 入门文档2

    Oracle笔记 三、function 、select Oracle笔记 四、增删改、事务 Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间 Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 ...

    韩顺平oracle学习笔记

    韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的...

    oracle10Gselect语句自学笔记.chm

    oracle10Gselect语句自学笔记.chmoracle10Gselect语句自学笔记.chm

    Oracle 入门文档

    Oracle笔记 三、function 、select Oracle笔记 四、增删改、事务 Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间 Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 ...

    oracle精华笔记

    oracle精华文档,内容详实, SQL(结构化查询语言) Select 字段(*) from 表名 where ...group by ...having ...order by DDL(数据定义语言) Create table 表名 Drop table 表名 Alter table 表名 add 列名 数据...

    Oracle 认证学习笔记

    oracle 9i dba 认证教程学习笔记 第一章 oracle 数据库体系结构基础 1、oracle 数据库系统:为具有管理oracle数据库功能的计算机系统。 2、系统全局区(system global area):在数据库服务器上启动一数据库时的...

    oracle笔记,入门体验篇,基本的SQL-SELECT语句

    oracle笔记,入门体验篇,基本的SQL-SELECT语句,简单入门,有具体的案例代码!

    视频教程读书笔记之oracle从入门到精通

    纯手写笔记 SELECT [DISTINCT] * | 列 [别名] FROM 表名称 1 [CROSS JOIN 表名称2] [NATURAL JOIN 表名称2] [JOIN 表名称 ON(条件)|USING(字段)] [LEFT | RIGHT | FULL OUTER JOIN 表名称2]; 1. 交叉连接:...

    李兴华Oracle数据库全套课堂笔记

    《李兴华Oracle数据库课堂笔记》 例:查询出所有不领取佣金的雇员。 SELECT*FROM emp WHERE comm IS NULL; 例:查询出所有领取佣金的雇员。 SELECT*FROM emp WHERE comm IS NOT NULL; SELECT*FROM emp WHERE ...

    ORACLE笔记(数据库)

    1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。 2. 从开始程序运行:sqlplus,是图形版的sqlplus. 3. http://localhost:5560/isqlplus Toad:管理, PlSql Developer: 第二课...

    Oracle数据库学习笔记

    向你介绍我的Oracle数据库学习笔记 1.SQL命令: SQL 支持4大类型命令: 数据定义语言(DDL): Create(创建), Alter(更改), Drop(删除). 数据操纵语言(DML): Select(选择), Insert(插入), ...

    oracle 笔记.txt

    RACLE笔记(1) 收藏 Oracle SQL(Oracle 9i 9.2.0.1.0) SQL(结构化查询语言),是操作关系型数据库中的对象。 DDL(数据定义语言),用于建表或删表操作,以及对表约束进行修改。 DML(数据操作语言),向表中插入...

    oracle学习笔记

    oracle day3 笔记 外连接: 查找每个员工的经理ID select e.first_name "Employee",m.first_name "Manager" from s_emp e,s_emp m where e.manager_id=m.id(+); 一、组函数 group 组 group by 分组子句,...

    Oracle学习笔记(一)

    2“AS”符号oracle:select 列名 as 新列名 from 表名 (空格,不能有as)新表名sql:select 列名 as 新列名 from 表名T as(as可有可无) 新表名 二.数据排序与数据过滤查询与sql相同 in ,like, is null,between ...

    oracle全程笔记及代码

    (2)关系模型的组成:数据结构+数据操作+数据完整性,数据结构指表、数据操作指数据的CRUD(create---insert,R read----select,update,delete 增删改查等操作) 完整性约束是指数据的正确性与完备性。 1)表:...

    ORACLE精品脚本笔记

    找ORACLE字符集 &lt;br&gt;select * from sys.props$ where name='NLS_CHARACTERSET'; &lt;br&gt;15. 监控 MTS &lt;br&gt;select busy/(busy+idle) "shared servers busy" from v$dispatcher; &lt;br&gt;此值大于0.5时,...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    oracle数据库笔记

    1.Select语句的格式 34 2.Select … From … ——选择列(投影) 35 3.Where子句——选择行(选择)数据过滤 35 4.Order By子句 35 5.统计函数——列名应指定别名 35 6. Group By分组 36 7.Having子句 36 8.练习:表...

Global site tag (gtag.js) - Google Analytics