最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle?數(shù)據(jù)庫(kù)簡(jiǎn)單查詢從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)案例

 更新時(shí)間:2025年11月12日 09:02:10   作者:摸魚(yú)星  
本文將基于employees(員工表)和departments(部門表),從語(yǔ)法規(guī)則、基礎(chǔ)查詢、條件查詢、排序到函數(shù)應(yīng)用,系統(tǒng)梳理?Oracle?簡(jiǎn)單查詢的全流程,每個(gè)知識(shí)點(diǎn)都搭配實(shí)戰(zhàn)案例,適合新手入門學(xué)習(xí),也可作為日常開(kāi)發(fā)的參考手冊(cè),感興趣的朋友跟隨小編一起看看吧

在 Oracle 數(shù)據(jù)庫(kù)日常操作中,查詢是最基礎(chǔ)也最核心的技能。本文將基于employees(員工表)和departments(部門表),從語(yǔ)法規(guī)則、基礎(chǔ)查詢、條件查詢、排序到函數(shù)應(yīng)用,系統(tǒng)梳理 Oracle 簡(jiǎn)單查詢的全流程,每個(gè)知識(shí)點(diǎn)都搭配實(shí)戰(zhàn)案例,適合新手入門學(xué)習(xí),也可作為日常開(kāi)發(fā)的參考手冊(cè)。

一、查詢基礎(chǔ):語(yǔ)法結(jié)構(gòu)與核心規(guī)則

在開(kāi)始查詢之前,必須先掌握 Oracle 查詢的基礎(chǔ)語(yǔ)法和注意事項(xiàng),避免因格式問(wèn)題導(dǎo)致報(bào)錯(cuò)。

1. 核心語(yǔ)法結(jié)構(gòu)

Oracle 查詢的最基本結(jié)構(gòu)由SELECT(指定查詢列)和FROM(指定數(shù)據(jù)來(lái)源表)組成,語(yǔ)法如下

SELECT 列名1, 列名2, 列名3, …  -- 要查詢的列,多列用逗號(hào)分隔
FROM 表名;                   -- 數(shù)據(jù)所在的表,結(jié)尾加分號(hào)表示語(yǔ)句結(jié)束

2. 關(guān)鍵注意事項(xiàng)

這 3 條規(guī)則是避免語(yǔ)法錯(cuò)誤的 “避坑指南”,務(wù)必牢記:

  • 大小寫(xiě)不敏感:SQL 關(guān)鍵字(如SELECT、FROM)、表名(如employees)、字段名(如salary)均不區(qū)分大小寫(xiě),select first_name from employeesSELECT FIRST_NAME FROM EMPLOYEES效果一致。
  • 標(biāo)點(diǎn)符號(hào)為英文:所有標(biāo)點(diǎn)(逗號(hào)、分號(hào)、引號(hào)等)必須使用英文符號(hào),例如查詢姓名時(shí)用'King'(英文單引號(hào)),而非中文‘King’。
  • 分號(hào)的作用:?jiǎn)螚l查詢語(yǔ)句結(jié)尾可加分號(hào);多條語(yǔ)句同時(shí)執(zhí)行時(shí),每條語(yǔ)句必須以分號(hào)分隔,執(zhí)行前需選中所有要運(yùn)行的 SQL 腳本。

二、基礎(chǔ)查詢:從部分列到特殊處理

基礎(chǔ)查詢涵蓋 “查哪些列”“如何處理列數(shù)據(jù)”“如何簡(jiǎn)化列名” 等場(chǎng)景,是后續(xù)復(fù)雜查詢的基礎(chǔ)。

1. 查詢指定部分列

當(dāng)不需要表中所有數(shù)據(jù),僅需特定列時(shí),直接在SELECT后指定列名即可。

需求:查詢所有員工的 “姓名(名 + 姓)” 和 “薪資”

-- first_name:?jiǎn)T工名,last_name:?jiǎn)T工姓,salary:薪資
SELECT first_name, last_name, salary 
FROM employees;

2. 查詢所有列

若需獲取表中所有字段數(shù)據(jù),無(wú)需逐個(gè)列出列名,用通配符*代替即可(注意:生產(chǎn)環(huán)境中盡量避免用*,優(yōu)先指定列名,減少不必要的數(shù)據(jù)傳輸)。

