首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 基礎查詢入門:單表查詢、聚合函數、分組與排序全解析

     編輯:Oracle 教學

基本 SELECT 語法

SELECT [DISTINCT] {* | 列名 [別名], ...}
FROM 表名
[WHERE 條件]
[ORDER BY 列名|別名|位置 [ASC|DESC]];

去重 DISTINCT

針對 選項列表所有列組合 去重。DISTINCT deptno, job 要求部門+崗位完全相同才算重複。

列別名與拼接


WHERE 條件過濾

運算子示例說明
比較sal > 2000>, <, >=, <=, =, != / ^= / <>
範圍sal BETWEEN 2000 AND 3000閉區間,含邊界
集合deptno IN (10, 20)等值集合
模糊ename LIKE 'J%'% 多字符,_ 單字符
空值comm IS NULL不可用 = NULL
邏輯(sal > 1000 AND deptno=10) OR job='MANAGER'優先級: NOT > AND > OR

日期條件技巧

  函數說明忽略 NULL
  MAX/MIN最大/最小值是
  AVG平均值是
  SUM求和是
  COUNT(*)行數否(含 NULL 行)
  COUNT(expr)非 NULL 個數是


聚合與非聚合列不能混用

  維度WHEREHAVING
  作用對象原始行分組後的組
  可用聚合函數否是
  可用別名否否(需重複表達式)


多維分組

-- 薪資高於平均薪資的員工
SELECT ename, sal FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);

-- 與 SMITH 同部門
SELECT * FROM emp
WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SMITH');

多行子查詢

-- 1. 最高薪員工姓名崗位
SELECT ename, job FROM emp WHERE sal = (SELECT MAX(sal) FROM emp);

-- 2. 每個部門人數、平均薪資、最高薪資
SELECT deptno, COUNT(*), ROUND(AVG(sal),2), MAX(sal)
FROM emp GROUP BY deptno;

-- 3. 平均薪資超過 2000 的部門
SELECT deptno, AVG(sal) FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000;

-- 4. 顯示員工及其主管(自連接)
SELECT e.ename "員工", m.ename "主管"
FROM emp e LEFT JOIN emp m ON e.mgr = m.empno;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved