1:标量子查询(相对于多值子查询): 只有标量子查询返回的是单个记录或者不返回,就是有效的子查询。...2行,等号右边此时为多值,查询失败.将’=’改为in谓词.查询才能通过. employees表中无lastname=’jason’,外部查询将返回null. 2:非相关子查询(嵌套子查询) 一个select...外层查询称为父查询,主查询。内层查询称为子查询,从查询。 子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。子查询中不能有order by分组语句。 先处理子查询,再处理父查询。...比较运算运算【any|all](子查询) 只要主查询中列或运算式与子查询所得结果中任一(any)或全部(all)数据符合比较条件的话则主查询的结果为我们要的数据 select sale_id...2>相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
>] [GROUP BY [HAVING 条件表达式>]] [ORDER BY [ASC|DESC] 4.单表查询 (1)选择表中的若干列 ① 查询指定列 查询指定列 [例...: ·不能使用ORDER BY子句· 层层嵌套方式反映了 SQL语言的结构化 有些嵌套查询可以用连接运算替代 (2)不相关子查询 子查询的查询条件不依赖于父查询 由里向外 逐层处理。...(3)相关子查询 子查询的查询条件依赖于父查询 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表 然后再取外层表的下一个元组 重复这一过程...带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。...若内层查询结果非空,则外层的WHERE子句返回真值 若内层查询结果为空,则外层的WHERE子句返回假值 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值
max(col): 表示求指定列的最大值 min(col): 表示求指定列的最小值 sum(col): 表示求指定列的和 avg(col): 表示求指定列的平均值 2、求总行数 -- 返回非NULL数据的总行数...8、小结 count(col): 表示求指定列的总行数 max(col): 表示求指定列的最大值 min(col): 表示求指定列的最小值 sum(col): 表示求指定列的和 avg(col): 表示求指定列的平均值...左连接以左表为主根据条件查询右表数据,右表数据不存在使用null值填充。...主查询和子查询的关系: 子查询是嵌入到主查询中 子查询是辅助主查询的,要么充当条件,要么充当数据源 子查询是可以独立存在的语句,是一条完整的 select 语句 2、子查询的使用 例1....第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
Cno= ' 2 '); 说明: 上层的查询块称为外层查询或父查询,下层查询块称为内层查询或子查询 SQL语言允许多层嵌套查询【即一个子查询中还可以嵌套其他子查询】 子查询的限制,不能使用ORDER...BY子句 不相关子查询:子查询的查询条件不依赖于父查询 由里向外 逐层处理。...即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。...相关子查询:子查询的查询条件依赖于父查询 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表 然后再取外层表的下一个元组 重复这一过程...若内层查询结果非空,则外层的WHERE子句返回真值 若内层查询结果为空,则外层的WHERE子句返回假值 由EXISTS引出的子查询,其目标列表达式通常都用 * ,因为带EXISTS的子查询只返回真值或假值
外连接中,符合连接条件的数据返回到结果集,不符合连接条件的列会被系统用 NULL 填充,再返回结果集 *注:bit 类型无 NULL 值,会填充 0 后返回结果集中 使用主表所在的方向位置判断连接类型...又称嵌套查询,形式是在 WHERE 中再次包含 SELECT - FROM - WHERE 的查询 程序从内向外执行 SQL 语句,外部查询称为父查询,父查询需要接收子查询(嵌套查询)的结果 普通子查询...普通子查询仅执行一次 返回一个值 该例子解释父级查询需要子查询结果的概念 select tno,tn from t where prof=(select prof from t where...tn='XXX') 示例中,prof 的值由子查询查出结果后返回给父查询做结果,上述语句等价为 select tno,tn from t where prof=‘子查询 prof 值’ 返回一组值 比较运算符仅适用于查询所需返回值为单个值得情况...由上面的内容我们知道,子查询程序执行顺序是由内到外,也就是说父级需要子级的消息返回 但是,我们同样会遇到子查询需要父查询相关信息的情况,这样的情况我们称之为相关子查询 示例:查询不讲授课程号为 c5
数据库约束 约束类型 NOT NULL 指示某列不能存储NULL值. UNIQUE 保证某列的每行必须有唯一的值。 数据库如何判定,当前这一条记录是重复的?先查找,再插入。...要想创建外键,就要求父表的对应的列,得有primary key 或者unique约束。...sum求和: 要求这个列必须得是数字。 NULL和任何数据运算,结果都是NULL,sum会尽可能的避免这种情况。...单行子查询:返回一行记录的子查询 任务:查询与“不想毕业”同学的同班同学 分析:先去查询不想毕业同学的班级id,再按照班级id来查询那些同学和他一个班。...子查询就是把两个操作合并~ 多行子查询 返回多行记录的子查询 任务:查询“语文”或者“英语课程的成绩信息” 分析:1.现根据名字查课程id 2.根据课程id查询课程分数 在这里插入图片描述
有办法确定外键已经连接到父键了吗? A:外键为NULL,表示在父表中没有相符的主键。但我们可以确认外键包含有意义、已经存储在父表中的值,请通过约束实现。...内联接 INNER JOIN利用条件判断中的比较运算符结合两张表的记录。只有联接记录符合记录条件时才会返回列。...,所以子查询里只会返回单一值,特定行和列的交叉点,这一个值将是WHERE子句中比对数据列的条件。...关联子查询 关联子查询是内层查询的解析需要依赖于外层查询的结果。 关联子查询的常见用法是找出所有外层查询结果里不存在于关联表里的数据。...外层查询呢? A:大多数情况下,内层查询只能返回单一值,也就是一列里的一行。而后,外层查询才能利用这个值与列中其他值进行比较。 一般而言,子查询必须返回一个值,使用IN是例外情况。
分组查询: 分组函数:作用于一组数据,并对一组数据返回一个值。 1、常用的分组函数:AVG,SUM,MIN,MAX,COUNT,WM_CONCAT AVG:平均值。SUM:求和。...=当前子类的老板号 start with mgr is null --老板号为空表示根节点 || start with empno=7839 --表示从当前条件向下遍历 order by 1; --...【语句只返回一条记录就是单行子查询,返回多条记录就是多行子查询】 select empno,ename,sal,(select job from emp) from emp; -- ORA-01427:...通过嵌套子查询,再把排序后的伪列变成“实列” 不进行嵌套子查询的结果是错误的,筛选出的是排序后未重新定义的乱序rownum 2、找到员工表中薪水大于本部门平均薪水的员工 相关子查询 select...需要进行两个表的连接查询,为两个表都取别名 使用instr(a,b)函数,该函数的含义为:如果字符串b在字符串a里面,则返回的是b在a中的位置,即返回值大于0 需要用到分组查询 使用wm_concat
(*) from user where age>10;-- 对所有满足年龄打印10岁进行计数 SUM 求和 select sum(dollar) from user;-- 将所有dollar列中的元素进行相加...AVG 求平均值 select avg(math) from student;-- 对整个班级的数学分进行求平均值 MAX 求最大值 -- 求这列的最大值 MIN 求最小值 条件查询(where,in...(嵌套查询) select count(*),name-- 父查询 from user where age in (select age from user where -- 子查询teacher='joe...');-- 父查询的限制对象应与子查询的查询对象一致都是age select * from student where major=(select major from student where...,exists代表'存在'返回true或false true就执行前面语句查询顺序 (8)Select (9)distinct 字段名1,字段名2, (6)[fun(字段名)] (1)from 表1
以下是常见的数据库约束类型: NULL约束 NOT NULL:指示某列不能存储NULL值。例如,创建一个表时,可以规定某列必须输入数据。...(因为有约束,导致不能随意修改父键与子键) 对于父键必须要被unique或primary key 修饰 CHECK约束 CHECK:用于限制列的值,确保数据符合给定的条件。...查询 5.1 聚合查询 MySQL支持多种聚合函数,如COUNT、SUM、AVG、MAX、MIN等,用于执行数据汇总操作。...FROM student as A, student as B WHERE ........ ; 6.5 子查询 子查询是指将一个查询语句嵌套在另一个查询语句中,常用于处理复杂的查询需求。...select ... from ... where 条件 union all select ... from ... where 条件 使用UNION和UNION ALL时,前后查询的列要求 数量和类型一致
列和行(column and row) 表的结构类似于excel的表格,表列对应excel列,表行对应excel行 ? 5....# 特定记录的排序 SELECT * FROM ORDER BY id = 9 DESC,字段1 DESC 子查询 # FROM 后子查询一定要取别名 SELECT * FROM (SELECT...FROM # 二表字段需一样 聚合查询 COUNT(字段),SUM(),AVG(),MAX(),MIN() # 若查询无结果,COUNT()返回0,而SUM()、AVG()、MAX()、...MIN()返回NULL 连接查询 SELECT (表1.字段, 表2.字段2, ...)...外连接 左连接,返回右表都存在的行,左边不存在填充NULL 右连接,返回左表都存在的行,右边不存在填充NULL 全连接,把两张表的所有记录全部选择出来,自动把对方不存在的列填充为NULL 11.
逻辑运算符 运算符 含义 AND 并列,如果组合的条件都是TRUE,返回TRUE OR 或者,如果组合的条件其一是TRUE,返回TRUE NOT 取反,如果条件是FALSE,返回TRUE 1、查询年龄大于...返回指定列中非NULL值的个数 MIN 返回指定列的最小值 MAX 返回指定列的最大值 SUM 返回指定列的所有值之和 聚合运算都是写在select 后面 SELECT COUNT("字段") FROM...◆ 第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。...*第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。...字段 from 表名 where 条件(另一条查询语句) 主查询 主要查询的对象,第一条 select 语句 主查询和子查询的关系 子查询是嵌入到主查询中 子查询是辅助主查询的,要么充当条件,要么充当数据源
插入子查询结果 INSERT INTO [(列1> [,列2>… )] 子查询; 这里所说的子查询,就是一个SELECT查询语句,可以将子查询结果插入指定表中。...SELECT Sno FROM SC WHERE Grade IS NOT NULL; 多重条件查询 用逻辑运算符AND和OR来联结多个查询条件,AND的优先级高于OR,可以用括号改变优先级。...分类 不相关子查询:子查询的查询条件不依赖于父查询。由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 相关子查询:子查询的查询条件依赖于父查询。...: 当能确切知道内层查询返回单值时,可用比较运算符(>,=,<=,!...*/ DBMS执行此查询时,首先处理子查询,找出 IS系中所有学生的年龄,构成一个集合(19,20); 处理父查询,找所有不是IS系且年龄小于19 或 20的学生。
分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计算列的最小值 首先,创建数据表如下: ?...返回列合计值(SUM): 注:sum只要ALL与DISTINCT两种计数规范,无*。 计算学生年龄之和: SELECT SUM(student_age) FROM t_student; ?...–ANY运算符 和子查询的结果逐一比较,其中一条记录满足条件则表达式的值就为真。...通过上面两例,应该可以明白子查询在WHERE中嵌套的作用。通过子查询中返回的列值来作为比较对象,在WHERE中运用不同的比较运算符来对其进行比较,从而得到结果。...子查询的分类: –相关子查询 执行依赖于外部查询的数据。 外部查询返回一行,子查询就执行一次。 –非相关子查询 独立于外部查询的子查询。
运算符IS NULL可以判断列的值是否是NULL。...如果是则返回true,否则返回false; USE practice GO -- 插入一行带有空值的样本 INSERT INTO T VALUES(NULL,NULL,NULL,NULL,'川菜',100,230...,子查询的结果是外层的父查询的查找条件。...IN (子查询) /* 利用嵌套查询选择商品名称中带有WiFi的店铺名称与商品名称,其中子查询查询商品名称满足要求的 店铺名称与商品名称的集合,父查询查询店铺名称和商品名称与子查询输出集合相匹配的店铺名称及商品名称...WHERE 价格 <= 100)) GO 查询结果: 2.6.2 带比较运算符的嵌套查询 带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。
子查询如果位于目标列,则只能是标量子查询,否则数据库可能返回类似“错误:子查询必须只能返回一个字段”的提示。...子查询的类型——从对象间的关系看: 1 相关子查询 子查询的执行依赖于外层父查询的一些属性值。...子查询因依赖于父查询的参数,当父查询的参数改变时,子查询需要根据新参数值重新执行(查询优化器对相关子查询进行优化有一定意义),如: 2 非相关子查询 子查询的执行,不依赖于外层父查询的任何属性值。...4 表子查询 子查询返回的结果集类型是一个表(多行多列)(return a table, one or more rows of one or more columns)。 为什么要做子查询优化?...子查询中的连接条件、过滤条件分别变成了父查询的连接条件、过滤条件,优化器可以对这些条件进行下推,以提高执行效率。 How to optimize SubQuery?
]; DQL(数据查询语言) 基本查询(不带任何条件) 条件查询(WHERE) 聚合函数(count、max、min、avg、sum) 分组查询(group by) 排序查询(order by)...(与NO ACTION一致) CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录 SET NULL 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键...的任何一个 根据子查询结果可以分为: 标量子查询(子查询结果为单个值) 列子查询(子查询结果为一列) 行子查询(子查询结果为一行) 表子查询(子查询结果为多行多列) 根据子查询位置可分为: WHERE...之后 FROM 之后 SELECT 之后 标量子查询 子查询返回的结果是单个值(数字、字符串、日期等)。...返回的结果是一行(可以是多列)。
在WHERE子句中引入子查询 子查询在WHERE子句中非常常见,用于提供过滤条件。...子查询分类 子查询按照返回结果集的不同,可以分为四种类型:标量子查询、列子查询、行子查询和表子查询。 标量子查询 定义:标量子查询返回的结果集是一个标量值,即一行一列。...行子查询:返回一行多列,但在MySQL中直接使用行子查询的情况较少,通常通过JOIN或其他方式实现。 表子查询:返回多行多列,可以看作是一个临时的表,在外部查询中作为FROM子句的一部分。...相关性 相关子查询:子查询的结果依赖于外部查询的结果。这种子查询在每次外部查询处理一行时都会重新执行。 不相关子查询:子查询的结果不依赖于外部查询的结果。这种子查询在整个外部查询执行前只执行一次。...注意处理可能出现的空值(NULL)情况,因为子查询可能返回空值,这会影响外部查询的结果。 逻辑清晰 编写子查询时,要确保逻辑清晰、易于理解。复杂的子查询可能会让其他开发者难以理解和维护。
: 1.1.1 where常用关键字 AND、OR:连接多个条件 BETWEEN AND:在...之间 IS NULL:查询空值 IN:查询在某个集中中 LIKE:模糊查询 找出名字当中含有...where操作之后):(又名多行处理函数)自动忽略null count 计数 count(*)计数总记录的条数 count(comm):表示统计comm字段中不为null的数据总量 sum 求和 avg...in (select * isbn from brrowrecord where reader_id='201801'); 1.3.2 带有比较运算符的子查询 指父查询与子查询之间用比较运算符连接...子查询返回值单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓语,使用ANY或ALL谓语时必须同时使用比较运算符。...where reader_id="201801"); 1.3.4 带有EXISTS谓语的子查询 EXISTS谓语的子查询不返回任何数据,是一个布尔值(true或false)逻辑判断。
领取专属 10元无门槛券
手把手带您无忧上云