需求:查詢employees表中所有員工的完整信息

SELECT * FROM employees;

3. 對(duì)列進(jìn)行數(shù)學(xué)運(yùn)算

僅支持對(duì)數(shù)字類型列(如薪資salary、員工編號(hào)employee_id)進(jìn)行數(shù)學(xué)運(yùn)算,常見(jiàn)運(yùn)算包括加減乘除,不支持%取余(需用后續(xù)的mod函數(shù)),\在 Oracle 中有特殊含義,也不可用。

需求:計(jì)算員工薪資 “加 100”“減 100”“乘 100”“除 100” 后的結(jié)果

SELECT 
  salary + 100 AS 薪資加100, 
  salary - 100 AS 薪資減100, 
  salary * 100 AS 薪資乘100, 
  salary / 100 AS 薪資除100 
FROM employees;

4. 給列 / 表取別名

查詢結(jié)果中,默認(rèn)顯示原始列名(如salary*12),可讀性差;表名過(guò)長(zhǎng)時(shí),也可簡(jiǎn)化。通過(guò) “別名” 可解決這一問(wèn)題,規(guī)則如下:

  • 列別名:用AS關(guān)鍵字(可省略),格式為列表達(dá)式 AS 別名,別名含中文或特殊字符時(shí)需用雙引號(hào)括起。
  • 表別名:必須省略AS,直接用表名 別名,常用于多表關(guān)聯(lián)查詢。

需求 1:計(jì)算員工年薪,并將列名顯示為 “年薪”

-- AS可省略,兩種寫(xiě)法均有效
SELECT salary * 12 AS 年薪 FROM employees;
SELECT salary * 12 年薪 FROM employees;  -- 省略AS

需求 2:給employees表取別名e,查詢員工名和薪資

-- 表別名不可加AS,正確寫(xiě)法如下
SELECT e.first_name, e.salary 
FROM employees e;

5. 字符串拼接

Oracle 中用||實(shí)現(xiàn)字符串拼接,相當(dāng)于 Java 中的+,拼接的 “字符 / 字符串” 需用英文單引號(hào)括起(Oracle 不區(qū)分字符和字符串)。

需求:將員工的 “名” 和 “姓” 拼接為 “姓名”(格式:名 - 姓)

SELECT first_name || '-' || last_name AS 姓名 
FROM employees;

6. 數(shù)據(jù)去重(DISTINCT)

當(dāng)查詢結(jié)果存在重復(fù)數(shù)據(jù)時(shí),用DISTINCT去除重復(fù)行,規(guī)則如下:

  • DISTINCT后僅跟 1 個(gè)字段:去除該字段的重復(fù)值。
  • DISTINCT后跟多個(gè)字段:僅當(dāng)所有字段的值均相同時(shí),才視為重復(fù)行并去除。

需求 1:查詢所有員工的 “領(lǐng)導(dǎo)編號(hào)”,去除重復(fù)編號(hào)

sql

需求 2:查詢 “部門編號(hào) + 領(lǐng)導(dǎo)編號(hào)” 的唯一組合(即同一部門的同一領(lǐng)導(dǎo)僅顯示一次)

SELECT DISTINCT department_id, manager_id 
FROM employees;

7. 條件判斷(CASE WHEN)

CASE WHEN相當(dāng)于 Java 中的if-else,用于對(duì)表中已有列的數(shù)據(jù)進(jìn)行判斷,生成新的列(如根據(jù)薪資分級(jí))。

語(yǔ)法格式

CASE
  WHEN 條件1 THEN 結(jié)果1  -- 滿足條件1時(shí),顯示結(jié)果1
  WHEN 條件2 THEN 結(jié)果2  -- 滿足條件2時(shí),顯示結(jié)果2
  ...
  ELSE 其他結(jié)果          -- 所有條件都不滿足時(shí),顯示其他結(jié)果
END AS 新列名

需求:根據(jù)員工薪資分級(jí),生成 “薪資水平” 列(高薪:≥10000,一般:≥8000,垃圾:<8000)

SELECT 
  salary,
  CASE
    WHEN salary >= 10000 THEN '高薪'
    WHEN salary >= 8000 THEN '一般'
    ELSE '垃圾'
  END AS 薪資水平
FROM employees;

