日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

根据父类id查询所有的父级_031、组函数和子查询

發布時間:2024/7/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 根据父类id查询所有的父级_031、组函数和子查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.組函數(聚合函數)

(1)組函數介紹

組函數操作行集,給出每組的結果。組函數不象單行函數,組函數對行的集合進行操作,

對每組給出一個結果。這些集合可能是整個表或者是表分成的組。

組函數與單行函數區別

單行函數對查詢到每個結果集做處理,而組函數只對分組數據做處理。

單行函數對每個結果集返回一個結果,而組函數對每個分組返回一個結果。

組函數的類型

? AVG 平均值

? COUNT 計數

? MAX 最大值

? MIN 最小值

? SUM 合計

組函數的語法

使用組函數的原則

? 用于函數的參數的數據類型可以是 CHAR、VARCHAR2、NUMBER 或 DATE。

? 所有組函數忽略空值。為了用一個值代替空值,用 NVL、NVL2 或 COALESCE 函數。

(2)組函數的使用 AVG 和 SUM 函數

AVG(arg)函數:對分組數據做平均值運算。

arg:參數類型只能是數字類型。

SUM(arg)函數:對分組數據求和。

arg:參數類型只能是數字類型。

示例:求雇員表中的的平均薪水與薪水總額。

select avg(salary) ,sum(salary) from employees;

使用 MIN 和 MAX 函數

MIN(arg)函數:求分組中最小數據。

arg:參數類型可以是字符、數字、日期。

MAX(arg)函數:求分組中最大數據。

arg:參數類型可以是字符、數字、日期。

示例 :求雇員表中的最高薪水與最低薪水。

select min(salary),max(salary) from employees;

使用 COUNT 函數

COUNT 函數:返回一個表中的行數。

COUNT 函數有三種格式:

? COUNT(*)

? COUNT(expr)

? COUNT(DISTINCT expr)

COUNT(*) :

返回表中滿足 SELECT 語句標準的行數,包括重復行,包括有空值列的行。如果WHERE 子句包括在 SELECT 語句中,COUNT(*) 返回滿足 WHERE 子句條件的行數。

示例:返回查詢結果的總條數。

select count(*) from employees;

COUNT(expr)函數 :

返回在列中的由 expr 指定的非空值的數。

示例:顯示部門 80 中有傭金的雇員人數。

select count(commission_pct) from employees e where e.department_id = 80;

COUNT(DISTINCT expr):

使用 DISTINCT 關鍵字禁止計算在一列中的重復值。

示例:顯示 EMPLOYEES 表中不重復的部門數。

select count(distinct department_id) from employees ;

組函數和 Null 值

所有組函數忽略列中的空值。

在組函數中使用 NVL 函數來處理空值。

示例:計算有傭金的員工的傭金平均值。

select avg(commission_pct) from employees;

2.創建數據組(GROUP BY)

什么是創建數據組

可以根據需要將查詢到的結果集信息劃分為較小的組,用 GROUP BY 子句實現。

GROUP BY 子句語法

GROUP BY 子句:GROUP BY 子句可以把表中的行劃分為組。然后可以用組函數返回

每一組的摘要信息。

使用分組原則

? 如果在 SELECT 子句中包含了組函數,就不能選擇單獨的結果,除非單獨的列出現在 GROUP BY 子句中。如果未能在 GROUP BY 子句中包含一個字段列表,你會收到一個錯誤信息。

? 使用 WHERE 子句,你可以在劃分行成組以前過濾行。

? 在 GROUP BY 子句中必須包含列。

? 在 GROUP BY 子句中你不能用列別名。

? 默認情況下,行以包含在 GROUP BY 列表中的字段的升序排序。可以用 ORDER BY子句覆蓋這個默認值。

GROUP BY 子句的使用

我們可以根據自己的需要對數據進行分組,在分組時,只要將需要做分組的列的列名添

加到 GROUP BY 子句后側就可以。GROUP BY 列不必在 SELECT 列表中。

示例:求每個部門的平均薪水。

select department_id , avg(salary) from employees e group by e.department_id;

GROUP BY 子句的執行順序

先進行數據查詢,在對數據進行分組,然后執行組函數。

非法使用 Group 函數的查詢

? 在 SELECT 列表中的任何列必須在 GROUP BY 子句中。

? 在 GROUP BY 子句中的列或表達式不必在 SELECT 列表中。

約束分組結果

HAVING 子句 的概念

HAVING 語句通常與 GROUP BY 語句聯合使用,用來過濾由 GROUP BY 語句返回的記錄集。

