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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370180.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370180.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370180.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

按鈕事件處理(3)

在進行gui編程時&#xff0c;我們最常使用的控件時按鈕&#xff0c;在java中JButton類代表了按鈕。它的類層次結構圖是&#xff1a; java.lang.Object|_ java.awt.Component|_java.awt.Container|_javax.swing.JComponent|_javax.swing.AbstractButton|_javax.swing.JButton我們…

linux下I2C驅動發送IO時序,Linux I2C 驅動閱讀的碰到的一些網上沒有提到的東西

# re: Linux I2C 驅動閱讀的碰到的一些網上沒有提到的東西 回復 更多評論2009-04-11 13:39 by 初學都樓主&#xff0c;你好。我看了你那篇《Linux I2C核心、總線與設備驅動[轉]》&#xff0c;讓我明白了不少&#xff0c;不過我還是有些不明白的地方&#xff0c;想請教一下。我…

Java內存模型和優化

總覽 許多多線程代碼開發人員都熟悉這樣的想法&#xff0c;即不同的線程可以對持有的值有不同的看法&#xff0c;這不是唯一的原因&#xff0c;即如果線程不安全&#xff0c;它可能不會看到更改。 JIT本身可以發揮作用。 為什么不同的線程看到不同的值&#xff1f; 當您有多個…

C_數組詳解

數組&#xff1a; 一 一維數組 1.1 一維數組的定義: 類型符 數組名[常量表達式]; int a[10]; 說明: 1.數組的命名規則遵循標識符命名規則。 2.定義時需要指定元素的個數。方括號里的常量表達式表示元素的個數。 3.常量表達式中不能包含變量&#xff1b;如&#xff1a;int a[n];…

CSS節選——選擇器

CSS&#xff0c;cascading style sheet&#xff0c;層疊樣式表&#xff0c;請留意層疊概念。 css3為了區分偽類和偽元素&#xff0c;偽元素采用雙冒號寫法。 常見偽類——:hover,:link,:active,:target,:not(),:focus。 常見偽元素——::first-letter,::first-line,::before…

python游戲循環設置_Pygame:游戲循環前的初始菜單

我正在制作一個this game的版本&#xff0c;并嘗試將起始菜單設置為&#xff1a;我的計劃是先做surface.fill(overlaycolor)&#xff0c;然后將這個圖像blitting到屏幕上。在一個while循環中。之后&#xff0c;在用戶想玩(另一個問題除外)之后&#xff0c;我們將進入另一個whil…

vue.js基礎知識篇(7):表單校驗詳解

目錄 網盤 第12章:表單校驗 1.npm安裝vue-validator $ npm install vue-validator 代碼示例: var Vuerequire("vue"); var VueValidatorrequire("vue-validator"); Vue.use(VueValidator); 2.直接使用script標簽引入vue.js 要下載vue-validator&#xff0c…

修改linux綁定的域名,手工修改linux系統下DA面板綁定的域名

舉例說明手工修改DA面板下虛擬主機ryan綁定的域名&#xff0c;只需要 vi /usr/local/directadmin/data/users/ryan/httpd.conf代碼如下&#xff1a;# Auto generated apache config file by DirectAdmin version 1.46.3# Modifying this file is not recommended as any change…

在JUnit測試中使用Builder模式

這并不是要成為技術含量很高的職位。 這篇文章的目的是為您提供一些指導&#xff0c;以使您的JUnit測試生活更加輕松&#xff0c;使您能夠在幾分鐘內編寫復雜的測試場景&#xff0c;并具有易于閱讀的測試優勢。 單元測試中有兩個主要部分&#xff0c;需要編寫許多引導程序代碼&…

SQL數據庫中臨時表、臨時變量和WITH AS關鍵詞創建“臨時表”的區別

原文鏈接&#xff1a;https://www.cnblogs.com/zhaowei303/articles/4204805.html SQL數據庫中數據處理時&#xff0c;有時候需要建立臨時表&#xff0c;將查詢后的結果集放到臨時表中&#xff0c;然后在針對這個數據進行操作。 創建“臨時表”&#xff08;邏輯上的臨時表&…

