mysql> SET @w := SELECT COUNT(*) FROM course WHERE cteacher='程军';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
the right syntax to use near 'SELECT COUNT(*) FROM course WHERE cteacher='程军'' at line 1
mysql> SELECT @w;
+------+
| @w |
+------+
| NULL |
+------+
1 row in set (0.00 sec) mysql> SET @w := (SELECT COUNT(*) FROM course WHERE cteacher='程军');
Query OK, 0 rows affected (0.00 sec) mysql> SELECT @w;
+------+
| @w |
+------+
| 2 |
+------+
1 row in set (0.00 sec) mysql>
 SHOW TABLES;
DROP TABLE IF EXISTS student;
SHOW TABLES;
CREATE TABLE IF NOT EXISTS student
(
sno int primary key,
sname VARCHAR(20) CHARACTER SET gbk,
sage TINYINT,
shair ENUM('黑','白') CHARACTER SET gbk
);
INSERT INTO student VALUES('','李强',23,'黑');
INSERT INTO student VALUES('','刘丽',22,'白');
INSERT INTO student VALUES('','张友',22,'黑');
SELECT * FROM student; SHOW TABLES;
DROP TABLE IF EXISTS course;
SHOW TABLES;
CREATE TABLE IF NOT EXISTS course
(
cno VARCHAR(10) primary key,
cname VARCHAR(20) CHARACTER SET gbk,
cteacher VARCHAR(20) CHARACTER SET gbk
);
INSERT INTO course VALUES('k1','c语言','王华');
INSERT INTO course VALUES('k5','数据库原理','程军');
INSERT INTO course VALUES('k8','编译原理','程军');
SELECT * FROM course; SHOW TABLES;
DROP TABLE IF EXISTS sc;
SHOW TABLES;
CREATE TABLE IF NOT EXISTS sc
(
fk_sno INT NOT NULL,
fk_cno VARCHAR(10) NOT NULL,
score INT NOT NULL,
PRIMARY KEY(fk_sno,fk_cno),
FOREIGN KEY(fk_sno) REFERENCES student(sno),
FOREIGN KEY(fk_cno) REFERENCES course(cno)
);
INSERT INTO sc VALUES('','K1',83);
INSERT INTO sc VALUES('','K1',85);
INSERT INTO sc VALUES('','K1',92);
INSERT INTO sc VALUES('','K5',90);
INSERT INTO sc VALUES('','K5',84);
INSERT INTO sc VALUES('','K8',80);
SELECT * FROM sc;

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

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

 SELECT * FROM sc RIGHT JOIN course ON  sc.fk_cno=course.cno;
SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno;
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-选了程老师所有的课

/*

假定

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

*/

             SELECT sname FROM student