8. 查詢當(dāng)前時(shí)間(SYSDATE + DUAL 表)

Oracle 中用SYSDATE獲取當(dāng)前系統(tǒng)時(shí)間(包含日期和時(shí)分秒),但SYSDATE需結(jié)合 “啞表DUAL” 使用 ——DUAL是 Oracle 內(nèi)置的一行一列的臨時(shí)表,僅用于無(wú)實(shí)際表關(guān)聯(lián)的查詢(如查詢常量、函數(shù)結(jié)果)。

需求:查詢當(dāng)前系統(tǒng)時(shí)間

SELECT SYSDATE AS 當(dāng)前時(shí)間 
FROM dual;

三、條件查詢(WHERE):精準(zhǔn)篩選數(shù)據(jù)

基礎(chǔ)查詢是 “獲取所有數(shù)據(jù)”,而條件查詢用WHERE子句篩選 “符合條件的數(shù)據(jù)”,是日常查詢中最常用的功能。語(yǔ)法結(jié)構(gòu)如下:

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 篩選條件;  -- 篩選條件需滿足“布爾值”(true/false)

1. 比較查詢(>、>=、<、<=、!=、=)

通過(guò)比較運(yùn)算符篩選數(shù)據(jù),包括 “等值查詢” 和 “不等值查詢”。

(1)等值查詢(=)

篩選 “字段值等于指定值” 的數(shù)據(jù),注意字符串需用英文單引號(hào)括起。

需求:查詢 “員工名(first_name)為 King” 的所有信息

SELECT * 
FROM employees 
WHERE first_name = 'King';  -- 字符串'King'用英文單引號(hào)

(2)不等值查詢(>、>=、<、<=、!=、<>)

篩選 “字段值不等于 / 大于 / 小于指定值” 的數(shù)據(jù),!=<>均表示 “不等于”,效果一致。

需求:查詢 “薪資(salary)大于 8000” 的員工姓名和薪資

SELECT first_name, last_name, salary 
FROM employees 
WHERE salary > 8000;

2. 空值查詢(IS NULL / IS NOT NULL)

Oracle 中不能用=判斷空值,必須用IS NULL(查詢空值)或IS NOT NULL(查詢非空值)。

需求 1:查詢 “部門編號(hào)(department_id)為空” 的員工信息

-- 錯(cuò)誤寫(xiě)法:WHERE department_id = null
SELECT * 
FROM employees 
WHERE department_id IS NULL;  -- 正確寫(xiě)法

需求 2:查詢 “部門編號(hào)(department_id)非空” 的員工信息

SELECT * 
FROM employees 
WHERE department_id IS NOT NULL;

3. 多條件查詢(AND / OR)

當(dāng)篩選條件有多個(gè)時(shí),用ANDOR連接:

  • AND:相當(dāng)于 Java 中的&&,所有條件必須同時(shí)滿足。
  • OR:相當(dāng)于 Java 中的||,滿足任意一個(gè)條件即可。

需求 1:查詢 “員工編號(hào)(employee_id)≤150 且 薪資≥10000” 的員工信息

SELECT * 
FROM employees 
WHERE employee_id <= 150 AND salary >= 10000;

需求 2:查詢 “員工編號(hào)≤150 或 薪資≥8000” 的員工信息

SELECT * 
FROM employees 
WHERE employee_id <= 150 OR salary >= 8000;

4. 區(qū)間查詢(BETWEEN AND / NOT BETWEEN AND)

篩選 “字段值在指定區(qū)間內(nèi)” 的數(shù)據(jù),BETWEEN 最小值 AND 最大值包含區(qū)間的邊界值,等價(jià)于>= 最小值 AND <= 最大值;NOT BETWEEN AND則相反。

需求 1:查詢 “員工編號(hào)在 110~150 之間(包含 110 和 150)” 的員工信息

-- 等價(jià)寫(xiě)法1:WHERE employee_id >= 110 AND employee_id <= 150
SELECT * 
FROM employees 
WHERE employee_id BETWEEN 110 AND 150;  -- 更簡(jiǎn)潔

需求 2:查詢 “員工編號(hào)不在 110~150 之間” 的員工信息

SELECT * 
FROM employees 
WHERE employee_id NOT BETWEEN 110 AND 150;

5. 枚舉查詢(IN / NOT IN)

