一、子查询 IN 子查询 IN 允许我们在 WHERE 子句中过滤某个字段的多个值,语法如下: SELECT column_nam FROM table_name WHERE column_name IN...,valueN) 如果运算符 in 后面的值来源于某个查询结果,并非是指定的几个值,这时就需要用到子查询。子查询又成为内部查询或嵌套查询,即在 SQL 查询的 WHERE 子句中嵌入查询语句。...FROM table_name WHERE colunm_name IN ( SELECT column_name FROM table_name [WHERE] ) 例如: 有学生表 student 和选修表...EXISTS是子查询中用于测试内部查询是否返回任何行的布尔运算符。...奖助查询的数据放到子查询中左条件验证,根据验证结果(TRUE或FLASE)来决定著查询的数据结果是否保留。
为了避免NOT IN和NULL值带来的问题,可以结合使用NOT EXISTS和关联子查询。关联子查询指的是外层查询执行的结果集会被内层子查询引用。...EXISTS/NOT EXISTS和关联子查询一起使用时,SELECT中的列,不重要,之所以使用了NULL,是为了让注意力集中在子查询的连接操作上,而不是SELECT的列上。 5. ...组合使用外连接查询和聚合函数 如果部门编号为10的员工只有部分有奖金,如果只是全连接,可能会漏掉无奖金的员工,此事要使用外连接将所有员工包括进来,同时去掉编号为10的员工的重复项,如下所示, select...,然后连接两表,这就避免了使用外连接,如下所示, select e.deptno, d.total_sal, sum(e.sal * case when eb.type...多个表中返回缺少的值 使用全外连接,基于一个共同值从两个表中返回缺少的值,全外连接查询就是合并两个表的外连接查询的结果集。
...case效果 /* 格式 CASE case_value WHEN when_value THEN statement_list ELSE statement_list END CASE...除了全外连接外都支持)【推荐】按功能分类: 内连接(包括等值连接,非等值连接,子连接) 外连接(包括左外连接,右外连接,全外连接) 交叉连接 # DQL函数语句--连接查询 /* 含义:又称为多表查询...,当查询的字段来自于多个表时,就会用到连接查询 分类: 按年代分类:sql92标准(仅支持内连接),sql99标准(除了全外连接外都支持)【推荐】 按功能分类:内连接(包括等值连接,非等值连接,子连接...最终得到的结果是表一和表二的完全匹配 例如想要通过boys表和beauty表匹配对象,假如写作下式 SELECT NAME,boyName FROM boys,beauty; 最终得到4*12=48条数据...,则显示null 左外连接,left左边的是主表 右外连接,left右边的是主表 左外和右外交换顺序,可以达到相同的效果 */ # 左外连接 SELECT b.name,boy.* FROM beauty
: 多表查询 交叉连接 内连接 自身连接 外连接 左外连接 右外连接 全连接 自然连接 交叉连接是不带WHERE子句的多表查询,它返回被连接的两个表所有数据行的笛卡尔积...和 内连接(自身连接) 外连接(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录;即左外连接就是在等值连接的基础上加上主表中的未匹配数据(被连接 表字段为 NULL)。...外连接(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录;即右外连接是在等值连接的基础上加上被连接表的不匹配数据(连接表字段为 NULL)。...外连接(全连接):全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。mysql 不支持 full outer join。...自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例: select avg(age) from stu; 注:聚合函数要放在select 和 from 之间 去重 distinct(列) 一般配合count()一起使用 例;:select count...,执行第二个when后的条件 如果都为flase 执行else后的语句 多表联查 1 联合查询-合并结果集 union 将两表的查询结果纵向连接(会去重) union all 纵向拼接会保留全部...); 简写: select * from 表1,表2 where 表1.字段名 = 表2.字段名; 注:只会保留完全符合关联条件的数据 外连接: select * from 左外连接:...right [outer] join 表2 on 表1.字段名 = 表2.字段名 注:会保留右表中不符合条件的数据 注:会保留不满足条件的数据 子查询 子查询就是嵌套查询....一般子查询出现在: from后 : 当做一张表使用 where后: 当做条件使用 select 后 自连接: 自己连接自己 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。
创建外键的方式: constraint 外键名 foreign key (需要放数据的列) references 数据来源表(数据来源表的列明) TOP 字句 select...允许在结果集内产生控制中断和小计,得到更为详尽的记录 实用实例{ compute avg|count|max|min|sum }(表达式) by (表达式) 自然连接:一种特殊的等值连接,...要求需要连接的两个关系需比较的分列是属性完全相同的项,并且将重复属性列去掉。...并不在其定义的语句中调用其自身的 CTE 非递归公用表表达式( CTE )的使用方式和 视图 以及 子查询 一致 递归公用表表达式: 流程控制语句 BEGIN……END...表达式 n> — 简单 Case 函数 CASE sex WHEN ‘1’ THEN ‘ 男 ‘ WHEN ‘2’ THEN ‘ 女 ‘ ELSE ‘ 其他 ‘ END –Case
外连接:如果表A和表B进行左外连接,则结果为 记录集A + 记录集C;如果表A和表B进行右外连接,则结果为 记录集B + 记录集C。...注意:在对外连接的结果进行分组、统计等操作时,一定要注意分组依据列和统计列的选择。 1.4 使用TOP限制结果集行数 在使用SELECT语句进行查询时,有时只需要前几行数据。...FROM) 包含这种子查询形式的查询语句是分步骤实现的,即先执行子查询,然后在子查询的结果基础上执行外层查询(先内后外)。...【注意:】连接查询和子查询的区别:★★★★★ 之所以这样,是因为在执行有连接操作的查询时,系统首先将所有被连接的表连接成一张大表,这张大表中的数据全部满足连接条件的数据。...SOME 和 ALL 嵌套子查询 当子查询返回单值时,可以使用比较运算符进行比较,但返回多值时,就需要通过SOME和ALL修饰,同时必须使用比较操作符!
的使用法一: case 要判断的字段或表达式 when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 when 条件3 then 要显示的值3或语句3 .....* case的使用法二: case when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 when 条件3 then 要显示的值3或语句3 .........,另一个表中没有的记录 特点: 1、外连接的查询结果为主表中的所有记录 如果从表中有和它匹配的,则显示匹配的值 如果从表中没有和它匹配的,则显示null 外连接查询结果 = 内连接结果...+ 主表中有而从表中没有的记录 2、左外连接,left join左边的是主表 右外连接,right join右边的是主表 3、左外和右外交换两个表的顺序,可以实现同样的效果 4、全外连接...后面,但一般放在条件的右侧 3、子查询优先于主查询执行,主查询使用了子查询的执行结果 4、子查询根据查询结果的行数不同分为以下两类: ①单行子查询
视图可以修改数据吗 视图中的数据和结构是建立在表查询的基础上的,所以它可以像物理表一样使用,对其更新,即对实际数据库中的原始数据表进行更新,但是视图主要用于查看数据,不建议使用视图作更新,特别是视图数据来自多个表时...e)根据业务数据发送频率,定期重新生成或重新组织索引,进行碎片整理 查询时减少使用*返回全部列,不要返回不需要的列 a)频繁搜索的列 b)经常用作查询的列 c)经常排序,分组的列 d)经常用作连接的列...(主键/外键) 请不要用以下列创建索引 e)仅包含几个不同值的列 f)表中只有几行 使用SQL创建一个表Teacher表,包含两个字段,ID(编号)和Name(姓名),其中ID是主键和自增列,姓名不允许为空...查询没学过李老师课的同学的学号、姓名 SELECT * FROM Student WHERE sid NOT IN( --子查询返回多个结果时使用in连接,不在此范围可使用...`cid` group by s.sname --sum可以换成max 分别作为统计总分和查询最高分的函数 -- CASE cname WHEN 'Java语言编程' THEN score END 可以替换成
when 常量1 then 值1 when 常量2 then 值2 … else 值n end ③case情况2 case when 条件1 then 值1 when 条件2 then 值2 … else...、sqlserver,mysql不支持) sql99【推荐使用】 内连接 等值 非等值 自连接** 外连接 左外 右外 全外(mysql不支持)...:结果集为一行一列 列子查询(多行子查询):结果集为多行一列 行子查询:结果集为多行多列 表子查询:结果集为多行多列 三、示例 where或having后面 1、标量子查询 案例:查询最低工资的员工姓名和工资...by、distinct、having、union、 ②join ③常量视图 ④where后的子查询用到了from中的表 ⑤用到了不可更新的视图 七、视图和表的对比 关键字 是否占用物理空间 使用 视图...结构 功能:实现多分支 语法1: case 表达式或字段 when 值1 then 语句1; when 值2 then 语句2; … else 语句n; end [case]; 语法2: case when
SQL 是一种结构化查询语言,用于管理关系型数据库,我们 90% 接触的都是查询语法,但其实它包含完整的增删改查和事物处理功能。...搜索 CASE 表达式能力完全覆盖简单 CASE 表达式: SELECT CASE WHEN pv < 100 THEN 'low' ELSE 'high' END AS quality 可以看到,搜索...CASE 表达式可以用 “表达式” 描述条件,可以轻松完成更复杂的任务,甚至可以在表达式里使用子查询、聚合等手段,这些都是高手写 SQL 的惯用技巧,所以 CASE 表达式非常值得深入学习。...复杂查询 SELECT 是 SQL 最复杂的部分,其中就包含三种复杂查询模式,分别是连接查询与子查询。...子查询与视图 子查询就是 SELECT 里套 SELECT,一般来说 SELECT 会从内到外执行,只有在关联子查询模式下,才会从外到内执行。
:(标准,通用写法) 左外连接: left outer join 左表中所有的记录,如果右表没有对应记录,就显示空 右外连接: right outer join 右表中的所有记录,如果左表没有对应记录...,就显示空 outer 关键字可以省略 注:Oracle中的外连接: (+) 实际上是如果没有对应的记录就加上空值 select * from emp...deptno =20; --2.员工信息 select * from emp where sal > (select max(sal) from emp where deptno =20); --使用多行子查询完成上面这题...' then cc end) "1981", sum(case yy when '1982' then cc end) "1982", sum(case yy when '1987...:在oracle中只能使用子查询来做分页查询 --查询第6 - 第10 记录 select rownum, emp.* from emp; select rownum hanghao, emp.
自连接 连接查询---sql99语法 语法 内连接 语法 等值连接 非等值连接 自连接 外连接 左外连接 右外连接 全外连接 交叉连接 连接查询的总结 子查询 含义 分类 where或having...>11,'猜对了','呜呜呜'); 2. case函数使用一: switch case 的效果 语法: case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1; ----...case函数使用二 : 多重if-else 语法: case when 常量1 then 要显示的值1或语句1; ---->只有语句需要加分号,值不需要 when 常量2 then 要显示的值2...join 右边的是主表 左外和右外交换两个表的顺序,可以实现同样的效果 可以像内连接一样,去掉outer关键字 ---- 左外连接 演示: 找出girl表中id和Boy表中id所匹配的记录...右外连接: 左外去交集: 右外去交集: 全外连接: 全外连接去交集: ---- 子查询 含义 出现在其他语句中的select语句,成为子查询或者内查询
授权时,数据库名和表名可以使用*进行通配,代表所有。...如果value1不为空,返回value1,否则返回value2 CASE WHEN [val]THEN[res1]...ELSE[default] END 如果val1为true,返 回res1,......否则返回default默认值 CASE[exper] WHEN[val1] THEN[res1]...ELSE[default] END 如果expr的值 等于val1返回res1,..否则返回default...和完整性 外键约束: 概念 外键用来让两张表中的数据之间建立连接,从而保证数据的一致性和完整性。...右外连接:查询游标所有数据,以及两张表交集部分数据 自连接:当前表与自身的连接查询,自连接必须使用表别名 子查询 多表查询-内连接 隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE
一、CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1...2.1 子查询初步 就像使用普通的表一样,被当作结果集的查询语句被称为子查询。...所有可以使用表的地方几乎都可以使用子查询来代替。...例如我们上面提到的例子,子查询中只返回了一个ClassId,这就是单值子查询。当子查询跟随在=、!=、、>=, 之后,或子查询用作表达式,只能使用单值子查询。...2.3 多值子查询 如果子查询是多行单列的子查询,这样的子查询的结果集其实是一个集合,那么可以使用in关键字代替=号。
,就需要去执行所有的标量子查询,虽然在一体机环境这里有first rows,但是所有的标量子查询被轮询的次数达到了4,302,704次,并且子查询的表走的全表扫描,所以出现了逻辑读很高。...为了减少标量子查询被轮询的次数,这里可以把标量子查询改为外连接。...为了减少SQL长度,下面是去掉SELECT中一些不需要的部分,我们手动测试一下SQL改为外连接与原SQL执行SQL的差异: SELECT OFFER_SERV_SUM AS N37364,...在标量子查询中,当主查询返回一行数据时,所有的标量子查询就要执行一次,如果在连接列有索引时,标量子查询在主表返回的行很少的情况下,对性能影响不大,常常出现在OLTP环境,并且连接列一般都有索引;如果在OLAP...环境中,看到标量子查询千万要小心,通常,主表返回的行很多,并且子查询中的表通常在连接列上面无索引,导致性能很低下,本案例就是这种情况; 2.
之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节点的方法 你真的会玩SQL吗?...让人晕头转向的三值逻辑 你真的会玩SQL吗?EXISTS和IN之间的区别 你真的会玩SQL吗?无处不在的子查询 你真的会玩SQL吗?Case也疯狂 你真的会玩SQL吗?...之逻辑查询处理阶段 对于理解透视转换的步骤是有帮助的。 来看一看经典的行转列实例,如要得到下面的结果怎么做: ?...聚合:从一组NULL值和已知值中提取出已知值,这就需要使用聚合操作,提取已知值技巧就是使用MAX或MIN函数,这两个会忽略NULL,并返回一个非NULL值,国为只包含一个值的集合最大值和最小值就是这个值...objectid和attribute,用case计算值。
最常用最实用的MySQL函数详解 高山仰止 掌握case搜索函数的使用 掌握ifnull函数的使用 掌握字符串拼接、子串、移除、大小写转换函数 掌握日期格式化函数的使用 掌握常见的数值函数的使用 掌握类型转换函数的使用...3.1.2 示例 练习1:获取用户的姓名、性别,如果性别为1则显示1,否则显示0;要求使用if函数查询: SELECT uname, IF(sex, 1, 0) FROM t_user; [外链图片转存失败...3.2.2 示例 练习1:获取用户的姓名、性别,如果性别为null则显示为1;要求使用ifnull函数查询: SELECT uname, IFNULL(sex, 1) FROM t_user; [外链图片转存失败...知识点-字符串函数 1.高山 掌握常见字符串函数的使用 2.演绎 常见字符串函数清单 字符串连接函数 字符串大小写处理函数 格式化函数 移除、填充函数 子串函数 3.攀登 3.1 常见字符串函数 常见的字符串函数清单如下所示...,从字符串返回子字符串 3.2 字符串连接函数 字符串连接函数主要有2个: 函数或操作符 描述 concat(str1, str2, …) 字符串连接函数,可以将多个字符串进行连接 concat_ws
确定叶子节点、分支节点和根节点 (1)使用相关子查询 (2)更高效的写法(一次外连接) ---- 表数据: mysql> select * from t1; +------+------+ | id...确定叶子节点、分支节点和根节点 (1)使用相关子查询 mysql> select id, -> (select 1 - sign(count(*)) from t1 d...(一次外连接) mysql> select distinct id, -> case when flag = 'is_leaf' then 1 else 0 end is_leaf..., -> case when flag = 'is_branch' then 1 else 0 end is_branch, -> case when flag...= 'is_root' then 1 else 0 end is_root -> from (select t2.id, -> case when t1
除了查询满足条件的记录以外,外连接还可以查询某一方不满足条件的记录 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左...而且在 SQL92 中,只有左外连接和右外连接,没有满(或全)外连接。...题目2:返回其它job_id中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id以及 salary 11.3、相关子查询 子查询中使用主查询中的列。...题目:查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id 方式一:相关子查询 方式二:在 FROM 中使用子查询 SELECT last_name,salary...`salary`; 11.4、EXISTS 与 NOT EXISTS关键字 关联子查询通常也会和 EXISTS操作符一起来使用,用来检查在子查询中是否存在满足条件的行。
领取专属 10元无门槛券
手把手带您无忧上云