MySQL 长难句分析

/*原始数据*/

数据表pc:

3IBM8000256
4ASUS5000512
6hp70002000
8MAC120004000
9lenovo50002000
10MAC120002000

数据表phone:

1ipone5000
2huawei2000
3xiaomi1000
4meizu1234
5meizu5678
6meizu2000


select * from pc;


select * from phone;


# 显示phone中重复的条目,显示出来的条目的phone的字段的信息是id最小的那条条目的信息
select idphone, phone_name, phone_price from phone group by phone_name having count(phone_name) >= 2;


# 显示pc和phone中id相同的条目
select * from pc join (select idphone, phone_name, phone_price from phone /*having count(phone_name) >= 2*/) as test on pc.idpc = test.idphone order by idphone;


# 显示phone中重复的条目和重复次数
select *, count(d1.phone_name) as count from (phone as d1 left join (select phone.phone_name, phone.phone_price from phone) as d2 on d1.phone_name = d2.phone_name) group by d1.phone_name having count >= 2 order by d1.idphone;

# 显示phone和phone中重复条目 去掉下面的注释之后变成只显示一条
select */*, count(tele.phone_name)*/ from phone as com left join (select phone_name, idphone from phone group by phone_name having count(phone_name) >= 2) as tele on com.phone_name = tele.phone_name;


# phone(com)与phone(tele)中重复条目左连接,连接条件是com的phone_name与tele的phone_name相同。连接完了之后删除com中"满足条件:com中的idphone大于tele中的idphone的条目"的条目  操作完成的同时,com的类型,也就是数据表phone,也会对应删除com中被删除的条目。
delete com from (phone as com left join (select phone_name, idphone from phone group by phone_name having count(phone_name) >= 2) as tele on com.phone_name = tele.phone_name) where com.idphone > tele.idphone;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值