篩選 “字段值在指定枚舉列表中” 的數(shù)據(jù),IN (值1, 值2, ...)等價(jià)于= 值1 OR = 值2 OR ...;NOT IN則相反,適用于枚舉值較少的場(chǎng)景。

需求 1:查詢 “部門編號(hào)為 60、90、100” 的員工信息

-- 等價(jià)寫(xiě)法:WHERE department_id = 60 OR department_id = 90 OR department_id = 100
SELECT * 
FROM employees 
WHERE department_id IN (60, 90, 100);  -- 更簡(jiǎn)潔

需求 2:查詢 “部門編號(hào)不是 60、90、100” 的員工信息

SELECT * 
FROM employees 
WHERE department_id NOT IN (60, 90, 100);

6. 模糊查詢(LIKE)【重點(diǎn)】

通過(guò)通配符匹配 “字符串格式” 的數(shù)據(jù),語(yǔ)法為LIKE '匹配模式',核心是掌握兩個(gè)通配符:

  • %:匹配任意多個(gè)字符(包括 0 個(gè)字符)。
  • _:匹配恰好 1 個(gè)字符(不能多也不能少)。

常見(jiàn)場(chǎng)景案例

需求SQL 語(yǔ)句說(shuō)明
查詢 “姓(last_name)以 K 開(kāi)頭” 的員工SELECT * FROM employees WHERE last_name LIKE 'K%';K%表示 “以 K 開(kāi)頭,后面跟任意字符”
查詢 “姓中包含 a” 的員工SELECT * FROM employees WHERE last_name LIKE '%a%';%a%表示 “任意位置包含 a”
查詢 “姓以 K 開(kāi)頭且長(zhǎng)度為 5” 的員工SELECT * FROM employees WHERE last_name LIKE 'K____';K后跟 4 個(gè)_,共 5 個(gè)字符(K+4 個(gè)字符)

四、排序(ORDER BY):規(guī)范結(jié)果順序

默認(rèn)情況下,查詢結(jié)果的順序是隨機(jī)的(與數(shù)據(jù)存儲(chǔ)順序相關(guān)),用ORDER BY可按指定列排序,語(yǔ)法如下:

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 篩選條件
ORDER BY 列名1 [ASC/DESC], 列名2 [ASC/DESC];  -- 排序規(guī)則
  • ASC:升序(默認(rèn),可省略),如數(shù)字從大到小、字符串按字典序(A→Z)。
  • DESC:降序,如數(shù)字從大到小、字符串按字典序(Z→A)。
  • 多列排序:先按第一列排序,若第一列值相同,再按第二列排序,以此類推。

需求 1:查詢 “部門編號(hào)為 50” 的員工,按 “薪資降序” 排列(薪資高的在前)

SELECT * 
FROM employees 
WHERE department_id = 50 
ORDER BY salary DESC;

需求 2:查詢 “部門編號(hào)為 50” 的員工,先按 “薪資降序”,薪資相同的按 “員工名升序”(A→Z)排列

SELECT * 
FROM employees 
WHERE department_id = 50 
ORDER BY salary DESC, first_name ASC;

五、函數(shù):簡(jiǎn)化復(fù)雜計(jì)算與處理

Oracle 函數(shù)按作用范圍分為 “單行函數(shù)” 和 “多行函數(shù)(組函數(shù))”,前者處理每一行數(shù)據(jù)并返回一個(gè)結(jié)果,后者處理一組數(shù)據(jù)并返回一個(gè)結(jié)果。

1. 單行函數(shù)

(1)取余函數(shù)(MOD (m, n))

計(jì)算m除以n的余數(shù),等價(jià)于 Java 中的m % n,支持?jǐn)?shù)字列或常量

需求 1:計(jì)算 5 除以 2 的余數(shù)

SELECT MOD(5, 2) AS 余數(shù) 
FROM dual;  -- 結(jié)果為1

需求 2:計(jì)算每個(gè)員工薪資除以 3 的余數(shù)

SELECT salary, MOD(salary, 3) AS 薪資取余3 
FROM employees;

(2)字符串長(zhǎng)度函數(shù)(LENGTH (字符串))

計(jì)算字符串的長(zhǎng)度(字符數(shù)),支持字符串常量或字符類型列(如first_name、last_name)。

