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

SQL 經典語句大全:從基礎 CRUD 到進階查詢、分頁、優化技巧

     編輯:PHP 相關知識

SQL 經典語句大全:從基礎 CRUD 到進階查詢、分頁、優化技巧

SQL(Structured Query Language)是關聯式資料庫的標準語言。本文彙整常用語句分類參考,涵蓋 DDL、DML、DQL、進階查詢、分頁、效能技巧,適用於 MySQL、SQL Server、PostgreSQL 等主流資料庫(語法細節請參考各資料庫文件)。

一、基礎 DDL(資料定義)

-- 建立/刪除資料庫
CREATE DATABASE db_name;
DROP DATABASE db_name;

-- 建立資料表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 依現有表建立新表
CREATE TABLE new_table LIKE old_table;              -- 僅結構
CREATE TABLE new_table AS SELECT id, name FROM old_table; -- 結構+資料

-- 修改表結構
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN email VARCHAR(150);
ALTER TABLE users DROP COLUMN phone;
ALTER TABLE users ADD PRIMARY KEY (id);
ALTER TABLE users DROP PRIMARY KEY;

-- 索引
CREATE INDEX idx_email ON users(email);
CREATE UNIQUE INDEX uk_username ON users(username);
DROP INDEX idx_email ON users;

-- 視圖
CREATE VIEW active_users AS SELECT * FROM users WHERE status = 1;
DROP VIEW active_users;

二、基礎 DML/DQL(資料操作與查詢)

-- 新增
INSERT INTO users (username, email) VALUES ('john', 'john@example.com');

-- 查詢
SELECT * FROM users WHERE id = 1;
SELECT id, username FROM users WHERE username LIKE 'john%';
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

-- 更新
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- 刪除
DELETE FROM users WHERE id = 1;

-- 聚合
SELECT COUNT(*) AS total FROM users;
SELECT SUM(amount) FROM orders;
SELECT AVG(score), MAX(score), MIN(score) FROM exams;

三、進階查詢運算子

五、分組與聚合

-- 子查詢
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);

-- CTE (WITH,MySQL 8.0+、PostgreSQL、SQL Server)
WITH high_value AS (
    SELECT user_id FROM orders WHERE amount > 1000
)
SELECT * FROM users WHERE id IN (SELECT user_id FROM high_value);

七、分頁查詢

資料庫語法範例
MySQL / PostgreSQL / SQLiteLIMIT offset, count / LIMIT count OFFSET offsetSELECT * FROM users LIMIT 10 OFFSET 20
SQL Server 2012+OFFSET n ROWS FETCH NEXT m ROWS ONLYSELECT * FROM users ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
Oracle 12c+OFFSET n ROWS FETCH NEXT m ROWS ONLY同上
通用(子查詢)嵌套 TOP/ROWNUM效能較差,不推薦大資料量

深分頁優化:避免 LIMIT 1000000, 10 全表掃描。改用「延遲關聯」或「游標分頁」:

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved