MySql高級(jí)之常見的Join查詢(一)

MySql的存儲(chǔ)引擎介紹 :

常用的MySql存儲(chǔ)引擎只有兩個(gè):MyISAM以及InnoDB。

兩個(gè)存儲(chǔ)引擎的區(qū)別:

索引優(yōu)化分析:

使用Mysql可能遇到的問題:性能下降驳庭,Sql慢了,執(zhí)行的時(shí)間很長嫂沉,等待的時(shí)間很長抖拴。

那么就可能是第一種我們的sql查詢寫的很爛意述,第二種索引已經(jīng)失效了喘落,第三種關(guān)聯(lián)的查詢太多的join以及第四種服務(wù)器調(diào)優(yōu)各個(gè)參數(shù)的設(shè)置過小等導(dǎo)致懈叹。

第一種:sql查詢寫的可能很爛,各種連接各種子查詢導(dǎo)致用不上索引或者是沒建索引而導(dǎo)致Sql跑的賊慢

第二種:索引失效缤削,可能是建了索引沒有用上窘哈,也可能是沒有建過索引而導(dǎo)致。

索引有兩種:一種叫單值索引亭敢,一種叫復(fù)合索引滚婉。

????????????????? 單值索引:只在一個(gè)表中的一個(gè)字段建索引。

????????????????也即:create index idx_user_name on user(name);

????????????????復(fù)合索引:在一個(gè)表中的多個(gè)字段建索引帅刀。

????????????????也即:create index idx_user_name_age on user(name,age);

第三種: 在傳統(tǒng)企業(yè)中让腹,可能出現(xiàn)十幾張表各種join,較為復(fù)雜扣溺,也可能導(dǎo)致性能下降骇窍,Sql變慢的現(xiàn)象。

第四種:服務(wù)器的參數(shù)設(shè)置的不合理娇妓,不恰當(dāng)也可能導(dǎo)致性能下降像鸡,Sql變慢的現(xiàn)象。


常用的Join查詢:

Join最常見的就是內(nèi)連接哈恰,左連接,外連接志群,交叉連接着绷,笛卡爾積以及全連接。

最全的Join圖:

上圖全解釋:

1.內(nèi)連接:這兩張表中間只有共有的部分锌云。

SELECT * FROM TABLE A A INNER JOIN TABLE B B ON A.key = B.Key;



2.左全連接:兩張表LEFT JOIN荠医,A表的全部,A和B的共有加上A的獨(dú)有。

SELECT * FROM TABLE A A LEFT JOIN TABLE B B ON A.key = B.key;


3.右全連接:兩張表RIGHT JOIN彬向,B表的全部兼贡,A和B的共有加上B的獨(dú)有。

SELECT * FROM TABLE A A RIGHT JOIN TABLE B B ON A.key = B.key;


4.左連接:兩張表LEFT JOIN娃胆,A表中只占它自己的部分遍希,不與B表進(jìn)行共享,那么B就是NULL里烦。

SELECT * FROM TABLE A A LEFT JOIN TABLE B B ON A.Key = B.Key WHERE B.Key IS NULL;


5.右連接:兩張表RIGHT JOIN凿蒜,B表中只占它自己的部分,不與A表進(jìn)行共享胁黑,那么A就是NULL废封。

SELECT * FROM TABLE A A RIGHT JOIN TABLE B B ON A.Key = B.Key WHERE A.Key IS NULL;


6.全連接:兩張表FULL JOIN 全連接。

SELECT * FROM TABLE A A FULL JOIN TABLE B B ON A.Key = B.key;


7.左右連接:兩張表沒有共有部分丧蘸,左右獨(dú)立連接漂洋。

SELECT * FROM TABLE A A FULL OUTER JOIN TABLE B B ON A.Key = B.Key WHERE A.Key IS NULL ON B.Key IS NULL;


7種Join Sql案例編寫:

1.建表測試:

CREATE TABLE `tbl_dept` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`deptName` VARCHAR(30) DEFAULT NULL,

`locAdd` VARCHAR(40) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `tbl_emp` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(20) DEFAULT NULL,

`deptId` INT(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `fk_dept_id` (`deptId`)

#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `tbl_dept` (`id`)

) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);

INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);

INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);

INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);

INSERT INTO tbl_dept(deptName,locAdd) VALUES('FD',15);

INSERT INTO tbl_emp(NAME,deptId) VALUES('z3',1);

INSERT INTO tbl_emp(NAME,deptId) VALUES('z4',1);

INSERT INTO tbl_emp(NAME,deptId) VALUES('z5',1);

INSERT INTO tbl_emp(NAME,deptId) VALUES('w5',2);

INSERT INTO tbl_emp(NAME,deptId) VALUES('w6',2);

INSERT INTO tbl_emp(NAME,deptId) VALUES('s7',3);

INSERT INTO tbl_emp(NAME,deptId) VALUES('s8',4);

