zoukankan      html  css  js  c++  java
  • mysql SQL优化之嵌套查询-遁地龙卷风

    (-1) 写在前面

      这篇随笔的数据使用的是http://blog.csdn.net/friendan/article/details/8072668#comments里的,里面有一些常见的select查询练习题。

      我使用的是mysql自带的命令行

    (1)数据准配

    student

    +---------+-----------+------+------+--------------+

    | sno     | Sname     | Ssex | Sage | Sdept        |

    +---------+-----------+------+------+--------------+

    | 9512101 | 李勇      | 男   |   19 | 计算机系     |

    | 9512102 | 刘晨      | 男   |   20 | 计算机系     |

    | 9512103 | 王敏      | 女   |   20 | 计算机系     |

    | 9521101 | 张力      | 男   |   22 | 信息系       |

    | 9521102 | 吴宾      | 女   |   21 | 信息系       |

    | 9521103 | 张海      | 男   |   20 | 信息系       |

    | 9531101 | 钱小力    | 女   |   18 | 数学系       |

    | 9531102 | 王大力    | 男   |   19 | 数学系       |

    +---------+-----------+------+------+--------------+

    course

    +-----+--------------------+-------+

    | Cno | Cname              | Hours |

    +-----+--------------------+-------+

    | c01 | 计算机文化学       |    70 |

    | c02 | VB                 |    90 |

    | c03 | 计算机网络         |    80 |

    | c04 | 数据库基础         |   108 |

    | c05 | 高等数学           |   180 |

    | c06 | 数据结构           |    72 |

    +-----+--------------------+-------+

    SC

    +---------+------+-------+

    | Sno     | Cno  | Grade |

    +---------+------+-------+

    | 9512101 | C01  |    90 |

    | 9512101 | C02  |    86 |

    | 9512101 | C06  |  NULL |

    | 9512102 | C02  |    78 |

    | 9512102 | C01  |    82 |

    | 9512102 | C02  |    75 |

    | 9512102 | C04  |    92 |

    | 9512102 | C05  |    50 |

    | 9521103 | C02  |    68 |

    | 9521103 | C06  |  NULL |

    | 9531101 | C01  |    80 |

    | 9531101 | C05  |    95 |

    | 9531102 | C05  |    85 |

    +---------+------+-------+

    (2)问题及解答

    查询计算机系男生修了"数据库基础"的学生的姓名、性别、成绩。

    第一种方式:

    SELECT Sname 姓名,Ssex 性别,SC.Grade 成绩

    desc select distinct student.sno,student.ssex,SC.cno,SC.grade from studen t,SC,course where

           student.sdept="计算机系" and student.ssex="" and

               student.sno = SC.sno and SC.cno = (select cno from course where cname = "数据库基础") G;

    第二种方式

    desc select b.sno,b.ssex,a.grade from (select sno,ssex,sname from student) as b,

                                                          (select sno,grade from SC where

                                                          cno = (select cno from course where cname= "数据库基础") ) as a where a.sno = b.sno G;

    (3) 总结

      通常嵌套查询推荐使用join...on...语句,这样会减少临时表的创建,因为select子句会创建临时表

      上述语句虽然都没使用join...on...语句,第二种方式还是比第一种方式少创建了一张临时表,

    并且第二种方式将筛选条件具体到单表上,思路清晰,条件明确,可读性也非常好,性能也是优于第一种方式的。

     

     

     

     

  • 相关阅读:
    cs11_c++_lab4a
    cs11_c++_lab3
    cs11_c++_lab2
    cs11_c++_lab1
    Oracle 11.2.4.0 ACTIVE DATAGUARD 单实例安装(COPY创建备库)
    无备份恢复(归档模式)
    rman datafile恢复(归档模式)
    GHOST(幽灵)重大漏洞
    Windows Linux 之间rsync同步CODE文件
    Centos 6.5 SNMP客户端安装及配置版本net-snmp-5.7.3
  • 原文地址:https://www.cnblogs.com/resolvent/p/6158451.html
Copyright © 2011-2022 走看看