User-Defined Variables
- 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的更多相关文章
- JMeter学习参数化User Defined Variables与User Parameters
偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...
- 【jmeter】参数化User Defined Variables与User Parameters
偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...
- JMeter学习(十)参数化User Defined Variables与User Parameters(转载)
转载自 http://www.cnblogs.com/yangxia-test 偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近, ...
- 【转】JMeter学习参数化User Defined Variables与User Parameters
偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同.使用时却发现两者使用场景有些不同,现在小结一 ...
- JMeter学习笔记(九) 参数化3--User Defined Variables
3.User Defined Variables 1)添加用户定义的变量 2)添加变量 3)添加HTTP请求,引用变量,格式:${} 4)执行HTTP请求,察看结果树 5)用户定义的变量,优缺点: * ...
- JMeter学习(十二)JMeter学习参数化User Defined Variables与User Parameters
相同点:二者都是进行参数化的. 一.User Defined Variables 1.添加方法:选择“线程组”,右键点击添加-Config Element-User Defined Variables ...
- jmeter 参数化3_User Defined Variables(用户自定义变量)
User Defined Variables: 一般用于Test Plan中不需要随请求迭代的参数设置,如:Host.Port Number 操作路径:Thread Group-->Add-- ...
- Debian Environment Variables
原文:EnvironmentVariables General Environment variables are named strings available to all application ...
- PowerShell Remove all user defined variable in PowerShell
When PS scripts executes, it is possibly create much user defined variables. So, sometimes these var ...
- [Erlang 0113] Elixir 编译流程梳理
注意:目前Elixir版本还不稳定,代码调整较大,本文随时失效 之前简单演示过如何从elixir ex代码生成并运行Erlang代码,下面仔细梳理一遍elixir文件的编译过程,书接上文,从 ...
随机推荐
- eclipse开发android入门学习
1.device窗体 查看android执行情况的窗体和DDMS内容一致 2.android.bat 在adb路径下执行adb操作,实现android系统 ...
- python(60):configparser 函数,配置文件
ConfigParser模块学习 介绍 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每 ...
- Ubuntu 卸载重装 IntelliJ Idea Community
参考: https://stackoverflow.com/questions/22983101/how-to-uninstall-intellij-idea-on-ubuntu-13-10 @SLH ...
- [firefox] Scrapbook Plus的改进版Scrapbook X
我在两年前的博文<Firefox上一些我用于知识管理的扩展> 里面提到过我在用Scrapbook Plus这个Firefox扩展, 用它来撷取网页构建自己的知识库(可以加标注.可以搜索.可 ...
- 【emWin】例程二十八:窗口对象——Menu
简介: MENU 小工具可用于创建若干种菜单.每个菜单项代表一个应用程序命令或 子菜单.MENU 可水平显示和/ 或垂直显示.菜单项可使用分隔符进行分组.水 平菜单和垂直菜单均支持分隔符.选择一个菜单 ...
- 阿里巴巴面试之利用两个int值实现读写锁
首先我们对读写锁做一个概述: 假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁.在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资 ...
- Java知多少(88)列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...
- ubuntu 原生迅雷
https://github.com/Xinkai/XwareDesktop/wiki
- Docker的概念术语(2)
Docker是什么? Docker是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台.使用Linux容器部署应用程序称为容器化.Linux容器不是一个全新的概念,它们用于轻松部署应用程序. ...
- WP8.1学习系列(第二十七章)——ListView和GridView入门
快速入门:添加 ListView 和 GridView 控件 (XAML) 在本文中 先决条件 选择 ListView 或 GridView 将项添加到项集合 设置项目源 指定项目的外观 指定视图 ...