首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么即使表中不存在该列,sql也会给出结果?

即使表中不存在该列,SQL仍然会给出结果的原因是SQL查询语句的执行过程中,数据库会根据查询条件进行数据的筛选和处理,而不会因为查询条件中的列名不存在而导致查询失败。

具体来说,当执行SQL查询语句时,数据库会按照以下步骤进行处理:

  1. 语法解析:数据库会对SQL查询语句进行语法解析,检查语句的合法性和正确性。
  2. 查询优化:数据库会对查询语句进行优化,包括选择合适的索引、优化查询计划等,以提高查询效率。
  3. 数据筛选:数据库会根据查询条件对表中的数据进行筛选,只返回满足条件的数据行。
  4. 列处理:在查询结果中,数据库会根据查询语句中指定的列名,从满足条件的数据行中提取相应的列数据。

如果查询语句中指定的列名在表中不存在,数据库会忽略该列名,并继续返回满足条件的数据行。这是因为数据库引擎在执行查询时,并不会对查询语句中的列名进行校验,而是将其视为一个查询条件,只要满足其他条件,就会返回相应的结果。

需要注意的是,如果查询语句中的列名拼写错误或者表中确实不存在该列,数据库会抛出错误信息,提示列名错误或者不存在该列。

总结起来,即使表中不存在该列,SQL仍然会给出结果是因为数据库引擎在执行查询时,会根据查询条件进行数据筛选和处理,而不会因为查询条件中的列名不存在而导致查询失败。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL语句逻辑执行过程和相关语法详解

一方面,关系和元素都需要有唯一标识的名称,因此也要有名称,即使表表达式如此。像派生是嵌套在语句中的,无法在外部给它指定表明,因此必须为它指定一个别名。...这里还请区分表表达式(虚拟)和逻辑执行过程我们想象出来的虚拟。表表达式是实实在在符合关系模型的即使它可能只是一条或几条语句,不会将相关数据行进行物理的存储,但在关系引擎看来,它就是。...因此,sql server和oracle直接对语句报错。 但是MySQL/mariadb就允许在order by中使用非select_list进行排序。它们是如何"偷奸耍滑"的呢?...第二个查询,使用group by对class进行分组,因为它先检索的字段名,因此这个分组class是Student的class结果同样符合此处的分析。...仍然使用上一小节加工后的数据结构来说明: 标准SQL之所以不能使用sid、name和age,是因为group by的每个分组都是单行(标量)结果,如果使用了这些违反关系模型的范式要求(一行对多行

3.4K20

数据库:视图和索引

视图是一张虚拟,并不在数据库以存储数据值集的形式存在。在引用过程依据基动态生成。 2.为什么使用视图?...安全:有的数据是需要保密的,如果直接把给出来进行操作造成泄密,那么可以通过创建视图把相应视图的权限给出来即可保证数据的安全。...deptno=20; #结果集为空,基不存在10号部门了 select * from v_emp; # with check option保证视图查询条件不被修改,但其他字段可以修改 create...否则,sql的查询性能很慢。...数据量足够大; 增删改较少的; 高基数列。什么意思?的数据大多数都不一样。 4.注意事项有哪些? 索引需要单独开辟空间进行维护,对数据进行增删改,都需要维护索引。

58750

MySQL(十)操纵及全文本搜索

创建一般有如下两种方式: ①使用具有交互式创建和管理的工具; ②直接使用MySQL语句操纵; 1、创建基础 使用程序创建,可使用SQL的create table语句,需要以下两个信息: ①新的名字...PS:创建新时,指定的名必须不存在(如果只想在一个不存在时创建它,应在名前给出if not exists:这样做不检查表模式是否与打算创建的模式匹配,只检查表名是否存在)。...2、使用null值 null就是没有值或者缺值;允许null值的允许在插入行时不给出的值,不允许null值的不接受没有值的行(插入或更新行时,必须有值); 每个表列或者是null,或者是...二、更新 为更新定义,可以使用alter table语句(很少使用);为了更新结构,必须给出如下信息: ①alter table之后给出要更改的名(必须存在,否则会报错) ②所做更改的列表;...PS:即使没有fulltext索引可以使用布尔方式(但这种方式很缓慢)。

2K30

盘点一下数据库的误操作有哪些后悔药?

给自己一次测试sql是否正确,确认是否执行的机会。 4.操作数据sql加limit 即使通过上面的select语句确认了sql语句没有问题,执行后影响的记录行数是对的。...可以简化成一条sql: create table order_bak_2021031722 select * from`order`; 创建的同时复制数据到新。...在程序刚部署成功,但数据库新字段还没来得及加的这段时间内,最新程序,所有使用了新加字段的增删改查sql都会报字段不存在的异常。 好了,就按先在数据库中加字段,再发程序的顺序。...当有insert请求时,由于数据库字段是必填的,会报必填字段不能为空的异常。 如果先把数据库相关表字段删了,程序还没来得及发。这时所有涉及该删除字段的增删改查,都会报字段不存在的异常。...这时所有涉及字段的增删改查,都会报字段不存在的异常。 如果先把数据库字段名称改了,程序还没来得及发。这时所有涉及字段的增删改查,同样会报字段不存在的异常。

77051

线上数据删错了,差点被老板开除

给自己一次测试sql是否正确,确认是否执行的机会。 4.操作数据sql加limit 即使通过上面的select语句确认了sql语句没有问题,执行后影响的记录行数是对的。...可以简化成一条sql: create table order_bak_2021031722 select * from`order`; 创建的同时复制数据到新。...在程序刚部署成功,但数据库新字段还没来得及加的这段时间内,最新程序,所有使用了新加字段的增删改查sql都会报字段不存在的异常。 好了,就按先在数据库中加字段,再发程序的顺序。...当有insert请求时,由于数据库字段是必填的,会报必填字段不能为空的异常。 如果先把数据库相关表字段删了,程序还没来得及发。这时所有涉及该删除字段的增删改查,都会报字段不存在的异常。...这时所有涉及字段的增删改查,都会报字段不存在的异常。 如果先把数据库字段名称改了,程序还没来得及发。这时所有涉及字段的增删改查,同样会报字段不存在的异常。

81911

select count(*) 底层到底干了啥?

而 MyISAM 可以快速取到的行数。这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的。...即使是 MIN ( id ) 不一定就读取的是 id 最小的那一行,因为同样有行可见性的问题,实际上 index_read 取到的是 当前事务内语句可见的最小 index 记录。...A:两种情况会将所读的行计入 count: (1)如果 COUNT 函数的参数是某,则会判断所读行定义是否 Nullable 以及的值是否为 NULL;若两者均为是,则不会计入 count...在对象创建并填充了一个列表 result_field_list 用于存放结果,列表每个元素则是一个结果的 ( Item_result_field* ) 对象 ( 指针 ) 。...共性:共性存在于 SQL 层,即 SQL 解析之后的数据结构是一致的,count 变量都是存在于作为结果的 Item_sum_count 类型对象;返回给客户端的过程类似 – 对 count 变量进行赋值并经由

1.3K20

数据库

内连接分三种: 1、等值连接:在连接条件中使用等于号(=)运算符比较被连接值,其查询结果列出被连接的所有,包括其中的重复列。...④持久性(Durability):事务完成之后,它对于系统的影响是永久的,修改即使出现系统故障将一直保留,真实的修改了数据库。 锁 数据库大并发操作要考虑死锁和锁的性能问题。...这就是为什么我们可以不懂锁可 以高高兴兴的写SQL。 悲观锁:利用数据库本身的锁机制实现。...视图的缺点 ● 性能:SQL Server必须把视图的查询转化成对基本的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server把它变成一个复杂的结合体...存储过程是数据库的一个重要对象,用户通过指定存储过程的名字并给出参数(如果存储过程带有参数)来执行它。

64420

select count(*) 底层到底干了啥?

而 MyISAM 可以快速取到的行数。这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的。...即使是 MIN ( id ) 不一定就读取的是 id 最小的那一行,因为同样有行可见性的问题,实际上 index_read 取到的是 当前事务内语句可见的最小 index 记录。...A:两种情况会将所读的行计入 count: (1)如果 COUNT 函数的参数是某,则会判断所读行定义是否 Nullable 以及的值是否为 NULL;若两者均为是,则不会计入 count...在对象创建并填充了一个列表 result_field_list 用于存放结果,列表每个元素则是一个结果的 ( Item_result_field* ) 对象 ( 指针 ) 。...共性:共性存在于 SQL 层,即 SQL 解析之后的数据结构是一致的,count 变量都是存在于作为结果的 Item_sum_count 类型对象;返回给客户端的过程类似 – 对 count 变量进行赋值并经由

1.3K00

一文读懂 select count(*) 底层原理

而 MyISAM 可以快速取到的行数。这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的。...即使是 MIN ( id ) 不一定就读取的是 id 最小的那一行,因为同样有行可见性的问题,实际上 index_read 取到的是 当前事务内语句可见的最小 index 记录。...A:两种情况会将所读的行计入 count: (1)如果 COUNT 函数的参数是某,则会判断所读行定义是否 Nullable 以及的值是否为 NULL;若两者均为是,则不会计入 count...在对象创建并填充了一个列表 result_field_list 用于存放结果,列表每个元素则是一个结果的 ( Item_result_field* ) 对象 ( 指针 ) 。...共性:共性存在于 SQL 层,即 SQL 解析之后的数据结构是一致的,count 变量都是存在于作为结果的 Item_sum_count 类型对象;返回给客户端的过程类似 – 对 count 变量进行赋值并经由

3.1K20

数据库性能优化之SQL语句优化

在这些where子句中,即使某些存在索引,但是由于编写了劣质的SQL,系统在运行SQL语句时不能使用索引,而同样使用全扫描,这就造成了响应速度的极大降低。 1....不能用null作索引,任何包含null值的都将不会被包含在索引即使索引有多这样的情况下,只要这些中有一含有null,就会从索引中排除。...也就是说如果某存在空值,即使建索引不会提高性能。任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。...ORACLE将无法使用索引.对于单列索引,如果包含空值,索引中将不存在此记录....因为空值不存在于索引,所以WHERE子句中对索引进行空值比较将使ORACLE停用索引.

5.6K20

数据库性能优化-索引与sql相关优化

,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一中有字段 sex,male、female几乎各一半,那么即使在sex上建了索引对查询效率起不了作用。...为常作为查询条件的字段建立索引 如果某个字段经常用来做查询条件,那么字段的查询速度影响整个的查询速度。因此,为这样的字段建立索引,可以提高整个的查询速度。...选取不经常修改的 对索引的修改在索引文件进行操作 联合索引,最好将分辨度大的字段放在前面 计算分辨度公式:select distinct(name)/count(name)...,不会使用索引 不满足最左匹配原则 用or分割开的条件,or前条件有索引,or后的没有索引 order by在select 查询的,包含索引没有包含的不使用索引...记住, 索引只能告诉你什么存在于, 而不能告诉你什么不存在. 3.sql优化 尽量减少访问数据库次数,将一些逻辑放在后台代码处理 在不影响业务的情况下,整合简单,无关联和有关联的数据库访问

1.8K30

select count(*) 底层究竟做了什么?

而 MyISAM 可以快速取到的行数。这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的。...即使是MIN ( id ) 不一定就读取的是 id 最小的那一行,因为同样有行可见性的问题,实际上 index_read 取到的是 当前事务内语句可见的最小 index 记录。...A:两种情况会将所读的行计入 count: 1、如果 COUNT 函数的参数是某,则会判断所读行定义是否 Nullable以及的值是否为 NULL;若两者均为是,则不会计入 count,否则将计入...在对象创建并填充了一个列表 result_field_list 用于存放结果,列表每个元素则是一个结果的 ( Item_result_field*) 对象 ( 指针 ) 。...共性:共性存在于 SQL 层,即 SQL 解析之后的数据结构是一致的,count 变量都是存在于作为结果的 Item_sum_count 类型对象;返回给客户端的过程类似 – 对 count 变量进行赋值并经由

1.3K30

MySQL或者MariaDB里面sql_mode的设置详解

模式的简单描述是当在插入不正确的值时“给出错误而不是警告”。注释:一旦发现错误立即放弃INSERT/UPDATE。...如果把sql_mode的值设置成后面的两个值(STRICT_TRANS_TABLES或者TRADITIONAL,也就是我们说的严格模式),那么当在插入或更新不正确的值时,mysql将会给出错误,并且放弃...,最终结果插入NULL并且不提示warnings模式启用的话,如果数据被零除,最终结果插入NULL并且提示warnings>set session sql_mode='STRICT_TRANS_TABLES...例如某个中有user这一,而MySQL数据库又有user这个函数, user会被解释为函数,如果想要选择user这一,则需要引用。...如果值丢失,MySQL在插入隐式默认值。在任何情况下,MySQL都会生成警告而不是给出错误并继续执行语句。 一般情况下,不要使用MySQL来检查的内容。

2.2K20

select count(*)底层究竟做了什么?

而 MyISAM 可以快速取到的行数。这些实践经验的背后是怎样的机制,以及为什么需要/可以是这样,就是此文想要探讨的。...即使是MIN ( id ) 不一定就读取的是 id 最小的那一行,因为同样有行可见性的问题,实际上 index_read 取到的是 当前事务内语句可见的最小 index 记录。...A:两种情况会将所读的行计入 count: 1、如果 COUNT 函数的参数是某,则会判断所读行定义是否 Nullable以及的值是否为 NULL;若两者均为是,则不会计入 count,否则将计入...在对象创建并填充了一个列表 result_field_list 用于存放结果,列表每个元素则是一个结果的 ( Item_result_field*) 对象 ( 指针 ) 。...共性:共性存在于 SQL 层,即 SQL 解析之后的数据结构是一致的,count 变量都是存在于作为结果的 Item_sum_count 类型对象;返回给客户端的过程类似 – 对 count 变量进行赋值并经由

1.2K40

MySQL查询优化之道

这就是为什么默认情况选项为on(optimizer_prune_level=1)。...key_len:索引长度 rows:返回的行数 extra:附加信息,比如 using filesort---> 说明用了排序算法 filtered:给出了一个百分比的值,这个百分比值和 rows 的值一起使用...MySQL 的 join 只有一种算法 nested loop 也就是程序的 for 循环,通过嵌套循环实现,驱动结果集越大,所需要循环的次数越多,访问被驱动的次数越多。...a 数据的增多,indxaca 索引占用的空间不断增长。...比如字段重复上千万;即使你创建了索引优化器模块是不会选择使用的;会有极大的性能问题 有很多重复值,带来大量的随机 IO 甚至是重复 IO。

1.4K40

mysql floor报错注入_mysql报错注入总结

,虚拟由主键和count()组成,同时floor(rand(0)2)这个值会被计算多次,这一点很重要,计算多次是指在取数据数据使用group by时,进行一次floor(rand(0)2),...如果虚拟不存在此数据时,那么在往虚拟插入数据时,floor(rand(0)2)将会再被计算一次,接下来分析,取数据第一条记录时第一次使用group by,计算floor(rand(0)2)的值为...0,查询虚拟发现0这个主键不存在,于是再次计算floor(rand(0)2)结果为1,将1作为主键插入虚拟,这时主键1的count()值为1,接下来取数据第二条记录时第二次使用group by,计算...,发现0的键值不存在,于是再一次计算floor(rand(0)2),结果为1,当尝试将1插入虚拟时,发现主键1已经存在,所以报出主键重复的错误,整个过程查询了information_schema.tables...这个3条记录发生报错,这也是报错为什么需要数据的记录多到至少为3条的原因,也是为什么选择information_schema.tables的原因,因为这个的记录一定大于三条,由此可知我们其实还以选择

2.5K40

杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】

这个惟一属性被称为主键> ---- 「第三范式」:「建立在第一,第二范式的基础上」,确保每都和主键直接相关,而不是间接相关不存在其他的非主键信息 ---- 但是在我们的日常开发当中,...1.通过连接器跟客户端「建立连接」 2.通过查询「缓存查询」之前是否有查询过 sql 有则直接返回结果 没有则执行第三步 3.通过分析器「分析 sql 的语义」是否正确,包括格式,等等 4....「验证权限」,验证是否有的查询权限 没有则返回无权限的错误 有则执行第六步 6.通过执行器调用存储引擎执行 sql,然后返回「执行结果」 ---- 5. 什么是索引?...想想,如果没有目录怎么样,最差的结果是你有可能翻到字典的最后一页才找到你想要找的字。 索引就「相当于我们字典的目录」,可以极大的提高我们在数据库的查询效率。...查询 当普通索引为条件时查询到数据一直扫描,直到扫完整张 当唯一索引为查询条件时,查到数据直接返回,不会继续扫 ---- 更新 普通索引直接将操作更新到 change buffer

53230
领券