zoukankan      html  css  js  c++  java
  • 关于SQL子查询的一个问题

    今天在翻看工具书的时候,发现了一个sql语句:

    select 
        cust_name, 
        cust_state, 
        (select count(*)
         from  orders
         where orders.cust_id = customers.cust_id) as orders
    from customers
    order by cust_name;

    在子查询中居然可以直接使用外部的customers表中的cust_id字段进行where条件限制,感觉到好像哪里不对劲。

    根据自己之前的理解,子查询中的语句不是应该先执行,然后再执行子查询外部的语句吗?

    后来自己试着跑了一下,果然是可以执行的。

    然后经过查找和分析之后,得出了原因:

    一般来说,子查询是作为限制条件语句放在from 或者 where后面的,也就是说整条sql代码是按照一定的执行顺序的,在上面的这段sql里面,子查询却是作为select的检索内容出现的,因此在执行到子查询语句的时候,from后面的语句已经执行到了,因此可以直接拿customers.cust_id来使用,并不是有子查询就一定先执行子查询中的语句的。

    select语句的编写顺序一般为:

      select......from......where......group by......having......order by

    但是执行顺序为:

      from......where......group by......having......select......order by

    sql的执行语句是非常重要的,尤其是当语句比较复杂和庞大的时候,这样就不会特别的混乱了。

    最懒的人就是整天忙得没时间学习、反思、成长的人。
  • 相关阅读:
    CSS 之 伪类及伪元素
    php使用strlen()判断中文汉字字符串长度
    代码评审
    Windows下获取本机IP地址方法介绍
    c++ windows 获取mac地址
    Windows编译安装OpenSSL
    visio studio2008 删除最近的项目
    Windows中杀死占用某个端口的进程
    apache日志文件太大的问题
    text段,data段,bss段,堆和栈
  • 原文地址:https://www.cnblogs.com/jockeyhao/p/12122176.html
Copyright © 2011-2022 走看看