1. mysql> SET @w := SELECT COUNT(*) FROM course WHERE cteacher='程军';
  2. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
  3. the right syntax to use near 'SELECT COUNT(*) FROM course WHERE cteacher='程军'' at line 1
  4. mysql> SELECT @w;
  5. +------+
  6. | @w |
  7. +------+
  8. | NULL |
  9. +------+
  10. 1 row in set (0.00 sec)
  11.  
  12. mysql> SET @w := (SELECT COUNT(*) FROM course WHERE cteacher='程军');
  13. Query OK, 0 rows affected (0.00 sec)
  14.  
  15. mysql> SELECT @w;
  16. +------+
  17. | @w |
  18. +------+
  19. | 2 |
  20. +------+
  21. 1 row in set (0.00 sec)
  22.  
  23. mysql>
  1. SHOW TABLES;
  2. DROP TABLE IF EXISTS student;
  3. SHOW TABLES;
  4. CREATE TABLE IF NOT EXISTS student
  5. (
  6. sno int primary key,
  7. sname VARCHAR(20) CHARACTER SET gbk,
  8. sage TINYINT,
  9. shair ENUM('黑','白') CHARACTER SET gbk
  10. );
  11. INSERT INTO student VALUES('','李强',23,'黑');
  12. INSERT INTO student VALUES('','刘丽',22,'白');
  13. INSERT INTO student VALUES('','张友',22,'黑');
  14. SELECT * FROM student;
  15.  
  16. SHOW TABLES;
  17. DROP TABLE IF EXISTS course;
  18. SHOW TABLES;
  19. CREATE TABLE IF NOT EXISTS course
  20. (
  21. cno VARCHAR(10) primary key,
  22. cname VARCHAR(20) CHARACTER SET gbk,
  23. cteacher VARCHAR(20) CHARACTER SET gbk
  24. );
  25. INSERT INTO course VALUES('k1','c语言','王华');
  26. INSERT INTO course VALUES('k5','数据库原理','程军');
  27. INSERT INTO course VALUES('k8','编译原理','程军');
  28. SELECT * FROM course;
  29.  
  30. SHOW TABLES;
  31. DROP TABLE IF EXISTS sc;
  32. SHOW TABLES;
  33. CREATE TABLE IF NOT EXISTS sc
  34. (
  35. fk_sno INT NOT NULL,
  36. fk_cno VARCHAR(10) NOT NULL,
  37. score INT NOT NULL,
  38. PRIMARY KEY(fk_sno,fk_cno),
  39. FOREIGN KEY(fk_sno) REFERENCES student(sno),
  40. FOREIGN KEY(fk_cno) REFERENCES course(cno)
  41. );
  42. INSERT INTO sc VALUES('','K1',83);
  43. INSERT INTO sc VALUES('','K1',85);
  44. INSERT INTO sc VALUES('','K1',92);
  45. INSERT INTO sc VALUES('','K5',90);
  46. INSERT INTO sc VALUES('','K5',84);
  47. INSERT INTO sc VALUES('','K8',80);
  48. SELECT * FROM sc;

1-检索至少选修"程军"老师所授全部课程的学生姓名(SNAME)
检索选修了“程军”老师所授全部课程的学生姓名

0-检索选修了“程军”老师所授课程的学生

  1. SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno;
  2. SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno;
  3. SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno WHERE cteacher='程军';

集合子集,逐步精确,缩小范围 1-是学生-2-选程老师的课-3-选了程老师所有的课

/*

假定

“ 某学生选程老师的课程门数等于程老师所开门数”等价于“该学生至少选了程老师的所有的课程”。

*/

  1. SELECT sname FROM student
  2. WHERE
  3. (
  4. SELECT COUNT(*) FROM
  5. (
  6. SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno
  7. WHERE cteacher = '程军'
  8. ) wb
  9. WHERE wb.sname = student.sname
  10. )
  11. =
  12. (SELECT COUNT(*) FROM course WHERE cteacher='程军');

