(-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. JQuery中$.ajax()方法参数详解 及 async属性说明

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

  2. chrome快捷键

    常用的为: Ctrl + ]   下一个面板 Ctrl + [   上一个面板 Ctrl + Alt + [ 去上一个历史记录的面板Ctrl + Alt + ]      去下一个历史记录的面板 Ct ...

  3. Neural Pathways of Interaction Mediating the Central Control of Autonomic Bodily State 自主神经系统-大脑调节神经通路

    Figure above: Critchley H D, Harrison N A. Visceral influences on brain and behavior[J]. Neuron, 201 ...

  4. 台式机装原版Win2008R2

    台式机装原版Win2008R2 坑了老半天,总结出几点 1,系统os下载: http://msdn.itellyou.cn/ 注:其他地方下载的,装后发现不是起不来就是驱动装不了. 2,u盘里放个压缩 ...

  5. [LeetCode] Flatten 2D Vector 压平二维向量

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  6. [LeetCode] Count Univalue Subtrees 计数相同值子树的个数

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  7. archlinux安裝手记(Win10+Arch、GPT+UEFI、lvm)

    准备工具和设置制作启动盘连接网络硬盘分区规划分区LVM方案创建文件系统分区挂载激活lvm2钩子基础安装和配置配置镜像源基础系统安装fstab进入系统initramfs引导程序网络搭建使用环境用户管理用 ...

  8. jQuery之核心API

    1. jQuery.holdReady()方法:暂停或恢复.ready() 事件的执行.在$.holdReady()方法允许调用者延迟jQuery的ready事件.这种先进的功能,通常会被用来允许在 ...

  9. form 表单基础知识

    <form method=" name="one" action="http://www.battlenet.com.cn/zh/"> & ...

  10. neo4j-jersey分嵌入式和服务式连接图形数据库

    原文载自:http://blog.csdn.net/yidian815/article/details/12887259 嵌入式: 引入neo4j依赖 <dependency> <g ...