(-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...语句,第二种方式还是比第一种方式少创建了一张临时表,

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

mysql SQL优化之嵌套查询-遁地龙卷风的更多相关文章

  1. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  2. mysql索引优化比普通查询速度快多少

    mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...

  3. SQL优化之慢查询和explain以及性能分析

    性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句 使用explain去查看该sql的执行计划 使用show profile去查看该sql执行时的性能问题 MySQL性能优化 ...

  4. MySQL SQL优化

    一.优化数据库的一般步骤: (A) 通过 show status 命令了解各种SQL的执行频率. (B) 定位执行效率较低的SQL语句,方法两种: 事后查询定位:慢查询日志:--log-slow-qu ...

  5. 18.Mysql SQL优化

    18.SQL优化18.1 优化SQL语句的一般步骤 18.1.1 通过show status命令了解各种SQL的执行频率show [session|global] status; -- 查看服务器状态 ...

  6. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  7. Mysql SQL优化&执行计划

    SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在 ...

  8. mysql数据库优化[千万级查询]

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. mysql sql优化及注意事项

    sql优化分析 通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引.不必要的数据访问和排序)当我们面对具体的sql时,首先查看其执行计划A.看其是否使用索 ...

随机推荐

  1. codevs 1490 【CTSC2008】 网络管理

    题目链接:网络管理 好久没写这种类型的题了--手都生了-- 一句话题意:树上带修改的区间\(k\)大数.这题面怎么有点眼熟 显然树上的题目我们可以先在序列上考虑一下.区间带修改的区间\(k\)大数有两 ...

  2. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  3. [LeetCode] Encode String with Shortest Length 最短长度编码字符串

    Given a non-empty string, encode the string such that its encoded length is the shortest. The encodi ...

  4. [LeetCode] Sentence Screen Fitting 调整屏幕上的句子

    Given a rows x cols screen and a sentence represented by a list of words, find how many times the gi ...

  5. [LeetCode] Largest Rectangle in Histogram 直方图中最大的矩形

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  6. [LeetCode] Generate Parentheses 生成括号

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  7. 如何在一台新电脑上配置JAVA开发环境

    对于JAVA新手来说,刚开始要学JAVA,而自己的电脑上毫无与JAVA开发有关的环境,应该如何进行配置呢? (安卓新手也需要JAVA开发环境) 第一步,下载.安装java JRE JRE (Java ...

  8. Android---观察者模式的简单实现demo

    ObserverListerner: subjectListener: 观察者管理类: 使用方法: 1. 接口: 2. 注册观察者: 3. 通知:(触发事件执行): 4. 实现方法:(都要写, 只在要 ...

  9. day8-------socket网络编程

    简单的socket  一个server同时只能处理一个链接   代码如下: server端代码 #author = ruixin li import socket server = socket.so ...

  10. Deconvolution Using Theano

    Transposed Convolution, 也叫Fractional Strided Convolution, 或者流行的(错误)称谓: 反卷积, Deconvolution. 定义请参考tuto ...