26.MySQL中的內連接INNER JOIN

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

) PRIMARY

KEY

,

name

VARCHAR

(

36

) )

ENGINE

=

INNODB

DEFAULT

CHARSET

= utf8;

INSERT

INTO

scholl

VALUES

(

1

,

'A學校'

);

INSERT

INTO

scholl

VALUES

(

2

,

'B學校'

);

CREATE

TABLE

grade(

id

INT

(

4

) PRIMARY

KEY

,

name

VARCHAR

(

36

),

sid

INT

(

4

) )

ENGINE

=

INNODB

DEFAULT

CHARSET

= utf8;

INSERT

INTO

grade

VALUES

(

1

,

'一班'

,

1

);

INSERT

INTO

grade

VALUES

(

2

,

'二班'

,

1

);

INSERT

INTO

grade

VALUES

(

3

,

'一班'

,

2

);

INSERT

INTO

grade

VALUES

(

4

,

'二班'

,

2

);

CREATE

TABLE

student(

id

INT

(

4

) PRIMARY

KEY

,

name

VARCHAR

(

36

), gid

INT

(

4

) )

ENGINE

=

INNODB

DEFAULT

CHARSET

= utf8;

INSERT

INTO

student

VALUES

(

1

,

'a1'

,

1

);

INSERT

INTO

student

VALUES

(

2

,

'a2'

,

2

);

INSERT

INTO

student

VALUES

(

3

,

'a3'

,

3

);

INSERT

INTO

student

VALUES

(

4

,

'a4'

,

4

);

INSERT

INTO

student

VALUES

(

5

,

'a5'

,

1

);

INSERT

INTO

student

VALUES

(

6

,

'a6'

,

2

);

INSERT

INTO

student

VALUES

(

7

,

'a7'

,

3

);

INSERT

INTO

student

VALUES

(

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>
26.MySQL中的內連接INNER JOIN

<code>

SELECT

*

FROM

scholl,grade,student;

SELECT

COUNT

(*)

FROM

scholl,grade,student;/<code>

4.select ...... from A,B where ......的用法(sql92標準)

查詢每個學校的班級

<code>

SELECT

*

FROM

scholl,grade

WHERE

scholl.id=grade.sid;/<code>
26.MySQL中的內連接INNER JOIN

查詢每個學校的班級下的學生

<code>

SELECT

*

FROM

scholl,grade,student

WHERE

scholl.id=grade.sid

AND

grade.id = student.gid;

SELECT

*

FROM

scholl s,grade g,student tWHERE s.id=g.sid

AND

g.id = t.gid;/<code>
26.MySQL中的內連接INNER JOIN

5.select ...... from A join B on ......的用法(sql99標準)

查詢每個學校的班級

<code>

SELECT

*

FROM

schollJOIN grade

ON

scholl.id=grade.sid;

SELECT

*

FROM

scholl sJOIN grade g

ON

s.id=g.sid;/<code>
26.MySQL中的內連接INNER JOIN

查詢每個學校的班級下的學生

<code>

SELECT

*

FROM

schollJOIN grade

ON

scholl.id=grade.sidJOIN student

ON

grade.id=student.gid;

SELECT

*

FROM

scholl sJOIN grade g

ON

s.id=g.sidJOIN student t

ON

g.id=t.gid;/<code>
26.MySQL中的內連接INNER JOIN


分享到:


相關文章: