連接查詢:同時設計兩個及以上的表的查詢 連接條件或連接謂詞:用來連接兩個表的條件一般格式: [<表名1>]<列名1> <比較運算符> [<表名2>]<列名2> [<表名1>]<列名1> between [<表名2>]<列名2> and [<表名2>]<列名3> 等值連接: 連接運算符為= 查詢每個學 ...
連接查詢:同時設計兩個及以上的表的查詢
連接條件或連接謂詞:用來連接兩個表的條件一般格式:
[<表名1>]<列名1> <比較運算符> [<表名2>]<列名2>
[<表名1>]<列名1> between [<表名2>]<列名2> and [<表名2>]<列名3>
等值連接:
連接運算符為=
查詢每個學生以及選修課程的情況
mysql> select student.*, sc.* from student,sc where student.sno=sc.sno; +-------+--------+------+------+-------+-------+-----+-------+ | sno | sname | ssex | sage | sdept | sno | cno | grade | +-------+--------+------+------+-------+-------+-----+-------+ | 95001 | 李勇 | 男 | 20 | CS | 95001 | 1 | 92 | | 95001 | 李勇 | 男 | 20 | CS | 95001 | 2 | 85 | | 95001 | 李勇 | 男 | 20 | CS | 95001 | 3 | 88 | | 95002 | 劉晨 | 女 | 19 | IS | 95002 | 2 | 90 | | 95002 | 劉晨 | 女 | 19 | IS | 95002 | 3 | 80 | | 95004 | 張立 | 男 | 20 | IS | 95004 | 2 | 65 | | 95004 | 張立 | 男 | 20 | IS | 95004 | 3 | NULL | | 95004 | 張立 | 男 | 20 | IS | 95004 | 4 | NULL | | 95005 | 張三 | 男 | 23 | CS | 95005 | 2 | 84 | | 95005 | 張三 | 男 | 23 | CS | 95005 | 4 | NULL | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 1 | 87 | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 2 | 80 | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 3 | 90 | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 4 | 95 | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 5 | NULL | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 6 | NULL | | 96001 | 劉軍 | 男 | 30 | IS | 96001 | 7 | 86 | | 97001 | 李四 | 男 | 26 | EN | 97001 | 4 | NULL | | 97001 | 李四 | 男 | 26 | EN | 97001 | 5 | NULL | +-------+--------+------+------+-------+-------+-----+-------+
自身連接:一個表與自己進行連接
需要給表起別名以示區別,且必須使用首碼
//查詢每門課的間接先修課 mysql> select first.cno,second.cpno from course first,course second where first.cpno=second.cno; +-----+------+ | cno | cpno | +-----+------+ | 3 | 5 | | 1 | 7 | | 4 | NULL | | 7 | NULL | | 5 | 6 | +-----+------+ 5 rows in set (0.05 sec) //查詢沒門課先修課的名稱 mysql> select FIRST.cno,FIRST.cname,FIRST.cpno,SECOND.cname from course FIRST,course SECOND where FIRST.cpno=SECOND.cno; +-----+--------------+------+--------------+ | cno | cname | cpno | cname | +-----+--------------+------+--------------+ | 1 | 資料庫 | 5 | 數據結構 | | 3 | 信息系統 | 1 | 資料庫 | | 4 | 操作系統 | 6 | 數據處理 | | 5 | 數據結構 | 7 | C語言 | | 7 | C語言 | 6 | 數據處理 | +-----+--------------+------+--------------+
多表連接:兩個以上的表進行連接
mysql> select student.sno,sname,cname,grade from student,sc,course where student.sno=sc.sno and sc.cno=course.cno; +-------+--------+--------------+-------+ | sno | sname | cname | grade | +-------+--------+--------------+-------+ | 95001 | 李勇 | 資料庫 | 92 | | 96001 | 劉軍 | 資料庫 | 87 | | 95001 | 李勇 | 高等數學 | 85 | | 95002 | 劉晨 | 高等數學 | 90 | | 95004 | 張立 | 高等數學 | 65 | | 95005 | 張三 | 高等數學 | 84 | | 96001 | 劉軍 | 高等數學 | 80 | | 95001 | 李勇 | 信息系統 | 88 | | 95002 | 劉晨 | 信息系統 | 80 | | 95004 | 張立 | 信息系統 | NULL | | 96001 | 劉軍 | 信息系統 | 90 | | 95004 | 張立 | 操作系統 | NULL | | 95005 | 張三 | 操作系統 | NULL | | 96001 | 劉軍 | 操作系統 | 95 | | 97001 | 李四 | 操作系統 | NULL | | 96001 | 劉軍 | 數據結構 | NULL | | 97001 | 李四 | 數據結構 | NULL | | 96001 | 劉軍 | 數據處理 | NULL | | 96001 | 劉軍 | C語言 | 86 | +-------+--------+--------------+-------+
排序:
select [ ] from <表名> order by <列名> [desc/asc];
mysql> select sno,sname from student order by sno; //預設為升序 +-------+--------+ | sno | sname | +-------+--------+ | 12001 | bgg | | 94001 | 山寨 | | 95001 | 李勇 | | 95002 | 劉晨 | | 95003 | 王敏 | | 95004 | 張立 | | 95005 | 張三 | | 96001 | 劉軍 | | 96004 | 芙蓉 | | 97001 | 李四 | +-------+--------+ mysql> select sno,sname from student order by sno asc; //asc 修飾為升序 +-------+--------+ | sno | sname | +-------+--------+ | 12001 | bgg | | 94001 | 山寨 | | 95001 | 李勇 | | 95002 | 劉晨 | | 95003 | 王敏 | | 95004 | 張立 | | 95005 | 張三 | | 96001 | 劉軍 | | 96004 | 芙蓉 | | 97001 | 李四 | +-------+--------+ 10 rows in set (0.05 sec) mysql> select sno,sname from student order by sno desc; //desc 修飾為降序 +-------+--------+ | sno | sname | +-------+--------+ | 97001 | 李四 | | 96004 | 芙蓉 | | 96001 | 劉軍 | | 95005 | 張三 | | 95004 | 張立 | | 95003 | 王敏 | | 95002 | 劉晨 | | 95001 | 李勇 | | 94001 | 山寨 | | 12001 | bgg | +-------+--------+
mysql> select sno,sname from student order by sno desc,sname asc; //先按sno降序 再按sname升序
+-------+--------+
| sno | sname |
+-------+--------+
| 97001 | 李四 |
| 96004 | 芙蓉 |
| 96001 | 劉軍 |
| 95005 | 張三 |
| 95004 | 張立 |
| 95003 | 王敏 |
| 95002 | 劉晨 |
| 95001 | 李勇 |
| 94001 | 山寨 |
| 12001 | bgg |
+-------+--------+
10 rows in set (0.05 sec)
選擇的between操作(在mysql/mariadb中是閉區間):
select * from <表名> where <列名> between 'a' and 'b';
mysql> select * from student where sno between '94001' and '96001'; +-------+--------+------+------+-------+ | sno | sname | ssex | sage | sdept | +-------+--------+------+------+-------+ | 94001 | 山寨 | 男 | 29 | CS | | 95001 | 李勇 | 男 | 20 | CS | | 95002 | 劉晨 | 女 | 19 | IS | | 95003 | 王敏 | 女 | 19 | MA | | 95004 | 張立 | 男 | 20 | IS | | 95005 | 張三 | 男 | 23 | CS | | 96001 | 劉軍 | 男 | 30 | IS | +-------+--------+------+------+-------+
//not between and
mysql> select * from student where sno not between '94001' and '96001';
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 12001 | bgg | M | 26 | CS |
| 96004 | 芙蓉 | 女 | 32 | CH |
| 97001 | 李四 | 男 | 26 | EN |
+-------+--------+------+------+-------+
mysql模糊查詢(LIKE)關鍵字:
% 替代一個或多個字元;
_ 僅替代一個字元;
[charlist] 字元列中的任何單一字元;
[!charlist] 或 [^charlist] 不在字元列中的任何單一字元;
//查詢sno以95開頭的學生信息 mysql> select * from student where sno like '95%'; +-------+--------+------+------+-------+ | sno | sname | ssex | sage | sdept | +-------+--------+------+------+-------+ | 95001 | 李勇 | 男 | 20 | CS | | 95002 | 劉晨 | 女 | 19 | IS | | 95003 | 王敏 | 女 | 19 | MA | | 95004 | 張立 | 男 | 20 | IS | | 95005 | 張三 | 男 | 23 | CS | +-------+--------+------+------+-------+ 5 rows in set (0.05 sec) //查詢sno以01結尾的學生信息 mysql> select * from student where sno like '%01'; +-------+--------+------+------+-------+ | sno | sname | ssex | sage | sdept | +-------+--------+------+------+-------+ | 12001 | bgg | M | 26 | CS | | 94001 | 山寨 | 男 | 29 | CS | | 95001 | 李勇 | 男 | 20 | CS | | 96001 | 劉軍 | 男 | 30 | IS | | 97001 | 李四 | 男 | 26 | EN | +-------+--------+------+------+-------+ 5 rows in set (0.05 sec)//查詢sno以01結尾的學生信息
//not like
mysql> select * from student where sno not like '%01';
+-------+--------+------+------+-------+
| sno | sname | ssex | sage | sdept |
+-------+--------+------+------+-------+
| 95002 | 劉晨 | 女 | 19 | IS |
| 95003 | 王敏 | 女 | 19 | MA |
| 95004 | 張立 | 男 | 20 | IS |
| 95005 | 張三 | 男 | 23 | CS |
| 96004 | 芙蓉 | 女 | 32 | CH |
+-------+--------+------+------+-------+
IN操作符:
IN操作符允許在WHERE子句中規定多個值;
// 查詢 sdept為MA,CS的信息 mysql> select * from student where sdept in ('MA','CS'); +-------+--------+------+------+-------+ | sno | sname | ssex | sage | sdept | +-------+--------+------+------+-------+ | 12001 | bgg | M | 26 | CS | | 94001 | 山寨 | 男 | 29 | CS | | 95001 | 李勇 | 男 | 20 | CS | | 95003 | 王敏 | 女 | 19 | MA | | 95005 | 張三 | 男 | 23 | CS | +-------+--------+------+------+-------+
2018-05-01 20:24:33