oracle多表關聯查詢和子查詢

来源:https://www.cnblogs.com/xswt/archive/2019/08/23/11400359.html
-Advertisement-
Play Games

oracle多表關聯查詢和子查詢 一、多表關聯查詢 例子: student1表 course1表 1、內連接(inner join……on/join on):只連接匹配的行 2、左連接(left join……on):包含左邊表的全部行,不管右邊表的是否存在與它們匹配的行 3、右連接(right jo ...


oracle多表關聯查詢和子查詢

一、多表關聯查詢

例子:

SQL> create table student1
(
sid varchar(3),
sname varchar(6),
sage number(3));

Table created.

SQL> create table course1
(
sid varchar(3),
cname varchar(8),
cno number(3));

Table created.

student1表

SQL> select * from student1;

SID SNAME        SAGE
--- ------ ----------
01  李逍遙         21
02  林月如         20
03  拜月          100

course1表

SQL> select * from course1;

SID CNAME           CNO
--- -------- ----------
01  歷史             12
02  化學             11
22  德語             18

 

1、內連接(inner join……on/join on):只連接匹配的行

SQL> select * from student1 inner join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01  李逍遙         21 01  歷史             12
02  林月如         20 02  化學             11

2、左連接(left join……on):包含左邊表的全部行,不管右邊表的是否存在與它們匹配的行

SQL> select * from student1 left join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01  李逍遙         21 01  歷史             12
02  林月如         20 02  化學             11
03  拜月          100

3、右連接(right join……on):包含右邊表的全部行,不管左邊表是否存在與它們匹配的行

SQL> select * from student1 right join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01  李逍遙         21 01  歷史             12
02  林月如         20 02  化學             11
                      22  德語             18

4、全外連接(full outer join……on或者full join……on):包含左右兩張表的全部行,不管另外一邊表中是否存在與它們匹配的行

SQL> select * from student1 full outer join course1 on student1.sid=course1.sid;

SID SNAME        SAGE SID CNAME           CNO
--- ------ ---------- --- -------- ----------
01  李逍遙         21 01  歷史             12
02  林月如         20 02  化學             11
                      22  德語             18
03  拜月          100

一般,我們測試中常用的是內連接搭配函數(數值函數、統計函數、聚合函數等等)查詢使用

二、oracle中常用函數

1、數值函數

ceil(n)返回大於或者等於數值n的最小整數

SQL> select ceil(10.7) from dual;

CEIL(10.7)
----------
        11

floor(n)返回小於等於數值n的最大整數

SQL> select floor(12.3) from dual;

FLOOR(12.3)
-----------
         12

mod(m,n)m除以n的餘數,若n=0,則返回m,若m=0也返回m

SQL> select mod(7,5) from dual;

  MOD(7,5)
----------
         2

SQL> select mod(6,3) from dual;

  MOD(6,3)
----------
         0

SQL> select mod(3,0) from dual;

  MOD(3,0)
----------
         3

SQL> select mod(0,4) from dual;

  MOD(0,4)
----------
         0

power(n,m)m的n次方

SQL> select power(12,11)from dual;

POWER(12,11)
------------
  7.4301E+11

round(n,m)將n四捨五入,保留小數點後m位

SQL> select round(3.657879,2) from dual;

ROUND(3.657879,2)
-----------------
             3.66

sign(n)若n=0,則返回0,否則n>0,則返回1,n<0返回-1

SQL> select sign(19) from dual;

  SIGN(19)
----------
         1

SQL> select sign(0) from dual;

   SIGN(0)
----------
         0

SQL> select sign(-23) from dual;

 SIGN(-23)
----------
        -1

sqrt(n)n的平方根

SQL> select sqrt(36) from dual;

  SQRT(36)
----------
         6

2、常用字元函數

initcap(char)把每個字元串的第一個字元轉成大寫

SQL> select initcap('xiaosheng') from dual;

INITCAP('
---------
Xiaosheng

lower(char)整個字元串小寫

SQL> select lower('SQL') from dual;

LOW
---
sql

replace(char,str1,str2)字元串中所有str1換成str2

SQL> select replace('xiaosheng','xiao','ting') from dual;

REPLACE('
---------
tingsheng

substr(char,m,n)取出從m字元開始的n個字元串的子串

SQL> select substr('xiaosheng',1,5) from dual;

SUBST
-----
xiaos

length(char)求字元串的長度

SQL> select length('meiyou ,dengwzhuceyige ') from dual;

LENGTH('MEIYOU,DENGWZHUCEYIGE')
-------------------------------
                             23

||並置運算符

SQL> select 'xiao'||'sheng' from dual;

'XIAO'||'
---------
xiaosheng

3、日期型函數

sysdate返回當前日期和時間

SQL> select sysdate from dual;

SYSDATE
------------
23-AUG-19

last_day本月的最後一天

SQL> select last_day(sysdate) from dual;

LAST_DAY(SYS
------------
31-AUG-19

add_months(d,n)當前日期d後推n個月

SQL> select add_months(sysdate,2) from dual;

ADD_MONTHS(S
------------
23-OCT-19

months_between(d,n)日期d和n相差月數

SQL> select months_between(sysdate,to_date('20020812','YYYYMMDD')) from dual;

MONTHS_BETWEEN(SYSDATE,TO_DATE('20020812','YYYYMMDD'))
------------------------------------------------------
                                            204.373818

next_day(d,day):表示d後第一周指定day的日期

SQL> select next_day(sysdate,'Monday') from dual;

NEXT_DAY(SYS
------------
26-AUG-19

day格式有:Monday、tuesday、Wednesday、thursday、friday、saturday、Sunday

4、特殊格式的日期型函數

Y或Y或YYY:表示年的最後一位或者兩位、三位

SQL> select to_char(sysdate,'YYYY') from dual;

TO_C
----
2019

SQL> select to_char(sysdate,'Y') from dual;#可以看出是從最後一位開始取值

T
-
9

Q:表示季度,1-3個月為一個季度

SQL> select to_char(sysdate,'Q') from dual;

T
-
3

MM:表示月份數

SQL> select to_char(sysdate,'MM') from dual;

TO
--
08

RM:表示將月份轉換成羅馬的日期格式

SQL> select to_char(sysdate,'RM') from dual;

TO_C
----
VIII

month:表示用英文字元表示月份(比如august指的是8月)

SQL> select to_char(sysdate,'month') from dual;

TO_CHAR(SYSDA
-------------
august

ww:表示當年的第幾周

SQL> select to_char(sysdate,'ww') from dual;

TO
--
34

w:表示本月的第幾周

SQL> select to_char(sysdate,'w') from dual;

T
-
4

DDD:表示當年第幾天,一月一日是當年的第一天:001,二月一日是當年的第32天:032

SQL> select to_char(sysdate,'DDD') from dual;

TO_
---
235

DD:表示當月第幾天

SQL> select to_char(sysdate,'DD') from dual;

TO
--
23

D:表示周內第幾天

SQL> select to_char(sysdate,'D') from dual;

T
-
6     ----因為西方是把周日算成一周的第一天

DY:表示周內第幾天縮寫

SQL> select to_char(sysdate,'DY') from dual;

TO_CHA
------
FRI   ----周五的縮寫

hh12:表示12小時制小時數

hh24:表示24小時制小時數

Mi:表示分鐘數

ss:表示秒數

TO_CHAR(
--------
02:53:13    ---12小時制

SQL> select to_char(sysdate,'hh24:Mi:ss') from dual;

TO_CHAR(
--------
14:53:53   ---24小時制

to_number():將字元串數字化

SQL> select to_number('123333') from dual;

TO_NUMBER('123333')
-------------------
             123333

to_char():表示將數字轉換為字元串

5、聚合函數

avg(x):返回x的平均值

sum(x):返回x的和

count(x):統計x個數

MAX\MIN(x):返回x最大值或x最小值

median(x):返回x的中間值

stddev(x):返回x的標準差

【註意:使用聚合函數的註意事項】

(1)可以使用distinct去除重覆數據,一般放在from前面

(2)如果查詢中包含了聚合函數,選擇的列不在聚合函數中,那麼這些列就必須在group by 字句中,否則就會報錯

(3)having字句可以用來過濾行組,可以放在group by 子句之後

三、子查詢

子查詢:指查詢中嵌套查詢,常放在列、表、條件上

語法:

select (子查詢) from(子查詢) where(子查詢)group by(子查詢)having(子查詢)order by (asc/desc)子

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vmware啟動ubuntu 出現錯誤“以獨占方式鎖定此配置文件失敗。 可能其它正在運行VMware進程在使用此配置文件”。 在網上查找了很多方法,法(1)試過在啟動任務管理器中“結束與VMware有關的進程”, 法(2)刪除擴展名為.lck的臨時文件和文件夾,等等。以失敗告終。 之後又出現新的錯誤 ...
  • 剛入職實習,第四天了,昨晚老大安排我在公司機器上裝個JProfiler看一情況。 然後網上都是什麼跟tomcat一起使用的,所以折騰了很久才搞出來。 我這裡沒用什麼伺服器,因為公司用的是Play!框架。 1.JProfirler 這個就不多介紹了,網上有,本篇文章主要是記錄安裝使用的過程。 2.Wi ...
  • 下載Nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz 一、安裝nginx時必須先安裝相應的編譯工具 [root@xuegod63 ~]#yum -y install gcc gcc-c++ autoconf automake gcc c ...
  • WEB監控手段: 1、埠 本地: ss 、 netstat 、lsof ss -ntlp|grep 80|wc -l (大於等於1) netstat -natlp |grep 80|wc -l (大於等於1) lsof -i:80 |wc -l (大於等於1) 遠程: telnet、 nmap、  ...
  • Linux 基礎學習 [TOC] 用戶登錄 root用戶 是一個特殊的管理賬號,也可以成為超級管理員 root用戶對系統有完全控制的許可權 對系統的損害會無限大 在工作中,如果沒有特殊的必要,儘量不要使用root 普通用戶 許可權有限 對系統的損害會小 終端 分類 設備終端 物理終端 虛擬終端 ctrl ...
  • 在linux中每個用戶必須屬於一個組,不能獨立於組外。在linux中每個文件有所有者、所在組、其它組的概念。 文件/目錄的所有者:一般為文件的創建者,誰創建了該文件,就自然成為該文件的所有者 查看文件的所有者:ls -ahl 修改文件所有者:chown 用戶名 文件名 文件/目錄的所在組: 組的創建 ...
  • 我們一般通過表達式$sum來計算總和。因為MongoDB的文檔有數組欄位,所以可以簡單的將計算總和分成兩種:1,統計符合條件的所有文檔的某個欄位的總和;2,統計每個文檔的數組欄位裡面的各個數據值的和。這兩種情況都可以通過$sum表達式來完成。以上兩種情況的聚合統計,分別對應與聚合框架中的 $grou ...
  • MySql學習筆記二 3.6.連接查詢 又稱多表查詢,當查詢的欄位來自於多個表時,就會用到連接查詢 連接查詢分類標準: 按年代分類:sql92標準(僅支持內連接), sql99標準(支持內連接,外連接中的左外連接和右外連接,交叉連接) sql99語法 按功能分類: ​ 內連接:等值連接,非等值連接, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...