1.簡介
內連接是一種常見的連接查詢,它根據匹配條件返回第1個表與第2個表所有匹配成功的記錄。
解釋:將兩個表或兩個以上的表以一定的連接條件連接起來,從中檢索出滿足條件的數據。
語法
<code>SELECT
查詢字段FROM
表1
[INNER
]JOIN
表2
ON
匹配條件;/<code>
ON用於指定內連接的查詢條件。
在不設置ON時,與交叉連接等價。
關鍵字ON與WHERE的異同點
相同點:都用於完成條件的限定。
不同點:WHERE是限定已全部查詢出來的記錄,那麼在數據量很大的情況下,此操作會浪費很多性能,所以此處推薦使用ON實現內連接的條件匹配。
2.準備
<code>CREATE
DATABASE
mahaiwuji;USE
mahaiwuji;CREATE
TABLE
scholl(id
INT
(4
) PRIMARYKEY
,name
VARCHAR
(36
) )ENGINE
=INNODB
DEFAULT
CHARSET
= utf8;INSERT
INTO
schollVALUES
(1
,'A學校'
);INSERT
INTO
schollVALUES
(2
,'B學校'
);CREATE
TABLE
grade(id
INT
(4
) PRIMARYKEY
,name
VARCHAR
(36
),sid
INT
(4
) )ENGINE
=INNODB
DEFAULT
CHARSET
= utf8;INSERT
INTO
gradeVALUES
(1
,'一班'
,1
);INSERT
INTO
gradeVALUES
(2
,'二班'
,1
);INSERT
INTO
gradeVALUES
(3
,'一班'
,2
);INSERT
INTO
gradeVALUES
(4
,'二班'
,2
);CREATE
TABLE
student(id
INT
(4
) PRIMARYKEY
,name
VARCHAR
(36
), gidINT
(4
) )ENGINE
=INNODB
DEFAULT
CHARSET
= utf8;INSERT
INTO
studentVALUES
(1
,'a1'
,1
);INSERT
INTO
studentVALUES
(2
,'a2'
,2
);INSERT
INTO
studentVALUES
(3
,'a3'
,3
);INSERT
INTO
studentVALUES
(4
,'a4'
,4
);INSERT
INTO
studentVALUES
(5
,'a5'
,1
);INSERT
INTO
studentVALUES
(6
,'a6'
,2
);INSERT
INTO
studentVALUES
(7
,'a7'
,3
);INSERT
INTO
studentVALUES
(8
,'a8'
,4
);/<code>
3.select ...... from A,B 的用法
- 產生的結果:行數是A和B的乘積,列數是A和B之和。或者說把A表的每一條記錄和B表的每一條記錄組合在一起,形成的是個笛卡爾積。
- select ...... from A,B和select ...... from B,A的輸出查詢結果本質上是一樣的,只是看起來A,B表的前後順序不一樣而已。
<code>SELECT
*FROM
scholl,grade;/<code>
<code>SELECT
*FROM
scholl,grade,student;SELECT
COUNT
(*)FROM
scholl,grade,student;/<code>
4.select ...... from A,B where ......的用法(sql92標準)
查詢每個學校的班級
<code>SELECT
*FROM
scholl,gradeWHERE
scholl.id=grade.sid;/<code>
查詢每個學校的班級下的學生
<code>SELECT
*FROM
scholl,grade,studentWHERE
scholl.id=grade.sidAND
grade.id = student.gid;SELECT
*FROM
scholl s,grade g,student tWHERE s.id=g.sidAND
g.id = t.gid;/<code>
5.select ...... from A join B on ......的用法(sql99標準)
查詢每個學校的班級
<code>SELECT
*FROM
schollJOIN gradeON
scholl.id=grade.sid;SELECT
*FROM
scholl sJOIN grade gON
s.id=g.sid;/<code>
查詢每個學校的班級下的學生
<code>SELECT
*FROM
schollJOIN gradeON
scholl.id=grade.sidJOIN studentON
grade.id=student.gid;SELECT
*FROM
scholl sJOIN grade gON
s.id=g.sidJOIN student tON
g.id=t.gid;/<code>