INSERT INTO tbl_emp(NAME,deptId) VALUES('s9',51);

2.查看部門表以及員工表:

3.Join圖對(duì)應(yīng)的Sql案例:

1).根據(jù)下圖的“內(nèi)連接” 的意思,在員工表以及部門表中寫出相應(yīng)的sql語句力喷,也即:

select * from tal_emp a inner join tal_dept b on a.deptId = b.id;

得出最終的結(jié)果:

2).根據(jù)下圖的 左連接"全A氮发,A和B的共有加上A的獨(dú)有" 的意思,在員工表以及部門表中寫出相應(yīng)的sql語句冗懦,也即:

select * from tal_emp a left join tal_dept b on a.deptId = b.id ;

得出最終的結(jié)果:

3).根據(jù)下圖的 右連接"全B爽冕,A和B的共有加上B的獨(dú)有" 的意思,在員工表以及部門表中寫出相應(yīng)的sql語句

select * from tbl_emp a right join tbl_dept b on a.deptId = b.id;

得出最終的結(jié)果:

4).根據(jù)下圖的 左連接 "A獨(dú)占披蕉,不與B共享" 的意思颈畸,在員工表以及部門表中寫出相應(yīng)的sql語句

select * from tbl_emp a left join tbl_dept b on a.deptId = b.id where b.id is null;

得出最終的結(jié)果:

5.根據(jù)下圖的 右連接 "B獨(dú)占,不與A共享" 的意思没讲,寫出相應(yīng)的sql語句眯娱。

select * from tbl_emp a right join tbl_dept b on a.deptId = b.id where a.deptId is null;

得出最終的結(jié)果:

6.全連接:兩張表FULL JOIN 全連接。

select * from tbl_emp a left join tbl_dept b on a.deptId = b.id unionselect * from tbl_emp a right join tbl_dept b on a.deptId = b.id;

得出最終的結(jié)果:

7.左右連接:兩張表沒有共有部分爬凑,左右獨(dú)立連接徙缴。

select * from tbl_emp a left join tbl_dept b on a.deptId = b.id where b.id is null unionselect * from tbl_emp a right join tbl_dept b on a.deptId = b.id where a.deptId is null;

得出最終的結(jié)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嘁信,隨后出現(xiàn)的幾起案子于样,更是在濱河造成了極大的恐慌,老刑警劉巖潘靖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穿剖,死亡現(xiàn)場離奇詭異,居然都是意外死亡卦溢,警方通過查閱死者的電腦和手機(jī)糊余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門秀又,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贬芥,你說我怎么就攤上這事吐辙。” “怎么了蘸劈?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵昏苏,是天一觀的道長。 經(jīng)常有香客問我昵时,道長捷雕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任壹甥,我火速辦了婚禮救巷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘句柠。我一直安慰自己浦译,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布溯职。 她就那樣靜靜地躺著精盅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谜酒。 梳的紋絲不亂的頭發(fā)上叹俏,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音僻族,去河邊找鬼粘驰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛述么,可吹牛的內(nèi)容都是我干的蝌数。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼度秘,長吁一口氣:“原來是場噩夢啊……” “哼顶伞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剑梳,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤唆貌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阻荒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挠锥,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年侨赡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡羊壹,死狀恐怖蓖宦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情油猫,我是刑警寧澤稠茂,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站情妖,受9級(jí)特大地震影響睬关,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毡证,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一电爹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧料睛,春花似錦丐箩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至居扒,卻和暖如春概漱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喜喂。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工瓤摧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夜惭。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓姻灶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诈茧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子产喉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號(hào)usernam...
    落葉寂聊閱讀 1,081評(píng)論 0 0
  • 1. 了解SQL 1.1 數(shù)據(jù)庫基礎(chǔ) ? 學(xué)習(xí)到目前這個(gè)階段敢会,我們就需要以某種方式與數(shù)據(jù)庫打交道曾沈。在深入學(xué)習(xí)MyS...
    鋒享前端閱讀 1,071評(píng)論 0 1
  • 筆記: 一、聚合函數(shù):計(jì)數(shù) 最大值 最小值 平均數(shù) 求和 1.計(jì)數(shù) COUNT() 忽略NULL值 方式1:COU...
    鳳之鳩閱讀 5,213評(píng)論 0 1
  • 假期說完就完,又到了開工的日子吏垮,很多人開始不適應(yīng)障涯,整天呆在辦公室罐旗,是不是覺得腿部和臀部都特別僵硬呢? 今天來學(xué)學(xué)這...
    Rebecca小零閱讀 308評(píng)論 0 0
  • 邀花紅燈酒下唯蝶, 老牛想吃嫩草九秀。 可笑! 可笑粘我! 鮮花這般俊俏, 豈能任他糟蹋征字。 放手都弹! 放手! 留得鮮花貞潔匙姜, 不...
    王成元閱讀 339評(píng)論 8 8