oracle 中的(+) 是什么意思?
4个回答
2013-05-29
展开全部
通用测试表
-- 学生表
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);
LEFT OUTER JOIN
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)
Oracle 有种另外的写法.
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student, IC
WHERE
student.ICNO = IC.ICNO(+);
SNO SNAME ICNAME ICMONEY
--------- -------------------- -------------------- ----------
1 张三 张三 500
2 李四 李四 250
3 王五
可以理解为, 有 (+) 的, 就是 可选的 (也就是可以为 NULL 的)。
----------
RIGHT OUTER JOIN
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)
Oracle 有种另外的写法.
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student, IC
WHERE
student.ICNO(+) = IC.ICNO;
SNO SNAME ICNAME ICMONEY
---------- -------------------- -------------------- ----------
1 张三 张三 500
2 李四 李四 250
赵老师 600
可以理解为, 有 (+) 的, 就是 可选的 (也就是可以为 NULL 的)。
-- 学生表
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);
LEFT OUTER JOIN
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)
Oracle 有种另外的写法.
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student, IC
WHERE
student.ICNO = IC.ICNO(+);
SNO SNAME ICNAME ICMONEY
--------- -------------------- -------------------- ----------
1 张三 张三 500
2 李四 李四 250
3 王五
可以理解为, 有 (+) 的, 就是 可选的 (也就是可以为 NULL 的)。
----------
RIGHT OUTER JOIN
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)
Oracle 有种另外的写法.
SELECT
student.SNO,
student.SNAME,
IC.ICNAME,
IC.ICMoney
FROM
student, IC
WHERE
student.ICNO(+) = IC.ICNO;
SNO SNAME ICNAME ICMONEY
---------- -------------------- -------------------- ----------
1 张三 张三 500
2 李四 李四 250
赵老师 600
可以理解为, 有 (+) 的, 就是 可选的 (也就是可以为 NULL 的)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
left join, right join
例如:
where a.id=b.id(+) => left join b on a.id=b.id
反之亦然
例如:
where a.id=b.id(+) => left join b on a.id=b.id
反之亦然
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询