需求 1:計(jì)算字符串 “adbcedf” 的長(zhǎng)度

SELECT LENGTH('adbcedf') AS 字符串長(zhǎng)度 
FROM dual;  -- 結(jié)果為7

需求 2:查詢 “姓(last_name)長(zhǎng)度為 5” 的員工信息

SELECT * 
FROM employees 
WHERE LENGTH(last_name) = 5;

(3)日期轉(zhuǎn)換函數(shù)(TO_DATE / TO_CHAR)

Oracle 中日期有特定格式,TO_DATE用于將 “字符串” 轉(zhuǎn)為 “日期類型”,TO_CHAR用于將 “日期類型” 轉(zhuǎn)為 “指定格式的字符串”,核心是掌握日期格式符(常用格式符如下):

格式符含義示例
yyyy4 位年份2024
mm2 位月份05(5 月)
dd2 位日期10
hh24 小時(shí)制小時(shí)14(下午 2 點(diǎn))
mi分鐘30
ss45
day星期幾星期五

需求 1:將字符串 “1992-12-23 8:50:55” 轉(zhuǎn)為日期類型

sql

需求 2:將當(dāng)前時(shí)間(SYSDATE)轉(zhuǎn)為 “2024-05-10 14:30:45 星期五” 格式

SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh:mi:ss day') AS 格式化時(shí)間 
FROM dual;

2. 多行函數(shù)(組函數(shù))

組函數(shù)默認(rèn)將表中所有行視為 “一組數(shù)據(jù)”,返回一個(gè)匯總結(jié)果,常見(jiàn)函數(shù)如下:

函數(shù)作用說(shuō)明
MAX(列)求最大值忽略空值,適用于數(shù)字、日期、字符串(按字典序)
MIN(列)求最小值同上
AVG(列)求平均值僅適用于數(shù)字列,忽略空值
SUM(列)求總和僅適用于數(shù)字列,忽略空值
COUNT(列)求非空行數(shù)統(tǒng)計(jì)該列 “有值” 的行數(shù),空值不計(jì)數(shù);COUNT(*)統(tǒng)計(jì)所有行數(shù)(包括空值)

需求 1:統(tǒng)計(jì)employees表的 “員工總數(shù)”“最高薪資”“最低薪資”“平均薪資”

SELECT 
  COUNT(*) AS 員工總數(shù),        -- 統(tǒng)計(jì)所有行數(shù)(包括空值)
  MAX(salary) AS 最高薪資,    -- 最高薪資
  MIN(salary) AS 最低薪資,    -- 最低薪資
  AVG(salary) AS 平均薪資     -- 平均薪資(自動(dòng)忽略空值)
FROM employees;

需求 2:統(tǒng)計(jì) “部門編號(hào)(department_id)非空” 的員工數(shù)量

SELECT COUNT(department_id) AS 部門非空員工數(shù) 
FROM employees;  -- 空的department_id不計(jì)數(shù)

六、總結(jié)與拓展

本文覆蓋了 Oracle 簡(jiǎn)單查詢的核心知識(shí)點(diǎn),從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)案例,可滿足日常開(kāi)發(fā)中 80% 以上的簡(jiǎn)單查詢需求。后續(xù)可進(jìn)一步學(xué)習(xí) “多表關(guān)聯(lián)查詢”“分組查詢(GROUP BY)”“子查詢” 等進(jìn)階內(nèi)容,逐步構(gòu)建完整的 Oracle 查詢體系。

到此這篇關(guān)于Oracle 數(shù)據(jù)庫(kù)簡(jiǎn)單查詢從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)案例的文章就介紹到這了,更多相關(guān)oracle 數(shù)據(jù)庫(kù)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

阿合奇县| 泽普县| 兰州市| 陆丰市| 江都市| 高唐县| 保德县| 沙河市| 呈贡县| 贵南县| 厦门市| 萍乡市| 宜丰县| 东乡县| 宁陕县| 合山市| 万全县| 神池县| 马鞍山市| 余姚市| 长兴县| 屏山县| 广汉市| 汉源县| 沙坪坝区| 长岭县| 开原市| 容城县| 凤凰县| 洪雅县| 神池县| 龙口市| 沙河市| 浏阳市| 正安县| 湟中县| 临澧县| 桐柏县| 安平县| 海城市| 商水县|