鏈接是二元運算,能夠對兩個或多個表進行查詢,結果一般是含有參加鏈接運算的兩個或多個表的指點列的表數據庫
在SQL中,鏈接有兩大類表示形式,一是符合SQL標準鏈接謂詞(where)的表達形式,二是oracle擴展的使用關鍵字JION的表達形式。oracle
1.鏈接謂詞spa
能夠在select語句的where子句中使用比較運算符給出鏈接條件對錶進行鏈接,將這種表示形式稱爲鏈接謂詞表示形式。code
--查找數據庫每一個班的學生信息。 select * from school_students,school_class where stu_class=class_id;
鏈接謂詞中的兩個列(字段)稱爲鏈接字段,它們必須是可比的,鏈接謂詞的比較符能夠是<,<=,=,>,>=,!=和<>,當比較符爲=是就是等值鏈接,若在目標列中去除相同的字段名,則爲天然鏈接。blog
--查找選修了100014課程且成績在70分以上的學生姓名及成績。 select stu_name 姓名, result_number 成績 from school_students, school_result where result_stu=stu_id and result_course='100014' and result_number>=70;
鏈接和子查詢可能都要涉及兩個或多個表,區別是:鏈接能夠合併兩個或多個表,而帶子查詢的select語句的結果只能來自一個表。子查詢的結果是用來做爲選擇結果數據時進行參照的。io
--查找選修了「數據庫技術及應用」課程且成績在70分以上的學生學號、姓名、---課程名及成績。 select stu_id 學號, stu_name 姓名, course_name 課程名, result_number 成績 from school_students, school_course, school_result where stu_id=result_stu and course_id=result_course and course_name='數據庫技術及應用' and result_number>=70;
2.以JOIN關鍵字指定的鏈接class
oracle的PL/SQL語句擴展以jion關鍵字指定鏈接的表示方法,加強了表的鏈接運算能力。擴展
內鏈接:按照On所指定的鏈接條件合併兩個表,返回知足條件的行select
--查找數據庫每一個班的學生信息。 select * from school_students join school_class on class_id=stu_class ;
內鏈接還能夠用於鏈接多個表的鏈接方法
--查找選修了100014課程且成績在70分以上的學生姓名及成績。 select stu_name 姓名, result_number 成績 from SCHOOL_STUDENTS join school_result on stu_id=result_stu where result_course='100014' and result_number>=70;
外鏈接:外鏈接的結果表不但包含知足鏈接條件的行,還包括相應表中的全部行。
外鏈接包括三種:
1 左外連接:結果表中除了包括知足鏈接條件的行外,還包括左表的全部行
--查找全部班級學生狀況及,若班級沒有學生,也要顯示其狀況。 select class_name,stu_name from SCHOOL_CLASS left join school_students on stu_class=class_id;
2 右外連接:結果表中除了包括知足鏈接條件的行外,還包括右表的全部的行
--查找全部班級學生狀況及,學生沒有班級,也要顯示其狀況。 select class_name,stu_name from SCHOOL_CLASS right join school_students on stu_class=class_id;
3 徹底連接:結果表除了包括知足鏈接條件的行外,還包括兩個表的全部行
4.交叉鏈接:交叉鏈接其實是將兩個表進行笛卡爾積運算,結果表是由第一個表的每行與第二個表的每一行拼接後造成的表,所以結果表的行數等於兩個錶行數之積。
--列出學生全部可能的選課狀況。 select class_name,stu_name from SCHOOL_CLASS cross join school_students ;
注意:交叉鏈接也能夠使用where子句進行條件限定