我们可能熟悉使用INDEX、SMALL等在给定单列或单行数组的情况下,返回满足一个或多个条件的值的列表。这是一项标准的公式技术。...在《Excel公式练习32:将包含空单元格的多行多列单元格区域转换成单独的列并去掉空单元格》中,我们讲述了一种方法,给定由多个列组成的单元格区域,从该区域返回由所有非空单元格组成的单个列。...可以很容易地验证,在该公式中的单个条件可以扩展到多个条件,因此,我们现在有了从一维数组和二维数组中生成单列列表的方法。 那么,可以更进一步吗?...本文提供了一种方法,在给定一个或多个相同布局的工作表的情况下,可以创建另一个“主”工作表,该工作表仅由满足特定条件的所有工作表中的数据组成。并且,这里不使用VBA,仅使用公式。...k的值,即在工作表Sheet1中匹配第1、第2和第3小的行,在工作表Sheet2中匹配第1和第2小的行,在工作表Sheet3中匹配第1小的行。
下面看看这一条 SQL 语句的执行流程: select * from user where id = 1; 该语句在 where 条件中加了 id=1 这个过滤条件,因此会使用到主键 id 的索引树。...选择使用 id 主键索引树; 找到 id 索引树的第一层结点(关键字 3、7 所在的结点),由于 where 条件中 id=1,1 小于 3,所以进入到关键字 3 的左子树中查找; 进入到 id 索引树的第二层结点...下面看看这一条 SQL 语句的执行流程: select * from user where name = 'BB'; 该语句在 where 条件中加了 name='BB'这个过滤条件,由于我们在建表时为...所以上面的 SQL 语句的执行流程如下: 选择使用 name 索引树; 找到索引树的第一层结点,由于 where 条件中'BB'的值小于第一层结点中关键字'CC'的值,索引进入到关键字'CC'的左子树中查找...我们在创建 name 索引的时候,实际上创建的是单列索引(只选用了 name 这一列),而在 MySQL 中,我们是可以在创建索引时,选择多个列进行索引创建,这一类索引我们称之为联合索引。
$name = Db::table('user')- where(['id']= 5)- value('name'); //获取一列值 $all_name = Db::table...('user')- column('name'); //获取一列值,第二个参数作为索引 $all_name = Db::table('user')- column('name','id'...')- insert([ 'name' = 'hello', 'age' = 10 ]); //insertGetId()方法可以在添加数据后返回数据的id $id = Db::name('...* FROM `bw_user` WHERE ( `id` not in (2,5) ) //可以使用连续的where条件 $sql6 = Db::name('user')...//结果:SELECT * FROM `bw_user` WHERE ( `id` not in (2,5) ) AND `age` 10 //如果多个where条件是or关系,使用whereOr
:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。 table_name:要查询的表名称。...(去重) 我们平时在操作数据时,有可能出现一种情况,在一个表中有多个重复的记录,当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。...如果两个操作数中有任意一个非零,则条件为真。PostgresSQL 中的 WHERE 语句可以用 OR 包含多个过滤条件。 示例 IN IN 操作符允许您在 WHERE 子句中规定多个值。...:要查询的值,可以为多个值。 示例 BETWEEN BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。 table_name:要查询的表名称。 column:要查询的字段名称。 value1:范围的起始值。
列(column) 表中的一个字段,所有表都是有一个和 多个列组成 行(row) 表中的一个记录(record) 主键(primary key) 一列(或一组列),其值能够唯一标识表中每一行 关键字(...SQL 不区分大小写,但一般习惯关键字用大写,列名和表名使用小写。 处理 SQL 语句时,所有空格都会被忽略。一般认为写成多行更容易维护。 选择多个列时,一定要在列名之间加上逗号,但最后一个列名不加。...检索出来的数据默认是不排序,会以其在底层表中出现的顺序显示。 检索数据 SQL 语句是由简单的英语单词构成的。这些单词称为 关键字,每个 SQL 语句都是由一个或多个关键字构成的。...限制结果 默认显示所有满足条件的行,可以只显示指定的行吗?**可以,但是在不同数据库实现方式不同。...如果想在多个列上降序排序,必须对每一列指定 DESC 关键字。
* FROM Persons ORDER BY ID_P DESC; 注意: 在第一列中有相同的值时,第二列是以升序排列的。...如果第一列中有些值为 null 时,情况也是这样的。 UPDATE – 更新数据 Update 语句用于修改表中的数据。...IN – 锁定多个值 IN 操作符允许我们在 WHERE 子句中规定多个值。...MAX 函数返回一列中的最大值。...实例: select max(orderno) from orders; MIN – 最小值 MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
注意: 在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 null 时,情况也是这样的。 ???? UPDATE – 更新数据 Update 语句用于修改表中的数据。...注意: “%” 可用于定义通配符(模式中缺少的字母)。 ???? IN – 锁定多个值 IN 操作符允许我们在 WHERE 子句中规定多个值。...VIEW – 视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。...MAX – 最大值 MAX 函数返回一列中的最大值。NULL 值不包括在计算中。...MIN – 最小值 MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
当 from 子句中有子查询时,table列是 格式,表示当前查询依赖 id=N 的查询,于是先执行 id=N 的查询。...最完整的Explain总结,妈妈再也不担心我的SQL优化了 ref 相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。...key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...ref列 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id) rows列 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数...Extra列 这一列展示的是额外信息。常见的重要值如下: Using index 查询的列被索引覆盖,并且where筛选条件是索引的前导列,是性能高的表现。
,全外连接) 交叉连接 # DQL函数语句--连接查询 /* 含义:又称为多表查询,当查询的字段来自于多个表时,就会用到连接查询 分类: 按年代分类:sql92标准(仅支持内连接),sql99标准(...`employee_id`; # sql99语法 /* 语法: SELECT 查询列表 FROM 表1 别名 【连接类型】 JOIN 表2 别名 ON 连接条件 【WHERE 筛选条件】 【GROUP...`department_id`; # 外连接 /* 用于查询一个表中有,另一个表中没有的记录 特点: 外连接的查询结果为主表中的所有记录 如果表中有和它匹配,则显示匹配的值 如果没有匹配值...查询: 将多条查询语句的结果合并成一个结果 应用场景: 要查询结果来自多个表,且多个表没有直接的连接关系,单查询的信息一致 特点: 要求多条查询语句的查询列数是一致的 要求多条查询语句每一列的类型和顺序最好是一致的...应用场景:要查询结果来自多个表,且多个表没有直接的连接关系,单查询的信息一致 特点: 要求多条查询语句的查询列数是一致的 要求多条查询语句每一列的类型和顺序最好是一致的 UNION关键字会自动去重,如果不想去重可以使用
当from子句中有子查询时,table列是格式,表示当前查询依赖id=N的查询,于是先执行id=N的查询。...ref:相比eq_ref,不适用唯一索引,而是使用普通索引或者唯一索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。...key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以估算出具体使用了索引中的哪些列。...ref列 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名等。...一般是查询条件或关联条件中等号右边的值,如果是常量那么ref列是const,非常量的话ref列就是字段名。
任何列作为主键的条件: 任意两行都不具有相同的主键值; 每一行都必须具有一个主键值(主键列不允许NULL值); 主键列中的值不允许修改或更新; 主键值不能重用(某行从表中删除,它的主键不能赋给以后的新行...第2章 检索数据 2.1 SELECT语句 用于从一个或多个表中检索信息,必须指定两条信息,想选择什么,从什么地方选择。...多条SQL语句必须以分号(;)分隔。 SQL关键字应大写,列名和表名应小写。 2.3 检索多个列 在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。...因此,表示(如把上面的价格值显示为正确的十进制数值货币金额)一般在显示该数据的应用程序中规定。 2.4 检索所有列 SELECT语句可以检索所有的列,在实际列名的位置使用星号(*)通配符。...屏幕快照 2018-05-28 06.30.40.png SELECT语句返回9行(即使表中只有3个产品供应商),因为Products表中有9种产品。那么如何检索出不同的值?
背景 Mysql 数据库作为数据持久化的存储系统,在实际业务中应用广泛。在应用也经常会因为 SQL 遇到各种各样的瓶颈。...数据来源于information_schema,在 Mysql 启动的时候读入内存,运行时只使用内存值,存储引擎会动态更新这些值。...接下来,让我们来详细分析者3大类分别是如何定义,以及如何提取的。 1、Index Key 用于确定 SQL 查询在索引中的连续范围(起始范围+结束范围)的查询条件,被称之为 Index Key。...Index Filter 的提取规则:同样从索引列的第一列开始,检查其在 where 条件中是否存在:若存在并且 where 条件仅为 =,则跳过第一列继续检查索引下一列,下一索引列采取与索引第一列同样的提取规则...针对上面的用例 SQL,索引第一列只包含 >=、< 两个条件,因此第一列可跳过,将余下的c、d两列加入到 Index Filter 中。
所以就算对 COUNT(*) 使用主键查找,由于每次取出主键索引的叶子节点时,取的是一整行的数据,效率必然不高,但是非聚簇索引叶子节点只存储了「列值 + 主键值」,这也启发我们可以用非聚簇索引来优化,假设表有一列叫...asc limit 200; post_id 也加了索引,理论上走 post_id 索引会很快查询出来,但实际通过 EXPLAIN 发现走的却是 id 的索引(这里隐含了一个常见考点,在多个索引的情况下..., MySQL 会如何选择索引),而 id > 0 这个查询条件没啥用,直接导致了全表扫描, 所以在有多个索引的情况下一定要慎用,可以使用 force index 来强制走某个索引,以这个例子为例,可以强制走...这种由于表中有多个索引导致 MySQL 误选索引造成慢查询的情况在业务中也是非常常见,一方面是表索引太多,另一方面也是由于 SQL 语句本身太过复杂导致, 针对本例这种复杂的 SQL 查询,其实用 ElasticSearch...我司在提供 SQL 查询的同时,也贴心地加了一个 EXPLAIN 功能及 sql 的优化建议,建议各大公司效仿 ^_^,如图示 ?
可以使用下列几种形式发出查询: MS Query 或 Microsoft Access 用户可使用图形用户界面 (GUI) 从一个或多个 SQL Server 表中选择想要查看的数据。...WHERE 子句指定出条件:在 Product 表中,只有 ListPrice 列中的值大于 40的产品的产品ID、名称以及标价¨G0G在SELECT关键字之后所列出的列名(ProductID、Name...WHERE子句指定出条件:在Product表中,只有ListPrice列中的值大于40,该值所在的行才符合 SELECT 语句的要求。...通常,每个选择列表表达式都是对数据所在的源表或视图中的列的引用,但也可能是对任何其他表达式(例如,常量或 Transact-SQL 函数)的引用。在选择列表中使用 * 表达式可指定返回源表的所有列。...PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。
,其中有一个唯一性索引,而其它是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引5.至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引...)6.小表不要建立索引7.对于基数大的列适合建立B树索引,对于基数小的列适合建立位图索引8.列中有很多空值,但经常查询该列上非空记录时应该建立索引9.经常进行连接查询的列应该创建索引10.限制表中索引的数量...(16)总是使用索引的第一个列:如果索引是建立在多个列上,只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引。...(20)尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。(21)在FROM 子句中包含多个表的情况下,选择记录条数最少的表作为基础表。14.什么是视图?...悲观锁是通过在sql语句上加入 for update,乐观锁可以通过增加一列version或者timestamp在应用程序中实现,Hibernate采用乐观锁的版本戳。
匹配范围值:其实就是范围查询。但注意,当多列索引中有一列用到范围查询时,那么该列后面的索引都没法被用到。...具体思路是这样的: 在表中创建一列用来存储哈希值,然后还是用B-TREE索引进行查找。...如果我们增加一列(url_hash)存储URL的哈希值,然后在这列上建立B-TREE索引,这样做的性能会高很多。...当服务器对多个索引做联合操作时(通常是多个OR条件),通常需要消耗大量的CPU和内存资源在算法的缓存、排序和合并操作上。特别是其中有些索引选择性不高,需要合并扫描返回的大量数据。...) (company_id,status,type,custom_mobile,click_at) 在创建多列索引的时候,一定要避免多个范围条件,比如上面3个索引,如果你在click_at后面在加上任何列
语句返回的是执行结果,在select语句前面加上explain返回的是这条查询语句的执行SQL。...,索引要和某个值相比较,可能会找到多个符合条件的行。...key_len列 这一列显示了mysql在索引里使用的字节数,通过这个值可以估算出具体使用了索引中的哪些列。...ref列 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有: const(常量),字段名等。...一般是查询条件或关联条件中等号右边的值,如果是常量那么ref列是const,非常量的话ref列就是字段名。
咱们直接开始学习SQL! SQL 基础语言学习 在了解 SQL 基础语句使用之前,我们先讲一下 表 是什么? 一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。...FROM Persons; DISTINCT – 去除重复值 如果一张表中有多行重复数据,如何去重显示呢?...AND & OR – 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。...* FROM Persons ORDER BY ID_P DESC; 注意: 在第一列中有相同的值时,第二列是以升序排列的。...如果第一列中有些值为 null 时,情况也是这样的。 UPDATE – 更新数据 Update 语句用于修改表中的数据。
从sql语句我们可以看出来,我们有两个select,也就是有两个id,然后呢,我们会优先运行红颜色的select,也就是id为2的,再运行id为1的select。...当 from 子句中有子查询时,table列是 格式,表示当前查询依赖 id=N 的查 询,于是先执行 id=N 的查询。...ref相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。...key_len列: 这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...ref列: 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const rows列: 这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数。只是一个预估值。
③条件查询 select * from student where name="比企谷八幡"; 查询表中name为“比企谷八幡”的所有数据,其中也可以选择部分列的数据,格式不再赘述。...②查询成绩不等于90的同学 不等于在SQL中有三种表示方式: not score=90; score!...=90; score90; ③查询成绩在80和90之间的数据 也就是80<=score<=90,在SQL中有两种方式: between 80 and 90; score>=80 and score<...④查询成绩为88,95,100的同学 在SQL中有两种方式: score in(88,95,100); score=88 or score=95 or score=100; or,即或者的意思。...其中有一行数据score=null,在SQL中:null与任何数相加都为null。
领取专属 10元无门槛券
手把手带您无忧上云