MySQL 數(shù)據(jù)庫進階之SQL 數(shù)據(jù)操作與子查詢操作大全
一、子查詢:嵌套在查詢中的查詢
子查詢(Subquery)是指**嵌套在其他 SQL 語句中的查詢語句**,通常用于復雜的條件篩選或多表關聯(lián)場景。子查詢的結果可以作為主查詢的條件、數(shù)據(jù)源或計算字段。
1.1 子查詢的基本語法
SELECT 字段列表 FROM (子查詢語句) AS 別名 WHERE 條件;
1.2 子查詢的實戰(zhàn)示例
示例 1:簡單子查詢作為數(shù)據(jù)源
-- 從學生表中查詢姓名、性別、年齡,再篩選出姓名為'張三'的記錄
SELECT t1.name FROM (SELECT name, sex, age FROM student) AS t1 WHERE t1.name = '張三';
示例 2:多表關聯(lián)的子查詢
假設存在三張表:
- `student`(學生表):`sno`(學號)、`name`(姓名)等
- `relationship`(學生-課程關系表):`sno`(學號)、`cno`(課程號)
- `course`(課程表):`cno`(課程號)、`gradeName`(課程名)
需求:查詢所有選擇了“語文”課程的學生信息
SELECT t1.*, course.gradeName FROM ( #子查詢:關聯(lián)學生表和關系表,獲取學生信息及所選課程號 SELECT student.*, relationship.cno FROM student LEFT JOIN relationship ON student.sno = relationship.sno ) AS t1 #主查詢:關聯(lián)子查詢結果和課程表,篩選出語文課 LEFT JOIN course ON t1.cno = course.cno WHERE course.gradeName = '語文';
**說明**:子查詢的結果被視為一張臨時表(需指定別名,如 `t1`),主查詢可像操作普通表一樣使用這張臨時表。
二、數(shù)據(jù)添加:INSERT 語句
INSERT 語句用于向表中添加新數(shù)據(jù),支持單行添加和多行添加兩種方式。
2.1 單行添加
語法
INSERT INTO 表名(列1, 列2, 列3, ...)
VALUES('值1', '值2', '值3', ...);示例
-- 向student表添加一條學生記錄
INSERT INTO student(name, sex, age, sno, class_num)
VALUES ('張三', '男', 18, '10001', '20201004');2.2 多行添加
語法
INSERT INTO 表名(列1, 列2, 列3, ...)
VALUES
('值1', '值2', '值3', ...),
('值1', '值2', '值3', ...),
('值1', '值2', '值3', ...); #多個值列表用逗號分隔示例
#向student表添加多條學生記錄
INSERT INTO student(name, sex, age, sno, class_num)
VALUES
('張三', '男', 18, '10001', '20201004'),
('李四', '女', 19, '10002', '20201004'),
('王五', '男', 18, '10003', '20201005');**注意**:
- 列名順序需與值列表順序一致;
- 若省略列名,則值列表需包含表中所有字段(按表結構順序);
- 字符串類型的值需用單引號 `'` 包裹;
- 自增主鍵(如 `id`)通常無需手動指定值,數(shù)據(jù)庫會自動生成。
三、數(shù)據(jù)修改:UPDATE 語句
UPDATE 語句用于修改表中已存在的數(shù)據(jù),需通過 `WHERE` 子句指定修改范圍(否則會修改表中所有記錄)。
3.1 語法
UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2, ... WHERE 條件; #不寫WHERE會修改所有記錄,謹慎操作!
3.2 示例
# 將id=2的學生姓名改為'雙手合十',年齡改為22,性別改為'女' UPDATE student SET name = '雙手合十', age = 22, sex = '女' WHERE id = 2; #將20201004班所有學生的年齡增加1歲 UPDATE student SET age = age + 1 WHERE class_num = '20201004';
**警告**:`UPDATE` 語句如果不帶 `WHERE` 條件,會修改表中**所有記錄**,執(zhí)行前務必確認條件是否正確!
四、數(shù)據(jù)刪除:DELETE、TRUNCATE 與 DROP
4.1 DELETE 語句:刪除部分或全部記錄
語法
DELETE FROM 表名 WHERE 條件; #不寫WHERE會刪除表中所有記錄
示例
# 刪除id=1的學生記錄 DELETE FROM student WHERE id = 1; #刪除20201005班的所有學生記錄 DELETE FROM student WHERE class_num = '20201005';
4.2 TRUNCATE 語句:清空表中所有記錄
語法
```sql
TRUNCATE TABLE 表名;
```
示例
```sql
# 清空class表中所有記錄(保留表結構)
TRUNCATE TABLE class;
```
4.3 DROP 語句:徹底刪除表
語法
```sql
DROP TABLE 表名;
```
示例
```sql
-- 徹底刪除relationship表(包括表結構和所有數(shù)據(jù))
DROP TABLE relationship;
```
4.4 DELETE、TRUNCATE 與 DROP 的區(qū)別
| 操作 | 功能描述 | 是否保留表結構 | 效率 | 是否可回滾(事務中) |
|---|---|---|---|---|
DELETE | 逐行刪除記錄,可帶條件 | 是 | 較低(逐行刪除) | 是 |
TRUNCATE | 清空所有記錄,相當于重建表結構 | 是 | 較高(直接重建) | 否 |
DROP | 徹底刪除表,包括結構和數(shù)據(jù) | 否 | 最高 | 否 |
**使用建議**:
- 需刪除部分記錄:用 `DELETE` + `WHERE`;
- 需清空全表(保留結構):用 `TRUNCATE`(效率更高);
- 需徹底刪除表:用 `DROP`(謹慎操作,不可恢復)。
五、SQL 操作的注意事項
1. **子查詢優(yōu)化**:
- 子查詢結果集不宜過大,否則會影響性能;
- 復雜子查詢可考慮用 `JOIN` 改寫,提升效率。
2. **數(shù)據(jù)添加**:
- 確保字段類型與值匹配(如數(shù)字類型不加引號);
- 遵守表的約束(如非空字段必須賦值,唯一字段值不重復)。
3. **數(shù)據(jù)修改與刪除**:
- 執(zhí)行前先用 `SELECT` 語句驗證條件是否正確(如 `SELECT * FROM student WHERE id=2`);
- 生產(chǎn)環(huán)境中,刪除/修改操作建議在事務中執(zhí)行,便于回滾。
4. **MySQL 語法特性**:
- 語句末尾加分號 `;` 表示結束;
- 關鍵字不區(qū)分大小寫,但建議大寫關鍵字(如 `SELECT`、`INSERT`),小寫表名和字段名,增強可讀性。
六、總結:SQL 核心操作要點
1. **子查詢**:嵌套在主查詢中的查詢,可作為數(shù)據(jù)源或條件,常用于復雜查詢場景;
2. **數(shù)據(jù)添加**:`INSERT INTO ... VALUES` 支持單行和多行添加,需注意字段與值的匹配;
3. **數(shù)據(jù)修改**:`UPDATE ... SET ... WHERE` 用于修改記錄,`WHERE` 條件必不可少;
4. **數(shù)據(jù)刪除**:
- `DELETE` 逐行刪除,可帶條件,支持回滾;
- `TRUNCATE` 清空全表,保留結構,效率高;
- `DROP` 徹底刪除表,包括結構,謹慎使用。
掌握這些操作后,你已能完成 MySQL 數(shù)據(jù)庫的基本CRUD(創(chuàng)建、讀取、更新、刪除)操作,為后續(xù)學習事務、索引、存儲過程等進階知識奠定基礎。實際開發(fā)中,需結合業(yè)務場景選擇合適的操作方式,同時注意數(shù)據(jù)安全和操作效率。
到此這篇關于MySQL 數(shù)據(jù)庫進階之SQL 數(shù)據(jù)操作與子查詢操作大全的文章就介紹到這了,更多相關sql數(shù)據(jù)操作與子查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用存儲過程實現(xiàn)循環(huán)插入100條記錄
本節(jié)主要介紹了使用存儲過程實現(xiàn)循環(huán)插入100條記錄的具體實現(xiàn),需要的朋友可以參考下2014-07-07
mysql數(shù)據(jù)庫常見的優(yōu)化操作總結(經(jīng)驗分享)
這篇文章主要給大家介紹了關于mysql數(shù)據(jù)庫常見的優(yōu)化操作,文章總結的都是個人日常開發(fā)使用mysql數(shù)據(jù)庫的經(jīng)驗所得,其中包括Index索引、少用SELECT*、EXPLAIN SELECT以及開啟查詢緩存等相關資料,相信會對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04

