mysql (dml) 链表查询 和 子查询

连表查询,分为内连接和外连接,外连接又分为左连接和右连接。

    1.内连接:select 列名.... from 表1 inner join 表2 on 表1.外键=表2.主键 【where /order by]

         示例:select user.name,order_basic.oid from order_basic inner join user on order_basic.uid=user.uid;       

         内连接查询出的数据一定是orde_basic表中的uid与user表中uid相一致,切都存在的记录。

    2.外连接:

        2.1》左连接:select 列名.... from 表1 left outer join 表2 on 表1.外键=表2.主键      

                   示例:select a.name , b.oid from order_basic  as b left join user as a on a.uid=b.uid; -- 查询与用户相关的订单信息一览,没有任何订单信息的用户也会被检索出来

                              --查询出a表所有的信息记录,不管b表有莫有对应的,都会被检索到,如同2.2右连接

        2.2》右连接:select 列名.... from 表1 right outer join 表2  on 表1.外键=表2.主键

                  示例:select a.name,b.oid from order_basic as b right outer join user as a on a.uid=b.uid; -- 查询出b表所有的信息,如果b表中有的记录中a表没有对应的信息,也会显示

        ****

        ****

        内连接时抽取的是两表间键值一致的记录,外连接时是以其中一个表的全部记录为基准进行检索。左右外连接只是选择那个表作为数据抽取的基准上有所区别,实质是一致的。

 

   3.3个或者3个以上表间的连接:

        下面是订单基本信息表(order_basic),订单详细表(order_details),产品表(product),用户表(user)间的连接实例。

        select ob.oid,ob.odate,p.name,p.price,od.quantity,u.name from

                  (                                                                                            1

                        ( order_basic as ob inner join order_details as od                2

                          on ob.oid=od.oid)

                          inner join product as p on od.pid=p.pid

                  }

                  inner join user as u on ob.uid=u.uid;                                  -- 要把1和2括号中的看成一个表。

 

子查询:

       语法:select 列名..... from 表名 where 列名 比较运算符 (select 命令);

       示例:select * from product where price > (select AVG(price) from product);          --

                 select name,address from user where uid not in(select uid from order_basic where odate='2014/7/28');  -- 在那一天没有下单的用户

                select name,address from user where exists (select * from order_basic where user.uid=order_basic.uid);  -- 检索出至少下过一个订单的用户(这个为相关子查询:及

                          对用户表中的每一条记录,进行子查询匹配。如果基数过大,小心给数据库服务器带来的负荷)。

 

                

你可能感兴趣的:(mysql)