orcle mysql 查詢_Oracle與Mysql的高級查詢與難點sql

一、連接查詢 1. 內連接 內連接用于返回滿足連接條件的所有記錄。默認情況下,在執行連接查詢時如果沒有指定任何連接操作符,那么這些連接查詢都屬于內連接。 Sql 代碼 1. SELECT a.dname,b.ename from depta,empb where a.deptno=b.deptno and a.deptno=10;

一、連接查詢1.內連接內連接用于返回滿足連接條件的所有記錄。默認情況下,在執行連接查詢時如果沒有指定任何連接操作符,那么這些連接查詢都屬于內連接。

Sql代碼

1.

SELECTa.dname,b.enamefromdept a,emp bwherea.deptno=b.deptnoanda.deptno=10;

在FROM子句中指定INNER JOIN選項,也可以指定內連接。

Sql代碼

1.

SELECTa.dname,b.enamefromdept aINNERJOINemp bwherea.deptno=b.deptnoanda.deptno=10;

從Oracle9i開始,如果主表的主鍵列和從表的外部鍵列名稱相同,那么可以使用NATURAL JOIN關鍵字自動執行內連接操作。

Sql代碼

1.

SELECTdname,enameFROMdept NATURALJOINemp;

2.左外連接左外連接通過指定LEFT[OUTER]JOIN選項來實現。當使用左外連接時,不僅會返回滿足連接條件的所有記錄,而且還會返回不滿足連接條件的連接操作符左邊表的其他行。

Sql代碼

1.

SELECTa.dname,b.enameFROMdept aLEFTJOINemp bONa.deptno=b.deptnoANDa.deptno=10;

3.右外連接右外連接通過指定RIGHT[OUTER]JOIN選項來實現的。當使用右外連接時,不僅會返回滿足連接條件的所有行,而且還會返回不滿足連接條件操作符右邊表的其他行。

Sql代碼

1.

SELECTa.dname,b.enameFROMdept aRIGHTJOINemp bONa.deptno=b.deptnoANDa.deptno=10;

4.完全外連接完全外連接是指定FULL[OUTER]JOIN選項來實現的。當使用完全外連接時,不僅會返回滿足連接條件的所有行,而且還會返回不滿足連接條件的所有其他行。

Sql代碼

1.

SELECTa.dname,b.enameFROMdept aFULLJOINemp bONa.deptno=b.deptnoANDa.deptno=10;

相當于沒連接去掉where條件

Sql代碼

1.

SELECTa.dname,b.enamefromdept a,emp;

5.使用(+)操作符在Oracle9i之前,當執行外連接時,都是使用連接操作符(+)來完成的。盡管可以使用操作符(+)執行外連接操作。但Oralce9i開始Oracle建議使用OUTER

JOIN執行外連接。語法如下:SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1(+) = table2.column2;當使用(+)操作符執行外連接時,應該將該操作符放在顯示較少行(完全滿足連接條件行)的一端。一句話,左外連接時,(+)要放在右邊表的一端。右外連接時,(+)放在左邊表的一端。左外連接:

Sql代碼

1.

SELECTa.dname,b.enameFROMdept a, emp bwherea.deptno=b.deptno(+)ANDb.deptno(+)=10;

右外連接

Sql代碼

1.

SELECTa.dname,b.enameFROMdept a, emp bwherea.deptno(+)=b.deptnoANDa.deptno(+)=10;

二、遞歸查詢1.語法

Sql代碼

1.

Select*from….Where[結果過濾條件語句]

2.

Startwith[起始條件過濾語句]

3.

Connectbyprior[中間記錄過濾條件語句]

2.例子

Sql代碼

1.

Select*fromcompany tWheret.flag=1

2.

Startwitht.company_id=50500000

3.

Connectbypriort.company_id=t.parent_id

說明:

Sql代碼

1.

select[level],column,exprfromtable[wherecondition]

2.

[startwith] //[起點]

3.

[connectbyprior+主鍵=外鍵或外鍵=主鍵]

a.自頂向下:左邊放主鍵,右邊放外鍵。b.自底向上:右邊放主鍵,左邊放外鍵。c.level(偽列)層次的級別,不固定值。三、更改數據庫的時間格式1、臨時更改alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'2.永久更改在注冊表[HKEY_CODE_MACHINE\SOFTWARE\ORACLE]里面,加入NLS_DATE_FORMAT,值為YYYY-MM-DD

