有两个表,其中一个表A是如下:
Name code count
张三 1 90
李四 3 89
另有一表B如下:
code pname
1 英语
2 语文
3 数学
要求联合查询后,结果如下
Name pname count
张三 1 90
张三 2 0
张三 3 0
李四 1 0
李四 2 0
李四 3 89
也就是说,按照人名进行扩展,如张三按照B表扩展了3条记录,张三没有成绩的课程成绩为0,该如何实现呢?
Name code count
张三 1 90
李四 3 89
另有一表B如下:
code pname
1 英语
2 语文
3 数学
要求联合查询后,结果如下
Name pname count
张三 1 90
张三 2 0
张三 3 0
李四 1 0
李四 2 0
李四 3 89
也就是说,按照人名进行扩展,如张三按照B表扩展了3条记录,张三没有成绩的课程成绩为0,该如何实现呢?
解决方案 »
- 有关sql语句急!!!
- 在AIX环境实际应用下,对于应用的oracle,平时最容易发生的问题大致有哪些?(只列出常见问题即可,不用作答,回答更加感谢)
- 求一个oracle查询:请帮帮忙!
- 寻求oracle数据库升级 解决方案
- oracle为什么不能用多条件查询语句
- in 的效率
- 为什么9i的SQLPLUS总是附带着DOS的黑色框?
- 还是昨天的问题,ora-01041,好象与oracle8i Enterprise Manager的安装有关??
- 关于sqlldr的问题
- 关于oracle11g动态表v$sql的问题及如何删除硬解析记录。
- 通过鼠标拖拽实现oracle表的查询比对功能
- 在ibatis中使用oracle的sql语句,但是无法解析 case when ....end 语句
select '张三' name, 1 code, 90 grade from dual
union all
SELECT '李四',3,89 from dual
)
,
course as(
select 1 code, '英语' pname from dual
union all
select 2, '语文' from dual
union all
select 3, '数学' from dual
)
select a.name , a.code,a.pname ,Nvl(s.grade,0)
from (select a.name,b.code,b.pname from stu a,course b) a
left join stu s
on a.name=s.name and a.code=s.code
order by a.name , a.code
from stu a join course b on 1=1
left join stu s
on a.name=s.name and b.code=s.code
order by a.name , b.code
union all
SELECT '李四',2,8 from dual
最后会出来9行数据,而不是6行
2 SELECT 'AA' uname, 1 code, 90 grade FROM DUAL UNION ALL
3 SELECT 'BB',3,89 FROM DUAL UNION ALL
4 SELECT 'BB',2,8 FROM DUAL
5 )
6 ,
7 course AS(
8 SELECT 1 code,'English' pname FROM DUAL UNION ALL
9 SELECT 2,'Chinese' FROM DUAL UNION ALL
10 SELECT 3,'Math' FROM DUAL
11 )
12 SELECT s.uname,c.pname,nvl(s.grade,0) grade
13 FROM course c
14 LEFT JOIN stu s PARTITION BY(s.uname) ON c.code = s.code
15 ORDER BY s.uname,c.code
16 ;UNAME PNAME GRADE
----- ------- ----------
AA English 90
AA Chinese 0
AA Math 0
BB English 0
BB Chinese 8
BB Math 89
WITH stu AS(
SELECT 'AA' uname, 1 code, 90 grade FROM DUAL UNION ALL
SELECT 'BB',3,89 FROM DUAL UNION ALL
SELECT 'BB',2,8 FROM DUAL
),
course AS(
SELECT 1 code,'English' pname FROM DUAL UNION ALL
SELECT 2,'Chinese' FROM DUAL UNION ALL
SELECT 3,'Math' FROM DUAL
),t1 AS (
SELECT * FROM (SELECT DISTINCT uname FROM stu),
(SELECT DISTINCT code,pname FROM course)
)
SELECT t1.uname,
t1.pname,
NVL(t2.grade, 0)
FROM t1
LEFT JOIN stu t2 ON t1.code = t2.code
AND t1.uname = t2.uname
ORDER BY t1.uname,
t1.code