/* 0-澄清问题:找出至少选了程老师全部课程的学生:学生-没有选程老师的课+学生选了程老师的部分的课+学生选了程老师全部的课

等价转化:找出选了程老师部分的课或者没有选程老师的课的学生

数据关系:学生和老师没有数据关系,是两个完全独立的数据对象,分数是桥梁

等价转化:

  选了部分程老师的课 ,NOT EXISTS (SELECT * FROM sc WHERE sc.sno = student AND sc.cno=course.cno)->FALSE (内层SELECT不空,TRUE,退出)

  没有选程老师的课 teacher='程军'->FALSE ,后边的不用看了(中层SELECT空,FALSE,退出)

  外中内-三层SELECT,外层返回的是最终的结果

  最外层选得的最终量result,学生姓名,它的措施是将各个学生名称带入,逐个检测

1-程序表达: */

  1. SELECT sname FROM student
  2. WHERE NOT EXISTS
  3. (
  4. SELECT * FROM course
  5. WHERE cteacher='程军' AND NOT EXISTS
  6. (
  7. SELECT * FROM sc
  8. WHERE sc.fk_sno = student.sno AND sc.fk_cno = course.cno
  9. )
  10. ) ;

2- 检索选修全部课程的学生姓名(SNAME)。

  1. SELECT sname FROM student
  2. WHERE
  3. (
  4. SELECT COUNT(*) FROM
  5. (
  6. SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno
  7. ) wb
  8. WHERE wb.sname = student.sname
  9. )
  10. =
  11. (SELECT COUNT(*) FROM course );
  12.  
  13. SELECT sname FROM student
  14. WHERE NOT EXISTS
  15. (
  16. SELECT * FROM course
  17. WHERE NOT EXISTS
  18. (
  19. SELECT * FROM sc
  20. WHERE sc.fk_sno = student.sno AND sc.fk_cno = course.cno
  21. )
  22. );
  23.  
  24. SELECT * FROM course
  25. WHERE NOT EXISTS
  26. (
  27. SELECT 3>5
  28. );
  29.  
  30. SELECT * FROM course
  31. WHERE EXISTS
  32. (
  33. SELECT 3>5
  34. );

explain

  1. mysql> explain
  2. -> SELECT sname FROM student
  3. -> WHERE
  4. -> (
  5. -> SELECT COUNT(*) FROM
  6. -> (
  7. -> SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno
  8. -> ) wb
  9. -> WHERE wb.sname = student.sname
  10. -> )
  11. -> =
  12. -> (SELECT COUNT(*) FROM course );
  13. +----+--------------------+---------+------------+--------+----------------+---------+---------+-------------------+------+----------+------------------------------+
  14. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
  15. +----+--------------------+---------+------------+--------+----------------+---------+---------+-------------------+------+----------+------------------------------+
  16. | 1 | PRIMARY | student | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | Using where |
  17. | 5 | SUBQUERY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
  18. | 2 | DEPENDENT SUBQUERY | student | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 33.33 | Using where |
  19. | 2 | DEPENDENT SUBQUERY | sc | NULL | ref | PRIMARY,fk_cno | PRIMARY | 4 | w0811.student.sno | 2 | 100.00 | Using index |
  20. | 2 | DEPENDENT SUBQUERY | course | NULL | eq_ref | PRIMARY | PRIMARY | 12 | w0811.sc.fk_cno | 1 | 100.00 | Using index |
  21. +----+--------------------+---------+------------+--------+----------------+---------+---------+-------------------+------+----------+------------------------------+
  22. 5 rows in set, 2 warnings (0.00 sec)
  23.  
  24. mysql>
  25. mysql> explain
  26. -> SELECT sname FROM student
  27. -> WHERE NOT EXISTS
  28. -> (
  29. -> SELECT * FROM course
  30. -> WHERE NOT EXISTS
  31. -> (
  32. -> SELECT * FROM sc
  33. -> WHERE sc.fk_sno = student.sno AND sc.fk_cno = course.cno
  34. -> )
  35. -> );
  36. +----+--------------------+---------+------------+--------+----------------+---------+---------+------------------------------------+------+----------+--------------------------+
  37. | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
  38. +----+--------------------+---------+------------+--------+----------------+---------+---------+------------------------------------+------+----------+--------------------------+
  39. | 1 | PRIMARY | student | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | Using where |
  40. | 2 | DEPENDENT SUBQUERY | course | NULL | index | NULL | PRIMARY | 12 | NULL | 3 | 100.00 | Using where; Using index |
  41. | 3 | DEPENDENT SUBQUERY | sc | NULL | eq_ref | PRIMARY,fk_cno | PRIMARY | 16 | w0811.student.sno,w0811.course.cno | 1 | 100.00 | Using index |
  42. +----+--------------------+---------+------------+--------+----------------+---------+---------+------------------------------------+------+----------+--------------------------+
  43. 3 rows in set, 3 warnings (0.00 sec)
  44.  
  45. mysql>

