Sql的一些总结三(来源于MySQL必知必会)


前言

在使用数据库SQL时,除了一些对表进行查询操作的函数,对于数据表联合求解的一些函数也比较重要。

一、创建高级联结

使用表别名

一般用as对某些数据起别名,其中比较重要的函数如下:
as:selectconcat(Rtrim(vend_name),‘(’,Rtrim(vend_country),‘)’)as vend_title from vendors order by vend_name;
其作用有如下两点:
1.缩短SQL语句
2.允许在单条SELECT语句种多次使用相同的表
即表别名可以用在where,select,以及order by等其他子句或者语句其他部分。

2.使用不同类型的联结

1.自联结

select p1.prod_id,p1.prod_name
from products as p1,products as p2
where p1.vend_id=p2.vend_id
and p2.prod_id=‘DTNTR’;

2.自然联结

无论如何对表进行联结,应该至少有一个列出现在不止一个表种。标准的联结返回所有的数据,甚至有相同的列出现多次,而自然联结排除多次出现,使得每个列只返回一次。
例:select c.*,o.order_num,o.order_date,
oi.prod_id,oi.quantity,OI.item_price
from customers as c,orders as o,orderitems as oi
where c.cust_id=o.cust_id
and oi.order_num=o.order_num
and prod_id=‘FB’;

3.外部联结

许多联结将一个表中的行为与另一个表中的行相关联,但有时会包含没有关联行的那些行,例如:
1.对每个客户下了多少订单进行计数,包括那些至今尚未下订单的客户;
2.列出所有产品以及订购数量,包括没有人订购的产品;
3.计算平均销售规模,包括那些至今尚未下订单的客户。
例:select customers.cust_id,orders.order_num
from customers left outer join oders
on customers.cust_id=order.cust.id;
即left join时左边为主,当右侧不存在时返回null。
例:select customers.cust_id,orders.order_num
from customers right outer join orders
on orders.cust_id=customers.cust_id
即right join时右边为主,当左侧相应参数不存在时返回null。

4.使用带聚集函数的联结

在使用联结时也可以用一些聚集函数,来达到得到共同参数的目的。
例:select customers.cust_name,
customers.cust_id,
count(orders.order_num) as num_ord
from customers inner join orders
on customers.cust_id=orders.cust_id
group by customers.cust_id;

5.使用联结和联结条件

在使用联结时要注意以下一些点:
1.注意所使用的联结类型,一般我们使用内部联结,但是使用外部联结也是有效的。
2.保证使用正确的联结条件,否则会返回不正确的数据。
3.应该总是提供联结条件,否则会得出笛卡尔积
4.在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型。

总结

不同表中使用联结以及其联结的类型,都有各自不同,其中对于内连接,比如inner join…on,类比于where;而对于外联结,outer join,则包括left和right部分,各自代表的是左侧或者右侧存在为主的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值