數(shù)據(jù)庫多表聯(lián)查和子查詢

第十三單元 多表聯(lián)查和子查詢

13.1 多表聯(lián)查

13.1.1 一對一

一張表的一條記錄一定只能與另外一張表的一條記錄進(jìn)行對應(yīng)知染,反之亦然肋僧。

有時候,為了業(yè)務(wù)控淡,或者避免一張表中數(shù)據(jù)量過大嫌吠,過復(fù)雜,在開發(fā)中會進(jìn)行一對一方式來設(shè)計表掺炭。

13.1.2 一對多(1方建主表(id為主鍵字段), 多方建外鍵字段)

一個實體的某個數(shù)據(jù)與另外一個實體的多個數(shù)據(jù)有關(guān)聯(lián)關(guān)系居兆, 一對多的關(guān)系在設(shè)計的時候,需要設(shè)計表

的外鍵竹伸。

1. 班級表和學(xué)生表設(shè)計



部門表和員工表設(shè)計


2. 創(chuàng)建數(shù)據(jù)庫表

constraint 約束

foreign key就是表與表之間的某種約定的關(guān)系,由于這種關(guān)系的存在簇宽,能夠讓表與表之間的數(shù)據(jù)勋篓,

更加的完整,關(guān)連性更強(qiáng)魏割。

foreign key語句的式例:FOREIGN KEY(Sno) REFERENCES Student(Sno)

注意:表的外鍵必須是另一張表的主鍵


//創(chuàng)建班級表

create table class(id int primary key auto_increment,name varchar(20));

//創(chuàng)建學(xué)生表

create table student(id int primary key auto_increment,name varchar(20),sex

varchar(20),class_id int,constraint foreign key(class_id) references

class(id));

//插入班級數(shù)據(jù)

insert into class values(1,'ceshiban');

insert into class values(2,'kaifa');

//插入學(xué)生數(shù)據(jù)

insert into student values(1,'zhangsan','nan',1);

insert into student values(2,'lisi','nan',2);

insert into student values(3,'jingjing','nan',2);

//聯(lián)查

select * from student where class_id=(select id from class where id=2);

補(bǔ)一個外鍵的概念(默認(rèn)是約束): 刪除主鍵信息時譬嚣,當(dāng)該主鍵字段值在外鍵表中存在時,該記錄是不能

刪除的钞它。---要把外鍵表是的相關(guān)信息刪除之后拜银,才能刪除殊鞭。


13.3.3 多對多( 3個表= 2個實體表 + 1個關(guān)系表 )

一個實體的數(shù)據(jù)對應(yīng)另外一個實體的多個數(shù)據(jù),另外實體的數(shù)據(jù)也同樣對應(yīng)當(dāng)前實體的多個數(shù)據(jù)尼桶。

一個學(xué)生可以有多個老師操灿,一個老師可以教多個學(xué)生

解決方案:創(chuàng)建一個中間表,專門用來維護(hù)多表之間的對應(yīng)關(guān)系泵督,通常是能夠唯一標(biāo)識出數(shù)據(jù)的字段

(主鍵)

create table teacher(id int primary key,name varchar(100));

create table student (id int primary key,name varchar(100));

create table teacher_student(teacher_id int,student_id int,constraint foreign

key(teacher_id) references teacher(id),constraint foreign key(student_id)

references student(id));

insert into teacher values(1,'梁老師');

insert into teacher values(2,'李老師');

insert into student values(1,”張三”);

insert into student values(2,”李四”);

insert into teacher_student values(1,1);

insert into teacher_student values(1,2);

insert into teacher_student values(2,1);

insert into teacher_student values(2,2);

//查詢李老師所教的學(xué)生

select id from teacher where name=’李老師’

select student_id from teacher_student where teacher_id=id

select * from student where id in(select student_id from teacher_student where

teacher_id =(select id from teacher where name='李老師'));

//查詢張三的所有老師

select * from teacher where id in(select teacher_id from teacher_student where

student_id=(select id from student where name='張三'));

13.2 連表查詢

分類:內(nèi)連接趾盐、外連接、交叉連接

初始定義表結(jié)構(gòu)


create table customer(id int primary key auto_increment,name varchar(20),city

varchar(20));

create table orders(id int primary key auto_increment,good_name varchar(20),price

float(8,2),customer_id int);

insert into customer (name,city) values('李老師','東北');

insert into customer (name,city) values('崔老師','山西');

insert into customer (name,city) values('張老師','內(nèi)蒙');

insert into customer (name,city) values('閆老師','天津');

insert into orders(good_name,price,customer_id) values('電腦',59,1);

insert into orders(good_name,price,customer_id) values('筆記本',88,2);

insert into orders(good_name,price,customer_id) values('吹風(fēng)機(jī)',99,1);

insert into orders(good_name,price,customer_id) values('香水',300,3);

insert into orders(good_name,price,customer_id) values('牛奶',100,6);

13.2.1 交叉查詢

交叉查詢小腊,又叫笛卡爾積查詢救鲤,會將左表和右表的信息,做一個乘積將所有信息查詢出來秩冈,會產(chǎn)生臨時

表本缠,比較占用內(nèi)存,生成的記錄數(shù)=表1 X表2


select * from customer,orders;

select * from customer cross join orders;

13.2.2 內(nèi)連接查詢

內(nèi)連接入问,inner join on 查詢兩張表丹锹,設(shè)定條件,將兩張表中對應(yīng)的數(shù)據(jù)查詢出來

不會產(chǎn)生笛卡爾積队他,不會產(chǎn)生臨時表卷仑,性能高


select * from customer c inner join orders o on c.id=o.customer_id;

select * from customer,orders where customer.id=orders.customer_id;

select * from customer c,orders o where c.id=o.customer_id;

13.2.3 左外連接

左外連接 left join on 設(shè)定條件,將兩張表對應(yīng)的數(shù)據(jù)查詢出來麸折,同時將左表自己沒有關(guān)聯(lián)的數(shù)據(jù)也查

詢出來

注意:join前面是左锡凝,后面是右


select * from customer c left join orders o on c.id=o.customer_id;

13.2.4 右外連接

右外連接 right join on 設(shè)定條件,將兩張表對應(yīng)的數(shù)據(jù)查詢出來垢啼,同時將右表自己沒有關(guān)聯(lián)的所有數(shù)據(jù)

查詢出來


select * from customer c right join orders o on c.id=o.customer_id;

練習(xí) 聯(lián)合查詢


select * from customer left join orders on customer.id=orders.customer_id

having price>20;


13.3 MySQL圖形化工具navicat

13.3.1 安裝介紹

MySQL常見的圖形化工具

13.3.2. Navicat工具使用

1. 鏈接窜锯,mysql,輸入用戶名芭析,密碼


2.新建庫锚扎,鼠標(biāo)點擊右鍵


3.新建表


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市馁启,隨后出現(xiàn)的幾起案子驾孔,更是在濱河造成了極大的恐慌,老刑警劉巖惯疙,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翠勉,死亡現(xiàn)場離奇詭異,居然都是意外死亡霉颠,警方通過查閱死者的電腦和手機(jī)对碌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿偎,“玉大人朽们,你說我怎么就攤上這事怀读。” “怎么了骑脱?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵菜枷,是天一觀的道長。 經(jīng)常有香客問我惜姐,道長犁跪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任歹袁,我火速辦了婚禮坷衍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好拭荤,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迁杨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凄硼。 梳的紋絲不亂的頭發(fā)上铅协,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音摊沉,去河邊找鬼狐史。 笑死,一個胖子當(dāng)著我的面吹牛说墨,可吹牛的內(nèi)容都是我干的骏全。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼尼斧,長吁一口氣:“原來是場噩夢啊……” “哼姜贡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棺棵,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤楼咳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后烛恤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體母怜,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年棒动,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾添。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡船惨,死狀恐怖柜裸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粱锐,我是刑警寧澤疙挺,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站怜浅,受9級特大地震影響铐然,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恶座,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一搀暑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跨琳,春花似錦自点、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至溅潜,卻和暖如春术唬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滚澜。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工粗仓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人博秫。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓潦牛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挡育。 傳聞我的和親對象是個殘疾皇子巴碗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 為什么軟件測試工程師還需要學(xué)習(xí)數(shù)據(jù)庫以及開發(fā)方面的知識? 測試工程師的目的是找出軟件的不足即寒,并告訴開發(fā)工程師...
    睿智的少年閱讀 574評論 0 0
  • 一橡淆、數(shù)據(jù)庫概述 1.為什么軟件測試工程師還需要學(xué)習(xí)數(shù)據(jù)庫以及開發(fā)方面的知識? ●測試工程師在測試軟件過程中母赵,不僅僅...
    AYang閱讀 255評論 0 0
  • 一逸爵、數(shù)據(jù)庫概述 1.為什么軟件測試工程師還需要學(xué)習(xí)數(shù)據(jù)庫以及開發(fā)方面的知識? 測試工程師的目的是找出軟件的不足凹嘲,并...
    淅平閱讀 219評論 0 0
  • 第 第1 章 數(shù)據(jù)庫章節(jié)1.1 選擇1.1.1 Having 子句的作用是(C) 师倔。A.查詢結(jié)果的分組條件 B.組...
    亮仔_c1b5閱讀 1,792評論 0 0
  • 數(shù)據(jù)庫的概述 1.數(shù)據(jù)庫的作用:倉庫,存儲數(shù)據(jù)周蹭。 2.關(guān)系型的數(shù)據(jù)庫趋艘,保存實體與實體之間的關(guān)系疲恢。 3.常見的數(shù)據(jù)庫...
    三萬_chenbing閱讀 899評論 0 3