首页
学习
活动
专区
圈层
工具
发布

SQL中的递归查询

递归查询原理 SQL Server中的递归查询是通过CTE(表表达式)来实现。...至少包含两个查询,第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点;第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。...USE SQL_Road GO CREATE TABLE Company ( 部门ID INT, 父级ID INT, 部门名称 VARCHAR(10) ) INSERT...2、迭代公式是 UNION ALL 下面的查询语句。在查询语句中调用中CTE,而查询语句就是CTE的组成部分,即 “自己调用自己”,这就是递归的真谛所在。...具体结果如下: 以上就是递归查询的一些知识介绍了,自己可以动手实验一下,这个一般在面试中也经常会考察面试者,希望能帮助到大家~

6.5K11

sql查询

连接查询 注意 from字句后面的表名,可以用表原名,也可以为它起别名,一旦有了别名,整个查询语句中凡是涉及用表名的地方都要用表原名 查询语句中出现的所有列,若在所有涉及的表中是唯一的,则列明前可以不加表明前缀...以左边的表为基础,根据ON后面给出的两表的条件将两表连接起来 结果会将左表所有查询信息列出,右表只会列出ON后条件和左表满足的部分 语句left join… on select a.device_id,...在使用left join时,写在前面的表为匹配时的底表,使用on给出匹配条件,匹配条件可以不唯一 在表匹配时,一般我们会将要匹配的两段查询用括号括起来,并在括号末尾给予一串字母,作为表的别名 左外连接例题...笛卡尔积时关系代数里一个概念,表示两个表中的每一行数据任意组合 假设A中有n行数据,b中有m行数据,没有限制匹配条件的话,最终输出的结果就会有n*m行数据 在互联网大体量数据情况下,每个表 可能有几百万几千万行数据...全称量词命题和存在量词命题 嵌套查询 嵌套查询的工作方式 先处理内查询,由内向外处理 外层查询利用内层查询的结果 select tag,count(tag) as tag_cnt from exam_record

