SQL查詢入門:從數據表中獲取信息
經過前兩天的學習,我們已經掌握了MySQL的基礎概念和環境操作。今天將正式進入SQL語言的核心——數據查詢。想象一下,當你面對一個裝滿數據的數據庫時,如何快速找到需要的信息?這就像在圖書館中根據索引找書,而SQL的SELECT語句就是你的"數據庫檢索引擎"。
SELECT基礎語法:獲取列數據
最基礎的查詢語句用於獲取表中的一列或多列數據,語法結構如下:
SELECT 列名1, 列名2 FROM 表名;
實例操作:
假設我們有一個存儲學生信息的表students(可通過前兩天學習的CREATE TABLE和INSERT語句創建測試數據),包含id、name、age、major四個字段。要查詢所有學生的姓名和專業,可執行:
SELECT name, major FROM students;
關鍵點:
- 多個列名之間用英文逗號分隔
- 使用SELECT * FROM 表名可獲取表中所有列(*代表全部列)
- SQL語句不區分大小寫,但建議關鍵字大寫以提高可讀性
條件篩選:使用WHERE子句過濾數據
當表中數據量較大時,我們需要按條件篩選結果。WHERE子句就像一個過濾器,只保留符合條件的數據行。
比較運算符的應用
常用比較運算符包括:=(等於)、!=(不等於)、>(大於)、<(小於)、>=(大於等於)、<=(小於等於)。
實例操作:
查詢所有年齡大於20歲的學生:
SELECT name, age FROM students WHERE age > 20;
邏輯運算符組合條件
當需要多個篩選條件時,可使用AND(並且)、OR(或者)、NOT(非)組合條件。
實例操作:
查詢計算機專業(major='Computer Science')且年齡大於19歲的學生:
SELECT * FROM students WHERE major = 'Computer Science' AND age > 19;
注意事項:
- 字符串條件需用單引號括起來
- 數值類型條件直接書寫(如age > 20)
- 多個條件組合時可用括號改變優先級
數據排序:使用ORDER BY整理結果
當查詢結果較多時,使用ORDER BY可以按指定列對結果進行排序。
基本排序語法
SELECT 列名 FROM 表名 ORDER BY 排序列名 [ASC|DESC];
- ASC:升序排列(默認,可省略)
- DESC:降序排列
實例操作:
查詢所有學生信息,按年齡降序排列(年齡大的在前):
SELECT * FROM students ORDER BY age DESC;
多列排序
可以指定多個排序字段,當第一個字段值相同時,按第二個字段排序:
SELECT name, age, major FROM students ORDER BY major ASC, age DESC;
限制結果數量:使用LIMIT控制輸出
當只需要查詢結果中的前幾行數據時,LIMIT子句非常有用,尤其在處理大數據量表時能提高查詢效率。
基礎用法
SELECT 列名 FROM 表名 LIMIT 數量;
實例操作:
查詢年齡最大的3名學生:
SELECT name, age FROM students ORDER BY age DESC LIMIT 3;
分頁查詢
LIMIT還支持偏移量參數,實現分頁效果:
SELECT * FROM students LIMIT 起始位置, 數量;
實例操作:
從第4條記錄開始,查詢5條學生信息(常用於第二頁數據):
SELECT * FROM students LIMIT 3, 5; -- 起始位置從0開始計數
實踐任務:綜合查詢練習
任務1:創建測試數據表
首先創建一個包含以下字段的products表並插入測試數據:
-- 創建產品表
CREATE TABLE products (
id INT,
name VARCHAR(50),
price DECIMAL(10,2),
category VARCHAR(30),
stock INT
);
-- 插入測試數據
INSERT INTO products VALUES
(1, '筆記本電腦', 4999.99, '電子產品', 50),
(2, '機械鍵盤', 299.50, '電子產品', 120),
(3, '牛仔褲', 199.00, '服裝', 85),
(4, '運動鞋', 399.00, '服裝', 60),
(5, 'Python編程教程', 59.90, '圖書', 200),
(6, 'MySQL從入門到精通', 69.00, '圖書', 150);
任務2:基礎查詢練習
- 查詢所有產品的名稱和價格
- 查詢所有圖書類商品(category='圖書')
- 查詢價格大於300元的電子產品,並按價格降序排列
- 查詢庫存數量前2名的服裝類商品
任務3:綜合條件查詢
編寫SQL語句實現:"查詢價格在200-500元之間(包含200和500),且庫存大於50件的商品,按類別升序、價格降序排列,只顯示前3條結果"
參考答案:
SELECT name, price, category, stock
FROM products
WHERE price BETWEEN 200 AND 500
AND stock > 50
ORDER BY category ASC, price DESC
LIMIT 3;
常見問題與解決方案
Q1:查詢結果出現重複數據怎麼辦?
A1:使用DISTINCT關鍵字去除重複行:
SELECT DISTINCT category FROM products; -- 查詢所有不重複的商品類別
Q2:如何模糊匹配查詢?
A2:使用LIKE關鍵字配合通配符:
- %:匹配任意字符(包括0個)
- _:匹配單個字符
SELECT * FROM products WHERE name LIKE '%教程%'; -- 查詢名稱包含"教程"的商品
Q3:忘記表結構時怎麼辦?
A3:使用DESCRIBE命令查看錶結構:
DESCRIBE products; -- 簡寫:DESC products;
今日學習總結
今天我們掌握了SQL查詢的核心基礎:
- 使用SELECT語句獲取表數據
- 通過WHERE子句實現條件篩選
- 用ORDER BY對結果排序
- 用LIMIT限制輸出數量
這些基礎查詢技能是所有複雜SQL操作的基石。明天我們將學習更高級的查詢技巧,包括聚合函數、分組查詢和多表連接,逐步構建完整的SQL知識體系。記得完成今天的實踐任務並鞏固練習,只有通過反覆操作才能真正熟練掌握這些技能!