连接查询多表数据

 一、外连接

2、格式

(1)左外连接

select column_name

from table_name1 left join table_name2

                       on 两个表中相同的列标题;

(2)右外连接

select column_name

from table_name1 right join table_name2

                         on 两个表中相同的列标题;

(3)完全外连接

select column_name

from table_name1 full join table_name2

                          on 两个表中相同的列标题;

3、实践

例如: 查询每个用户的订单金额,列出uid,uname,ototal

select users.uid,users.uname,orders.ototal
from users left join orders
on users.uid=orders.uid;

例如:查询每个用户的订单数,列出uid,uname,ordernum(订单数)

select users.uid,users.uname,count(orders.uid)
from orders right join users
on orders.uid=users.uid
group by users.uid;

select u.uid,u.uname,count(o.uid)
from orders o right join users u
on o.uid=u.uid
group by u.uid;

二、交叉连接

1、功能

又叫无条件连接,相当于做两个数据表的记录书的乘积。交叉连接是将左表的每一行记录与右表中的所有记录进行连接,返回的的记录行数是两个表的乘积。只有在软件压力测试的时候使用,除此之外尽量不要让交叉连接出现

2、格式

select column,column2...column

from table_name1 cross table_name2;

3、实践

例如:查询会员能购买的所有可能的商品情况

例如:uid、uname、gdid、gdname

我们需要匹配两张表中的所有记录

select users.uid,users.uname,goods.gdid,goods.gdname
from users cross join goods;

三、联合查询

1、功能

联合查询是将多个select语句返回的结果集合并为单个结果集,该结果集包含联合查询中的每一个查询结果集的全部行,参与查询的select语句中的列数和列的顺序必须相同,数据类型也必须兼容

2、格式

select语句一 union[all] select语句二 [union [all]<select语句三>][...n]

3、实践

例如:联合查询uid值为1和2的用户信息,列出uid,uname,usex,

第一组

select uid,uname,usex
from users
where uid=1;

第二组

select uid,uname,usex
from users
where uid=2;

合并查询

select uid,uname,usex
from users
where uid=1
union
select uid,uname,usex
from users
where uid=2;

例如:联合查询tid为1和2的商品信息,列出tid,gdname,gdprice,并gdprice从高到低排序,显示前三行记录。

select tid,gdname,gdprice
from goods
where tid=1;

select tid,gdname,gdprice
    -> from goods
    -> where tid=2;

 select tid,gdname,gdprice
    -> from goods
    -> where tid=1
    -> union
    -> select tid,gdname,gdprice
    -> from goods

    ->where tid=2
    -> order by tid=2 desc;

四、内连接inner join

1、功能:查询结果集返回与连接条件相匹配的记录行,通常使用比较运算符比较被连接的列值

2、格式、

select [all |distinct] * 列名1[列名2,......列名n]

from 表1 [别名1] join 表2 [别名2]

[on 表1.关系列=表2.关系列]

[where 条件表达式];

说明:

join :泛指各类连接操作的关键字

on连接条件表达式:指定连接的条件。交叉连接无该子句。

where条件表达式:指定查询结果集的选择条件。交叉连接无该子句

3、实践

例如:查询goods表中商品类别为“服饰”的商品id,名称,价格及类型名称。

select goods.gdid,goods.gdname,goods.gdprice,goodstype.tname
from goods join goodstype
on goods.tid=goodstype.tid
where goodstype.tname='服饰';

修订:

select g.gdid,g.gdname,g.gdprice,t.tname
from goods g join goodstype t
on g.tid=t.tid
where t.tname='服饰';

例如;查询用户名为“段湘林”的购买商品的订单总金额

select uname,sum(ototal)
from users u join orders o
on u.uid=o.uid
where u.uname='段湘林';

例如;查询用户名为“段湘林”的购买车中的商品名称,价格,购买数量

select u.uname,g.gdname,g.gdprice,s.scnum
    -> from users u join scar s join goods g
    -> on u.uid=s.uid and s.gdid=g.gdid
    -> where u.uname='段湘林';

例如:查询与用户“蔡准”在同一城市的用户uname和uphone

select u1.uname,u1.uphone,u1.ucity

from users u1 join users u2

on u1.ucity=u2.ucity

where u2.uname='蔡准';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值