15.构造器的 join 查询

学习要点:
1.join 查询
本节课我们来开始学习数据库的构造器查询中 join 查询。
一.join 查询
1. 使用 join 实现内联接的多表查询,比如三张表进行 inner join 查询;
$users = DB::table('users')
->join('books', 'users.id', '=', 'books.user_id')
->join('profiles', 'users.id', '=', 'profiles.user_id')
->select('users.id', 'users.username', 'users.email',
'books.title', 'profiles.hobby')
->get();
2. 也可以使用 leftjoin 左连接或 rightjoin 右连接实现多表查询;
$users = DB::table('users')
->leftJoin('books', 'users.id', '=', 'books.user_id')
->rightjoin('profiles', 'users.id', '=', 'profiles.user_id')
->get();
3. 使用 crossjoin 交叉连接查询,会生成笛卡尔积,再用 distinct()取消重复;
$users = DB::table('users')
->crossJoin('books')
->select('username', 'email')
->distinct()
->get();
4. 如果你想要实现闭包查询,和 where 类似,只不过要用 on 和 orOn 方法;
$users = DB::table('users')
->join('books', function ($join) {
//支持 orOn 连缀
$join->on('users.id', '=', 'books.user_id');
})->toSql();
PS:on()方法后面如果想要再增加筛选条件,可以追加 where();
5. 使用 joinSub 实现子连接查询,将对应的内容合并在一起输出;
//子连接查询
$query = DB::table('books')->selectRaw('user_id,title');
$users = DB::table('users')->joinSub($query,'books', function ($join) {
$join->on('users.id', '=', 'books.user_id');
})->get();
6. 使用 union()或 unionAll()方法实现两个查询的合并操作;
//union 取消重复,unionAll 不取消重复
$query = DB::table('users');
$users = DB::table('users')
->union($query)
->get();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值