十 連線查詢

2021-10-23 10:52:00 字數 2255 閱讀 1712

10.1、sql92語法

連線查詢:也可以叫跨表查詢,需要關聯多個表進行查詢

(1) 顯示每個員工資訊,並顯示所屬的部門名稱

以上輸出,不正確,輸出了56條資料,其實就是兩個表記錄的乘積,這種情況我們稱為:「笛卡兒乘積」,出現錯誤的原因是:沒有指定連線條件

(2)指定連線條件

以上結果輸出正確,因為加入了正確的連線條件

以上查詢也稱為「內連線」,只查詢相等的資料(連線條件相等的資料)

(3)取得員工和所屬的領導的姓名

以上稱為「自連線」,只有一張表連線,具體的查詢方法,把一張表看作兩張表即可,如以上示例:第乙個表emp e**了員工表,emp m代表了領導表,相當於員工表和部門表一樣.

10.2、sql99語法

(內連線)顯示薪水大於2000的員工資訊,並顯示所屬的部門名稱

採用sql92語法:

select e.ename, e.sal, d.dname from emp e, dept d where e.deptno=d.deptno and  e.sal > 2000;

採用sql99語法:

select e.ename, e.sal, d.dname from emp e join dept d on e.deptno=d.deptno where e.sal>2000;

或select e.ename, e.sal, d.dname from emp e inner join dept d on e.deptno=d.deptno where e.sal>2000;

在實際中一般不加inner關鍵字

sql92語法和sql99語法的區別:99語法可以做到表的連線和查詢條件分離,特別是多個表進行連線的時候,會比sql92更清晰.

(外連線)顯示員工資訊,並顯示所屬的部門名稱,如果某乙個部門沒有員工,那麼該部門也必須顯示出來

右連線: 連線右邊,主表在左

select e.ename, e.sal, d.dname from emp e right join dept d on e.deptno=d.deptno;

左連線:連線左邊,主表在右

select e.ename, e.sal, d.dname from dept d left join emp e on e.deptno=d.deptno;

以上兩個查詢效果相同

總結:* 表1  inner join  表2  on  關聯條件

*  做連線查詢的時候一定要寫上關聯條件

*  inner 可以省略

2、外連線

*左外連線

* 表1  left  outer  join  表2  on  關聯條件

*  做連線查詢的時候一定要寫上關聯條件

*  outer  可以省略

*右外連線

* 表1  right  outer  join  表2  on  關聯條件

*  做連線查詢的時候一定要寫上關聯條件

*  outer  可以省略

*左外連線(左連線)和右外連線(右連線)的區別:

*左連線以左面的表為準和右邊的表比較,和左表相等的不相等都會顯示出來,右表符合條件的顯示,不符合條件的不顯示

*右連線恰恰相反,以上左連線和右連線也可以加入outer關鍵字,但一般不建議這種寫法,

mysql 幾十連線 mysql的幾種連線方式

下面是例子分析 表a記錄如下 aid anum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表b記錄如下 bid bname 1 2006032401 2 2006032402 3 2006032403 4 20060324...

13 連線查詢

假設 a 表中有3條記錄,b表中有 4 條記錄 那麼,語句select from a,b 會將a,b兩張表的資料交叉拼接起來,形成 3 4 12 條記錄的結果集,此結果集叫做笛卡爾積。ora 00918 未明確定義列 改進辦法 明確列的所屬 select empno,ename,emp.deptno...

004 連線查詢

再大多數的情況下,我們都需要進行連線查詢.笛卡爾積的產生 這個就是多表查詢的的最初結果集,那麼以後我們需要作的就是從結果集中篩選出需要的結果集.篩選的方式不同,導致sql的效率不同.篩選的方式就是加入連線標準.等值連線 select 字段 from 表1 表2 where 連線條件.eg 查詢員工名...