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的执行语句是非常重要的,尤其是当语句比较复杂和庞大的时候,这样就不会特别的混乱了。

    最懒的人就是整天忙得没时间学习、反思、成长的人。
  • 相关阅读:
    java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点
    java学习笔记 (1) —— Strut2.3.24环境搭建
    数据不平衡问题的处理
    正则化与特征稀疏,过拟合
    leetcode144-先序遍历非递归实现
    解释器资料
    ROC,AUC
    假设检验——KS检验
    SVM理解
    高斯过程与核密度估计
  • 原文地址:https://www.cnblogs.com/jockeyhao/p/12122176.html
Copyright © 2011-2022 走看看