sql基本原理以及运用场景

来源:互联网 发布:mac 网络测试工具 编辑:程序博客网 时间:2024/05/17 03:18
sql查询的基本原理:(理解sql查询的过程是进行sql优化的理论依据)
一、单表查询:
    根据where条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);
    然后根据select的选择列选择相应的列进行返回最终结果。
二、两表连接查询:
对两表求积(笛卡尔积)并用on条件和连接类型进行过滤形成中间表;
然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。
三、多表连接查询:
先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,
以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据where
条件过滤中间表的记录,并根据select指定的列返回查询结果。


on后面的条件(on条件)和where条件的区别:
一:on条件:
是过滤两个链接表笛卡尔积形成中间表的约束条件。
二:where条件:
在有on条件的select语句中是过滤中间表的约束条件。在没有on的单表查询中,
是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连
接形成最终中间表的返回结果的约束
* 将where条件移入on后面是不恰当的。推荐的做法是:on只进行连接操作,where只过滤中间表的记录。


注意事项:
连接查询是sql查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,
反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:
一、查两表关联列相等的数据用内连接。
二、col_l是col_r的子集时用右外连接。
三、col_r是col_l的子集时用左外连接。
四、col_r和col_l彼此有交集但彼此互不为子集时候用全外。
五、求差操作的时候用联合查询。
   多个表查询的时候,这些不同的连接类型可以写到一块。例如:
select t1.c1,t2.cx,t3.cy
from tab1 t1
?????? inner join tab2 t2 on (t1.c1=t2.c2)
?????? inner join tab3 t3 on (t1.c1=t2.c3)
?????? left outer join tab4 on(t2.c2=t3.c3);
where t1.x >t3.y;
上面这个sql查询是多表连接的一个示范
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安装包安装失败怎么办有内存 qq飞车换手机了怎么办 qq飞车求婚失败戒指怎么办 改脸型皮肤会下垂怎么办 情侣关系弄僵了怎么办 用微信交话费没有到账怎么办 微信交错话费了怎么办 微信缴费交错了怎么办 微信支付被投诉怎么办 微信q币充值错误怎么办 微信充值流量充错了怎么办 微信延迟到账怎么办 移动流量充错了怎么办 qq充话费等待发货怎么办 qq充值话费没到账怎么办 电信话费冲错了怎么办 微信手机充错话费充空号怎么办 京东地址写错了怎么办 京东售后不退款怎么办 冲了话费不到账怎么办 币安维护充值怎么办 微信话费未到账怎么办 微信话费交错了怎么办 北京移动查话费余额怎么办 淘宝卖家客服无法联系怎么办? 微信支付月限额怎么办 微信超额20万怎么办 微信支付超额了怎么办 微信零钱超额了怎么办 微信的充值冲错了怎么办 有流量还扣话费怎么办 自动取款机充值到电子账户怎么办 淘宝qb充错了怎么办 q币冲错了人家不给怎么办 qq充值话费错号怎么办 qq充错号码了怎么办 qq交话费不到账怎么办 充错手机号码而且是空号怎么办 微信钱包充错话费怎么办 QQ充值话费充到空号了怎么办 给别人充错话费怎么办