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 ...
随机推荐
- poj 3304 判断是否存在一条直线与所有线段相交
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8579 Accepted: 2608 Descript ...
- Dynamic Rankings(zoj 2112)
题意:带修改的第K大 #include<cstdio> #include<iostream> #include<cstring> #define N 400010 ...
- 玩具装箱 BZOJ 1010
玩具装箱 [问题描述] P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- 升级python2至python3解决依赖关系
1.最小化安装centos7,在升级python3的时候会出现很多包未安装,为解决依赖关系: yum -y install gcc gcc-c++ zlib zlib-devel libffi-dev ...
- windows 80端口占用情况查询
在开始-运行,输入CMD打开命令行界面,输入命令 netstat -ano | findstr "80" (注80是你想要看查看的端口号) 就会输出包含80端口使用的情况 具体对应 ...
- 关于linter
各类代码都有规则格式检查工具,称之为linter 比如:csslint/jslint/eslint/pylint sumlime提供了一个linter的框架SublimeLinter,在里面可以使用各 ...
- flask的debug模式下,网页输入pin码进行调试
网站后端Python+Flask .FLASK调试模式之开启DEBUG与PIN使用? 自动加载: # 方式一 1 2 if __name__ == '__main__': app.run(ho ...
- hdu1385Minimum Transport Cost(最短路变种)
题目链接: huangjing 思路: 输出路径的最短路变种问题..这个题目在于多组询问.那么个人认为用floyd更加稳妥一点.还有就是在每一个城市都有过路费,所以在floyd的时候更改一下松弛条件就 ...
- BUPT复试专题—Special 数(2017)
题目描述 设一个正整数既是平方数乂是立方数时,称为Special数. 输入 输入包含多组测试数据,笫1行输入测试数据的组数,接下来在后续每行输入n(n<=1000000000) 输出 输出1到n ...
- IDEA中Thrift插件配置
方法一:直接在IDEA界面中配置 打开IDEA的插件中心,搜索 Thrift 即可安装 方法二:手动下载Thrift插件安装 有时像在IDEA中安装Lombok插件一样,有时由于网络原因,方法一不奏效 ...