內連接

內連接

內連接也叫連接,是最早的一種連接。還可以被稱為普通連接或者自然連接,內連接是從結果表中刪除與其他被連接表中沒有匹配行的所有行,所以內連接可能會丟失信息。

連接查詢分類


a.內連接
內連接的語法如下:
select fieldlist from table1 [inner] join table2 on table1.column=table2.column
b.外連接
b1.左連接
select courses.cno,max(coursename),count(sno)
from courses LEFT JOIN grades ON courses.cno=grades.cno
group by courses.cno
左連接特點:顯示全部左邊表中的所有項目,即使其中有些項中的數據未填寫完全。
左外連接返回那些存在於左表而右表中卻沒有的行,再加上內連接的行。
b2.右連接
與左連接類似
b3.全連接
select sno,name,major
from students FULL JOIN majors ON students.mno=majors.mno
兩邊表中的內容全部顯示
c.自身連接
select c1.cno,c1.coursename,c1.pno,c2.coursename
from courses c1,courses c2 where c1.pno=c2.cno
採用別名解決問題。
d.交叉連接
select lastname+firstname from lastname CROSS JOIN firstanme
相當於做笛卡兒積
8.嵌套查詢
a.用關鍵字IN,如查詢李山的同鄉:
select * from students
where native in (select native from students where name=’ 李山’)
b.使用關鍵字EXIST,比如,下面兩句是等價的:
select * from students
where sno in (select sno from grades where cno=’B2’)
select * from students where exists
(select * from grades where
grades.sno=students.sno AND cno=’B2’)
9.關於排序order
a.對於排序order,有兩種方法:asc升序和desc降序
b.對於排序order,可以按照查詢條件中的某項排列,而且這項可用數字錶示,如:
select sno,count(*) ,avg(mark) from grades
group by sno
having avg(mark)>85
order by 3

其他


a.對於有空格的識別名稱,應該用"[]"括住。
b.對於某列中沒有數據的特定查詢可以用null判斷,如select sno,courseno from grades where mark IS NULL
c.注意區分在嵌套查詢中使用的any與all的區別,any相當於邏輯運算“||”而all則相當於邏輯運算“&&”
d.注意在做否定意義的查詢是小心進入陷阱:
如,沒有選修‘B2’課程的學生:
select students.*
from students, grades
where students.sno=grades.sno
AND grades.cno <> ’B2’
上面的查詢方式是錯誤的,正確方式見下方:
select * from students
where not exists (select * from grades
where grades.sno=students.sno AND cno='B2')
關於有難度多重嵌套查詢的解決思想:
如,選修了全部課程的學生:
select *
from students
where not exists ( select *
from courses
where NOT EXISTS
(select *
from grades
where sno=students.sno
AND cno=courses.cno))
最外一重:從學生表中選,排除那些有課沒選的。用not exist。由於討論對象是課程,所以第二重查詢從course表中找,排除那些選了課的即可。

內連接


在“設置表間關聯關係”的界面中選擇“=”,即為內連接。
兩個表(或連接)中某一數據項相等的連接稱為內連接。連接的結果是形成一個新的數據表。
內連接中參與連接的表(或連接)的地位是相等的。內連接的運算順序是:
1.參與的數據表(或連接)中的每列與其它數據表(或連接)的列相匹配,形成臨時數據表;
2.將滿足數據項相等的記錄從臨時數據表中選擇出來。
軟道語錄
內連接
內連接就是兩張表都只顯示符合連接條件的行。
例如:
假設有兩個Excel報表:出貨表和產品表
出貨表:
日期 客戶 產品編碼 數量
2003-10-20 永華公司 1001 10
2003-10-21 風貌公司 1002 20
產品表:
產品編碼 產品名稱 生產廠家
1001 PC機 創成公司
1002 印表機 風華公司
內連接條件為:出貨表。產品編碼=產品表。產品編碼
內連接的結果集為:
日期 客戶 產品編號 數量 產品名稱 生產廠家
2003-10-20 永華公司 1001 10 PC機 創成公司
2003-10-21 風貌公司 1002 20 印表機 風華公司