mysql数据库:内链接,外连接

多表查询之左外连接查询

## 多表: 一对多和多对多

## “一对一”建表原则

可以写在一个表中;

当表中字段很少的时候;
拆成多张表;


但是当表中字段过多,可以把表拆成好几个;
这样每个表中字段就少了;那么这个时候就得使用“外键”了,把表与表连接起来;




## 一对多建表原则

必须两个表 一个“主表”
            一个“从表”

    在“从表”中必须有个字段,
    这个字段引用“主表”的主键;
        “从表”中这个字段就是“从表”的外键;


举例:省和市这两个表:一个省对应多个市;显然是一对多的关系;




## 多对多建表原则

必须有三张表
    其中必须有一张“中间表”

举例:
    假设有表A,是明星表;有表B,是角色表;

    需要“中间表”C,分别是“表A一条记录”和“表B一条记录”的任意组合;


显然,一个演员可以对应多个角色;一个角色也可以对应多个演员;


举例
“权限和角色”,“学生和课程表”



/////


 



    //////////////



    /////////////

    字典数据表;关联查询;

      crm.sql建表;


多表关联查询, 就是。记录 对 记录;

主表上的一条记录对应 另外一张表上的一条或者多条记录;

但是 最后查询出来的就是个组合排列; 

而不是 大杂烩, 主表的一条记录上包含了另外一张表的多条记录;这是错误的;


是平铺的; 
这是一对一的关系;
主表一条记录结合另外一张表的一条记录, 合并成一条记录;


如果是一对多的关系;也是一样的;
主表一条记录结合另外一张表的一条记录, 合并成一条记录;



    /////////////////
进阶版; 替换掉多余字段;

 关联查询

select

 cust_id,
        cust_name,
        cust_user_id,
        cust_create_id,



        b1.dict_item_name cust_source,



        b2.dict_item_name cust_industry,



        b3.dict_item_name cust_level,


        cust_linkman,
        cust_phone,
        cust_mobile,
        cust_zipcode,
        cust_address,
        cust_createtime

 from customer c
left  outer join base_dict b1 on c.cust_source=b1.dict_id

left  outer join base_dict b2 on c.cust_industry=b2.dict_id

left  outer join base_dict b3 on c.cust_level=b3.dict_id


where c.cust_name like "%黑马%"and cust_source='6' and cust_industry='1' and cust_level='22' limit 0,5 ;


左外连接 selct * from A left outer join B on 条件;

left 左边的作为主表;右边的作为从表;

查询的主体是主表,然后从从表中取出指定的字段数据(满足条件的一条记录中的指定字段数据)添加补充到主表中;

从表查询的过程是, 先找到满足条件的一条记录, 然后再从这条记录中取出指定的字段, 添加到主表中对应的记录中, 作为最终查询的结果;

你可能感兴趣的:(mysql数据库:内链接,外连接)