2.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL查询

    a.StudentNo   FROM   student AS a; SELECT   Phone+1 AS Tel   FROM   student; ​ DISTINCT关键字 作用 去掉SELECT查询返回的记录结果中重复的记录...”, ClassHour+10 AS “新学时” FROM subject; #给返回结果中的课时都加10个课时 ​ where条件语句 用于检索数据表中符合条件的记录 搜索条件可由一个或多个逻辑表达式组成...若a等于a1,a2…中的某一个,则结果为真 BETWEEN AND范围查询 SELECT 字段列1,字段2 ,…FROM 表名 WHERE   字段x  BETWEEN 值1 AND 值2 LIKE...如table_1中的行在table_2中没有匹配,则不返回 等值和非等值的连接查询 与单表查询类似,都是SELECT语句 把多个表放到FROM后,并用逗号隔开 可使用AS关键字取别名,便于引用 如无重名查询字段则可省略数据表的指定...在自连接查询中,要先在FROM字句中为表分别定义两个不同的别名, 然后使用这两个别名写出一个连接条件。

    4.3K10

    SQL中查询效率优化

    索引是独立于表的一中物理存储结构,当我们语句中用到索引的字段的时候,数据库会首先去索引中查找满足条件的数据的索引值(相当于页码),然后在根据索引值去表中筛选出我们的结果。...另外需要注意的是并不是我们在where条件里面用有索引的字段进行筛选数据库在查询的时候就会走索引,有些写法会让数据库不走索引,接下来会总结一些会让查询进行全表扫描而不走索引的写法; 提防ORACLE中的数据隐式转换...例如: 查询姓名中包含‘文’的学生,语句SELECT * FROM USERS WHERE NAME LIKE '%文%'可以改为SELECT * FROM USERS WHERE INSTR(NAME...执行顺序 其实为什么要知道查询执行的逻辑顺序,原因很简单,为了尽量早的筛选出我们想要的数据,将不需要的数据进行计算是需要成本的,直观的表现就是查询变慢。...FROM多个表的时候将小表写在后面,在CBO优化器情况下默认是将后表当成驱动表的。 ---- 写SQL简单,优化SQL难,数据分析师之路长的很,慢慢走~ peace~

    3.9K30

    SQL 的查询语句

    查询 说到查询,我们要回答两个问题:1.查询什么?2.从哪查询?我们可以使用 SQL 的 SELECT 子句来表达要查询什么。使用 FROM 子句来表达从哪查询。...举个例子,我们要从数据库 order_manager 的 products 表中查询商品名称信息。...但是比较规范的做法是,SQL 的关键字大写,表名或者字段名小写,这样更易于阅读和调试代码。 下面我们来演示下,如何从 products 表中查询 prod_name。...但是比较好的习惯是,将 SQL 语句写在多行上,这样使得代码更容易阅读和调试。 刚才我们从数据库表中查询的是单个列,我们还可以从数据库表中查询多个列。...阿里java开发手册中也明确指出,在表查询中,一律不要使用 * 作为查询的字段列表,需要查询哪些字段必须明确写明。

    4.8K30

    SQL基础查询

    参考资料: 《SQL基础教程》 ? 基础查询 数据准备 在查询数据之前,需要往数据库里插入需要用到的数据。...FROM 包含了两个子句: SELECT子句:列出了希望从表中查询出的列的名称; FROM子句:指定了选取出数据的表的名称。...查询全部的列 SELECT * FROM ; 输出Product表中全部的列 SELECT * FROM Product; 和以上代码具有相同意义的语句: SELECT product_id...SQL顺序 书写顺序:SELECT ——> FROM ——> WHERE 执行顺序:FROM ——> WHERE ——> SELECT 注释 注释是SQL语句中用来标识说明或注意事项的部分,注释对SQL...上面的SQL的查询条件和以下SQL的查询条件是等价的: SELECT product_name, product_type, sale_price FROM Product WHERE

    3.4K20

    sql多表查询

    SQL多表查询是指在一个SQL语句中查询多个表,以获取更丰富的数据信息。多表查询是SQL语言的一个重要特性,它可以帮助我们更方便地处理关联数据,从而更好地满足业务需求。...一、基本语法SQL多表查询的基本语法如下:SELECT 列名1, 列名2, ......这样,我们就可以查询出每个订单对应的顾客信息了。左连接(LEFT JOIN)左连接是指返回左表的所有行以及与之匹配的右表行,如果右表中没有匹配行,则返回NULL。...这样,我们就可以查询出每个订单对应的顾客信息,如果没有对应的顾客,就返回NULL值。右连接(RIGHT JOIN)右连接是指返回右表的所有行以及与之匹配的左表行,如果左表中没有匹配行,则返回NULL。...这样,我们就可以查询出每个顾客对应的订单信息,如果没有对应的订单,就返回NULL值。全连接(FULL OUTER JOIN)全连接是指返回左表和右表的所有行,如果某个表中没有匹配行,则返回NULL。

    3K60

    SQL慢查询

    是从深育杯一道mysql注入知道的 使用示例 详细讲解 使用条件: 可以使用堆叠注入或slow_query_log开启(默认是关闭的) slow_query_log为慢查询记录开关 slow_query_log_file...是查询语句的记录文件地址 以上参数参数可以通过set语句直接设置(secure_file_priv就不行) 查询语句执行时间大于参数long_query_time的值(可以直接通过set语句修改,默认为...可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。...log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。 log_output:日志存储方式。...日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需 要能够获得更高的系统性能,那么建议优先记录到文件 使用示例: mysql> set global slow_query_log

    2.8K20

    SQL复杂查询

    参考资料: 《SQL基础教程》 ? 复杂查询 视图 视图和表 从SQL的角度来看,视图就是一张表,两者的区别在于是否保存了实际的数据。...标准SQL中规定:如果定义视图的SELECT语句能够满足某些条件,那么这个视图就可以被更新。...注意:子查询的层数原则上没有限制,可以无限嵌套下去,但是,随着层数增加,SQL语句会变得越来越难读懂,性能也会越来越差。因此,尽量避免使用多层嵌套的子查询。...子查询的名称 原则上子查询必须设定名称,设定名称是需要使用AS关键字,有时也可以省略。 标量子查询 标量子查询就是返回单一值的子查询,必须而且只能返回表中某一行的某一列的值。...这里起关键作用的就是在子查询中添加WHERE子句的条件,该条件的意思就是,在同一商品种类中对各商品的销售单价和平均单价进行比较。

    4.3K30

    sql查询语句

    group by,having,order by 等值多表查询 按照等值的条件查询多个数据表中关联的数据,要求关联的多个数据表的某些字段具有相同的属性,即具有相同的数据类型、宽度和取值范围 select...from aa,bb where aa.aid(+)=bb.bid; 完全连接(全外连接) select * from aa full join bb on aa.aid=bb.bid; 只返回两个表中的所有行...sal from b 4.交操作的嵌套查询(属于a且属于b) select sal from a intersect select sal from b 5.差操作的嵌套查询(属于a且不属于b) select...sal from a minus select sal from b 取表中的数据(前几条,几条到几条) select * from a where rownum中取前两条记录) select...* from (select * from scott.emp order by sal desc)a where rownum中的记录排序,取排序后的前5条记录) 分页查询 select

    4.3K30

    SQL 复杂查询

    SQL 复杂查询指的就是子查询。 为什么子查询叫做复杂查询呢?因为子查询相当于查询嵌套查询,因为嵌套导致复杂度几乎可以被无限放大(无限嵌套),因此叫复杂查询。...,这个视图可以被多条 SQL 语句复用,不仅可维护性变好了,执行时也仅需查询一次。...要注意的是,对每一行父查询,子查询都会执行一次,因此性能不高(当然 SQL 会对相同参数的子查询结果做缓存)。 那这个关联是什么呢?关联的是每一行父查询时,对子查询执行的条件。...SQL 第一公民是集合,所以所谓父子查询就是父子集合的灵活组合,这些集合可以出现在几乎任何位置,根据集合的数量、是否聚合、关联条件,就派生出了标量查询、关联子查询。...更深入的了解就需要大量实战案例了,但万变不离其宗,掌握了复杂查询后,就可以理解大部分 SQL 案例了。

    2.7K30

    SQL 慢查询

    一般慢查询 当出现一般慢查询时,可以按照以下步骤去进行 SQL 调优: 避免全表扫描。这⾥需要注意⼀些索引设计和使⽤的问题: 使⽤复合索引,避免出现多个单列索引。...使⽤连接(JOIN)来代替⼦查询(Sub-Queries) 。JOIN 之所以更有效率⼀些,是因为MySQL不需要在内存中创建临时表来完成逻辑上的多个步骤的查询⼯作。...大数据慢查询 在MySQL 中,单表数据量一般都限制在 2000w 以内,当超过后会出现严重性能问题。所以针对大表,可以进行⽔平分表。⽔平分表是⼀种将数据表按⼀定规则拆分为多个⼦表的技术。...按hash分表:将数据通过哈希函数进⾏处理,将哈希值对应到不同的分表中。 这种方式数据分布较为均匀,不易出现数据倾斜问题,分表后的数据量更为均衡,有助于提⾼查询和写⼊性能。...这种方式可以有效地根据地域进⾏业务划分,⽅便进⾏区域性数据分析(在分布式部署中,可以将不同地区的数据放在不同的物理服务器上,提⾼系统的可靠性)。

    1.9K10

    SQL 聚合查询

    SQL 为什么要支持聚合查询呢? 这看上去是个幼稚的问题,但我们还是一步步思考一下。...虽然可以先把数据查到内存中再聚合,但在数据量非常大的情况下很容易把内存撑爆,可能一张表一天的数据量就有 10TB,而 10TB 数据就算能读到内存里,聚合计算可能也会慢到难以接受。...GROUP BY a,b,c 查询结果第一列可能看到许多重复的 a 行,第二列看到重复 b 行,但在同一个 a 值内不会重复,c 在 b 行中同理。...比如要筛选出平均分大于 60 学生的成绩总和,如果不使用子查询,是无法在普通查询中在 WHERE 加聚合函数实现的,比如下面就是一个语法错误的例子: SELECT SUM(score) FROM amazing_table...HAVING 使用聚合函数: SELECT SUM(score) FROM amazing_table GROUP BY class_name HAVING AVG(score) > 60 上面的例子中可以正常查询

    3.5K31
    领券