“带入遍历”,“重复循环”,这是上边代码原貌,而两种思路的区别仅仅是让计算机计算时怎样“重复次数”少一点。

http://blog.csdn.net/wolfofsiberian/article/details/39346781

发问:

0-语言只是工具而已,不是解决问题方法的源泉,怎么减少对接语法API的时间?

User-Defined Variables的更多相关文章

  1. JMeter学习参数化User Defined Variables与User Parameters

    偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...

  2. 【jmeter】参数化User Defined Variables与User Parameters

    偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...

  3. JMeter学习(十)参数化User Defined Variables与User Parameters(转载)

    转载自 http://www.cnblogs.com/yangxia-test 偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近, ...

  4. 【转】JMeter学习参数化User Defined Variables与User Parameters

    偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...

  5. JMeter学习笔记(九) 参数化3--User Defined Variables

    3.User Defined Variables 1)添加用户定义的变量 2)添加变量 3)添加HTTP请求,引用变量,格式:${} 4)执行HTTP请求,察看结果树 5)用户定义的变量,优缺点: * ...

  6. JMeter学习(十二)JMeter学习参数化User Defined Variables与User Parameters

    相同点:二者都是进行参数化的. 一.User Defined Variables 1.添加方法:选择“线程组”,右键点击添加-Config Element-User Defined Variables ...

  7. jmeter 参数化3_User Defined Variables(用户自定义变量)

    User Defined Variables:  一般用于Test Plan中不需要随请求迭代的参数设置,如:Host.Port Number 操作路径:Thread Group-->Add-- ...

  8. Debian Environment Variables

    原文:EnvironmentVariables General Environment variables are named strings available to all application ...

  9. PowerShell Remove all user defined variable in PowerShell

    When PS scripts executes, it is possibly create much user defined variables. So, sometimes these var ...

  10. [Erlang 0113] Elixir 编译流程梳理

    注意:目前Elixir版本还不稳定,代码调整较大,本文随时失效      之前简单演示过如何从elixir ex代码生成并运行Erlang代码,下面仔细梳理一遍elixir文件的编译过程,书接上文,从 ...

随机推荐

  1. eclipse开发android入门学习

    1.device窗体            查看android执行情况的窗体和DDMS内容一致 2.android.bat             在adb路径下执行adb操作,实现android系统 ...

  2. python(60):configparser 函数,配置文件

    ConfigParser模块学习 介绍 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每 ...

  3. Ubuntu 卸载重装 IntelliJ Idea Community

    参考: https://stackoverflow.com/questions/22983101/how-to-uninstall-intellij-idea-on-ubuntu-13-10 @SLH ...

  4. [firefox] Scrapbook Plus的改进版Scrapbook X

    我在两年前的博文<Firefox上一些我用于知识管理的扩展> 里面提到过我在用Scrapbook Plus这个Firefox扩展, 用它来撷取网页构建自己的知识库(可以加标注.可以搜索.可 ...

  5. 【emWin】例程二十八:窗口对象——Menu

    简介: MENU 小工具可用于创建若干种菜单.每个菜单项代表一个应用程序命令或 子菜单.MENU 可水平显示和/ 或垂直显示.菜单项可使用分隔符进行分组.水 平菜单和垂直菜单均支持分隔符.选择一个菜单 ...

  6. 阿里巴巴面试之利用两个int值实现读写锁

    首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资 ...

  7. Java知多少(88)列表和组合框

    列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...

  8. ubuntu 原生迅雷

    https://github.com/Xinkai/XwareDesktop/wiki

  9. Docker的概念术语(2)

    Docker是什么? Docker是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台.使用Linux容器部署应用程序称为容器化.Linux容器不是一个全新的概念,它们用于轻松部署应用程序. ...

  10. WP8.1学习系列(第二十七章)——ListView和GridView入门

    快速入门:添加 ListView 和 GridView 控件 (XAML)   在本文中 先决条件 选择 ListView 或 GridView 将项添加到项集合 设置项目源 指定项目的外观 指定视图 ...