MySQL 進階6: 連接查詢 (多表連接) : 等值連接/非等值連接 /左右全連接/內連接


#進階6: 連接查詢 (多表連接) : 等值連接/非等值連接 /左右全連接/內連接
/*
  含義: 當查詢的字段來自於多個表時, 就會用到連接查詢
  
  一: sql 92標准 :等值連接 ,(#內連接)
    1.可以為表區別名,區分多個重名的字段
    2.為表使用別名后,只能使用別名去"select"!
    
  二:非等值連接
    1.where 列名 BETWEEN ... AND ...
  三:自連接 :自己連接自己
  
  四:左 / 右 外連接
    1.應用場景: 用於查詢一個表有內容,另一個表沒有內容
        如果從表中有和它匹配的,則顯示匹配的值
        如果從表中沒有和它匹配的,則顯示null
    2.左外連接, left OUTER join   (左邊的是主表)
        on 連接關系
        where 篩選條件
    3.右外連接,right OUTER join   (右邊的是主表)
        on 連接關系
        where 篩選條件

   五:#全外連接 = 內連接的結果 + 表1中有但表2中沒有的 + 表2中有的但表1中沒有的
    #MYSQL不支持!!    Oracle數據庫

    六:#交叉連接
    實現笛卡爾成績,實現兩個表的任意兩項進行連接!
    
    七:sql 92 和 sql 99
    
*/

#查詢對偶姓名匹配

SELECT beauty.`name`,boys.`boyName`
FROM beauty,boys
WHERE beauty.`boyfriend_id`=boys.`id`;

#案例2: 查詢員工名和對應的部門名

SELECT last_name,department_name
FROM employees,departments
WHERE employees.`department_id`=departments.department_id;

#3.查詢員工名/工種號/工種名 #使用別名
SELECT e.`last_name` ,e.`job_id`,j.`job_title`
FROM  employees e,jobs j
WHERE e.`job_id`=j.`job_id`;
      
#4.查詢有獎金的員工名和部門名
SELECT e.`last_name`,e.`department_id`
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`;

#5.查詢每個工種的工種名和員工的個數, 並且按員工個數排序
SELECT j.`job_title`,COUNT(*)
FROM jobs j,employees e
WHERE j.`job_id`=e.`job_id`
GROUP BY j.`job_title`
ORDER BY COUNT(*) DESC;

#2 / 非等值連接

#案例1:查詢員工的工資和工資級別
SELECT salary,grade_level
FROM employees e,job_grades g
WHERE e.salary BETWEEN g.`lowest_sal` AND g.`highest_sal`;

#3 / 左 . 右 外連接
    #案例1:查詢女生的男朋友不在boys 表中的 女生   -- [左外連接]
SELECT b.name,bo.* 
FROM beauty b  
LEFT OUTER JOIN boys bo
ON b.`boyfriend_id`=bo.`id`
WHERE bo.`id` IS NULL ;

    #案例2: 查詢哪個部門沒有員工
SELECT  d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.`department_id`=e.`department_id`
WHERE e.employee_id IS NULL;

#全外連接 = 內連接的結果 + 表1中有但表2中沒有的 + 表2中有的但表1中沒有的
    #MYSQL不支持!!

#交叉連接
SELECT b.*,bo.*
FROM beauty b
CROSS JOIN boys bo;

#內連接

SELECT *
FROM beauty b
INNER JOIN boys
ON b.`boyfriend_id`=boys.`id`;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM