跨幾個**查詢資訊時使用select * from 《表1> 《表2>
這種多表查詢又稱笛卡爾查詢,使用笛卡爾查詢時要非常小心,由於結果集是目標表的行數乘積,對兩個各自有100行記錄的表進行笛卡爾查詢將返回1萬條記錄,對兩個各自有1萬行記錄的表進行笛卡爾查詢將返回1億條記錄。
問題:下面是全部的**,現在需要查詢老師和課程的資訊?
兩個表原本為3* 3和2* 3,相乘後得到5*9的**。結果集的列數是兩表的列數之和,行數是兩表的行數之積。
將students.id
、course.c_id
、course.c_name
列設定別名為sid
、cid
、cname
;並且別名還可以在查詢過程中繼續使用,減少輸入的時間。
先看看列名是不是修改了:
select
student.s_id sid,
student.s_name ,
student.s_***,
course.c_id cid,
course.c_name cname
from student, course;
部分結果輸出:
select sid from
(select
student.s_id sid,
student.s_name ,
student.s_***,
course.c_id cid,
course.c_name cname
from student, course) as a;;
返回結果:**a中的sid這列。
注意,多表查詢時,要使用表名.列名這樣的方式來引用列和設定別名,這樣就避免了結果集的列名重複問題。但是,用表名.列名這種方式列舉兩個表的所有列實在是很麻煩,所以sql還允許給表設定乙個別名,讓我們在投影查詢中引用起來稍微簡潔一點:
select
s.s_id sid,
s.s_name ,
s.s_***,
c.c_id cid,
c.c_name cname
from student s, course c;
最後面定義 students 別名為s, classes別名為c。
注意!改了別名後就不能使用原來的名字,否則可能返回說找不到**。
select
student.s_id sid,
student.s_name ,
student.s_***,
course.c_id cid,
course.c_name cname
from students s, course c;
SQL 多表查詢
不同的 sql join inner join 內連線 如果表中至少有乙個匹配,也從左表返回所有的行 left join 左連線 即使右表中沒有匹配,也從右表返回所有的行 right join 右連線 即使左表中沒有匹配,也從右表返回所有的行 full join 全連線 只有其中乙個表中存在匹配也從...
SQL 多表查詢
join操作符 1.笛卡爾積,rxs 可直接轉換為sql語句 2.等值連線,記作 可直接轉換為sql語句 3.自然連線,記作 可轉換為sql語句 4.左外連線和右外連線的表示方法及轉換為sql 注意若多個關係有同名屬性,則用 關係名.屬性名 指出重名屬性 連線也可以與投影,選擇等結合使用。1.查詢選...
SQL 查詢(二 多表查詢)
使用外來鍵作為橋梁連線連個表進行查詢。笛卡爾積select e.fname,e.lname,d.name from employee e join department d 在from子句中包含了兩個表,並使用join關鍵字隔開。當查詢中沒有指定兩個表如何連線時會產生笛卡爾積,即兩張表的所有置換 1...