我們使用普通方式查詢,格式如:
select 列名其中,列出兩個表中都有的列(連線列)時,要使用表名.列名的方式否則會報錯。from 表1,表2
[where] 表1.連線列=表2.連線列(通常是主鍵)
當我們不使用where時,得到的結果是乙個笛卡爾積,如:
select ename,dept.deptno,dname from emp,dept;結果:
我們看到員工命名不是其它部門的,卻重複的列出了該員工在其他部門的記錄,這是沒有必要的。
所以我們使用:where 表1.表2的主鍵 = 表2.表2的主鍵 的方式消除冗餘記錄。這個例子中是:where emp.deptno = dept.deptno;效果如下:
交叉連線
交叉連線語法示例
select ename,emp.deptno,dname它與普通連線且沒有where過濾的效果一致,都是兩個表關於連線列的笛卡爾積。from emp
cross join dept;
自然連線
需要兩個表有同名字段(相同的列),根據所有的同名字段進行等值連線(所有同名字段的值相等)。
自然連線語法示例
select ename,deptno,dname它的效果與普通連線跟上 'where 表1.表2的主鍵 = 表2.表2的主鍵' 的效果一致from emp
natural join dept;
using連線
用在什麼時候呢?答:用在不希望參照兩個表的所有同名列進行等值連線時(自然連線就是這麼做的)。
語法:
select 列名1,...on子句from 表名1
join 表名2
using(同名列1,同名列2);
select ename,dname from emp join dept on emp.deptno=dept.deptno where emp.deptno=30;上面兩句結果一致。select ename,dname from emp join dept on (emp.deptno=dept.deptno and emp.deptno=30);
外連線外連線省略了outer關鍵字,寫不寫都成。
左外連線:select 內容 from 表名 left outer join 表名 on 篩選條件
右外連線:select 內容 from 表名 right outer join 表名 on 篩選條件
全外連線:select 內容 from 表名 fill outer join 表名 on 篩選條件
自連線查詢員工姓名,工作,薪資,以及上級領導姓名
四 SQL99外連線
外連線除了能顯示滿足連線條件的資料以外,還用於顯示不滿足連線條件的資料 left outer join,表示左外連線,可以顯示左表中不滿足連線條件的資料 select e.ename,e.job,d.deptno,d.dname,d.loc from dept d left join emp e o...
oracle筆記三(Sql99語法)
1.交叉連線cross join 相當於笛卡爾積效果 select e.ename,d.dname from emp e cross join dept d 2.自然連線 natural join select e.ename,d.dname from emp e natural join dept...
sql99語法 左 右 外連線
二 外連線 應用 查詢乙個表中有,另乙個表沒有的記錄 特點 1.外連線的查詢結果為主表中的所有記錄 如果從表中有和它匹配的,則顯示匹配的值 如果從表中沒有和他匹配的,則顯示null 外連線查詢結果 內連線 主表中有而從表中沒有的記錄 2 左外連線 left join 左邊的是主表 右外連線 righ...