SQL教程——连接查询之SQL99标准
本教程中所使用的數據庫的建表語句都在“SQL教程——索引”這篇文章中,點擊鏈接直達:索引&建表語句
摘要:本文主要介紹SQL99標準的連接查詢
?
SQL99標準
語法:
? ? select?查詢列表
? ? from?表1?別名 【鏈接類型】
? ? join? ?表2 別名
? ? on?鏈接條件
? ? 【where?篩選條件】
? ? 【group?by?分組】
? ? 【having?篩選條件】
? ? 【order?by?排序】
?
分類:
內連接(※)inner
外連接
左外(※):left【outer】
右外(※):right【outer】
全外:full【outer】
交叉連接:cross
?
1、內連接
語法:
? ? select?查詢列表
? ? from?表1?別名
? ? inner?join?表2?別名
? ? on?鏈接條件
?
分類:
等值連接
非等值連接
自連接
特點:
-  添加排序、分組、篩選。 
-  inner可以省略。 
-  篩選條件放在where后面,連接誒條件放在on后面,提高分離性,便于閱讀。 
-  inner?join鏈接和sql92語法中的的等值連接效果是一樣的。 
?
?
#1、等值連接
#案例1:查詢員工名、部門名select last_name, department_namefrom employees einner join departments don e.department_id = d.department_id;#2、查詢名字中包含e的員工名和工種名(添加篩選)select last_name, job_titlefrom employees einner join jobs jon j.job_idwhere e.last_name like '%e%';#3、查詢部門個數>3的城市名和部門個數,(分組+篩選)select city, count(*)from departments dinner join locations lon d.location_id= l.location_idgroup by cityhaving count(*) > 3;#4、查詢哪個部門的員工個數>3的部門名和員工個數,并按照個數降序(添加排序)select department_name, count(*)from employees einner join departments don e.department_id = d.department_idgroup by department_namehaving count(*) > 3order by count(*) desc;#5、查詢員工名、部門名、工種名,并按部門名降序select last_name, department_name, job_titlefrom employees einner join departments d on e.department_id = d.department_idinner join jobs j on e.job_id = j.job_idorder by department_name desc;#2、非等值連接
#查詢員工的工資級別select last_name, grade_levelfrom employees ejoin job_grades jon e.salary between j.lowest_sal and j.highest_sal;#查詢員工工資級別個數>2的級別個數,并按工資級別排序select count(*), grade_levelfrom employees ejoin job_grades jon e.salary between j.lowest_sal and j.highest_salgroup by grade_levelhaving count(*) > 2order by grade_level desc;#3、自連接
#查詢員工的名字、上級的名字select e.last_name?員工, m.last_name?上級員工from employees einner join employees mon e.manager_id = m.employee_id;?
2、外連接
?
應用場景:用于查詢一個表中有,另一個表中沒有的情況
特點:
外連接查詢結果為主表中的所有記錄
如果從表中有和它匹配的記錄,則顯示匹配的
如果從表中沒有和它匹配的記錄,則顯示null值
左右外鏈接查詢結果 =?內連接結果 +?主表中有而從表沒有的記錄
全外連接不分主表從表,它的查詢結果包括兩表交集+A表有B表沒有的部分+B表有A表沒有的部分
左外連接,left?join左邊是主表
右外鏈接,right?join右邊的是主表
左外和右外交換兩個表的順序,可以實現同樣的效果
 ?
3、交叉連接(笛卡爾乘)
select b.*, bo.*from beauty bcross join boys bo;?
?
小結:
SQL92 VS SQL99
-  功能:SQL99支持的較多 
-  可讀性:SQL99實現連接條件和篩選條件的分離,可讀性較高 
?
總結
以上是生活随笔為你收集整理的SQL教程——连接查询之SQL99标准的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: plsql以及instantclient
- 下一篇: 使用Adobe Fireworks CS
