多表查詢
多表查詢實際上根據查詢要求先將兩個表連線起來,形成一張新錶,再在新錶中查詢出滿足條件的記錄多表查詢可分為連線查詢和子查詢。
一、 連線查詢(可分為外連線和內連線)關於外鏈結的幾點說明:
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』;
第二步:在xs表中找到相關同學的學號和姓名select 學號,姓名 from xs where 學號 in(『081101』,』081102』,』081103』,•••)
使用子查詢完成
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子查詢與多表查詢
1 什麼是子查詢 查詢中的查詢即為子查詢,一般使用括號將子查詢sql括起來,如下sql語句 select from select from user info users2 什麼時候用子查詢 當在查詢過程中需要知道乙個已知量的不確定資料時使用子查詢。select from address where...
MySQL子查詢,多表查詢
為了便於介紹我們建立以下表 create table user info id int 2 primary key,user name varchar 12 unique password varchar 15 not null real name varchar 8 not null age in...
mysql離散查詢 MySQL多表查詢與子查詢
多表查詢 多表查詢實際上根據查詢要求先將兩個表連線起來,形成一張新錶,再在新錶中查詢出滿足條件的記錄多表查詢可分為連線查詢和子查詢。a 左外連線包括兩個表中滿足條件的行,再加上在join子句中指出的左表中不滿足的行。b 不滿足鏈結條件的行在結果中顯示為null c.全外連線中參加連線的兩個表中的每一...