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. loadrunner 关联匹配多个值

    loadrunner 关联获取从服务器返回相关值,如果需要把所有匹配的值都获取并且把这些值打印出来,怎么做呢? 1.首先要把把所有的匹配值都保存起来,需要在关联函数里面多传递一个参数:"Or ...

  2. [k8s]kube-dns架构图解

    kubedns DNS Policy http://blog.fleeto.us/translation/configuring-private-dns-zones-and-upstream-name ...

  3. python os详解

    1.os.getcwd()--起始执行目录 获取当前执行程序文件所在的目录,需要注意的是,getcwd不是获取代码所在文件的目录,也不是获取执行文件所在的目录,而是起始执行目录. 目录结构: test ...

  4. rc.d/rc.local 自动启 tomcat 启不来

    针对自己配置的JDK环境有可能会出现这样的情况. tomcat能启来.但自启动就不行,原因 JDK是后安装的,环境变量配置在 /etc/profile 里面. tomcat 配了自启动.但reboot ...

  5. js中如何把字符串转化为对象、数组示例代码

    很明显是一个对象,但如何把文本转为对象呢.使用eval();注意一定要加括号,否则会转换失败 把文本转化为对象 var test='{ colkey: "col", colsinf ...

  6. CSS实现响应式全屏背景图

    body { /* 加载背景图 */ background-image: url(images/background-photo.jpg); /* 背景图垂直.水平均居中 */ background- ...

  7. TI开发环境下载资源

    CCSV7.0 版本下载  http://processors.wiki.ti.com/index.php/Download_CCS IAR7.10 版本下载 https://www.iar.com/ ...

  8. MySQL高性能优化系列

    https://www.cnblogs.com/huchong/p/10219318.html https://www.cnblogs.com/huchong/tag/MySQL%E9%AB%98%E ...

  9. NUC972----最简单的驱动(转)

    1.新建文本文档,重命名为 hello_dev.c (驱动的开发同应用的开发一样,也是在文本文档下开发的). 2.包含头文件 内核模块需要包含内核相关头文件,不同模块根据功能的差异,所需要的头文件也不 ...

  10. 跟bWAPP学WEB安全(PHP代码)--认证绕过与会话管理

    背景 这里主要是代码逻辑问题,而不是代码使用函数的问题,因此在这个里面就不粘贴具体代码了,而是分类介绍下bWAPP中涉及的安全问题: 验证码问题 找回问题 账号口令问题 Cookies问题 Sessi ...