WHERE
(
SELECT COUNT(*) FROM
(
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 = '程军'
) wb
WHERE wb.sname = student.sname
)
=
(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-程序表达: */

 SELECT sname FROM student
WHERE NOT EXISTS
(
SELECT * FROM course
WHERE cteacher='程军' AND NOT EXISTS
(
SELECT * FROM sc
WHERE sc.fk_sno = student.sno AND sc.fk_cno = course.cno
)
) ;

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

 SELECT sname FROM student
WHERE
(
SELECT COUNT(*) FROM
(
SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno
) wb
WHERE wb.sname = student.sname
)
=
(SELECT COUNT(*) FROM course ); SELECT sname FROM student
WHERE NOT EXISTS
(
SELECT * FROM course
WHERE NOT EXISTS
(
SELECT * FROM sc
WHERE sc.fk_sno = student.sno AND sc.fk_cno = course.cno
)
); SELECT * FROM course
WHERE NOT EXISTS
(
SELECT 3>5
); SELECT * FROM course
WHERE EXISTS
(
SELECT 3>5
);

explain

 mysql> explain
-> SELECT sname FROM student
-> WHERE
-> (
-> SELECT COUNT(*) FROM
-> (
-> SELECT * FROM (SELECT * FROM sc RIGHT JOIN course ON sc.fk_cno=course.cno) w RIGHT JOIN student ON w.fk_sno=student.sno
-> ) wb
-> WHERE wb.sname = student.sname
-> )
-> =
-> (SELECT COUNT(*) FROM course );
+----+--------------------+---------+------------+--------+----------------+---------+---------+-------------------+------+----------+------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+---------+------------+--------+----------------+---------+---------+-------------------+------+----------+------------------------------+
| 1 | PRIMARY | student | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | Using where |
| 5 | SUBQUERY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Select tables optimized away |
| 2 | DEPENDENT SUBQUERY | student | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 33.33 | Using where |
| 2 | DEPENDENT SUBQUERY | sc | NULL | ref | PRIMARY,fk_cno | PRIMARY | 4 | w0811.student.sno | 2 | 100.00 | Using index |
| 2 | DEPENDENT SUBQUERY | course | NULL | eq_ref | PRIMARY | PRIMARY | 12 | w0811.sc.fk_cno | 1 | 100.00 | Using index |
+----+--------------------+---------+------------+--------+----------------+---------+---------+-------------------+------+----------+------------------------------+
5 rows in set, 2 warnings (0.00 sec) mysql>
mysql> explain
-> SELECT sname FROM student
-> WHERE NOT EXISTS
-> (
-> SELECT * FROM course
-> WHERE NOT EXISTS
-> (
-> SELECT * FROM sc
-> WHERE sc.fk_sno = student.sno AND sc.fk_cno = course.cno
-> )
-> );
+----+--------------------+---------+------------+--------+----------------+---------+---------+------------------------------------+------+----------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+---------+------------+--------+----------------+---------+---------+------------------------------------+------+----------+--------------------------+
| 1 | PRIMARY | student | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | Using where |
| 2 | DEPENDENT SUBQUERY | course | NULL | index | NULL | PRIMARY | 12 | NULL | 3 | 100.00 | Using where; Using index |
| 3 | DEPENDENT SUBQUERY | sc | NULL | eq_ref | PRIMARY,fk_cno | PRIMARY | 16 | w0811.student.sno,w0811.course.cno | 1 | 100.00 | Using index |
+----+--------------------+---------+------------+--------+----------------+---------+---------+------------------------------------+------+----------+--------------------------+
3 rows in set, 3 warnings (0.00 sec) 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. Fluent动网格【4】:DEFINE_CG_MOTION宏实例

    DEFINE_CG_MOTION宏通常用于定义刚体部件的运动.本文以一个简单的案例描述DEFINE_CG_MOTION的使用方法. 案例描述 本次计算的案例如图所示.在计算域中有一个刚体块(图中的小正 ...

  2. spring aop 之xml

    1.类库 2.aop概念 一个切面可以有多个切点 3.在方法前后进行aop的测试代码 3.1aop.xml <beans xmlns="http://www.springframewo ...

  3. linux下依赖库的版本问题引起的安装失败:libssl-dev版本问题无法安装 :libssl-dev : 依赖: libssl1.0.0 (= 1.0.1-4ubuntu3) 但是 1.0.1-4ubuntu5.31 正要被安装

    依赖库版本问题引起的安装失败解决方法如下有两种: 1.是由于源需要更新,如下操作: libssl-dev : 依赖: libssl0.9.8 (= 0.9.8o-1ubuntu4) 但是 0.9.8o ...

  4. Oracle清理回收站的方法

    原文链接:http://blog.itpub.net/18841027/viewspace-1057765/ purge DBA_RECYCLEBIN用于删除Oracle数据库回收站的所有数据,需要s ...

  5. SpringMVC注解@RequestParam与RequestMapping全面解析

    1.@RequestParam用法: SpringMVC后台控制层获取参数的方式主要有两种, 一种是request.getParameter("name"), 另外一种是用注解@R ...

  6. 仿迅雷播放器教程 -- C++界面制作方法的对比 (9)

        上一个教程对比的5个方向共7个界面框架,都是非常权威,应用很广泛的库,绝对是非常稳定,并且能够做出常见的界面出来,可以放心大胆的用在项目里.     但那7个界面框架再好,也总是没有绝对的优势 ...

  7. [Full-stack] 快速上手开发 - React

    故事背景 [1] 博客笔记结合<React快速上手开发>再次系统地.全面地走一遍. [2] React JS Tutorials:包含了JS --> React --> Red ...

  8. asp.net mvc 3.0 知识点整理 ----- (4).asp.net mvc 3 和asp.net mvc 4 对比

    asp.net mvc的版本更新很快,每个版本都在前一个版本的基础上,进行性能的优化和功能的完善和提升. 以下,便是我对比了下两个版本,发现最基本的差异.(更新补充中..) 一.关于配置类Global ...

  9. 【问题集】redis集群set报错(error) MOVED 11469 192.168.181.201:7002

    没有启动集群模式(即缺少了那个"-c"): redis-cli -c -h yourhost -p yourpost

  10. 转载->C#异常处理

    C# 异常处理 异常是在程序执行期间出现的问题.C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零. 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式.C# 异常处理时建立 ...