HH24:MI:SS。3、Unix下,在用戶的.profile文件中增加以下內容:NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SSexport NLS_DATE_FORMAT附:在SQLPLUS下,實現中-英字符集轉換

Sql代碼

1.

altersessionsetnls_language='AMERICAN';

2.

altersessionsetnls_language='SIMPLIFIED CHINESE';

四、復制表和數據1)建表

Sql代碼

1.

createtabletestasselect*fromdept;--從已知表復制數據和結構

2.

createtabletestasselect*fromdeptwhere1=2;--從已知表復制結構但不包括數據

建立視圖:

Sql代碼

1.

CREATEORREPLACEVIEWdept_10ASSELECTempno,ename,job,sal,deptnoFROMempWHEREdeptno=10ORDERBYempno;

建立實體化視圖:

Sql代碼

1.

CREATEMATERIALLIZEDVIEWsummary_empASSELECTdeptno,job,avg(sal) avgsal,sum(sal) sumsalFROMempGROUPBYcube(deptno,job);

實體化視圖管理是用于匯總,預計算,復制或分發數據的對象,在大型的數據庫中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表的查詢的速度,只要在實體化視圖管理上創建了統計,查詢優化器將自動的使用實體化視圖管理,這特性被稱為QUERY

REWRITE(查詢重寫).與普通的視圖不同的是實體化視圖管理存儲數據,占據數據庫的物理空間的.2)不使用列的列表插入數據:

Sql代碼

1.

insertintotestselect*fromdept;

3)使用DEFAULT插入數據:如果列存在默認值,則會使用其默認值;如果列不存在默認值,則自動使用NULL.

Sql代碼

1.

insertintodeptvalues(10,'市場部',default);

4)使用子查詢插入數據

將查出來的內容全部插入

Sql代碼

1.

insertintoemployee(empno,ename,sql,deptno)

2.

selectempno,ename,sal,deptnofromemp

3.

wheredeptno = 10;

將查出來的內容部分插入

Sql代碼

1.

insertintoemployee(empno,ename,sql,deptno)

2.

selectempno,’楊凱’,sal,deptnofromemp

3.

wheredeptno = 10;

當要裝載大批量數據時,用直接裝載方式:

Sql代碼

1.

insert/*+APPEND */intoemployee(empno,ename,sql,deptno)

2.

selectempno,ename,sal,deptnofromemp

3.

wheredeptno = 10;

5)使用多表插入數據。從Oracle9i開始,使用INSERT語句可以將某張表的數據同時插入到多張表中。使用ALL操作符,在每個條件子句上都要執行INTO子句后的子查詢。

Sql代碼

1.

insertallwhendeptno=10thenintot_dept10

2.

whendeptno=20thenintot_dept20

3.

whendeptno=30thenintot_dept30

4.

whenjob='clerk'thenintot_clerk

5.

elseintot_other

6.

select*fromemp;

使用FIRST操作符執行多表插入,如果數據已經滿足了先前條件,并且已經被插入到某表,那么該行數據在后續插入中將不會被再次使用。

Sql代碼

1.

insertfirstwhendeptno=10thenintot_dept10

2.

whendeptno=20thenintot_dept20

3.

whendeptno=30thenintot_dept30

4.

whenjob='clerk'thenintot_clerk

5.

elseintot_other

6.

select*fromemp;

五、多列子查詢多列子查詢是指返回多列數據的子查詢語句。當多列子查詢返回單行數據時,在WHERE子句中可以使用單行比較符;當多列子查詢返回多行數據時,在WHERE子句中必須使用多行比較符(IN,ANY,ALL)。如顯示與Id為10000的人員部門和崗位完全相同的所有雇員:

Sql代碼

1.

SELECTename,job,sal,deptnoFROMempWHERE(deptno,job)=(SELECTdeptno,jobFROMempWHEREid=10000);

當執行成對比較是時,因為要求多個列的數據必須同時匹配,所以必須要使用多列子查詢實現。如顯示工資和補助與部門30雇員的工資和補助完全匹配的所有雇員:

Sql代碼

1.

SELECTename,sal,comm,dptnoFROMempWHERE(sal, nvl(comm,-1))IN(SELECTsal, nvl(comm,-1)FROMempWHEREdeptno=30);

執行非成對比較時,應該使用多個多行子查詢來實現。如顯示工資匹配于部門30工資列表、補助匹配于部門30補助列表的所有雇員:

Sql代碼

1.

SELECTename,sal,comm,deptnoFROMempWHEREsalIN(SELECTsalFROMempWHEREdeptno=30)ANDnvl(comm,-1)IN(SELECTnvl(comm,-1)FROMempWHEREdeptno=30);

六、相關子查詢與FROM子句中子查詢相關子查詢是指需要引用主查詢表列的子查詢語句,是通過EXISTS謂詞來實現的。如顯示工作在“NEW YORK”的所有雇員:

Sql代碼

1.

SELECTename,job,sal,deptnoFROMempWHEREEXISTS (SELECT1FROMdeptWHEREdept.deptno=emp.deptnoANDdept.loc='NEW YORK');

在FROM子句中使用子查詢時,該子查詢會被作為視圖對待。因此也被稱為內嵌視圖。如顯示高于部門平均工資的雇員信息:

Sql代碼

1.

SELECTename,job,salFROMemp, (SELECTdeptno,avg(sal) avgsalFROMempGROUPBYdeptno) deptWHEREemp.deptno=dept.deptnoANDsal>dept.avgsal;

七、合并查詢集合操作符有UNION,UNION ALL,INTERSECT和MINUS。當使用集合操作符時,必須確保不同查詢的列個數和數據類型都要匹配。有以下一些限制:1.對于LOB,VARRAY和嵌套表列來說,集合操作符是無效的。2.對于LONG列來說,UNION,INTERSECT,MINUS操作符是無效的。3.如果選擇列表包含了表達式,則必須為為其指定列別名。(一)UNIONUNION操作符用于獲取兩個結果集的并集。當使用該操作符時,會自動去掉結果集中的重復行。并且會以第一列的結果進行排序。

Sql代碼

1.

SELECTename,sal,jobFROMempWHEREsal>2500UNIONSELECTename,sal,jobFROMempWHEREjob='MANAGER';

(二)UNION ALLUNION ALL操作符獲取兩個結果集的并集,但不會取消重復值,而且也不會以任何列進行排序。

Sql代碼

1.

SELECTename,sal,jobFROMempWHEREsal>2500UNIONALLSELECTename,sal,jobFROMempWHEREjob='MANAGER';

(三)INTERSECTINTERSECT操作符用于獲取兩個結果集的交集。當使用該操作符時,只會顯示同時存在于兩個結果集中的數據,并且會以第一列進行排序。

Sql代碼

1.

SELECTename,sal,jobFROMempWHEREsal>2500INTERSECTSELECTename,sal,jobFROMempWHEREjob='MANAGER';

(四)MINUSMINUS用于獲取兩個結果集的差集。以第一列進行排序。

Sql代碼

1.

SELECTename,sal,jobFROMempWHEREsal>2500 MINUSSELECTename,sal,jobFROMempWHEREjob='MANAGER';

八、CASE表達式和倒敘查詢通過CASE表達式,可以避免調用過程來完成條件分支操作。

Sql代碼

1.

SELECTename,sal,CASEWHENsal>3000THEN3WHENsal>2000THEN2ELSE1ENDgradeFROMempWHEREdeptno=10;

默認情況下,當執行查詢操作時,只能看到最近提交的數據。從Oracle9i開始,通過使用倒敘查詢(Flashback

Query)特征,可以查看到過去某個時間點所提交的數據。注意,如果使用倒敘查詢,那么要示數據庫必須彩UNDO管理方式,并且初始化參數undo_retention限制了UNDO數據的保留時間。

Sql代碼

1.

SELECTename,salFROMempASOFTIMESTAMPto_timestamp('2009-01-01 12:12:00','YYYY-MM-DD HH24:MI:SS')WHEREename='CLARK';

九、使用WITH子句重用子查詢從Oracle9i開始,通過WITH子句可以給子查詢指定一個名稱,并且使得在一條語句中可以完成所有任務,從而避免使用臨時表。如顯示部門工資總和高于雇員工資總和三分之一的部門名稱及工資總和。

Sql代碼

1.

