1.簡介
內連接是一種常見的連接查詢不跟,它根據(jù)匹配條件返回第1個表與第2個表所有匹配成功的記錄唯袄。
解釋:將兩個表或兩個以上的表以一定的連接條件連接起來,從中檢索出滿足條件的數(shù)據(jù)。
語法
SELECT 查詢字段 FROM 表1[INNER] JOIN 表2 ON 匹配條件;
ON用于指定內連接的查詢條件。
在不設置ON時沛鸵,與交叉連接等價。
關鍵字ON與WHERE的異同點
相同點:都用于完成條件的限定缆八。
不同點:WHERE是限定已全部查詢出來的記錄曲掰,那么在數(shù)據(jù)量很大的情況下,此操作會浪費很多性能奈辰,所以此處推薦使用ON實現(xiàn)內連接的條件匹配栏妖。
2.準備
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);
3.select ...... from A,B 的用法
- 產(chǎn)生的結果:行數(shù)是A和B的乘積,列數(shù)是A和B之和奖恰〉踔海或者說把A表的每一條記錄和B表的每一條記錄組合在一起,形成的是個笛卡爾積瑟啃。
- select ...... from A,B和select ...... from B,A的輸出查詢結果本質上是一樣的论泛,只是看起來A,B表的前后順序不一樣而已蛹屿。
SELECT * FROM scholl,grade;
SELECT * FROM scholl,grade,student;
SELECT COUNT(*) FROM scholl,grade,student;-- 64
4.select ...... from A,B where ......的用法(sql92標準)
查詢每個學校的班級
SELECT * FROM scholl,grade WHERE scholl.id=grade.sid;
查詢每個學校的班級下的學生
SELECT * FROM scholl,grade,student
WHERE scholl.id=grade.sid AND grade.id = student.gid;
-- 等價于
SELECT * FROM scholl s,grade g,student t
WHERE s.id=g.sid AND g.id = t.gid;
5.select ...... from A join B on ......的用法(sql99標準)
查詢每個學校的班級
SELECT *
FROM scholl
JOIN grade ON scholl.id=grade.sid;
-- 等價于
SELECT *
FROM scholl s
JOIN grade g ON s.id=g.sid;
查詢每個學校的班級下的學生
SELECT *
FROM scholl
JOIN grade ON scholl.id=grade.sid
JOIN student ON grade.id=student.gid;
-- 等價于
SELECT *
FROM scholl s
JOIN grade g ON s.id=g.sid
JOIN student t ON g.id=t.gid;