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

MySQL、Oracle與SQLServer三大數(shù)據(jù)庫(kù)語(yǔ)法全方位區(qū)別分析

 更新時(shí)間:2026年03月26日 11:22:37   作者:一代梟雄_宗某  
不同的數(shù)據(jù)庫(kù)產(chǎn)品在語(yǔ)法上略有不同,這篇文章主要介紹了MySQL、Oracle與SQLServer三大數(shù)據(jù)庫(kù)語(yǔ)法全方位區(qū)別分析的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

這三大數(shù)據(jù)庫(kù)是開發(fā) / 運(yùn)維最常用的,核心 SQL92/99 標(biāo)準(zhǔn)語(yǔ)法通用select/from/where/group by/join/order by 等),差異集中在 函數(shù)、分頁(yè)、字符串處理、日期操作、自增主鍵、語(yǔ)法細(xì)節(jié)、函數(shù)別名、空值處理 等高頻開發(fā)場(chǎng)景,也是面試 / 項(xiàng)目遷移的高頻考點(diǎn),我按「開發(fā)常用分類」整理,條理清晰,方便查閱和復(fù)制,優(yōu)先級(jí)從上到下,都是工作最常用的差異點(diǎn)。

一、【最常用】分頁(yè)查詢(開發(fā) TOP1 高頻差異,必記)

分頁(yè)是業(yè)務(wù)開發(fā)中使用頻率最高的語(yǔ)法差異,三者寫法完全不同,無(wú)通用方案,必須單獨(dú)記憶!

MySQL

特有語(yǔ)法,使用 limit [起始索引], [條數(shù)] ,起始索引從 0 開始,極其簡(jiǎn)潔

-- 查詢第11-20條數(shù)據(jù)(索引從0,跳過(guò)前10條,查10條)
SELECT * FROM table_name LIMIT 10,10;
-- 查詢前10條數(shù)據(jù)(簡(jiǎn)寫)
SELECT * FROM table_name LIMIT 10;

Oracle

沒有 limit 關(guān)鍵字,兩種主流寫法,Oracle 12c+ 支持新寫法,低版本用子查詢 + rownum(必須記)

-- 方式1:Oracle 12c及以上 推薦(簡(jiǎn)潔,類似MySQL),offset=起始行,fetch next=條數(shù)
SELECT * FROM table_name OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
-- 方式2:所有Oracle版本兼容(最常用),rownum是偽列,行號(hào)從1開始,必須套子查詢
SELECT * FROM (
    SELECT t.*, ROWNUM rn FROM table_name t WHERE ROWNUM <=20
) WHERE rn >=11; -- 查詢11-20條

SQLServer

兩種寫法,低版本用top+子查詢,2012 及以上版本支持offset/fetch(和 Oracle 12c 一致)

-- 方式1:SQLServer2012+ 推薦,語(yǔ)法和Oracle 12c完全相同
SELECT * FROM table_name OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
-- 方式2:所有版本兼容,TOP關(guān)鍵字(只能查前N條,分頁(yè)需子查詢)
SELECT TOP 10 * FROM table_name; -- 查詢前10條

二、字符串處理(高頻,拼接 / 長(zhǎng)度 / 替換 / 截取,全部差異)

字符串拼接 【開發(fā)必用】

這是最基礎(chǔ)的高頻差異,三者完全不同,90% 的語(yǔ)法報(bào)錯(cuò)都來(lái)自這里

MySQL

支持兩種:CONCAT(str1,str2,...) 函數(shù) 或 ||(需開啟配置),推薦 CONCAT 函數(shù)

SELECT CONCAT('姓名:',NAME,',年齡:',AGE) AS info FROM table_name;

Oracle

僅支持 || 拼接符,不支持 + 號(hào);也支持 CONCAT 函數(shù),但 Oracle 的 CONCAT只支持 2 個(gè)參數(shù)(多拼接必須嵌套 / 用 ||)

-- 推薦(最常用,無(wú)參數(shù)限制)
SELECT '姓名:' || NAME || ',年齡:' || AGE AS info FROM table_name;
-- 函數(shù)寫法(僅2個(gè)參數(shù))
SELECT CONCAT('姓名:',NAME) AS info FROM table_name;

