2019 年 6 月 19 日,由 Robert Gravelle 撰写
不久前,我们探索了 你必须知道的一些 SELECT 查询。其中包括确定列的最小值或最大值,以及按类别对结果进行分组。今天的文章将介绍更多查询,以及几乎是自动编写查询的一个技巧!
获取所有用户创建的表
这些包括属于用户创建的数据库的表,也就是说,它们不是系统数据库模式的一部分。确切的语法因供应商而异,但这里有几个示例可让你有一个概念。
在 SQL Server 中,这一行简单的语句就可完成工作:
SELECT NAME FROM sys.objects WHERE TYPE='U'
MySQL 的语法有点冗长,因为你必须指定系统数据库才能省略它们的表:
SELECT * from information_schema.tables
WHERE table_schema not in ('information_schema', 'mysql', 'performance_schema')
ORDER BY table_schema, table_name;
那为什么要查询用户表呢?除了表名,MySQL 查询还返回有关每个表的大量有用信息,包括行数、存储引擎、它们的大小、最后一个 auto_increment 值等等!
如果你只想要在 MySQL 中的表名,那就很容易了。你可以使用 WHERE 子句缩窄列表范围,或者,你可以发出以下命令:
SHOW FULL TABLES IN [database_name] WHERE TABLE_TYPE LIKE 'BASE TABLE';
获取所有视图名
同样,确切的语法因供应商而异,但是这几个例子将提供一个良很的起点。
这是 SQL Server 的语法:
SELECT * FROM sys.views
在 MySQL 中,我们可以通过将 TABLE_TYPE 限制为 'VIEW' 来将列表缩窄到视图。我们仍然必须排除 sys 数据库,因为它包含许多视图:
SELECT * FROM information_schema.`TABLES`
WHERE TABLE_TYPE = 'VIEW'
AND table_schema != 'sys';
要寻找特定数据库的视图?你只需将 WHERE 子句更改为:
AND TABLE_SCHEMA LIKE '[database_name]'
以下命令也可以做到:
SHOW FULL TABLES IN [database_name] WHERE TABLE_TYPE LIKE 'VIEW';
这将返回视图名称及其类型“VIEW”:
温馨提示:使用表别名
编写 SQL 查询既是一门艺术,也是一门科学。你可以养成一些良好的习惯,这些习惯会在生产力和/或写作的简易性方面带来好处。例如,表(或SQL)别名用于为表或表中的列提供仅在查询期间存在的临时名称。可以使用别名来使列名更具可读性并且更不容易出错。
你需要做的就是在 FROM 子句中的表名后面加上“AS [alias_name]”:
SELECT column_name(s)
FROM table_name AS alias_name;
当你使用像 Navicat 这样的查询编辑器时,别名真的很值得使用。假设我们要从 actor 表中选择一些字段。首先,我们将列列表留空,然后输入 FROM 子句,并使用表别名:
SELECT
FROM actor as a
现在,当我们输入较短的表别名时,Navicat 会显示一个包含所有表列的自动完成列表:
以这种方式编写查询不仅快速,而且还消除了列名拼写错误的可能性!
总结
在今天的文章中,我们学习了几个查询和技巧,使用 Navicat PremiumNavicat Premium 作为数据库客户端使编写 SELECT 语句几乎全自动。Navicat 的自动完成代码和自定义的代码段功能透过关键字建议和减少重复输入相同的代码,令编码更加快速。你可以免费试用 14 天进行评估。