面试常被问到的一些数据库查询

有如下一张表:

t_user 有code name 连个字段

-- 删除t_user表中name相同的数据,并保留code最大的数据

方法一:

delete a FROM t_user a LEFT JOIN (
    SELECT NAME,max(CODE) nodel FROM t_user GROUP BY NAME HAVING count(1) > 1
) b ON a. NAME = b. NAME

WHERE a. CODE NOT IN (nodel);

方法二:

delete a from t_user a ,
(
select name,max(code) nodel from t_user group by name having count(1)>1
) b
where a.name = b.name and a.code not in(nodel);


上面用到数据库常用的分组查询,子查询,关联删除

(注意) 在关联删除时,delete from a left join b on a.xxx=b.xxx where a.xxx=xxxx 语法错误,因为数据库中不存在b表对应的查询临时表,所以用到联合删除、联合修改、联合插入时必须指明数据库中真实存在的表

delete a(数据库真实存在的表) from tb_xxx a left(inner ........其他关联表)

---- ------ ------- ----- ------- ------- ------ ---- ------ ------- ----- ------- -------美丽的分割线长期更新 ------ ---- ------ ------- ----- ------- ------- ------ ---- ------ ------- ----- ------- ------- ------

第二:

        有一张user表,里面有id ,name,wage(工资)字段

查询工资最小的十位,并给他们增加1000元

select name,wage+1000 from test1 order by wage limit 0,9


---- ------ ------- ----- ------- ------- ------ ---- ------ ------- ----- ------- -------美丽的分割线长期更新 ------ ---- ------ ------- ----- ------- ------- ------ ---- ------ ------- ----- ------- ------- ------

第三:

        有两张表,1)user表-------》字段有user_id,user_name

                            2)payment表--------》字段有payment_id,user_id(关联用户表),month,money

查询所有用户最近一个月的缴费情况:

select u.name,p.money  from user u  inner join payment p on u.user_id = p.user_id inner join (

select user_id,max(month) from payment grounp by user_id having count(1)>1) t

on p.user_id = t.user_id

where p.month = max(month);


---- ------ ------- ----- ------- ------- ------ ---- ------ ------- ----- ------- -------美丽的分割线长期更新 ------ ---- ------ ------- ----- ------- ------- ------ ---- ------ ------- ----- ------- ------- ------




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值