SQLServer

兩種方式:+ 拼接符(最常用)、CONCAT(str1,str2,...) 函數(shù)(SQLServer2012+)

-- 推薦,簡(jiǎn)潔高效
SELECT '姓名:'+ NAME + ',年齡:'+ CAST(AGE AS VARCHAR) AS info FROM table_name;
-- 函數(shù)寫法(自動(dòng)轉(zhuǎn)換類型,無(wú)需CAST)
SELECT CONCAT('姓名:',NAME,',年齡:',AGE) AS info FROM table_name;

注意:SQLServer 中,字符串和數(shù)字拼接必須用CAST/convert轉(zhuǎn)類型,否則報(bào)錯(cuò);MySQL/Oracle 自動(dòng)轉(zhuǎn)換。

其他高頻字符串函數(shù)(通用名 + 差異寫法)

功能MySQLOracleSQLServer說(shuō)明
字符串長(zhǎng)度LENGTH(str)LENGTH(str)LEN(str)均返回字符長(zhǎng)度
轉(zhuǎn)大寫UPPER(str)UPPER(str)UPPER(str)完全通用
轉(zhuǎn)小寫LOWER(str)LOWER(str)LOWER(str)完全通用
去除首尾空格TRIM(str)TRIM(str)LTRIM(RTRIM(str))SQLServer 無(wú) TRIM,需嵌套
字符串截取SUBSTR(str,start,len)SUBSTR(str,start,len)SUBSTRING(str,start,len)通用,start 都從 1 開始
字符串替換REPLACE(str,a,b)REPLACE(str,a,b)REPLACE(str,a,b)完全通用

三、日期 & 時(shí)間 操作(開發(fā) TOP2 高頻差異,函數(shù)完全不同)

日期是三大數(shù)據(jù)庫(kù)差異最大的模塊,函數(shù)名 / 語(yǔ)法完全不一樣,無(wú)通用方案,高頻考點(diǎn) + 開發(fā)必記,按「常用操作」整理,最實(shí)用!

獲取【當(dāng)前系統(tǒng)時(shí)間】【重中之重】

MySQL

NOW()        -- 推薦,返回 年月日 時(shí)分秒 (yyyy-MM-dd HH:mm:ss)
SYSDATE()    -- 系統(tǒng)當(dāng)前時(shí)間,同NOW()
CURDATE()    -- 只返回 年月日 (yyyy-MM-dd)
CURTIME()    -- 只返回 時(shí)分秒 (HH:mm:ss)

Oracle

SYSDATE      -- 推薦,返回 年月日 時(shí)分秒 (yyyy-MM-dd HH:mm:ss) 無(wú)括號(hào)!
SYSTIMESTAMP -- 帶毫秒的時(shí)間戳
TRUNC(SYSDATE) -- 只返回 年月日 (yyyy-MM-dd),截取日期部分

SQLServer

GETDATE()    -- 推薦,返回 年月日 時(shí)分秒 (yyyy-MM-dd HH:mm:ss)
CURRENT_TIMESTAMP -- 同GETDATE(),符合SQL標(biāo)準(zhǔn)
CAST(GETDATE() AS DATE) -- 只返回 年月日

日期格式化(轉(zhuǎn)指定格式字符串,開發(fā)必用)

MySQL

DATE_FORMAT(日期字段, 格式符) ,格式符用 %Y/%m/%d/%H/%i/%s

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') AS now_time; -- 2026-01-13 16:30:59
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS now_date; -- 2026-01-13

Oracle

兩種函數(shù),TO_CHAR(日期,格式符) 最常用,格式符用 YYYY/MM/DD/HH24/MI/SS

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') AS now_time FROM DUAL; -- 24小時(shí)制
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') AS now_date FROM DUAL;

注意:Oracle 的小時(shí)必須寫HH24,否則是 12 小時(shí)制;必須加 FROM DUAL 偽表。

SQLServer

CONVERT(數(shù)據(jù)類型, 日期, 格式碼) ,格式碼是固定數(shù)字(記住常用的即可)

