jpi多表聯查 多表查詢

2021-10-12 15:43:27 字數 1573 閱讀 5250

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...