WITHsummaryAS(SELECTdname,SUM(sal)ASdept_totalFROMemp,deptWHEREemp.deptno=dept.deptnoGROUPBYdname)

2.

SELECTdname, dept_totalFROMsummaryWHEREdept_total>(

3.

SELECTSUM(dept_total) * 1/3FROMsummary);

十、oracle對記錄進行去重sql

Sql代碼

1.

DELETEFROM[TABLE_NAME]

2.

WHEREROWIDNOTIN(

3.

SELECTMIN(ROWID)FROM[TABLE_NAME]

4.

GROUPBY[COL1,COL2,COL3...]

5.

);

統計酒店名不重復的總數

Sql代碼

1.

SELECT COUNT(DISTINCT(hotel_id)) FROMt_app_travel_hotel_comment;

十一、SQL排序后的NULL位置可以把那些NULL值假想為所有內容中值是最大的,因此,升序排序后NULL值在最后,倒序排序后NULL值在最前!當指定"NULLSFIRST"時,無論是升序排序還是倒序排序,NULL值都會排列在最前面;當指定“NULLSLAST”時,無論是升序排序還是倒序排序,NULL值都會排列在最后面。

Sql代碼

1.

SELECT*FROMtORDERBYxDESCNULLSLAST;

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

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

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

相關文章

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 論文簡析

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 論文簡析 論文鏈接:https://arxiv.org/abs/1911.11419 本文探索從自監督的角度進行美學評估。基于一個基本的動機:一個好的美學特征表示應該能夠辨別出不同的…

java9 堆外內存_java堆外內存泄漏排查

當考慮Java中的內存泄漏時,我們通常會考慮Java堆泄漏,即在堆中分配的對象沒有被垃圾收集。這是我在處理一臺服務器內存泄漏時的想法,但我即將經歷的遠超出我的想象。癥狀:運行Vertx應用程序(沒有交換分區)的生產服務器被Linux內存…

[2020-CVPR] Dynamic Region-Aware Convolution 論文簡析

[2020-CVPR] Dynamic Region-Aware Convolution 論文簡析 論文地址:https://arxiv.org/abs/2003.12243 參考代碼地址(非官方):https://github.com/shallowtoil/DRConv-PyTorch 代碼筆者自己試了一下,應該是可以的&…

java activity模式_Activity的啟動模式

Android系統采用任務棧的方式來管理Activity實例。棧是后進先出的數據結構。通常一個應用程序對應一個任務棧,默認情況下,每啟動一個Activity都會入棧,處于棧頂位置。用戶操作的永遠都是棧頂的Activity。Activity可以層疊擺放,每啟…

Python 中的可執行對象 eval,exec 和 compile與其在深度學習訓練中的應用實例

Python 中的可執行對象 eval,exec 和 compile 與其在深度學習訓練中的應用實例 eval 計算指定表達式的值。也就是說它要執行的python代碼只能是單個表達式(注意eval不支持任何形式的賦值操作),而不能是復雜的代碼邏輯。 eval(s…

php寫簡單接口_php寫接口的日常

php寫接口的日常/*評論列表*/public function commentListW(){$base new Base();$info $base->getUserByToken();$shop_id $info[shop_id];$page $this->data[page]?:1;$pagesize $this->data[pagesize]?:C(ROLLPAGE);$search $this->data[search];$and &…

mmdetection 使用筆記 01: 安裝與簡單的推理demo

mmdetection 使用筆記 01: 安裝與簡單的推理demo mmdetection是來自商湯和港中文聯合實驗室openmmlab推出的目標檢測工具包,與其同系列的還有基礎視覺包mmcv,圖像分類mmclassification,還有mmaction,mmaction2等等。 今天第一次…

php無限評論回復_php實現無限級評論功能_后端開發

php去除數組的鍵名的方法_后端開發在php中可以使用“array_values()”函數去除數組的鍵名,該函數返回包含數組中所有的值的數組,其語法是“array_values(array)”,其參數“array”表示規定的數組,返回值是包含數組中所有的值的數組…

錯誤類型、混淆矩陣及目標檢測常用評價指標

目標檢測常用評價指標 本文主要參考陳愷大佬在B站商湯賬號的介紹mmdetection的視頻。 檢測結果的正確/錯誤類型 真陽性(Ture Positive):算法檢測到了某類物體(Positive),而實際圖中也確實有這個物體&…

php顯示json,PHP解決JSON中文顯示問題

PHP如何解決JSON中文顯示問題&#xff1f;本文主要介紹了PHP JSON格式的中文顯示問題解決方法&#xff0c;本文總結了3種解決中文顯示\u開頭字符問題的方法。希望對大家有所幫助。返回json數據中文顯示的問題解決方法一&#xff1a;<?php function Notice(){include ./incl…

使用yolov5訓練自己的目標檢測數據集

使用yolov5訓練自己的目標檢測數據集 yolov4出來后不久&#xff0c;又出現了yolov5&#xff0c;沒有論文。雖然作者沒有放上和yolov4的直接測試對比&#xff0c;但在COCO數據集的測試效果還是很可觀的。很多人考慮到YOLOv5的創新性不足&#xff0c;對算法是否能夠進化&#xf…

php的integer,PHP整型 integer

整數是一個沒有小數的數字。整數規則:整數必須至少有一個數字 (0-9)整數不能包含逗號或空格整數是沒有小數點的整數可以是正數或負數整型可以用三種格式來指定&#xff1a;十進制&#xff0c; 十六進制( 以 0x 為前綴)或八進制(前綴為 0)。在以下實例中我們將測試不同的數字。 …

einops和einsum:直接操作張量的利器

einops和einsum&#xff1a;直接操作張量的利器 einops和einsum是Vision Transformer的代碼實現里出現的兩個操作tensor維度和指定tensor計算的神器&#xff0c;在卷積神經網絡里不多見&#xff0c;本文將介紹簡單介紹一下這兩樣工具&#xff0c;方便大家更好地理解Vision Tra…

php的filter input,php中filter_input函數用法分析

本文實例分析了php中filter_input函數用法。分享給大家供大家參考。具體分析如下&#xff1a;在 php5.2 中,內置了filter 模塊,用于變量的驗證和過濾,過濾變量等操作&#xff0c;這里我們看下如何直接過濾用戶輸入的內容.fliter 模塊對應的 filter_input 函數使用起來非常的簡單…

COCO 數據集格式及mmdetection中的轉換方法

COCO 數據集格式及mmdetection中的轉換方法 COCO格式 CV中的目標檢測任務不同于分類&#xff0c;其標簽的形式稍為復雜&#xff0c;有幾種常用檢測數據集格式&#xff0c;本文將簡要介紹最為常見的COCO數據集的格式。 完整的官方樣例可自行查閱&#xff0c;以下是幾項關鍵的…

php獲取h1,jQuery獲取h1-h6標題元素值方法實例

本文主要介紹了jQuery實現獲取h1-h6標題元素值的方法,涉及$(":header")選擇器操作h1-h6元素及事件響應相關技巧,需要的朋友可以參考下&#xff0c;希望能幫助到大家。1、問題背景&#xff1a;查找到h1-h6&#xff0c;并遍歷它們&#xff0c;打印出內容2、實現代碼&am…

在導入NVIDIA的apex庫時報錯 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在導入NVIDIA的apex庫時報錯 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 報錯 在使用NVIDIA的apex庫時報錯 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中獲取Request對象?

我需要使用Guzzle檢查數據庫中的很多項目.例如,項目數量為2000-5000.將其全部加載到單個數組中太多了,因此我想將其分成多個塊&#xff1a;SELECT * FROM items LIMIT100.當最后一個項目發送到Guzzle時,則請求下一個100個項目.在“已滿”處理程序中,我應該知道哪個項目得到了響…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 論文簡析及關鍵代碼簡析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 論文簡析及關鍵代碼簡析 論文&#xff1a;https://arxiv.org/abs/2104.00323 代碼&#xff1a;https://github.com/dvlab-research/JigsawClustering 總結 本文提出了一種單批次&#xff0…

java jps都卡死,java長時間運行后,jps失效

在部署完應用后&#xff0c;原本jps使用的好好的&#xff0c;能正確的查詢到自己正在運行的java程序。但&#xff0c;過了一段時間后&#xff0c;再使用jps來查看運行的應用時&#xff0c;自己運行的程序都看不到&#xff0c;但是自己也沒有關閉這些程序啊&#xff01;然而使用…