基礎的 SQL 命令主要用于對數據庫進行查詢、新增、修改、刪除等操作,可分為以下幾類:
一、數據查詢(SELECT)
用于從表中獲取數據,是最常用的命令。
基本語法:
SELECT 列名1, 列名2... FROM 表名 WHERE 條件;
- 示例:查詢
students
表中所有 18 歲以上的學生姓名和年齡SELECT name, age FROM students WHERE age > 18;
- 常用擴展:
DISTINCT
(去重)、ORDER BY
(排序)、LIMIT
(限制結果數量)等。
我來擴寫這個 SQL 查詢,加入 DISTINCT、ORDER BY 和 LIMIT 等常用擴展功能:
-- 查詢18歲以上不重復的學生姓名和年齡,按年齡降序排列,年齡相同的按姓名升序排列,只返回前20條記錄
SELECT DISTINCT name, age
FROM students
WHERE age > 18
ORDER BY age DESC, name ASC
LIMIT 20;
這個擴展查詢包含以下功能:
DISTINCT
?- 確保返回的結果中沒有重復的行WHERE age > 18
?- 篩選條件,只返回18歲以上的學生ORDER BY age DESC, name ASC
?- 先按年齡降序排列,年齡相同的再按姓名升序排列LIMIT 20
?- 只返回前20條記錄
如果需要更復雜的查詢,還可以考慮:
添加 GROUP BY 進行分組
使用 HAVING 對分組結果進行篩選
使用 JOIN 連接其他表
添加 OFFSET 實現分頁功能
我將擴展這個 SQL 查詢,加入?GROUP BY、HAVING、JOIN?和?OFFSET?分頁功能,同時保持之前的?DISTINCT、ORDER BY?和?LIMIT?條件:
假設場景:
students
?表存儲學生信息(id
,?name
,?age
,?class_id
)classes
?表存儲班級信息(id
,?class_name
,?teacher_id
)exam_scores
?表存儲考試成績(student_id
,?score
)
查詢目標:
"查詢18歲以上、平均分≥60分的學生姓名、年齡和班級名稱,按年齡降序排列,并實現分頁(每頁10條記錄)"
完整 SQL:
SELECT s.name,s.age,c.class_name,AVG(e.score) AS avg_score
FROM students s
LEFT JOIN classes c ON s.class_id = c.id
LEFT JOIN exam_scores e ON s.id = e.student_id
WHERE s.age > 18
GROUP BY s.id, s.name, s.age, c.class_name
HAVING AVG(e.score) >= 60
ORDER BY s.age DESC,s.name ASC
LIMIT 10 OFFSET 0; -- 第一頁(0-10條記錄)
關鍵功能說明:
JOIN(連接表):
連接?
students
?和?classes
?獲取班級名稱連接?
students
?和?exam_scores
?計算平均分
GROUP BY(分組):
按學生ID、姓名、年齡和班級名稱分組
確保聚合函數(如?
AVG
)正確計算每個學生的平均分
HAVING(篩選分組):
篩選出平均分≥60的學生(
WHERE
?不能用于聚合條件)
DISTINCT(去重):
由于?
GROUP BY
?已經確保唯一性,這里可以省略?DISTINCT
ORDER BY(排序):
優先按年齡降序(
DESC
),其次按姓名升序(ASC
)
LIMIT + OFFSET(分頁):
LIMIT 10
?每頁10條OFFSET 0
?從第1條開始(第2頁改為?OFFSET 10
)
進階擴展:
如果需要計算總頁數,可結合?
COUNT(*) OVER()
?窗口函數:SELECT s.name,s.age,c.class_name,AVG(e.score) AS avg_score,COUNT(*) OVER() AS total_count FROM ...
二、數據插入(INSERT)
用于向表中新增記錄。
基本語法:
INSERT INTO 表名 (列名1, 列名2...) VALUES (值1, 值2...);
- 示例:向
students
表插入一條新記錄INSERT INTO students (name, age, gender) VALUES ('張三', 20, '男');
三、數據更新(UPDATE)
用于修改表中已有記錄。
基本語法:
- 示例:將
students
表中id=1
的學生年齡改為 21UPDATE students SET age=21 WHERE id=1;
注意:若省略WHERE
,會修改表中所有記錄,需謹慎使用。
四、數據刪除(DELETE)
用于刪除表中的記錄。
基本語法:
- 示例:刪除
students
表中age < 18
的記錄DELETE FROM students WHERE age < 18;
注意:若省略WHERE
,會刪除表中所有記錄(表結構保留)。
五、表結構操作
1. 創建表(CREATE TABLE)
sql
CREATE TABLE 表名 (列名1 數據類型 約束,列名2 數據類型 約束...
);
- 示例:創建
students
表CREATE TABLE students (id INT PRIMARY KEY, -- 主鍵(唯一標識)name VARCHAR(50) NOT NULL, -- 非空age INT );
2. 刪除表(DROP TABLE)
DROP TABLE 表名; -- 徹底刪除表(包括結構和數據)
3. 修改表結構(ALTER TABLE)
- 新增列:
ALTER TABLE 表名 ADD 列名 數據類型;
- 刪除列:
ALTER TABLE 表名 DROP COLUMN 列名;
六、其他常用命令
DESCRIBE 表名;
(或DESC 表名;
):查看表結構。USE 數據庫名;
:切換到指定數據庫。SHOW DATABASES;
:查看所有數據庫。SHOW TABLES;
:查看當前數據庫中的所有表。
這些命令覆蓋了 SQL 的核心操作,掌握后可完成大部分基礎數據庫交互。
左鏈接,右鏈接的區別
右鏈接:最大的條數取決于右邊
左鏈接:最大的條數取決于左邊