select查詢不但可以從一張表查詢資料,還可以從多張表同時查詢資料。查詢多張表的語法是:select * from 。
例如,同時從students表和classes表的「乘積」,即查詢資料,可以這麼寫:
-- from students, classes:
select * from students, classes;
這種一次查詢兩個表的資料,查詢的結果也是乙個二維表,它是students表和classes表的「乘積」,即students表的每一行與classes表的每一行都兩兩拼在一起返回。結果集的列數是students表和classes表的列數之和,行數是students表和classes表的行數之積。
這種多表查詢又稱笛卡爾查詢,使用笛卡爾查詢時要非常小心,由於結果集是目標表的行數乘積,對兩個各自有100行記錄的表進行笛卡爾查詢將返回1萬條記錄,對兩個各自有1萬行記錄的表進行笛卡爾查詢將返回1億條記錄。
你可能還注意到了,上述查詢的結果集有兩列id和兩列name,兩列id是因為其中一列是students表的id,而另一列是classes表的id,但是在結果集中,不好區分。兩列name同理
要解決這個問題,我們仍然可以利用投影查詢的「設定列的別名」來給兩個表各自的id和name列起別名:
-- set alias:
select
students.id sid,
students.name,
students.gender,
students.score,
classes.id cid,
classes.name cname
from students, classes;
注意,多表查詢時,要使用表名.列名這樣的方式來引用列和設定別名,這樣就避免了結果集的列名重複問題。但是,用表名.列名這種方式列舉兩個表的所有列實在是很麻煩,所以sql還允許給表設定乙個別名,讓我們在投影查詢中引用起來稍微簡潔一點:
-- set table alias:
select
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
from students s, classes c;
注意到from子句給表設定別名的語法是from , 。這樣我們用別名s和c分別表示students表和classes表。
多表查詢也是可以新增where條件的,我們來試試:
-- set where clause:
select
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
from students s, classes c
where s.gender = 'm' and c.id = 1;
這個查詢的結果集每行記錄都滿足條件s.gender = 'm'和c.id = 1。新增where條件後結果集的數量大大減少了。
小結使用多表查詢可以獲取m x n行記錄;
多表查詢的結果集可能非常巨大,要小心使用。
SQLServer多表聯查,多表分頁查詢
多表聯查 select p.s.sheng i.shi from dbo productrecordinfo 表名 p left join shenginfo s on p.shenginfo s.shengid 使用left join左連線 讓兩個表中的指定字段產生連線關係 left join s...
多表關聯查詢
表別名 多個表之間存在同名的列,則必須使用表明來限制列的引用 內連線 自連線 內連線就是關聯的兩張或多張表中,根據關聯條件,顯示所有匹配的記錄,匹配不上的,不顯示 自連線,就是把一張表取兩個別名,當做兩張表來使用,自己和自己關聯。select columns list from table name...
mysql 多表聯查 MySQL的多表聯查
今天是周二,我們一起來研究下mysql的多表聯查啊。或許你也知道,表之間的關係有 1對1 1對多 多對多。然後.1.巢狀查詢 乙個查詢的結果是另外sql查詢的條件 如 查詢stu表中年齡最大的是誰?mysql select from stu where age select max age from...