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 查詢員工名...