(-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. [No0000AA]Windows 系统环境变量列表

    环境变量 详细信息 %ALLUSERSPROFILE% 所有用户 Profile 文件位置 %APPDATA% 应用程序数据的默认存放位置 %CD% 当前目录 %CLIENTNAME% 联接到终端服务 ...

  2. iOS CoreAnimation详解(一) 有关Layer的动画

    以前由于项目需要 也写了一些动画 ,但是知识不系统,很散.这段时间趁着项目完成的空袭,来跟着大神的脚步系统的总结一下iOS中Core Animation的知识点. 原博客地址:http://blog. ...

  3. HTML5使用jplayer播放音频、视频

    首先推上神器 jPlayer:基于HTML5/Flash的音频.视频播放器 jPlayer是一个JavaScript写的完全免费和开源 (MIT) 的jQuery多媒体库插件 (现在也是一个Zepto ...

  4. 深入C#编程

    1.NET框架 1.1.NET框架结构 VB.NET C# F# lronruby others.... .NET FrameWork(FCL) 公共语言进行时(CLR) 操作系统 .NET框架具有两 ...

  5. [LeetCode] Shortest Distance from All Buildings 建筑物的最短距离

    You want to build a house on an empty land which reaches all buildings in the shortest amount of dis ...

  6. 深入理解numpy

    一.为啥需要numpy python虽然说注重优雅简洁,但它终究是需要考虑效率的.别说运行速度不是瓶颈,在科学计算中运行速度就是瓶颈. python的列表,跟java一样,其实只是一维列表.一维列表相 ...

  7. C语言内存分配方法。

    当C程序运行在操作系统上时,操作系统会给每一个程序分配一定的栈空间. 堆为所有程序共有的,需要时需要申请访问. 一.栈 局部变量.函数一般在栈空间中. 运行时自动分配&自动回收:栈是自动管理的 ...

  8. django自带加密模块的使用

    首先,引入模块:  代码如下 复制代码 >>> from django.contrib.auth.hashers import make_password, check_passwo ...

  9. h5面试题集合

    一.闭包的理解: 使用闭包主要是为了设计私有的方法和变量.闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露. 闭包三个特性: 1.函数嵌套函数 ; ...

  10. maven和svn区别

    构建工具-maven,版本控制工具-svn. 一.只有svn的情况        首先考虑没有maven的情况.这样的话,项目组每个开发人员,都需要在本地check out所有的源码. 每次提交之前, ...