展开全部
Oracle 、DB2、SQL Server、PostgreSQL 支持 Full JOIN
但是 MySQL 是不支持的。
可以通过
LEFT JOIN + UNION + RIGHT JOIN 的方式 来实现。
下面e5a48de588b662616964757a686964616f31333332623930是 测试表与测试数据-- 学生表
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);
下面是 SQL Server 使用 full join 的结果SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student
FULL JOIN IC
ON (student.ICNO = IC.ICNO);
go
SNO SNAME ICNAME ICMoney
----------- ---------- ---------- -----------
1 张三 张三 500
2 李四 李四 250
3 王五 NULL NULL
NULL NULL 赵老师 600
(4 行受影响)
下面是 MySQL 不支持 的输出结果:mysql> SELECT
-> student.SNO,
-> student.SNAME,
-> IC.ICNAME,
-> IC.ICMoney
-> FROM
-> student
-> FULL JOIN IC
-> ON (student.ICNO = IC.ICNO);
ERROR 1054 (42S22): Unknown column 'student.SNO' in 'field list'
下面是 MySQL 的 LEFT JOIN + UNION + RIGHT JOIN 的方式。mysql> SELECT
-> student.SNO,
-> student.SNAME,
-> IC.ICNAME,
-> IC.ICMoney
-> FROM
-> student
-> LEFT JOIN IC
-> ON (student.ICNO = IC.ICNO)
-> UNION
-> 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 |
| 3 | 王五 | NULL | NULL |
| NULL | NULL | 赵老师 | 600 |
+------+-------+--------+---------+
4 rows in set (0.01 sec)