Oracle学习(三)

oracle中创建记事本以及调用记事本都是用命令: “ed 文件名”
找出同时满足两个条件的所有信息用OR连接
范例:
“找出部门10中所有的经理,部门20中所有的办事员,既不是经理又不是办事员但其薪金大于或者等于2000的所有员工的详细资料。”

  • SELECT * FROM emp WHERE (JOB='CLERK' AND DEPTNO=20) OR (JOB='MANAGER' AND DEPTNO=10) OR (JOB NOT IN (SELECT JOB FROM emp WHERE JOB='CLERK' OR JOB='MANAGER') AND (SAL+COMM)>=2000)
    
  • SELECT * FROM emp WHERE (JOB='CLERK' AND DEPTNO=20) OR (JOB='MANAGER' AND DEPTNO=10)OR (JOB NOT IN ('CLERK' ,'MANAGER') AND  SAL>=2000)
    

DISTINCT(直接在返回的量前面加即可)

  • SELECT DISTINCT JOB FROM emp WHERE COMM IS NOT NULL;
    

模糊查询(注意通配符用单引号,不能是双引号;LIKE;NOT LIKE)

  • 百分号(%)通配符:表示任何字符出现的任意次数
    范例:搜索以jet开头的产品:LIKE ‘jet%’
  • 下划线(_)通配符:只匹配单个字符
    案例:找出员工姓名不带”R“的信息
  • SELECT * FROM emp WHERE ENAME  NOT LIKE '%R%';
    

案例:显示姓名字段的任何位置包含’A‘的所有员工的姓名,显示结果按照薪金降序,雇佣年限升序。

编写ORDER BY 无下限

  • SELECT * FROM emp WHERE ename LIKE '%A%' ORDER BY SAL desc,HIREDATE asc,job;
    

总结
SELECT FROM WHERE ORDER BY




单行函数

  • 字符串函数
  • 数值函数
  • 日期函数
  • 转换函数
  • 通用函数
  • 复杂查询

复杂查询=简单查询+限定查询+查询排序+多表查询+分组统计查询+子查询 面对复杂的查询,一定要熟悉分析步骤。以后我们遇到的表很多。
范例:列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称、部门人数。
##选择比部门30所有员工的工资都高的所有员工的姓名、薪金、部门名称、统计部门的人数。
SELECT e.ename,e.sal,d.dname,temp.count
FROM emp e,(SELECT deptno ,COUNT(deptno) count
FROM emp
GROUP BY deptno) temp,dept d
WHERE sal>ALL(
SELECT sal
FROM emp
WHERE deptno=30 )
AND d.deptno=e.deptno
AND temp.deptno=e.deptno
##在FROM后面增加表,需要增加连接

##列出与“SCOTT”从事相同工作的所有员工及部门名称,部门人数,领导姓名
·确定要使用的数据表格
|- emp表:员工信息(员工名称及部门)
|-dept表: 部门名称
|-emp表: 统计部门人数
|-emp表: 找到领导信息(领导也是职员,利用自身表的关联,根据领导编号得到领导的名字)
·确定已知关联字段
|-雇员和部门 emp.deptno=dept.deptno
|-雇员和领导 emp.mgr=memp.empno

第一步:先找到SCOTT的工作,返回当行单列,一把用于WHERE HAVING上
SELECT job FROM emp WHERE ename=‘SCOTT’
第二步:找到雇员的姓名及部门
SELECT e.ename,e.job,e.sal FROM emp e WHERE e.job=(SELECT job FROM emp WHERE ename=‘SCOTT’)
第三步:查找到对应的部门信息。
SELECT e.ename,e.job,e.sal,d.dname FROM emp e ,dept d WHERE e.job=(SELECT job FROM emp WHERE ename=‘SCOTT’)
AND e.deptno=d.deptno;
第四步:找到部门人数,单独进行统计
SELECT e.ename,e.job,e.sal,d.dname,temp.count
FROM emp e ,dept d ,(SELECT deptno ,COUNT(empno) count FROM emp GROUP BY deptno) temp
WHERE e.job=(SELECT job FROM emp WHERE ename=‘SCOTT’)
AND e.deptno=d.deptno
AND d.deptno=temp.deptno
第五步:查找领导姓名
SELECT e.ename,temp.count,d.deptno,m.ename
FROM emp e,(SELECT deptno,COUNT(deptno) count FROM emp GROUP BY deptno) temp,dept d,emp m
WHERE e.job=(SELECT job FROM emp WHERE ENAME=‘SCOTT’)
AND temp.deptno=e.deptno
AND e.deptno=d.deptno
AND e.mgr=m.empno(先找到确定工作对应的经理人编号,再将经理人编号对应到员工编号 从而根据编号得到对应的名字)
AND m.mgr=e.empno(错误示范:先找到确定工作的员工编号,再将这个编号对应到经理人编号,从而得到做这项确定工作的员工做其他工作的经理人
,那么这样找的就不是该项工作的经理人,而是这项工作的职员的名字)

###列出所有“CLERK”的姓名、部门名称,部门人数、工资等级
SELECT e.ename,d.dname,temp.count,s.grade
FROM emp e,dept d,(SELECT deptno,COUNT(empno) count FROM emp GROUP BY deptno) temp,salgrade s
WHERE e.job=‘CLERK’
AND d.deptno=e.deptno
AND temp.deptno=d.deptno
AND e.sal BETWEEN s.losal AND s.hisal ;

####总结:先建立一个大框架,然后需要什么就先在FROM里面加表,随后在WHERE里面添加连接条件,最后在SELECT 里面添加你想要的量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值