HAVING 語句的存在彌補了 WHERE 關鍵字不能與聚合函數聯合使用的不足。

HAVING 子句語法

示例:顯示那些最高薪水大于 $10,000 的部門的部門號和最高薪水。

select e.department_id,max(e.salary) from employees e group by e.department_id having max(e.salary) > 10000;

查詢那些最高薪水大于 $10,000 的部門的部門號和平均薪水。

select e.department_id,avg(e.salary) from employees e group by e.department_id having max(e.salary) > 10000;

嵌套組函數

在使用組函數時我們也可以根據需要來做組函數的嵌套使用。

示例 :顯示部門中的最大平均薪水。

select max(avg(e.salary)) from employees e group by e.department_id;

3.子查詢

子查詢介紹

子查詢是一個 SELECT 語句,它是嵌在另一個 SELECT 語句中的子句。

子查詢語法

? 子查詢 (內查詢) 在主查詢之前執行一次

? 子查詢的結果被用于主查詢 (外查詢)

可以將子查詢放在許多的 SQL 子句中,包括:

? WHERE 子句

? HAVING 子句

? FROM 子句

使用子查詢的原則

? 子查詢放在圓括號中。

? 將子查詢放在比較條件的右邊。

? 在單行子查詢中用單行運算符,在多行子查詢中用多行運算符。

示例:誰的薪水比 Abel 高。

用內連接實現:

select em.last_name,em.salary from employees abel,employees em where abel.last_name = 'Abel' and em.salary > abel.salary;

用子查詢實現:

select em.last_name,em.salary from employees em where em.salary >(select m.salary from employees m where m.last_name = 'Abel');

子查詢的類型

? 單行子查詢:子查詢語句只返回一行的查詢

? 多行子查詢:子查詢語句返回多行的查詢

單行子查詢

? 僅返回一行

? 使用單行比較符

示例:顯示那些 job ID 與雇員 141 相同的雇員的名字與 job ID。

select em.last_name,em.job_id from employees em where em.job_id = (select job_id from employees e where e.employee_id = 141);

示例:顯示 job ID 與雇員 141 相同,并且薪水 高于雇員 143 的那些雇員。

select e.last_name,e.job_id,e.salary from employees e where e.job_id = (select em.job_id from employees em where em.employee_id = 141) and e.salary > (select emp.salary from employees emp where emp.employee_id = 143);

在子查詢中使用組函數

示例 :顯示所有其薪水等于最低薪水的雇員的 last name、job ID 和 salary。

select em.last_name,em.job_id,em.salary from employees em where em.salary =(select min(salary) from employees);

帶子查詢的 HAVING 子句

可以在 WHERE 子句中使用子查詢,也可以在 HAVING 子句中使用子查詢。

示例 :顯示所有其最低薪水小于 部門 50 的最低薪水的部門號和最低薪水。

select em.department_id,min(em.salary) from employees em group by em.department_id having min(em.salary) > (select min(e.salary) from employees e where e.department_id = 50);

什么是子查詢錯誤?

子查詢錯誤:使用子查詢的一個常見的錯誤是單行子查詢返回了多行。

多行子查詢

? 返回多于一行

? 使用多行比較符

主查詢對子查詢的多行比較運算符

在條件中也可使用 NOT 取反。

4.在多行子查詢中使用 IN 運算符

示例 :查找各部門收入為部門最低的那些雇員。顯示他們的名字,薪水以及部門 ID。

select e.last_name,e.department_id,e.salary from employees e where e.salary in(select min(em.salary) from employees em group by em.department_id);

5.在多行子查詢中使用 ANY 運算符

< ANY 意思是小于最大值。 >ANY 意思是大于最小值。

示例

顯示工作崗位不是 IT_PROG 的雇員,并且這些雇員的的薪水少于 IT_PROG 工作崗位的雇員的 ID、名字、工作崗位和薪水。

select e.employee_id,e.last_name,e.job_id,e.salary from employees e where e.job_id <> 'IT_PROG' and e.salary < any (select em.salary from employees em where em.job_id = 'IT_PROG') ;

6.在多行子查詢中使用 ALL 運算符

<ALL 意思是小于最小值。>ALL 意思是大于最大值。

ANY 與 ALL 的區別:

ANY: >ANY 表示至少大于一個值,即大于最小值。

ALL: >ALL 表示大于每一個值,既大于最大值。

總結

以上是生活随笔為你收集整理的根据父类id查询所有的父级_031、组函数和子查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。