求以下SQL语句怎么写

create table parents(--父母表
pno number(5),--编号
pname varchar2(10),--姓名
others varchar2(10)--其他内容
)
create table children(--孩子表
cno number(5),--编号
pno number(5),--孩子对应的父母的编号
cname varchar2(10),--姓名
others varchar2(10)--其他内容
)
1.列出所有父母的姓名和对于的孩子数目(没有孩子的对于数目为0)
2.列出所有没有父母信息的孩子的姓名
3.列车所有没有孩子的父母的姓名
 
答:
/*列出所有父母的姓名和对于的孩子数目(没有孩子的对于数目为0)*/
SELECT pname ,
count(c.cno)
FROM parents p LEFT JOIN children c
ON p.pno=c.pno
GROUP BY p.pname
;
/*列出所有没有父母信息的孩子的姓名*/
SELECT cname
FROM children 
WHERE children.pno NOT IN (
    SELECT pno FROM parents
    ) OR children.pno IS NULL;
或者:
SELECT cname
 FROM children 
 WHERE NOT EXISTS (
     SELECT * FROM parents WHERE children.pno=parents.pno
     );

/*列车所有没有孩子的父母的姓名*/
SELECT pname
FROM parents
WHERE parents.pno NOT IN(
    SELECT DISTINCT(children.pno) FROM children WHERE children.pno IS NOT NULL
    ); 
或者:
SELECT pname
 FROM parents
 WHERE NOT EXISTS(
     SELECT * FROM children WHERE children.pno=parents.pno
     ); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值