ITPub博客

首页 > 数据库 > Oracle > sql语言

sql语言

原创 Oracle 作者:General_715 时间:2014-08-06 21:37:44 0 删除 编辑
sql语言
1.查询指定的列  as可以定义列的别名
select deptno,dname as department from dept;

2.取消重复行
select distinct deptno,job from emp;

3.使用where字句
select ename,hiredate from emp where HIREDATE<'82-01-01';

查询在部门20工作的,工资高于2500或岗位是clerk的
select deptno,sal,job,ename from emp where deptno='20' AND (sal>'2500' or job='CLERK');

查询部门20和30中的,岗位不是clerk和salesman的所有雇员的信息
select deptno,ename,job,sal from emp where deptno in ('20','30') and not (job='CLERK' or job='SALESMAN');

4.使用TO_DATE指定日期格式
select ename,hiredate from emp where HIREDATE< TO_DATE('1982-01-01','YYYY-MM-DD');

5.工资在2500到3500之间,没有领到补助的所有员工
select deptno,ename,job,sal,comm,hiredate  from emp where sal between 2500 and 3500 and comm is null ;

6.查询首字符为A或第二个字符为A的所有员工
select ename,job from emp where ename like '_A%';

7.以部门编号降序,姓名升序,查询工资在1500-3000的雇员信息
 select deptno,ename,sal,comm from emp where sal between 1500 and 3000 order by deptno desc,ename;


8.分组函数
注意:分组函数只能出现在所查询的列,order by字句,having子句中,而不能出现在where子句,group by子句中
查询各个部门的部门编码,最高工资,平均工资,然后显示高于2000的组
select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal) > 2000;

9.连接查询
查询部门编号为20工作的雇员的名称,工资及其部门名称
select e.ename,e.sal,d.dname,d.deptno from emp e ,dept d where e.deptno=d.deptno and d.deptno=20;

10.左外连接
查询所有员工姓名和所在部门的名称;
select t1.dname,t2.ename from dept t1 LEFT JOIN emp t2 ON t1.deptno=t2.deptno;
11.右外连接
select t1.ename,t2.dname from emp t1 RIGHT JOIN dept t2 ON t1.deptno=t2.deptno;

12.集合查询
UNION ALL 包括重复行
select empno,ename,mgr from emp where deptno=30 UNION ALL
select empno,ename,mgr from emp where  job='MANAGER';

UNION  不包括重复行
select empno,ename,mgr from emp where deptno=30 UNION
select empno,ename,mgr from emp where  job='MANAGER';


MINUS 只包括在第一个结果集但不在第二个结果集中的行
select empno,ename,mgr from emp where deptno=30 MINUS
select empno,ename,mgr from emp where  job='MANAGER';

 INTERSECT 只包括在共同的行
select empno,ename,mgr from emp where deptno=30 INTERSECT
select empno,ename,mgr from emp where  job='MANAGER';

14.子查询
查询工资最高的员工信息
select ename,deptno,sal from emp where sal=(select MAX(sal) from emp);

15.多行子查询
查询与部门20的岗位相同的员工信息 
select ename,deptno,sal,job from emp where job IN (select distinct job from emp where deptno=20);

查询不与部门20的岗位相同的员工信息
select ename,deptno,sal,job from emp where job NOT IN (select distinct job from emp where deptno=20);

查询高于部门20所有员工工资的雇员信息
select ename,deptno,sal,job from emp where sal >  ALL (select sal from emp where deptno=20);

查询高于部门20任意员工工资的雇员信息
select ename,deptno,sal,job from emp where sal >  ANY(select sal from emp where deptno=20) order by deptno;

16多列子查询
查询与SMITH的部门和岗位完全相同的员工信息
select ename,deptno,sal,job from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

查询或者岗位,或者管理员匹配部门20的所有员工的信息
select ename,deptno,sal,job from emp where job IN (select job from emp where deptno=20)
AND mgr IN (select mgr from emp where deptno=20)
order by deptno;

其他还有相关子查询和标量子查询

17在DDL语句使用子查询
CREATE TABLE dept1(deptno,dname,loc) AS select deptno,dname,loc from dept;

CREATE TABLE emp1 AS select * frop emp;

CREATE OR REPLACE VIEW dept_20 AS select * from emp where deptno=20 order by empno;

18 exists 关键字与子查询
select name,tile,wage from emp e
where exists
(select dep_id from dept d
where e.dep_id = d.dep_id and d.dep_name='人事部');
 
上面的语句等同于in关键字的select语句
select name,tile,wage from emp e
where e.dep_id IN
(select dep_id from dept d
where e.dep_id = d.dep_id and d.dep_name='人事部');
 

19 decode函数
将输入值和函数中的参数列表项比较,根据输入值返回一个对应值
select name,decode(sex,'男,‘先生’,‘女,’女士‘,’未知‘)  as sex
from emp;
 
20case函数
可实现与decode函数相同的功能
select name,case sex when '男’ then ‘先生’ when ‘女’ then ‘女士’ else ‘未知’ end as sex
from emp;
 
case函数还可实现搜索功呢个,根据不同逻辑表达式是否成立决定函数的返回值
select name,wage,case when wage<='3000' then '低‘ when wage>'3000' and wage<'5000' then '中'
when wage>='5000' then '高’ end as grade
from emp;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24989466/viewspace-1246800/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ASM 管理篇
请登录后发表评论 登录
全部评论

注册时间:2013-12-08

  • 博文量
    41
  • 访问量
    132425