python查询oracle数据库_python针对Oracle常见查询操作实例分析
本文实例讲述了python针对Oracle常见查询操作。分享给大家供大家参考,具体如下:
1.子查询(难):
当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到,
此查询称为子查询;
执行顺序:先执行子查询得到结果以后返回给主查询
组成部分:
1).主查询部分
2).子查询部分
【注意事项】:
子查询一定需要被定义/包裹在小括号内部,可以认为是显示的提升了代码执行的优先级
需求1:
查询薪资比Abel的高的有谁?
分析:
①.先查询出Abel的薪资是多少?
②.将过滤条件定义为>①,然后进行查询得到最终需要的结果
代码实现:
select last_name,salary
from employees
where salary > (
select salary from employees
where last_name = 'Abel'
);
需求2:
查询job_id与141号员工相同,salary比143号员工多的员工的姓名,job_id和salary?
代码实现:
select last_name,job_id,salary
from employees
where job_id = (
select job_id
from employees
where employee_id = 141
)
and salary > (
select salary
from employees
where employee_id = 143
);
课堂练习:
1).返回公司工资最少的员工的employee_id,job_id和salary
select employee_id,job_id,salary
from employees
where salary = (
select min(salary)
from employees
);
2).查询平均工资高于公司平均工资的部门有哪些
select department_id,avg(salary)
from employees
group by department_id
having avg(salary) > (
select avg(salary)
from employees
)
order by department_id desc;
3).查询最低工资大于20号部门最低工资的部门id和最低工资
select department_id,min(salary)
from employees
where department_id is not null
group by department_id
having min(salary) > (
select min(salary)
from employees
having department_id = 20
);
4).返回其它职位中比job_id为'IT_PROG'中最低工资低的员工的员工号,姓名,job_id以及salary
select employee_id,last_name,job_id,salary
from employees
where salary < (
select min(salary)
from employees
where job_id = 'IT_PROG'
);
2.多表查询/多表联查
概念:
使用场景,如果一条select语句中需要查询的列遍布多张数据表,
那么我们就必须使用多表查询了!!
分类:
等值连接和非等值连接
对于等值连接分方向:
1).内连接:返回多张表中共同满足的数据,取交集
2).外连接(左、右、满):返回内连接数据的同时还会继续返回某张表中不匹配的一些记录数
3).自连接:从始至终都是一张表,模拟一张表派生为两张(它们的结构式一模一样的),自己连自己
等值连接中的内连接:
需求:
查询所有员工的员工号、员工姓名以及部门的名字?
select employee_id,last_name,department_name
from employees,departments;
【注意】
以上查询得到了2889条记录,很多都是没有用的数据(脏数据),
出现的原因是:没有添加有效的连接条件导致的,
而这种现象我们称为笛卡尔集现象;
我们日后的学习和开发环境中是绝对要避免的!!
如何保证我们之后的多表查询绝对不会出现笛卡尔集现象?
1).不能不写连接条件
2).连接条件必须是有效的
思考:如何修改上述的代码?
代码实现如下:
select employee_id,last_name,department_name
from employees,departments
where employees.department_id = departments.department_id;
需求:使用内连接来实现
查询员工的员工号、姓名、部门号、部门名字?
select employee_id,last_name,department_id,department_name
from employees,departments
where employees.department_id = departments.department_id;
以上代码出错了,出错原因:
因为对于department_id这个列在employees和departments两张表中都存在,
所以需要显示的告诉编译器,我从哪张表中获取数据内容的!
修改代码如下:
select employee_id,last_name,departments.department_id,department_name
from employees,departments
where employees.department_id = departments.department_id;
select employee_id,last_name,employees.department_id,department_name
from employees,departments
where employees.department_id = departments.department_id;
思考:没有重复的列可以使用名字.的形式来定义吗?---> 可以的
select employee.employee_id,employee.last_name,employees.department_id,departments.department_name
from employees,departments
where employees.department_id = departments.department_id;
上述代码运行以及结果方面不存在问题,但是在代码量上比较冗余!!我们可以使用如下的方式解决...
给名字起别名的方式:
修改代码如下:
select e.employee_id,e.last_name,e.department_id,d.department_name
from employees e,departments d
where e.department_id = d.department_id;
总结:对于多表查询,如果涉及n张表,至少需要有n-1个连接条件;
非等值连接:
需求:
查询员工的姓名、薪资以及薪资的等级
select last_name,salary,grade_level
from employees,job_grades
where salary between lowest_sal and highest_sal;
以上代码有问题,可以看到各个人的薪资等级,但是由于没有追加连接连接,还是出现了笛卡尔集现象;
我们需要慎用!一般之后非等值连接用的比较少,而且必须配合等值连接一起用;
附:Python连接与查询oracle数据库示例:
import cx_Oracle
conn = cx_Oracle.connect('scott/tiger@localhost:1521/orcl')
cursor = conn.cursor()
cursor.execute("SELECT ENAME FROM EMP")
row = cursor.fetchone()
print row[0],
cursor.close()
conn.close()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
本文标题: python针对Oracle常见查询操作实例分析
本文地址: http://www.cppcns.com/shujuku/oracle/311365.html
python查询oracle数据库_python针对Oracle常见查询操作实例分析相关推荐
- python如何编程日期_python编程开发之日期操作实例分析
本文实例讲述了python编程开发之日期操作.分享给大家供大家参考,具体如下: 在python中对日期进行操作的库有: import datetime import time 对日期格式化信息,可以参 ...
- python线性回归算法简介_Python实现的简单线性回归算法实例分析
本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > ...
- python查询mysql数据库_python针对mysql数据库的连接、查询、更新、删除操作示例...
本文实例讲述了python针对mysql数据库的连接.查询.更新.删除操作.分享给大家供大家参考,具体如下: 连接 一 代码 import pymysql # 打开数据库连接 db = pymysql ...
- python连接oracle数据库_Python连接oracle数据库 例子一
step1:下载cx_Oracle模块,cmd--pip install cx_Oracle step2: 1 import cx_Oracle #引用模块cx_Oracle 2 conn=cx_Or ...
- python数据分类聚类案例_Python实现的KMeans聚类算法实例分析
本文实例讲述了Python实现的KMeans聚类算法.分享给大家供大家参考,具体如下: 菜鸟一枚,编程初学者,最近想使用Python3实现几个简单的机器学习分析方法,记录一下自己的学习过程. 关于KM ...
- python简单爬虫入库_python用BeautifulSoup库简单爬虫实例分析
会用到的功能的简单介绍 1.from bs4 import BeautifulSoup #导入库 2.请求头herders headers={'User-Agent': 'Mozilla/5.0 (W ...
- 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...
66.Oracle数据库SQL开发之 高级查询--使用线性回归函数 线性回归函数可以用普通最小平方回归曲线拟合一组数值对.线性回归函数可用于聚合.串口或报表函数. 如下图1: 例如: store@PD ...
- oracle 窗口函数查询条件,62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数...
62.Oracle数据库SQL开发之 高级查询--使用分析函数之窗口函数 窗口函数可以计算一定的记录范围内.一定值域内.或者一段时间内的累积和以及移动平均值.查询返回一组记录,称为结果集.窗口这个术语 ...
- oracle报表查询sql,63.Oracle数据库SQL开发之 高级查询——使用报表函数
63.Oracle数据库SQL开发之 高级查询--使用报表函数 报表函数可用于执行跨越分组和组内分区的计算. 报表计算:SUM,AVG,MAX,MIN,COUNT,VARIANCE,STDDEV.可以 ...
最新文章
- 全球99家AI芯片公司,中国占15家!
- VC.NET扩展Windows磁盘清理工具的功能
- Luogu P1607 庙会班车【线段树】By cellur925
- 计算机视觉的基石-滤波
- 互联网1分钟 |1211
- boost::make_maximal_planar用法的测试程序
- Android(kotlin)之对一组图片数据更新最后的修改时间进行分类显示
- 【OpenGL从入门到精通(七)】OpenGL中的数学
- 莫烦Matplotlib可视化第四章多图合并显示代码学习
- 机载计算机结构,机载计算机
- android 浏览器开技术
- 【PL/SQL】测试函数时,日期参数的输入格式
- 传感器市场需求大幅提升 中企能否满足?
- 2013年1月第1个周末
- 2018.12.20 区块链论文翻译
- 希尔伯特空间巴拿赫空间空间上的翻译
- python:函数基础(1)
- android中高德地图定位功能并且获取定位的城市
- 3Dmax调整模型参数的精度教程
- c语言matlab混编max函数,Matlab与C++混编 – engin.h
热门文章
- 运行错误5无效的过程调用或参数_FANUC系统常用参数汇总
- java的sql的like_[Java教程]SQL like 模糊查询, in
- AUTOSAR从入门到精通100讲(四十九)-AUTOSAR 通信服务Dcm篇-Dcm概念及DSL详解与实战案例
- 产品经理经验谈100篇(一)-一个经销商订单贷的业务设计
- kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
- 终端主题_泛终端全渠道新模式中国移动5G泛智能终端渠道生态合作峰会开幕
- python3打包exe运行没反应_python selenium运行,打包exe常见问题解决方法
- wordpress房产信息网_Realia v3.1.2 wordpress房地产模板 租房网站模板
- js算法初窥03(搜索及去重算法)
- import() 动态加载component组件失败