1. 程式人生 > 其它 >【Oracle】SQL筆記

【Oracle】SQL筆記

與MySQL的區分

https://www.cnblogs.com/bailing80/p/11440927.html

獲取當前系統時間

-- 查詢當前系統時間,DUAL為一張臨時表
SELECT SYSDATE FROM DUAL

獲取時差

-- 7分鐘前
SELECT SYSDATE, SYSDATE - INTERVAL '7' MINUTE FROM DUAL; 
-- 7小時前
SELECT SYSDATE, SYSDATE - INTERVAL '7' HOUR FROM DUAL; 
-- 7天前
SELECT SYSDATE, SYSDATE - INTERVAL '7' DAY
FROM DUAL; -- 7月前 SELECT SYSDATE, SYSDATE - INTERVAL '7' MONTH FROM DUAL; -- 7年前 SELECT SYSDATE, SYSDATE - INTERVAL '7' YEAR FROM DUAL; -- 7分鐘後 SELECT SYSDATE, SYSDATE + INTERVAL '7' MINUTE FROM DUAL; -- 7小時後 SELECT SYSDATE, SYSDATE + INTERVAL '7' HOUR FROM DUAL; -- 7天后 SELECT SYSDATE, SYSDATE +
INTERVAL '7' DAY FROM DUAL; -- 7月後 SELECT SYSDATE, SYSDATE + INTERVAL '7' MONTH FROM DUAL; -- 7年後 SELECT SYSDATE, SYSDATE + INTERVAL '7' YEAR FROM DUAL;

字元模糊查詢

-- ORACLE LIKE查詢
SELECT * FROM 表名 WHERE INSTR(欄位, '目標字元') > 0

分頁查詢樣例:

SELECT * FROM 
    (
        SELECT ROWNUM R, 別名A.* 
        FROM
表名 別名A WHERE ROWNUM <= 當前頁 * 每頁記錄數 ) 別名B WHERE 別名B.R > (當前頁 - 1* 每頁記錄數;

分頁還需要排序處理

SELECT * FROM 
(
    SELECT ROWNUM RN,別名A.* FROM 
        (
            SELECT -- 需要的欄位
            FROM 表名 -- 這裡可以是多表
            -- WHERE 篩選條件
            ORDER BY 排序欄位 [ASC, DESC]
        ) 別名A
    WHERE ROWNUM < 當前頁數 * 每頁記錄數
)
WHERE RN > (當前頁數 - 1)* 每頁記錄數

遞迴查詢:

https://www.cnblogs.com/Soprano/p/10659127.html

查詢目標節點和所有下級

-- Oracle遞迴查詢
SELECT *
FROM 表名
START WITH 字元欄位名 ='條件值' -- (起始條件)
CONNECT BY PRIOR 主鍵欄位名 = 父鍵欄位名 -- 主鍵 等於 父建

查詢目標節點和所有上級,就是把PRIOR條件倒過來

-- Oracle遞迴查詢
SELECT *
FROM 表名
START WITH 字元欄位名 ='條件值' -- (起始條件)
CONNECT BY PRIOR 父鍵欄位名 = 主鍵欄位名