多表操作dql
表之間的關係
合併結果集
連線查詢
子查詢表與表的關係
一對多:主外來鍵關聯並且外來鍵也是獨一無二
例如:一夫一妻制
husband_id
husband_name1張三
2李四3王五
wife_id
wife_name
husband_id1孫七
12周八2
3吳九3 wife表的外來鍵husband_id與husband表對應,對於一對一來說此外鍵不能重複
一對多:外來鍵可重複,設定外來鍵的表就是多的一方
student_id
student_name1張三
2李四3王五
textbook_id
textname
student_id
01數學書102
語文書1
03英語數111
數學書2
12語文書213
英語數2
21數學書322
語文書3
03英語數
3 乙個學生可以擁有多本書,但他的書只屬於他
多對多:兩表都需要重複,因此需要建立乙個關係表來設定外來鍵實現
student_id
student_name1張三
2李四course_id
course_name1語文
2數學student_id
course_id11
1221
22學生有多門課,乙個課也有多個學生,用第三張來設定外來鍵就可以實現這種多對多的關係
合併結果集
什麼是合併結果集
合併結果集的兩種方式
idselect * from 表1
union
select * from 表2;
select * from 表1
union
allselect * from 表2;
/*
兩個表的列數和資料型別要相同,
最終顯示的列名是表1的欄位名
*/
name1張三
2李四c_id
c_name3王五
4趙六合並後
idname1張三
2李四3王五
4趙六連線查詢
什麼是連線查詢
什麼是笛卡爾集
表1:id
name
1張三2李四
表2:class_id
class_name
student_id1一班
12二班2
執行:select * from 表1,表2;
結果:idname
class_id
class_name
student_id1張三
1一班12
李四1一班1
1張三2二班
22李四2
二班2
多表聯查
篩選想要的資料
select * from 表1,表2 where 表1.id = 表2.student_id;
idname
class_id
class_name
student_id1張三
001一班12
李四002二班2
內連線
外連線右連線/* 等值連線,篩選出主外來鍵對應相等的 */
select * from 表1 inner join 表2 on 表1.id = 表2.student_id;
/* 多表 */
select * from 表1 ,表2 ,表 3
where 表1.*** = 表2.***
and 表2.*** = 表3.***;
/*------------------------*/
select * from 表1
inner join 表2 on 表1.*** = 表2.***
inner join 表3 on 表2.*** = 表3.***
/* 非等值連線,篩選連線表時用不等號關聯 */
select * from 表1
inner join 表2 on 表1.*** = 表2.***
where 表1.*** > 表2.***
/*
自連線:當一張表中每行的記錄與其他記錄可能存在一定的關係
這個時候我們想要去查詢,與指定記錄有關係的所有記錄。
就需要自連線,當成兩張表然後對應關係連線使用
*/
select * from 表 a inner join 表 b
on a.*** = *** and a.yyy = b.***;
自然連線
student
student_id
name1張三
2李四3王五
score
course
score
student_id
語文501語文
602語文70
3 執行:select * from student natural join score;
student_id
name
course
score1張三
語文502李四
語文603王五
語文70
子查詢
什麼是子查詢
子查詢出現的位置
select * from student
where score > (select score from student where name = "張三");
勤學如春起之苗,不見其增,只有所長。輟學如磨刀之石,不見其增,日有所虧
MySql語句 DQL 多表查詢
子查詢1.出現的位置 2.條件 分類 兩表上下連線,共同顯示 分類 內連線 兩表相乘 笛卡爾積 笛卡爾積 外連線外連線分主次,左外以左為主,右外以右為主,主表的每一項都會顯示,無論是否滿足條件!當不滿足條件時,次表使用null來補位!左外連線左外 select from 表1 別名1 left ou...
JdbcTemplate的DQL操作公升級
新建乙個handler包,定義處理器的介面 結果集處理器,規範處理結果集的方法名稱 public inte ce resultsethandlert作為一種未知型別,表示處理完結果集,最後結果集就是該型別,型別由該方法的呼叫者決定 在daoimpl類中,實現上述介面 把結果集中的每一行資料封裝成pr...
mysql的多表操作 MySQL多表操作
交叉連線 交叉連線 cross join 又稱笛卡爾連線 cartesian join 或叉乘 product 它是所有型別內連線的基礎。它把表看作是行記錄的集合,交叉連線即返回這兩個集合的笛卡爾積。這其實等價於內連線的連線條件始終為 真 或連線條件不存在。笛卡爾積引用自數學,在數學中,兩個集合x和...