004-MYSQL练习——子查询+组合查询内容

一、子查询

select c_id from deposite where b_id='B0004';
select salary from customer where c_id in(101002,101003,101004);

    

等同于

select salary from customer where c_id in(select c_id from deposite where b_id='B0004');

二、联结

多表查询会有重复的数据出现,没有确定关联性,只是单纯的拼接,需要用join on 的语句进行查询链接

将两个表中相同的字段作为筛选条件,最后跟上对应的具体条件

join相当于等号

where   customer.c_id=deposite.c_id——只筛选2个表相同的内容
where   customer.c_id=deposite.c_id(+)——显示deposite表中所有的内容,可能会有空的情况
where   customer.c_id(+)=deposite.c_id——显示customer表中所有的内容,可能会有空的情况

例如:查询ID101006下的所有账户的相关信息

select * from deposite 
join customer using(c_id) 
join bank using(b_id) 
where c_id='101006';
// join using 替代了join on——join on的语句
//要完整写出customer.c_id=deposite.c_id,用using更加简化

select * from deposite,customer,bank
where deposite.c_id=customer.c_id and bank.b_id=deposite.b_id and c_id='101006';

select * from deposite,bank where deposite.b_id=bank.b_id order by bank_name;

要避免出现‘笛卡尔积’的情况——没有联结条件的表的结果,导致多出很多其他的数据

多个查询练习:

查询日期为2011-04-05这一天进行过存款的客户ID,客户姓名,银行名称,存款金额

查询工商银行存款大于等于一万的客户

查询在工商银行存款前3名的客户存款信息

——实际工商银行共有6位用户存款,需要筛选出前3(使用amount进行降序排行DESC,在返回前3行limit )

查询所有账户的内容(没有筛选条件)

多个函数结合查询——例如找出amount最大的账户的信息,若是使用MAX函数,则如下:

简单的可以用order by DESC然后limit

 

三、组合查询

UNION——相同的列、表达式或聚集函数,2条以上的select语句,之间都必须有单独的一个union

UNION ALL——不会剔除重复值,可多表可单表

(若是在这样过的组合中使用order by等排序,即时在最后出现,也是对整个搜索进行排序)

例子:表1存2017年收入,表2存2018年收入,有月份(201X0X),收入两列,求两年的收入明细

——思路:列出2017年和2018年的月份和收入,用UNION ALL进行合并

select month,income from tab1 
union all 
select month,income from tab2;

若是要计算总和,则可以使用:

select sum(income) from(
select month,income from tab1 union all
select month,income from tab2) t;
//对于派生出的表,是需要随便给个别名t即可(如果是oracle就不需要)

1、核算表里面的列

select *,(c_id+amount) as sum from deposite order by c_id;

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值