2017-11-19MySQL中的JOIN连接

您现在的位置是: 首页 > MySQL技术 > MySQL中的JOIN连接

395次阅读

一、新手 1+N  模式查询


题目:  查询价格大于 2000 元的商品及其栏目名称

1.  价格大于 2000 元的商品

select goods_id,goods_name,cat_id,shop_price from goods where shop_price>2000;

2. sql 执行之后 , 循环取出 cat_id;

$sql = 'select goods_id,goods_name,cat_id,shop_price from goods where shop_price>2000'; 
$rs = mysql_query($sql);

$data = array(); 
while($row = mysql_fetch_assoc($rs)) {
 
    $data[] = $row;
 
}
 
foreach ($data as $key => $value) {
 
    $sql = 'select cat_name from category where cat_id='.$v['cat_id'];
 
}
 
// 一条sql语句 -> N条数据 -> N条查询

我们需要一条 sql 语句查询出来 , 那有没有可能从一张表中就能查出来 ? 不可能 , 查询的字段是分别在两张表中的 , 肯定需要从两张表中查询出来 ->  连接查询


二、内连接查询


左边的表的每一行 , 都有一次机会跟右边表去试图连接,不过能不能连接上是有条件的

select boy.hid,boy.bname,girl.hid,girl.gname
from boy inner join girl
on boy.hid=girl.hid;

# 内链接为左右连接的并集
# 那有没有左右连接的交集 , 并集是外连接,mysql 中不支持外连接 ,oracle 和 sql server 可以


三、左连接及右连接查询


左连接和右连接类似 , 只是调个方向 

1.   左连接,所有男士站出来 , 找到自己的另一半 , 没有的 , 以 NULL 补齐

select boy.hid,boy.bname,girl.hid,girl.gname
from boy left join girl
on boy.hid=girl.hid;

# 左连接的特点 :
# 左表所有的数据全部取出来 , 然后到对应的右表去找数据 , 如果找不到数据 , 补 null


2.  右连接 , 以右表为准 , 全部取出

select boy.hid,boy.bname,girl.hid,girl.gname
from boy right join girl
on boy.hid=girl.hid;


连接查询 , 通过 on 将两张表打通一个桥梁 , 拼接成一张大表,既然是一张大表 , 我们后面是不是可以跟着写那 5 个子句 where group by ...