天天看點

MySQL之inner join、left join、right join、limit

一、建立兩個表

如圖:

emp表 dept表
MySQL之inner join、left join、right join、limit
MySQL之inner join、left join、right join、limit

二、inner join 、left join、right join執行個體

1.inner join(等值連接配接)隻傳回兩個表中聯結字段相等的行

例子1:e,d分别為emp,dept的别名(如果表名過長,友善使用)

MySQL之inner join、left join、right join、limit

例子2:

SELECT * FROM emp e INNER JOIN dept d ON e.deptno = d.deptno; 

等價于

 SELECT e.*,d.* FROM emp e,dept d WHERE e.deptno = d.deptno;

MySQL之inner join、left join、right join、limit

2.left join(左連接配接)  傳回包括左表中的所有記錄和右表中聯結字段相等的記錄

例子:SELECT e.ename,e.sal,e.empno,d.deptno,d.dname FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno;

MySQL之inner join、left join、right join、limit

3.right join(右連接配接)傳回包括右表中的所有記錄和左表中聯結字段相等的記錄

例子:SELECT e.ename,e.sal,e.empno,d.deptno,d.dname FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno;

MySQL之inner join、left join、right join、limit

4.LIMIT 子句可以被用于強制 SELECT 語句傳回指定的記錄數。LIMIT 接受一個或兩個數字參數。參數必須是一個整數常量。如果給定兩個參數,第一個參數指定第一個傳回記錄行的偏移量,第二個參數指定傳回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1): 為了與 PostgreSQL 相容,MySQL 也支援句法: LIMIT # OFFSET #。

例子:select sal from emp limit 0,10 查找1~10行記錄,0是從第一行開始,10是查找的長度

四.經典例子

例子1:

         從emp表與dept表中查出各部門名稱、各部門平均工資、各部門總工資、各部門人數、各部門最高工資、各部門最低工資。

方法如下:

MySQL之inner join、left join、right join、limit

  方法分析:

              首先,兩個表中有共同的deptno,先從emp表中查找出需要的記錄,組成新的一張虛拟表。

運作:

MySQL之inner join、left join、right join、limit

運作結果如下:

MySQL之inner join、left join、right join、limit

在用這張虛拟表與dept表查詢,最終運作結果為:

MySQL之inner join、left join、right join、limit

例子2:

查找emp表中總工資>8000,<10000的部門編号

運用文法:

WHERE 子句用來篩選 FROM 子句中指定的操作所産生的行。 

GROUP BY 子句用來分組 WHERE 子句的輸出。 

HAVING 子句用來從分組的結果中篩選行。 

方法如下:

MySQL之inner join、left join、right join、limit

運作如下 :

MySQL之inner join、left join、right join、limit

繼續閱讀