python 三維繪圖庫_Python第三方庫matplotlib(2D繪圖庫)入門與進階

Matplotlib一 簡介&#xff1a;Matplotlib是一個Python 2D繪圖庫&#xff0c;它可以在各種平臺上以各種硬拷貝格式和交互式環境生成出具有出版品質的圖形。 Matplotlib可用于Python腳本&#xff0c;Python和IPython shell&#xff0c;Jupyter筆記本&#xff0c;Web應用程序服務…

zbb20170626 myeclipse 2017 ci 構建 spring hibernate struts jar

轉載于:https://www.cnblogs.com/super-admin/p/7081209.html

linux處理機調度實驗報告,模擬Linux操作系統下處理機調度實驗報告

在采用多道系統的設計程序中,往往有若干進程同時處于就緒狀態。當就緒狀態進程數大于處理機數時,就必須按照某種策略來決定哪些進程優先占用處理機。本實驗模擬在單處理機情況下處理機調度處理機調度一、實驗目的&#xff1a;1、了解Linux下Emacs編輯器的使用方法&#xff0c;掌…

Java線程:保留的內存分析

本文將為您提供一個教程&#xff0c;使您可以確定活動應用程序Java線程保留Java堆空間的數量和位置。 將提供來自Oracle Weblogic 10.0生產環境的真實案例研究&#xff0c;以使您更好地理解分析過程。 我們還將嘗試證明過多的垃圾回收或Java堆空間的內存占用問題通常不是由真正…

軟件測試白皮書-等價類

設有一個檔案管理系統&#xff0c;要求用戶輸入以年月表示的日期。假設日期限定在1990年1月~2049年12月&#xff0c;并規定日期由6位數字字符組成&#xff0c;前4位表示年&#xff0c;后2位表示月。現用等價類劃分法設計測試用例&#xff0c;來測試程序的"日期檢查功能&qu…

深入css布局 (1) — 盒模型 元素分類

深入css布局&#xff08;1&#xff09;—— 盒模型 & 元素分類 “ 在css知識體系中&#xff0c;除了css選擇器&#xff0c;樣式屬性等基礎知識外&#xff0c;css布局相關的知識才是css比較核心和重要的點。今天我們來深入學習一下css布局相關的知識。” 首先來列下大綱 盒模…

批改網禁止粘貼怎么破_教育部對家長批改作業表態了,明令禁止!你怎么看?...

互聯網的發展&#xff0c;的確方便了現代人生活。視頻電話、出去買東西你都不用帶錢帶卡&#xff0c;手機一掃就可以完成支付。很多中小學的家長都會建一個家長群&#xff0c;方便老師和家長的溝通。這個群可以說是家長和學校的橋梁和紐帶&#xff0c;家長們為了支持老師的工作…

電子科大專科c語言作業1,電子科大15春《C語言(專科)》在線作業試卷.docx

電子科大 15 春《 C 語言(專科)》在線作業一、單選題(共20 道試題&#xff0c;共100 分。)1.對于 int*p;inta[];pa;的合法運算 ()a;pa;p; 相當于 a;p; 相當于 a[1];若 p 中的地址為 100 則 p; 運算后&#xff0c;則其值為 100-----------------選擇&#xff1a; C已知 intb; 則…

MapReduce算法–順序反轉

這篇文章是介紹MapReduce算法的系列文章的另一部分&#xff0c;該書在使用MapReduce進行數據密集型文本處理中找到。 先前的文章是Local Aggregation &#xff0c; Local Aggregation PartII和創建共現矩陣 。 這次我們將討論階數反轉模式。 順序反轉模式利用的MapReduce來計算…

xss防御

http://blog.csdn.net/ghsau/article/details/17027893轉載于:https://www.cnblogs.com/jiangjing/p/8076216.html