SELECT CONVERT(VARCHAR(20),GETDATE(),120) AS now_time; -- 2026-01-13 16:30:59 最常用
SELECT CONVERT(VARCHAR(10),GETDATE(),23) AS now_date;  -- 2026-01-13 純?nèi)掌?/pre>

日期加減(增減年 / 月 / 日 / 時(shí))

MySQL

DATE_ADD(日期, INTERVAL 數(shù)值 單位) 或 直接用 日期 + INTERVAL

SELECT DATE_ADD(NOW(),INTERVAL 1 DAY) -- 當(dāng)前時(shí)間+1天
SELECT NOW() - INTERVAL 1 MONTH       -- 當(dāng)前時(shí)間-1個(gè)月

Oracle

直接用 +/- 運(yùn)算,日期是數(shù)值類型,1=1 天,1/24=1 小時(shí)

SELECT SYSDATE + 1 FROM DUAL;  -- +1天
SELECT SYSDATE - 1/24 FROM DUAL;-- -1小時(shí)
SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL; -- 加1個(gè)月(專用函數(shù))

SQLServer

DATEADD(單位, 數(shù)值, 日期) 函數(shù),最規(guī)范

SELECT DATEADD(DAY,1,GETDATE())  -- +1天
SELECT DATEADD(MONTH,-1,GETDATE()) -- -1個(gè)月

主鍵自增(建表必備,語(yǔ)法完全不同)

業(yè)務(wù)表必備的主鍵自增,三大數(shù)據(jù)庫(kù)實(shí)現(xiàn)方式完全不同,建表時(shí)必用,面試高頻題

MySQL

建表時(shí)直接給字段加 AUTO_INCREMENT 屬性,只支持主鍵自增,最簡(jiǎn)潔

CREATE TABLE t_user(
  id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主鍵,插入時(shí)無(wú)需賦值
  name VARCHAR(20) NOT NULL
);
-- 插入時(shí)無(wú)需寫id字段
INSERT INTO t_user(name) VALUES('張三');

Oracle

Oracle 11g 及以下 無(wú)自增關(guān)鍵字,必須通過(guò)【序列 + 觸發(fā)器】實(shí)現(xiàn)自增;Oracle 12c+ 新增自增語(yǔ)法 GENERATED AS IDENTITY,兼容 MySQL 寫法

-- Oracle12c+ 推薦寫法(簡(jiǎn)潔)
CREATE TABLE t_user(
  id INT PRIMARY KEY GENERATED AS IDENTITY,
  name VARCHAR2(20) NOT NULL
);
-- Oracle11g及以下 傳統(tǒng)寫法(序列+觸發(fā)器),必須創(chuàng)建兩個(gè)對(duì)象
CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1; -- 創(chuàng)建序列
-- 再創(chuàng)建觸發(fā)器,插入時(shí)自動(dòng)賦值主鍵
CREATE TRIGGER tri_user_id BEFORE INSERT ON t_user FOR EACH ROW
BEGIN
  SELECT seq_user_id.NEXTVAL INTO :NEW.id FROM DUAL;
END;

SQLServer

建表時(shí)給字段加 IDENTITY(起始值,步長(zhǎng)) 屬性,語(yǔ)法和 MySQL 類似,叫法不同

CREATE TABLE t_user(
  id INT PRIMARY KEY IDENTITY(1,1), -- 自增主鍵,1開始,每次+1
  name VARCHAR(20) NOT NULL
);
-- 插入時(shí)無(wú)需寫id字段
INSERT INTO t_user(name) VALUES('張三');

空值(NULL)處理(高頻坑點(diǎn),語(yǔ)法不同)

開發(fā)中最容易踩坑的點(diǎn):NULL 參與運(yùn)算 / 判斷時(shí),結(jié)果永遠(yuǎn)是 NULL;三大數(shù)據(jù)庫(kù)都有專用函數(shù),函數(shù)名不同,必記

核心規(guī)則

NULL != '' 、NULL != 0,NULL 表示「無(wú)值」,不是空字符串 / 0;判斷是否為 NULL 必須用 IS NULL/IS NOT NULL,不能用 = NULL/<> NULL(所有數(shù)據(jù)庫(kù)通用)

