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

SQL 基礎語法大全:從建庫建表到高級查詢與連接操作

     編輯:MySQL 綜合教學

SQL 基礎語法大全:從建庫建表到高級查詢與連接操作

SQL 是互聯網從業者必備核心技能。本文系統整理從 DDL、DML 到高級查詢、連接操作的常用語句,附帶實用示例,適合速查與入門學習。

一、數據庫與表結構操作 (DDL)

1. 數據庫管理

-- 創建數據庫
CREATE DATABASE db_name;

-- 刪除數據庫
DROP DATABASE db_name;

-- 備份 SQL Server (示例)
USE master;
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\backup\mydb.dat';
BACKUP DATABASE pubs TO testBack;

2. 表操作

-- 創建表
CREATE TABLE tab_name (
    col1 type1 [NOT NULL] [PRIMARY KEY],
    col2 type2 [NOT NULL],
    ...
);

-- 根據舊表結構創建新表 (不複製數據)
CREATE TABLE tab_new LIKE tab_old;           -- MySQL
CREATE TABLE tab_new AS SELECT * FROM tab_old WHERE 1=0;  -- 通用

-- 刪除表
DROP TABLE tab_name;

-- 增加列
ALTER TABLE tab_name ADD COLUMN col_name data_type;
-- 注意:大多數引擎不支持刪除列或修改列類型 (僅擴充 VARCHAR 長度)

-- 主鍵管理
ALTER TABLE tab_name ADD PRIMARY KEY (col);
ALTER TABLE tab_name DROP PRIMARY KEY;

3. 索引與視圖

-- 創建索引
CREATE [UNIQUE] INDEX idx_name ON tab_name (col1, col2...);

-- 刪除索引
DROP INDEX idx_name ON tab_name;
-- 索引不可修改,需刪除重建

-- 視圖
CREATE VIEW view_name AS SELECT ...;
DROP VIEW view_name;

二、核心數據操作 (DML)

-- 查詢
SELECT * FROM table1 WHERE condition;

-- 插入 (顯式指定列名,防止結構變更報錯)
INSERT INTO table1 (field1, field2) VALUES (value1, value2);

-- 刪除
DELETE FROM table1 WHERE condition;

-- 更新
UPDATE table1 SET field1=value1 WHERE condition;

-- 模糊查詢
SELECT * FROM table1 WHERE field1 LIKE '%value%';

-- 排序
SELECT * FROM table1 ORDER BY field1, field2 [DESC];

-- 聚合函數
SELECT COUNT(*) AS total FROM table1;
SELECT SUM(field1) AS sum_val FROM table1;
SELECT AVG(field1) AS avg_val FROM table1;
SELECT MAX(field1) AS max_val FROM table1;
SELECT MIN(field1) AS min_val FROM table1;

三、高級集合運算

參與運算的查詢結果列數、類型必須一致。

  • UNION:合併結果集,去重。UNION ALL 保留重複行,性能更好。
  • EXCEPT (MINUS):返回第一個集合中不在第二個集合中的行,去重。EXCEPT ALL 保留重複。
  • INTERSECT:返回兩個集合交集,去重。INTERSECT ALL 保留重複。

四、外連接詳解

-- 左外連接:保留左表所有行
SELECT a.col1, b.col2
FROM table_a a
LEFT OUTER JOIN table_b b ON a.key = b.key;

-- 右外連接:保留右表所有行
SELECT a.col1, b.col2
FROM table_a a
RIGHT OUTER JOIN table_b b ON a.key = b.key;

-- 全外連接:保留兩表所有行 (MySQL 不直接支持,可用 UNION 模擬)
SELECT * FROM table_a a LEFT JOIN table_b b ON a.key = b.key
UNION
SELECT * FROM table_a a RIGHT JOIN table_b b ON a.key = b.key;

五、表數據複製與跨庫操作

-- 僅複製結構 (Access/SQL Server)
SELECT * INTO new_table FROM old_table WHERE 1<>1;
-- 或
SELECT TOP 0 * INTO new_table FROM old_table;

-- 複製數據 (指定列,順序對應)
INSERT INTO target_table (col1, col2) SELECT col_a, col_b FROM source_table;

-- 跨數據庫複製 (Access 語法,路徑為絕對路徑)
INSERT INTO target_table (col1, col2)
SELECT col_a, col_b FROM source_table IN 'C:\path\db.mdb' WHERE condition;

六、子查詢應用

-- IN 子查詢
SELECT a, b, c FROM table_a WHERE key_col IN (SELECT key_col FROM table_b);

-- 等值列表
SELECT a, b, c FROM table_a WHERE key_col IN (1, 2, 3);

七、實戰建議

  1. 永遠顯式寫列名:INSERT INTO t(a,b) VALUES(...),避免表結構變更導致業務報錯。
  2. 慎用 SELECT *:只查所需列,減少網絡傳輸與 I/O。
  3. 大批量操作分批提交:避免長事務鎖表、日志暴漲。
  4. 連接條件加索引:JOIN 的 ON 列、WHERE 過濾列建立適當索引。
  5. 優先用 UNION ALL:明確無重複或允許重複時,避免昂貴去重排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved