選擇& lt列名》
FGROM & lt表名》
【WHERE & lt查詢條件表達式》;]
【分組依據& lt分組表達式》;]
【擁有& lt組查詢表達式》;]
【排序依據& lt已排序的列名》;【ASC或DESC】】
Group by用於對查詢結果進行分組,並通過對group by後的名稱進行分組來輸出結果。
Group by後面還可以跟多個列來表示多列分組,前面的優先級分組放在多列分組中。
按列名分組
having子句用於限制按組顯示結果,並且只能與group by壹起使用。在where中沒有辦法直接使用聚合函數,即不能使用sum avg和其他函數,因此引用了having,這些函數可以在having中使用。
按排序方式排序,後跟列名和排序方法。如果沒有添加任何內容,則默認為升序。ASC代表升序,DESC代表降序。
您還可以在Oracle中設置多列排序。
Order by列名1升降,列名2升降;
前者是主要排序,後者是次要排序。
註意:當妳和自己比較時,妳不能使用having,妳可以創建壹個新列。
註意:如果select語句同時包含group by、having和order by,它將按group by、having和order by排序。
分組和聚合壹起用於統計信息。
其中是from的服務,只能與實字段壹起使用,以篩選由from子句中指定的操作生成的行。
Group by用於對where子句的輸出進行分組。
Having用於從分組結果中篩選行。
Order by用於對篩選結果進行排序。
(1)分組函數:max min?平均總和計數
Max表示列的最大值,min表示列的最小值,avg表示列的平均值,sum表示列的總和,count表示列的行數。
註意:分組函數(max、min、avg、count、sum)只能出現在having子句、order by子句中,而不能出現在選擇列表的where子句和group by子句中。
②多表查詢
多表查詢是指對兩個或多個表或視圖的查詢。在實際應用中,當單表查詢不能滿足需求時,通常使用多表查詢。例如,它顯示銷售部門的位置及其員工的姓名。在這種情況下,需要(部門表和員工表)。
多表查詢的連接壹般可以分為:內連接、左外連接、右連接和全連接。
註意:使用多表查詢時,可以為每個表設置別名。如果為表指定了別名,則語句中的所有語句都必須使用別名,而不是實際的表名。在編寫屬性時,如果屬性對於其中壹個表是唯壹的,則不需要編寫別名。如果有兩個表,您必須指定哪個表具有哪個屬性格式:表名和屬性名。
從表1別名、表2別名中選擇列名。...
註意:E是emp的別名,D是dept的別名。
但是,如果操作該表,則需要設置別名,例如查詢每個部門中工資高於該部門平均工資的員工人數。其中有壹個avg表,並且這個表必須有別名(提醒:如果只有壹個修改的表,則可以不設置別名,但如果有多個表,則必須設置別名)。
內部聯系
內部聯接通過使用比較運算符匹配每個表的公共列中的值來形成壹個新表,也就是說,取出兩個表中間* * *的行並將它們聯接起來。如果某些行不* * *屬於兩個表,它們將不會被聯接。
挑選
來自表1
內部連接表2
匹配條件下
或者
挑選
來自表1表2
哪裏匹配條件
左側外部連接
左外連接和內連接的區別是在設置左外連接時設置主表和附屬表,主表在前面,附屬表在後面。內連接是輸出兩個表的匹配位置,左外連接是寫入所有主表,時間表壹壹對應。如果有任何時間表,將添加它們,但如果沒有,則不會編寫它們。
挑選
來自表1
左連接表2
匹配條件下
右連接
右連接和左外連接基本相同,只是右連接的主表寫在後面。
挑選
來自表1
右連接表2
匹配條件下
完全連接
全聯接是在等聯接的基礎上,將左表和右表未匹配的數據相加,使用的關鍵字是全外聯接或全聯接。
挑選
來自表1
完全連接表2
匹配條件下
自我聯系
還有壹種特殊情況,那就是自加入。在Oracle中,壹個表不能與自身進行比較,因此當需要比較自身表的兩條信息時,也需要使用join進行連接,即同壹表的連接查詢。
③子查詢
子查詢是指嵌套在其他sql語句中的select語句,也稱為嵌套查詢。sql語句的執行順序是從右到左,因此在執行查詢時,左邊的子查詢將在主查詢之前執行。
子查詢分為單行子查詢和多行子查詢。單行子查詢是指返回壹行數據的子查詢語句,多行子查詢是指返回多行數據的查詢語句。子查詢還可以分為多列子查詢、多行子查詢和多列多行子查詢。
如果內部查詢在子查詢期間未返回任何記錄,則外部條件中字段DEPTNO和NULL之間的比較將始終為false,這意味著外部查詢不會返回任何結果。
概括為:
單行子查詢意味著子查詢只返回單行和單行數據。
多行子查詢是指返回單列和多行數據,都是針對單列的。
多列子查詢是指查詢返回多列數據的子查詢語句。
單行子查詢
其中deptno =(單行值)
多行子查詢
其中deptno in(多行值)
多列子查詢:
where(job,deptno)=(select job,deptno from EMP where ename =‘KING‘)
多列多行子查詢
where(job,deptno)in(select job,deptno from EMP where ename =‘KING‘)
單行子查詢
可以用=,》;、和& lt、gt;=、& lt=、& lt& gt相等比較運算符。
內部查詢返回的結果必須與外部查詢條件中的字段(DEPTNO)匹配。
多行子查詢
在WHERE子句中使用多行子查詢時,可以使用多行比較運算符(in、ALL、ANY)。
IN:等於任何壹個。
全部:與子查詢返回的所有值進行比較。例如:sal & gtALL(1,2,3)等效於sal》:3,即大於ALL。
任何:與子查詢返回的任何值進行比較。例如:sal & gtANY(1,2,3)等價於SAL》;1,即大於任何壹個。
註意:ANY運算符必須與單行比較運算符結合使用,返回的行只需匹配子查詢的任何結果。
多列子查詢
多列子查詢與多行子查詢相同,只是在使用多列子查詢時,將有多個列要匹配。
④集合運算
為了組合多個select語句的結果,可以使用集合運算符union、union all、intersect和minus。
Union:該操作符用於獲得兩個結果集的並集。使用此運算符時,結果集中的重復行將被自動刪除。
Union all:該操作類似於Union,但它不取消重復行,也不進行排序。
Intersect:使用該操作符獲得兩個結果集的交集。
Minus:使用該操作符獲得兩個結果集的差集,它將只顯示第壹個結果集中存在的數據,而不顯示第二個結果集中存在的數據。
概括為集合操作就是將兩個或多個結果集合並為壹個結果集。
互聯系統。交集返回兩個查詢的記錄。
聯合所有?Union返回每個查詢的所有記錄,包括重復記錄。
工會?Intersection返回每個查詢的所有記錄,不包括重復記錄。
減去?Complement返回從第壹個查詢檢查的記錄中減去第二個查詢檢索的記錄後的剩余記錄。
註意:使用set操作時,查詢返回的列數和列類型必須匹配,並且列名可以不同。
(1)Distinct關鍵字
在Oracle中,可能有幾種類似的情況,因此可以使用Distinct來消除重復行。
(2)多表查詢和單行子查詢可以實現相同的功能。
找出銷售部下屬員工的姓名、工作和工資。
(3)顯示平均工資高於本部門的員工信息。
分析:
1.求所有部門的平均工資。
select deptno,avg(sal)from EMP group by deptno;
2.查找每個人的工資信息
從emp中選擇ename、sal、deptno
3.使用多表連接合並兩個結果集。
select * from emp,(select deptno,avg(sal)avg sal from EMP group by deptno)damao其中EMP . deptno = damao . deptno;
4.移除平均工資以下的數據:
select * from emp,(select deptno,avg(sal)avg sal from EMP group by deptno)damao其中EMP . deptno = damao . deptno and sal & gt;avgsal
(4)EMP表介紹
領域?類型?形容
empno?NUMBER(4)表示員工編號,這是壹個唯壹的編號。
ename?vae char 2(10)?註明員工姓名
job varchar 2(9)表示壹個工作職位。
經理?數字(4)表示員工的領導編號。
雇傭日期?日期表示雇傭日期。
薩爾。數字(7,2)?快遞月薪,工資
通訊?數字(7,2)?代表獎金或傭金。
部門編號(2)