空值替換函數(shù)(開發(fā)必用:NULL 替換為指定默認(rèn)值)

MySQL

IFNULL(字段/表達(dá)式, 默認(rèn)值)

-- 如果age為NULL,顯示為0
SELECT IFNULL(age,0) AS age FROM t_user;

Oracle

NVL(字段/表達(dá)式, 默認(rèn)值) ,Oracle 特有,無(wú) IFNULL 函數(shù)

-- 如果age為NULL,顯示為0
SELECT NVL(age,0) AS age FROM t_user;

SQLServer

ISNULL(字段/表達(dá)式, 默認(rèn)值) ,和 MySQL 的 IFNULL 功能完全一樣,只是函數(shù)名不同

-- 如果age為NULL,顯示為0
SELECT ISNULL(age,0) AS age FROM t_user;

總結(jié) 

到此這篇關(guān)于MySQL、Oracle與SQLServer三大數(shù)據(jù)庫(kù)語(yǔ)法全方位區(qū)別分析的文章就介紹到這了,更多相關(guān)MySQL、Oracle與SQLServer數(shù)據(jù)庫(kù)語(yǔ)法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL修改存儲(chǔ)過(guò)程的詳細(xì)步驟

    MySQL修改存儲(chǔ)過(guò)程的詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于MySQL修改存儲(chǔ)過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Windows平臺(tái)下安裝與配置MySQL9的方法

    Windows平臺(tái)下安裝與配置MySQL9的方法

    這篇文章主要介紹了Windows平臺(tái)下安裝與配置MySQL9的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • mysql數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出sql文件

    mysql數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出sql文件

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)如何導(dǎo)入導(dǎo)出sql文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • mysql字符串拼接的幾種實(shí)用方式小結(jié)

    mysql字符串拼接的幾種實(shí)用方式小結(jié)

    在SQL語(yǔ)句中經(jīng)常需要進(jìn)行字符串拼接,下面這篇文章主要給大家介紹了關(guān)于mysql字符串拼接的幾種實(shí)用方式,文中通過(guò)圖文以及代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程

    MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程

    這篇文章主要介紹了MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程,其中rollback命令的使用需要謹(jǐn)慎一些,需要的朋友可以參考下
    2015-12-12
  • MySQL 查詢的排序、分頁(yè)相關(guān)

    MySQL 查詢的排序、分頁(yè)相關(guān)

    這篇文章主要介紹了MySQL 查詢的排序、分頁(yè)相關(guān)的相關(guān)知識(shí),幫助大家更好的理解和使用數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • MySQL+Navicat安裝配置保姆級(jí)教程

    MySQL+Navicat安裝配置保姆級(jí)教程

    這篇文章主要介紹了MySQL+Navicat安裝配置教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 解析MySQL設(shè)置當(dāng)前時(shí)間為默認(rèn)值的方法

    解析MySQL設(shè)置當(dāng)前時(shí)間為默認(rèn)值的方法

    本篇文章是對(duì)MySQL設(shè)置當(dāng)前時(shí)間為默認(rèn)值的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • win10 安裝 mysql 5.7 msi版的教程圖文詳解

    win10 安裝 mysql 5.7 msi版的教程圖文詳解

    這篇文章主要介紹了win10 安裝 mysql 5.7 msi版的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 導(dǎo)致MySQL做全表掃描的幾種情況

    導(dǎo)致MySQL做全表掃描的幾種情況

    這篇文章主要介紹了導(dǎo)致MySQL做全表掃描的幾種情況,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

平潭县| 绥棱县| 江陵县| 利津县| 云南省| 通海县| 图们市| 祁阳县| 慈溪市| 东至县| 博客| 阿图什市| 黑河市| 沧州市| 阿图什市| 马鞍山市| 津市市| 沾化县| 大城县| 儋州市| 涿州市| 京山县| 潼关县| 岳西县| 兴仁县| 伽师县| 高邑县| 松原市| 镇平县| 当雄县| 革吉县| 东乡族自治县| 昂仁县| 临潭县| 新源县| 秦安县| 泉州市| 新兴县| 博兴县| 上林县| 和政县|