zoukankan      html  css  js  c++  java
  • mysql 试题

    select id from t where num/2=100 和 select id from t where num=100*2
    那一条select更为优化,为什么?

    select 语句执行顺序
    (8)SELECT (9)DISTINCT
    (11)<TOP_specification> <select_list>
    (1)FROM <left_table>
    (3) <join_type> JOIN <right_table>
    (2)  ON <join_condition>
    (4)WHERE <where_condition>
    (5)GROUP BY <group_by_list>
    (6)WITH {CUBE | ROLLUP}
    (7)HAVING <having_condition>
    (10)ORDER BY <order_by_list>
    1.FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
    2.ON: 对虚表VT1进行ON筛选,只有那些符合的行才会被记录在虚表VT2中。
    3.JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。
    4.WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表VT4中。
    5.GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
    6.CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
    7.HAVING: 对虚拟表VT6应用having过滤,只有符合的记录才会被 插入到虚拟表VT7中。
    8.SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
    9.DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
    10.ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
    11.LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

    --1.学生表
    Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
    --2.课程表
    Course(C,Cname,T) --C --课程编号,Cname 课程名称,T 教师编号
    --3.教师表
    Teacher(T,Tname) --T 教师编号,Tname 教师姓名
    --4.成绩表
    SC(S,C,score) --S 学生编号,C 课程编号,score 分数

    、查询"李"姓老师的数量

    SELECT COUNT(1) FROM teacherWHERE tname LIKE '李%'

    、查询没学过"张三"老师授课的同学的信息
    SELECT a.*
    FROM student a
    LEFT JOIN sc b
    ON a.s=b.s
    WHERE NOT EXISTS(
    SELECT *
    FROM course aa
    INNER JOIN teacher b
    ON aa.t=b.t
    INNER JOIN sc c
    ON aa.c=c.c
    WHERE b.tname='张三'
    AND c.s=a.s
    )
    GROUP BY 1,2,3,4

    --、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息
    SELECT a.*
    FROM student a
    INNER JOIN sc b
    ON a.s=b.s AND b.c='01'
    INNER JOIN sc c
    ON a.s=c.s AND c.c='02'

    --、查询没有学全所有课程的同学的信息

    SELECT a.*
    FROM student a
    LEFT JOIN sc b
    ON a.s=b.s
    LEFT JOIN (SELECT COUNT(1) anumFROM course) c
    ON 1=1
    GROUP BY 1,2,3,4
    HAVING MAX(c.anum)>COUNT(b.c)

  • 相关阅读:
    配置JAVA环境
    Sun Java认证
    JAVA中去掉空格
    2011年百度新闻热搜榜十大互联网人物
    23 设计模式
    HTML编辑器FCKeditor使用详解 [转]
    Linux 系统目录结构
    DotNet程序员是不是最不幸福?
    VS2005(c#)项目调试问题解决方案集锦 转
    详细介绍有关于.NET的委托
  • 原文地址:https://www.cnblogs.com/jian-pan/p/7458227.html
Copyright © 2011-2022 走看看