本文目錄
一、多表查詢
1.1 內連接
規則:返回兩個表的公共記錄。
語法:
1、select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段
(inner可以省略)
在MySQL的學習入門五的測試數據基礎上,再添加如下測試數據代碼:
create table stuMarks (
examNo char(7) primary key,
stuNo varchar(6) not null,
writtenExam int,
labExam int
);
insert into stumarks values ('001','01', 80, 60);
insert into stumarks values ('002','05', 90, 55);
insert into stumarks values ('003','08', 88, 89);
insert into stumarks values ('004','09', 90, 92);
例題:
2、select * from 表1, 表2 where 表1.公共字段=表2.公共字段;
1.2 左外連接
規則:以左邊的表爲準,右邊如果沒有對應的記錄,顯示null
語法:select * from 表1 left join 表2 on 表1.公共字段=表2.公共字段;
1.3 右外連接
規則:以右邊的表爲準,左邊如果沒有對應的記錄,顯示null
語法:select * from 表1 rightjoin 表2 on 表1.公共字段=表2.公共字段;
1.4 交叉連接
語法:select * from 表1 cross join 表2 on 條件字段;
返回笛卡爾積。
小結:
1、交叉連接如果沒有連接條件返回笛卡爾積
2、如果有連接條件和內連接是一樣的
1.5 自然連接
自動判斷條件連接,判斷的條件是依據同名字段
1、自然內連接(natural join)
2、自然左外連接(natural left join)
3、自然右外連接(natural right join)
小結:
1、表連接是通過同名字段來連接的
2、如果沒有同名字段則返回笛卡爾積
3、同名的連接值顯示一個,並且將該字段放在最前面
1.5.1 using
using用來指定連接字段,using也會做公共字段的優化,優化的規則和自然連接的是一樣的。
例:
1.6 練習
1、顯示地區及每個地區參加考試(writtenExam(筆試))的人數,並按人數降序排列:
2、顯示有學生參加考試的地區
3、顯示男生和女生的人數
方法一,分組查詢:
方法二,union:
方法三,直接寫條件:
4、顯示每個地區男生、女生、總人數
二、子查詢
語法:select * from 表1 where (子查詢)
外面的查詢稱爲父查詢
子查詢爲父查詢提供查詢條件
2.1 標量子查詢
特點:返回的結果是一個。
例題:查找筆試成績是88的學生:
2.2 列子查詢
如果標量子查詢的結果返回多條記錄,不能使用等於,用in 或 not in。
特點:列子查詢的返回結果是一列。
1、查找筆試成績大於80的同學:
2.3 行子查詢
特點:子查詢返回的結果是多個字段組成
1、找出語文成績最高的男生和女生
2.4 表子查詢
特點:將子查詢的結果作爲表
1、找出語文成績最高的男生和女生
注意:from後面跟的是數據源,如果將子查詢當成表來看,必須給結果集取別名。
2.5 exists 子查詢
1、如果筆試成績有人超過90分,就顯示所有學生信息:
2、如果筆試成績沒有人超過90分,就顯示所有學生信息:
在學習的MySQL的路上,如果你覺得本文對你有所幫助的話,那就請關注點贊評論三連吧,謝謝,你的肯定是我寫博的另一個支持。