select join demo 举个例子

— 学生表
CREATE TABLE student (
SNO INT,
SNAME VARCHAR(10),
ICNO INT
);

— 食堂IC卡
CREATE TABLE IC (
ICNO INT,
ICNAME VARCHAR(10),
ICMoney INT
);

INSERT INTO student VALUES(1, ‘张三’, 1 );
INSERT INTO student VALUES(2, ‘李四’, 2 );
INSERT INTO student VALUES(3, ‘王五’, NULL);

INSERT INTO IC VALUES(1, ‘张三’, 500 );
INSERT INTO IC VALUES(2, ‘李四’, 250 );
INSERT INTO IC VALUES(3, ‘赵老师’, 600);

假如我要查询, 学生的 饭卡的余额情况。
使用 内连接

SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
JOIN IC
ON (student.ICNO = IC.ICNO);

+——+——-+——–+———+
| SNO | SNAME | ICNAME | ICMoney |
+——+——-+——–+———+
| 1 | 张三 | 张三 | 500 |
| 2 | 李四 | 李四 | 250 |
+——+——-+——–+———+
2 rows in set (0.00 sec)

假如我要查询, 学生的 饭卡的余额情况。
同时, 那么 没有办理饭卡的 (也就是 不在食堂吃饭的 ) 我也要查询出来。
使用 外连接

SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
LEFT JOIN IC
ON (student.ICNO = IC.ICNO);

+——+——-+——–+———+
| SNO | SNAME | ICNAME | ICMoney |
+——+——-+——–+———+
| 1 | 张三 | 张三 | 500 |
| 2 | 李四 | 李四 | 250 |
| 3 | 王五 | NULL | NULL |
+——+——-+——–+———+
3 rows in set (0.00 sec)

又例如, 我要查询, 食堂饭卡的余额情况。 无论是 老师, 还是学生。
使用 外连接

mysql> SELECT
-> student.SNO,
-> student.SNAME,
-> IC.ICNAME,
-> IC.ICMoney
-> FROM
-> student
-> RIGHT JOIN IC
-> ON (student.ICNO = IC.ICNO);

+——+——-+——–+———+
| SNO | SNAME | ICNAME | ICMoney |
+——+——-+——–+———+
| 1 | 张三 | 张三 | 500 |
| 2 | 李四 | 李四 | 250 |
| NULL | NULL | 赵老师 | 600 |
+——+——-+——–+———+
3 rows in set (0.00 sec)

发表回复