码迷,mamicode.com
首页 > 数据库 > 详细

SQL联表查询

时间:2017-07-03 23:46:00      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:sql   存储   大神   ble   单表   erb   地方   div   inf   

  数据库中最最常用的语法----select.简单的select语法很直白:

    

select column from table where expression;

 

    从((from)存储数据的地方(table)按照(where)一定的条件(expression)查找(select)我要的数据(column);

  但是在实际工作中用到的比较多的往往还是多联表查询,所以在这里记下自己学习多联表查询的心得。

  首先聊一聊笛卡尔积,这是几乎所有数据库书籍在讲多联表查询时第一个要讲的东西,我等P民也只能是把笛卡尔积放在第一位了。用初中数学来解释笛卡尔积其实就是因式展开(各位大神不要打我),类似于下面这种:

  A=(a+b),B=(c+d),A*B=ac+ad+bc+bd;

嗯虽然不一样,但是其实表面上就是这样过的。

  然后基础语法其实和单表查询还是差不多的:

  

select column from table1 (方式) join table2 on expression;

 

多表查询和单表查询最打区别就是多表查询多了join on 语句,讲专业点叫连接。连接常用的有三种inner、left、right,这里我们不展开讲三种方式的区别(因为我自己也讲不清楚!如果想知道请自行谷歌笛卡尔积、SQL多表联合查询十篇文章九篇会讲的),只讲怎么用,用哪个好。

  首先,放出结论(一般情况下):

    1)、如果table1符合条件数据量远大于table2,且table2数据非常多,用left join;

    2)、如果table1符合条件数据量远小于table2,且table1数据非常多,用right join;

    3)、如果一样多且数据量不多推荐使用inner join;

    4)、但是如果都非常多请用联合查询 + where,后面会讲到。

  当然结论并非绝对,会受到两表中Null数据行的影响,但是我想说的是!实际中Null数据行是比较少的,所以这个结论大致上还是可以用的!!!不要问我为什么,就是这么粗暴!就是这么任性!

  最后放大招--嵌套查询

  嵌套查询顾名思义就是个嵌套,以内查询语句的输出作为外查询语句的输入或条件语句,以求达到缩减数据量的目的。在实际应用中,如果两表的数据量非常大,那么强烈推荐嵌套查询。假设有下表;

那么嵌套查询的典型语法如下:

在where条件中使用嵌套查询

select 
    account 
from 
    userbindinfo 
where 
    user_id 
in 
(
    select 
        user_id    -- 该处内查询语句的输出必须与外部查询语句的条件一一对应
    from 
        users 
    where 
        user_type = 1
)        

 

  

SQL联表查询

标签:sql   存储   大神   ble   单表   erb   地方   div   inf   

原文地址:http://www.cnblogs.com/zhoujm928/p/5467422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!