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

標準 SQL 語言核心用法大全:DDL/DML/DQL/DCL 與多表連接實戰

     編輯:MySQL 綜合教學

前言:SQL 是關係型資料庫的通用語言

ANSI SQL 為標準,各廠商(MySQL、Oracle、PostgreSQL、SQL Server)在其基礎上擴展方言。分層架構中,資料庫位於最底層,上層應用(如 mysql.exe、Java 程式)皆透過 SQL 交互。SQL 全稱「結構化查詢語言」,實則涵蓋資料定義(DDL)、資料操縱(DML)、資料查詢(DQL)、資料控制(DCL)四大功能。

一、SQL 四大語言類型速查表

類型全稱功能典型語句
DDLData Definition Language定義表、視圖、索引CREATE、DROP、ALTER
DMLData Manipulation Language增刪改資料INSERT、UPDATE、DELETE
DQLData Query Language查詢資料SELECT
DCLData Control Language權限控制GRANT、REVOKE

二、資料完整性三大支柱

  • 實體完整性:主鍵(PK)保證每行唯一。
  • 域完整性:資料型別、NOT NULL、CHECK、DEFAULT 等約束。
  • 參照完整性:外鍵(FK)確保子表值引用父表既有主鍵。

三、DDL 實戰:建表、改表、刪表

1. 建表與外鍵兩種寫法

-- 方式一:建表時直接定義 FK(需先建父表)
CREATE TABLE customers (
  id BIGINT NOT NULL,
  name VARCHAR(15) NOT NULL,
  age INT,
  PRIMARY KEY (id)
);

CREATE TABLE orders (
  id BIGINT NOT NULL,
  order_number VARCHAR(15) NOT NULL,
  price DOUBLE PRECISION,
  customer_id BIGINT,
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);

-- 方式二:先建表再 ALTER ADD CONSTRAINT(解決建表順序依賴、腳本維護難題)
CREATE TABLE orders (
  id BIGINT NOT NULL PRIMARY KEY,
  order_number VARCHAR(15) NOT NULL,
  price DOUBLE PRECISION,
  customer_id BIGINT
);
ALTER TABLE orders ADD CONSTRAINT fk_customer
  FOREIGN KEY (customer_id) REFERENCES customers(id);

2. 常用 DDL

  • ALTER TABLE tbl ADD col INT; / DROP COLUMN col; / MODIFY col VARCHAR(50);
  • DROP TABLE tbl;(連資料一併刪除,慎用)。

四、DML:增刷改的完整性檢查機制

執行 INSERT/UPDATE/DELETE 時,資料庫先做完整性檢查(PK、FK、NOT NULL、CHECK),違規即拋錯回滾,保證資料一致性。

五、DQL 核心:SELECT 完整語法與五大查詢模式

SELECT 目標欄位
FROM 基礎表/視圖
[WHERE 條件]
[GROUP BY 欄位 [HAVING 條件]]
[ORDER BY 欄位 [ASC|DESC]]
[LIMIT 偏移量, 行數]

1. 簡單查詢

  • 範圍:WHERE age BETWEEN 18 AND 50 ORDER BY age DESC, name ASC
  • 列舉:WHERE name IN ('Tom','Mike','Jack')
  • 模糊:WHERE name LIKE '_a%'(第二字為 a)
  • 空值:WHERE age IS NULL(不可用 = NULL)
  • 別名:SELECT name AS c_name, age AS c_age FROM customer c WHERE c.id = 1

2. 連接查詢(多表核心)

FROM table1 join_type table2 [ON (join_condition)] [WHERE (query_condition)]
類型關鍵字特點範例
交叉連接CROSS JOIN / 逗號笛卡兒積,無 ONSELECT * FROM customers, orders
內連接INNER JOIN僅返回符合條件的行SELECT c.id, o.id FROM customers c INNER JOIN orders o ON c.id=o.customer_id
左外連接LEFT OUTER JOIN左表全保留,右表無匹配則 NULLSELECT * FROM customers c LEFT JOIN orders o ON c.id=o.customer_id
右外連接RIGHT OUTER JOIN右表全保留同上對調

隱式內連接:WHERE c.id=o.customer_id(不寫 JOIN/ON),功能等同但可讀性較差。

3. 子查詢(嵌套查詢)

  • 標量子查詢(SELECT 列表):SELECT name, (SELECT SUM(price) FROM orders WHERE customer_id=1) total FROM customers WHERE id=1
  • IN / EXISTS:WHERE id IN (SELECT customer_id FROM orders) / WHERE EXISTS (SELECT 1 FROM orders WHERE customer_id=c.id)
  • 所有子查詢皆可改寫為 JOIN(通常效能更好)。

4. 聯合查詢 UNION

SELECT * FROM customers WHERE age<25 UNION SELECT * FROM customers WHERE age>=25(自動去重;UNION ALL 保留重複、效能更高)。

5. 報表查詢(分組統計)

SELECT c.id, c.name, SUM(price)
FROM customers c LEFT JOIN orders o ON c.id=o.customer_id
GROUP BY c.id
HAVING SUM(price) > 100;

聚合函數:COUNT()、MIN()、MAX()、SUM()、AVG()。

六、DCL:權限管理

GRANT SELECT, INSERT ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd';
REVOKE INSERT ON db.* FROM 'user'@'%';

結語

掌握 DDL/DML/DQL/DCL 四大類語句、三大完整性約束、五種查詢模式,即可應對 90% 以上的日常 SQL 開發場景。建議收藏本文作為速查手冊,實戰中多練 EXPLAIN 分析執行計劃,將 SQL 寫得又對又快。

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