您的位置:首页 > 数据库 > Oracle

Oracle学习笔记20150815多表查询

2015-08-15 18:45 603 查看
1)锁定指定用户alter user 用户名 account lock;当一个用户被锁定后,它的数据 依然可以被查询到.

(2)解锁指定用户alter user 用户名 account unlock;

(3)where子句的用法.

select emp where sal>3000;查询sal大于3000的数据;(where语句后面不允许使用分组函数.)

(4)日期格式转换

select * from emp where to_char(日期列名,'yyyy-mm--dd')>'1982-1-1';

将日期转换为yyyy-mm--dd格式.

(5)范围查询select * from where sal>=2000 and sal<=2500;或者 select * from where sal between 2000 and 2500;(闭区间)

(6)使用like进行模糊查询

%代表任意0到多个字符

_下划线表是任意单个字符

(7)where条件中使用in例如where * from 表名 where 列名 in(条件1,条件2.....);查询列名符合条件的记录.

(8)Oracle中使用逻辑运算符例如 select * from emp where (sal>500 or job='MANAGER') and (ename like 'J%');

(9)order by主要的用处是对结果进行排序(默认是升序排列也就是从小到大)显示例如 select * from emp order by sal (asc);

默认情况下order by 后面的字段是asc升序排列也可以写desc变为降序排列.

更复杂的情况例如select * from emp order by dempon,hiredate desc;先按照deptno升序排列,再在depton相同时按照hiredate降序排列.

(10)Oracle支持按照别名排序

例如 select sal*13+nvl(comm,0)  年薪 from emp order by 年薪 asc;(asc升序,desc降序别名年薪可以用双引号包围也可以什么都不加,但是不能用单引号.)

(11)max与min的使用select max(sal) from emp;其中min同理.并且参数可以为表达式.

(12)avg()求平均值函数,会自动忽略null而且null也不作为个数,所以可以这样算sum(列名)/count(*) from emp;(count(*)会统计所有行.count也可以对一个字段进行统计如count(列名)如果字段为null则count也会忽略.)

(13)子查询 所谓的子查询就是当一个查询命令是另一个查询的条件时就称之为子查询例如select job from emp where sal=(select max(sal) from emp);(查询工资最高的人的职位是什么.)

(14)子查询的执行原理 sql语句默认情况下是从右向左执行的.不管多复杂的查询语句最后都会化为简单的查询语句.

(15)select avg(sal),max(sal),deptno from emp group by deptno;(按照deptn来分组查询每个部门的平均工资与最高工资.)

(16)Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。

(17)having语句用来过滤group by的结果用法与where语句类似但是可以使用聚合函数.

(18)如果同时出现group by having order by那他们的顺序必须是group by having order by  否则报错.

(19)分组函数只能出现在选择列表having与order by中.

(20)如果选择中出现列,表达式,分组函数,那么必须有一个列或者表达式出现在group by中.

*多表查询

(1)笛卡尔集   如果多表查询时不带任何条件就会出现笛卡尔集现象,为了避免笛卡尔集现象必须至少有表的个数减一个条件.

(2)多表查询例子 select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno and dept.deptno=10;

(3)多表查询时如果表名里面的列名不同就不用加表名区分.但是最好都加上,方便后期的维护与管理.

(4)小技巧:可以用取别名的方式缩短代码.

(5)自连接把一张表当做两张表来看.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: