多表查詢
多表查詢實際上根據查詢要求先將兩個表連線起來,形成一張新錶,再在新錶中查詢出滿足條件的記錄多表查詢可分為連線查詢和子查詢。
a. 左外連線包括兩個表中滿足條件的行,再加上在join子句中指出的左表中不滿足的行。
b. 不滿足鏈結條件的行在結果中顯示為null;
c.全外連線中參加連線的兩個表中的每一條記錄都與另乙個表的每一條記錄連線,其結果集的記錄數是兩張表記錄數的積。
d.左右表是相對的,在語句中先出現的表稱為左表,後出現的稱為右表。
外連線:外連線可分為左外連線、右外連線、全外連線三種。
注意:外連線只限於兩個表中(」.」點表示屬於)
1).左外連線select xsl. , cjb. from xsl left outer join cjb on xsl.學號=cjb.學號;xs.表示學生表中的所有字段;
xs.學號表示xs表中的學號字段。select xsl.學號,xsl.姓名,cjb.學號,cjb.課程號,cjb.成績 from xsl left outer join cjb on xsl.學號=cjb.學號;
2).右外連線select xs. , cj. from xs right outer join cj on xs.學號=cj.學號;
3).全外連線select from xs,cj;select xsl. ,cj. from xsl,cj;如果xs表中有m條記錄,cj表有n條記錄全連線總共會生成m*n條記錄先將xs表弟一條記錄與cj表中每一條記錄進行連線,然後再用xs表的第二條記錄與成績表中的每一條記錄一一連線,直到學生表中所有記錄連線完。鏈結後生成的新錶的字段數是兩個表字段的和。
內連線:
內連線用於把兩個表連線成第三個表,在第三個表中僅包含哪些滿足連線條件的記錄行。注意:當某個欄位在連線的兩個表中都有時,要在字段前加「表名」,否則可省略表名例:
select xsl.姓名,kb.課程名,cjb.成績 from xsl,kb,cjb where xsl.學號=cjb.學號 and kb.課程號=cjb.課程號;
二、 子查詢
在查詢中,當乙個查詢的結果可以作為另乙個查詢的條件時,這個查詢稱作它的子查詢。sql允許select多層巢狀使用,用來表示複雜的查詢。例1:在xsgl資料庫中查詢出有206號課程的學生的姓名、學號。第一步:在cj表中查詢出有206號課程的同學的學號
select 學號 from cj where 課程=』206』;
使用子查詢完成
select 學號,姓名 from xs where 學號 in(select 學號 from cj where 課程號=』206』);
例2:查詢出選修了101號課程的同學的學號,專業和姓名
select 學號,姓名,專業 from xsl where 學號 in(select 學號 from cjb where 課程號='101');
例3:查詢出參加了離散數學考試的學生的學號和姓名。
select 課程號 from kb where 課程名=』離散數學』;
select 學號 from cjb where 課程號=』206』;
select 學號,姓名 from xsl where 學號 in(select 學號 from cjb where 課程號=206);
一步查詢:select 學號,姓名 from xsl where 學號 in(select 學號from cjb where 課程號=(select 課程號 from kb where 課程名=』離散數學』));
連線查詢:select xs.學號,姓名 from xs,kc,cj where xs.學號=cj.學號 and kc.課程號=cj.課程號 and 課程名=』離散數學』;
注意:1.子查詢只能輸出最外層中的字段,一般要輸出多個表中的字段時不使用子查詢,只能使用連線查詢;
2.一般情況下連線查詢可以代替子查詢。
mysql子查詢語句多列 MySQL 子查詢
對於下表,1.場景 查詢代課天數最多的老師的資訊。方法一 select from teacher order by days desc limit 1 該方法有漏洞 授課天數最多的老師實際上有兩位 hanna和luna。直接設定limit 1會限制只輸出1位老師。而實際我們不知道有幾個代課最多的老師...
MySQL多索引查詢選擇
mysql選擇索引 引入 我們知道我們乙個表裡面可以有多個索引的,那麼我們查詢資料的時候不指定索引,mysql就會幫我們自動選擇。既然是mysql程式幫我們自動選擇的那麼會不會有問題的呢?答案是會的,mysql的優化器也有bug,有時候選擇的索引並不是最優的。案例1假如一張表有10w的資料,有id主...
mysql多對多查詢 原生寫法
準備工作,1.建立表 create table if not exists users id integer not null auto increment,name varchar 255 not null,primary key id engine innodb charset utf8mb4 ...