日期:2014-05-16  浏览次数:21102 次

mysql关联查询
        在程序开发时,不可避免的要用到视图,首先我们来看看视图到底有什么作用:

        简单性:看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次制定全部的条件。

        安全性:通过视图用固话只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。

        其他的优点暂时省略。

        视图中我们用的最多的可能就是多表查询了,既然视图有这么多的优点,那么我们就来说说如何多表查询

两个表查询:

         情景1

         如图所示:

                                                                         

        其中foodTypeID为第二个表的主键,那么当我们要筛选出这样的数据(foodID、foodTypeName、foodName、Price)的时候就要用到多表查询了,是这样做的:

[sql] view plaincopy

    select FoodInfo.foodID, FoodTypeInfo.foodTypeName , 
           FoodInfo.foodName ,FoodInfo.price  
    from FoodInfo inner join FoodTypeInfo  
    on FoodInfo.foodTypeID =FoodTypeInfo .foodTypeID 


        情景2

        如图所示:

                                                   

        大家可以看到第一张表和上面的相比增加了两个字段,其中我们要用到的就有ManagerID,第二张表还是原来那张表,增加的第三张表中我们也用到ManagerID,最后查询的结果想要看到的是(foodID、foodTypeName、foodName、Price,ManagerID),是这样操作的:

[sql] view plaincopy

    <pre name="code" class="sql">select FoodInfo.foodID, FoodTypeInfo.foodTypeName , 
           FoodInfo.foodName ,FoodInfo.price, 
           managerInfo.ManagerID   
    from (FoodInfo inner join FoodTypeInfo  
    on FoodInfo.foodTypeID =FoodTypeInfo .foodTypeID ) 
    inner join managerInfo on managerInfo.ManagerID =FoodInfo .ManagerID 



    看到上面的我们是不是可以总结出这样的规律呢?

    我们以五个表为例来说明一下:

    首先前面的选择表头的东西就省略了,直接写表和表之间的关系:

[sql] view plaincopy

    from((((表 inner join 表 on 表.字段名 =表.字段名) 
    innner join 表 on 表.字段名=表.字段名) 
    inner join 表 on表.字段名=表.字段名) 
    inner join 表 on 表.字段名=表.字段名