哪个逻辑能力强来看看呗

EncoreLaw 2017-08-02 08:31:02
举例:有两个表 1.school 2.student (school的主键"id" 是student的外键"s_id")

我想两表关联查询,获得所有school的数据,还有school对应的student的数据

于是有语句



```
select
*
form
school sc ,student st
where sc.id = student.s_id
```

然后问题就来了,当school表中没有对应的student的时候,school的数据也获取不到

而我希望的结果是:无论school有没有对应的student,先把school的数据全部获取,如果有对应的student,同时获取student的数据

请问一下大家有没有什么好的思路?
...全文
387 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-09-18
  • 打赏
  • 举报
回复
(+) 是Oracle 8i之前的写法,现在建议都写成left join或rigth join
cacasi 2017-09-17
  • 打赏
  • 举报
回复
``` select * form school sc ,student st where sc.id(+) = student.s_id
卖水果的net 2017-08-04
  • 打赏
  • 举报
回复
(+),这个语法是早期的,现在都不建议这样写了,后续的版本就都不支持了。
我没有昵称 2017-08-04
  • 打赏
  • 举报
回复
select * from school sc left join student st on sc.id = st.s_id 左连接表查询,是将左表sc查询出来后,根据条件 sc.id = st.s_id与右表st进行笛卡尔积运算,不管右表 st有么有数据最终查出来的结果行数是与左表sc相同的 楼主的sql是集合查询,当两个表没有数据交集时,就不会有查询结果的
EncoreLaw 2017-08-02
  • 打赏
  • 举报
回复
解决啦 select * from school s1 left join student s2 on s1.id=s2_id 这个是正解
EncoreLaw 2017-08-02
  • 打赏
  • 举报
回复
引用 1 楼 weixin_38847048 的回复:
where school.id=student.sid(+) 其他和你的一样 这个连接条件变下
语法报错啊老哥
EncoreLaw 2017-08-02
  • 打赏
  • 举报
回复
语法报错啊老哥
花开了叫我 2017-08-02
  • 打赏
  • 举报
回复
where school.id=student.sid(+) 其他和你的一样 这个连接条件变下

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