MYSQL初级学习笔记六:子查询!(视频序号:初级_42 | 43)
知识点八:子查询(42)
什么是子查询:
子查询是将一个查询语句嵌套在另一个查询语句中。内层查询语句的查询结果,可以作为外层查询语句提供条件。
引发子查询的情况:
使用[NOT] IN 的子查询
--删除原本的员工表和部门表,重新建
DROP TABLE employee,department; CREATE TABLE IF NOT EXISTS department(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
depName VARCHAR(20) NOT NULL UNIQUE
)ENGINE=INNODB; INSERT department(depName) VALUES('教学部'),
('市场部'),
('运营部'),
('督导部'); -- 创建员工表employee(子表)
-- id ,username ,depId
CREATE TABLE IF NOT EXISTS employee(
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED
)ENGINE=INNODB; INSERT employee(username,depId) VALUES('king',1),
('queen',2),
('张三',3),
('李四',4),
('王五',1); -- 由[NOT] IN引发的子查询
SELECT id FROM department; SELECT id,username FROM employee WHERE depId IN(1,2,3,4); SELECT id,username FROM employee WHERE depId IN(SELECT id FROM department); SELECT id,username FROM employee WHERE depId NOT IN(SELECT id FROM department); INSERT employee(username,depId) VALUES('testtest',8);
测试[NOT IN]子查询
使用比较运算符的子查询:
=,>,<,>=,<=,<>,!=,ó
使用[NOT] EXISTS的子查询:
-- 创建学员表student
-- id username score
CREATE TABLE IF NOT EXISTS student(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
score TINYINT UNSIGNED
);
INSERT student(username,score) VALUES('king',95),
('king1',35),
('king2',45),
('king3',55),
('king4',65),
('king5',75),
('king6',80),
('king7',90),
('king8',25);
-- 创建奖学金scholarship
-- id ,level CREATE TABLE IF NOT EXISTS scholarship(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
level TINYINT UNSIGNED
);
INSERT scholarship(level) VALUES(90),(80),(70); -- 查询获得1等奖学金的学员有 SELECT level FROM scholarship WHERE id=1; SELECT id,username FROM student WHERE score>=90; SELECT id,username FROM student WHERE score>=(SELECT level FROM scholarship WHERE id=1); -- 查询部门表中 SELECT * FROM department WHERE id=5; SELECT id,username FROM employee WHERE EXISTS(SELECT * FROM department WHERE id=5); SELECT id,username FROM employee WHERE EXISTS(SELECT * FROM department WHERE id=4); SELECT id,username FROM employee WHERE NOT EXISTS(SELECT * FROM department WHERE id=41);
比较运算符与[NOT] EXISTS测试
使用ANY | SOME 或者ALL的子查询:
| 运算符 关键字 | ANY | SOME | ALL |
| >,>= | 最小值 | 最小值 | 最大值 |
| <,<= | 最大值 | 最大值 | 最小值 |
| = | 任意值 | 任意值 | |
| <>,!= | 任意值 |
-- 查询所有获得奖学金的学员 SELECT id,username,score FROM student WHERE score>=ANY(SELECT level FROM scholarship); SELECT id,username,score FROM student WHERE score>=SOME(SELECT level FROM scholarship); -- 查询所有学员中获得一等奖学金的学员
SELECT id,username,score FROM student WHERE score >=ALL(SELECT level FROM scholarship); -- 查询学员表中没有获得奖学金的学员 SELECT id,username,score FROM student WHERE score<ALL(SELECT level FROM scholarship); SELECT id,username,score FROM student WHERE score<ANY(SELECT level FROM scholarship); SELECT id,username,score FROM student WHERE score<=ANY(SELECT level FROM scholarship); -- 相当于IN
SELECT id,username,score FROM student WHERE score=ANY(SELECT level FROM scholarship); SELECT id,username,score FROM student WHERE score IN(SELECT level FROM scholarship); -- 相当于NOT IN
SELECT id,username,score FROM student WHERE score NOT IN(SELECT level FROM scholarship); SELECT id,username,score FROM student WHERE score <> ALL(SELECT level FROM scholarship);
ANY,SOME,ALL测试
将查询结果写入到数据表:
INSERT [INTO] tbl_name [(col_name,…)] SELECT …
建数据表同时将查询结果写入到数据表:
CREATE TABLE [IF NOT EXISTS] tbl_name
[(create_definition,…)]
select_statement
--将查询结果写入到数据表
CREATE TABLE test1 (
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
num TINYINT UNSIGNED
);
INSERT test1(id,num)
SELECT id,score FROM student; CREATE TABLE test2 (
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
num TINYINT UNSIGNED
)SELECT id,score FROM student; CREATE TABLE test3 (
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
score TINYINT UNSIGNED
)SELECT id,score FROM student;
将查询结果写入到数据表测试
MYSQL初级学习笔记六:子查询!(视频序号:初级_42 | 43)的更多相关文章
- MYSQL进阶学习笔记六:MySQL视图的创建,理解及管理!(视频序号:进阶_14,15)
知识点七:MySQL视图的创建(14) 视图的定义: 什么是视图: 视图数由查询结果形成的一张虚拟的表. 什么时候要用到视图? 如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询. ...
- MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)
知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...
- linux初级学习笔记六:linux用户及权限详解!(视频序号:03_4)
本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd ...
- mysql的学习笔记(六)
1.字符函数 (1).CONCAT(str1,str2,...)函数,将多列信息合并输出. SELECT CATCAT('hello','mysql') as test (2).CONCAT_WS(' ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 尚硅谷MySQL高级学习笔记
目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...
- 基于【 MySql 】二 || mysql详细学习笔记
mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- tensorflow加载embedding模型进行可视化
1.功能 采用python的gensim模块训练的word2vec模型,然后采用tensorflow读取模型可视化embedding向量 ps:采用C++版本训练的w2v模型,python的gensi ...
- 教妹学 Java:大有可为的集合
00.故事的起源 “二哥,上一篇<泛型>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很是关心. “有人评论说,‘二哥你敲代码都敲出幻想了啊.’” “呵呵,这句话 ...
- 关于几种UI框架简单总结
最近两年多的时间先后做过几款终端程序,UI框架从MFC转向过WxWidgets,之后再转向Qt.三种框架精通远谈不上,用起来还是没什么问题. 简单聊聊三种框架的优缺点. 1.MFC 似乎作为一种饱受批 ...
- 391. Perfect Rectangle
最后更新 一刷 16-Jan-2017 这个题我甚至不知道该怎么总结. 难就难在从这个题抽象出一种解法,看了别人的答案和思路= =然而没有归类总结到某种类型,这题相当于背了个题... 简单的说,除了最 ...
- Mqtt协议IOS端移植3
ServerMqFramework.h #import "MqttFramework.h" @interface ServerMqFramework : MqttFramework ...
- [Servlet&JSP] 标准标签
在JSP的规范中提供了一些标准标签(Standard Tag),全部的容器都支持这些标签,它能够协助编写JSP时降低Scriptlet的使用. 全部的标准标签都使用jsp:作为前置.这些标准标签是在J ...
- Gas Station,转化为求最大序列的解法,和更简单简单的Jump解法。——贪心、转化
Gas Station There are N gas stations along a circular route, where the amount of gas at station i is ...
- vimrc 避免中文乱码配置
et smsyntax onset ts=4set sts=4set sw=4set hlsearchset rulerset backspace=indent,eol,startset encodi ...
- 一场由股票提醒助手插件引发的血案——浅入浅出 jquery autocomplete
我没有学过前端,所以这篇文章注定要班门弄斧了. 通常,须要用到什么技术什么语言时,我才去学,学了也不一定掌握,就是记不住!所以如今明确了.学习的时候,亦或是攻克难点的时候,一定要记录下来.并不一定非要 ...
- Android Dynamic Action(动态Action)—像访问网页一样地访问Activity
Android Dynamic Action,简称DA,是一种简便.可变Action的实现方案.DA框架的初衷是为了取代Context.startActivity的调用方式,使用建造者模式(Build ...