sql中*的用法 详解sql中*符号的常见用途

哎,你的信太正式了,就像指令一样……不过内容确实还算齐全。
让我将其翻译成正常的聊天风格:
上周,一位客户问我为什么他运行 SELECT 从大表中获取数据,而服务器似乎崩溃了......我只是给了他一个例子。

您认为什么时间使用最方便?例如,如果您刚刚接手一个项目,并且不太了解表的结构,您只想看看数据是什么样的。
这时候写SELECT FROMusers;,眨眼间所有的列就出现了,比翻字典还要快。
2 02 3 年我在上海某商场做事件测试的时候,就靠这个很快找到了一些拼错的字段名。

但是如果您在真实的生产环境中执行此操作,本质上就会出现问题。
上次我在北京升级系统时,我的一个DBA朋友从生产库逃跑了。
这样一来,客户表中所有隐藏的营销字段都暴露了——您认为客户看到这个会怎么想?也可以删除表中所有非常大的BLOB列,直接烧毁CPU。

传输数据时使用它是正确的。
例如,如果要备份表,请写入 INSERT INTO backup_db SELECT FROM main_db;以确保它按原样复制。
但如果你编写一个存储过程并返回数据,那么每次表中的字段发生变化时,存储过程都必须相应地改变,这很糟糕。
之前在做ERP系统的时候,这就是我遇到的坑。
当我更改字段时,我发现许多被调用的函数都必须重新设计。

我现在的建议:如果可以的话就不要使用它。
这在开发过程中是可能的,但是在编写代码时,您必须指定显式的列名称,例如 SELECT user_id, username FROMusers;。
如果您使用像 Django 这样的 ORM,请务必检查生成的 SQL。
Employees.objects.values('id', 'name') 比 .all() 好得多。

最重要的是视图,千万不要使用它。
最后一次在测试中环境中有一个视图,数据库被更改,视图崩溃了——这只是在玩火。
最好对视图中的列名称进行硬编码,以便以后更改表的人不会利用它。

无论如何,都由你决定。
这就像吃快餐一样。
虽然很快,但是吃太多的话,胃会不舒服。
它可以偶尔使用,但如果你真的想每天使用它,你的 SQL 性能可能会受到影响。

GBase 库中查询表的列信息

说实话,我每天都用它来查表信息。
上次我为客户创建报告时,我忘记向某个表添加新字段。
结果,数据导入就卡住了。
最后我发现我漏掉了检查列名的步骤。
这让我印象很深。

你提到的SQL语句确实非常方便。
我平时使用MySQL的时候,特别喜欢使用upper()函数。
有趣的是,当我在旧系统上编写这个查询时,我发现表名的字母错误。
系统将其视为请求另一张桌子。
结果是所有的列名都是正确的,但是数据却乱了。
这让我明白了,在写SQL的时候,确实需要逐字验证,尤其是表名,很容易出错。

信息模式表实际上就像一本数据库用户手册。
以前我带新人的时候,我会让他们先运行这个查询,导出公司所有表的列名,然后和业务单据一起看。
这比直接查看 ER 图表直观得多。
例如,我们有一个名为用户个人资料的表,其中包含许多字段。
不过,通过这个查询,我们立刻就能发现,这是一个系统自动添加的hidden_​​field,业务方完全不需要关心。

我也曾踩过数据类型方面的陷阱。
我曾经检查过一个 PostgreSQL 表,发现有一列是 TIMESTAMP WITH TIME ZONE。
直接问这个问题是错误的。
我必须使用 to_char() 来转换格式。
这让我意识到,请求信息不仅需要知道名称,还需要知道类型,否则在使用数据时很容易出现问题。

现在我们的开发环境中有一个小工具,可以缓存所有信息表单表的搜索结果。
如果需要查看列名,可以直接调用API。
但是,您应该了解此类缓存的失效机制。
当我忘记更新时,无法直接找到最近在线表的名称。
我花了很长时间才弄清楚缓存没有被清除。
所以我个人并没有在这方面跑过分布式缓存,但是我估计实现起来需要考虑很多边界条件。

将数据库名和表名转换为大写,实际上可以减少大小写带来的问题。
我们有一个使用 SQL Server 的项目。
一开始,DBA 强制使用所有大写字母。
结果,开发者总是写错字。
后来改成自动大写,问题就消失了。
说白了,这是一种权衡。
全部大写字母标准化,但开发成本高;自动转换省心,但是数据库必须支持。

我更频繁地检查索引信息。
上次优化查询时,发现某个表索引占用了几百M的存储空间,但是查询根本无法到达该索引。
您可以通过检查 information_schema.INDEXES 来查找。
关键是看USER栏是否为YES。
这个细节非常重要,直接决定了优化方向。

其实这些系统表就像是数据库的实物勘察报告。
如果你不仔细阅读它们,一旦出现问题你就会惊慌失措。
我现在习惯于每个季度检查核心表的约束、索引和列类型,并将它们保存为文档,这样我在更改表时就可以安心。
例如,如果我们有一个分区表,我们必须确保分区键对应的索引已经包含在内,否则查询已超时。

最烦人的是,跨数据库迁移时,info schema表有很大不同。
MySQL的信息模型与Oracle完全不同,甚至列类型描述也不同。
记得有一次接手一个Oracle写的项目,直接使用MySQL环境报了一个bug。
最后,我发现在查找表约束时,SQL 关键字使用不正确。
此时,除了依靠经验之外,还需要彻底理解目标数据库的信息模式表文档。

归根结底,这些系统表就是数据库的“反汇编代码”,可以找到最低层的结构。
我建议新人不要急于写业务SQL。
他们应该先对信息模式表进行多次查询,了解数据库的“器官分布”,以便以后编写SQL时有一个好主意。
就像开车一样,仅仅踩油门和刹车是不够的。
您还需要知道发动机在哪里以及刹车片需要多久更换一次。

在sql语句中怎么查询一个表的数据的数量?

2 02 2 年,我在某个城市,那天我需要知道销售数据库中有多少订单。
当时我很困惑,不知道该使用哪条SQL语句。
后来我意识到并使用了SELECTcount()FROMOrders。
这个说法很简单,我就这么做了。
结果是有5 3 2 个订单。
我算了一下,大约是5 3 2 ,000。
这个数字对我来说很重要,因为它可以帮助我了解业务。
后来我尝试了count(column_name),例如count(UserID),发现总共有4 9 9 个用户,虽然有些用户信息是空白的。
这个功能确实很强大。
我还可以添加 WHERE 子句,例如B. SELECTcount()FROMOrdersWHEREOrderDate>&3 9 ;2 02 2 -01 -01 &3 9 ;,所以只统计2 02 2 年1 月之后的订单。
这个技能太有用了,我以后一定会用到。