1

例如,当我在数据库中进行 SQL 查询时,其中有一个名为“employees”的表,这是编写的最佳实践吗?

SELECT 'name', 'surname', 'phone' WHERE 'city'='ny' FROM 'employees' ORDER BY 'name'

SELECT name, surname, phone, WHERE city=ny FROM employees ORDER BY name

或者

SELECT employees.name, employees.surname WHERE employees.city=ny ORDER BY employee.name

为什么?有这方面的标准吗?

4

6 回答 6

2
SELECT `name`, `surname`, `phone` WHERE `city`='ny' ORDER BY `name`.

注意 ` 和 ' 之间有区别(第一个用于字段名称,另一个用于字符串)。虽然 ` 符号只是严格必要的,例如当 name 有特殊字符或 name 是 SQL 关键字时。

于 2011-07-27T06:49:06.793 回答
1

目的是使您的 SQL 尽可能地可读,对您自己和以后可能遇到它的其他人都是如此。

在其清晰的下方

  • 我对城市的价值是一个字符串
  • 我在选择什么、过滤什么、我正在使用什么表以及我按什么排序

如果字段名称包含空格(或其他特殊字符),请仅在字段名称周围使用引号。否则,不要使用它们,因为它会使您的代码混乱。

SELECT 
   name, 
   surname, 
   phone
FROM 
   employees 
WHERE
   city='ny'
ORDER BY 
   name
于 2011-07-27T06:52:00.507 回答
1

虽然这主要是个人风格的问题,但有些形式有其优势。我的偏好:

SELECT e.`name`, e.`surname`, e.`phone` 
FROM `employees` e
WHERE e.`city`= 'ny' 
 OR e.`city` = 'wa'
ORDER BY e.`name`
  1. 大写的关键字,小写的表名(如果您创建小写的表或将它们设置为不区分大小写)
  2. 每个关键字在不同的行
  3. 每个表都有一个别名(但没有明确的AS:employees AS e)
  4. 始终在列名之前指定表名。这样,您可以放心地添加其他可能具有相同名称的列的表。

另一个例子:

SELECT e.`name`, e.`surname`, e.`phone`, u.rank
FROM `employees` e
[INNER] JOIN `unionreps` u
ON e.ID = u.ID
  1. JOIN 以 ANSI-92 样式编写,而不是 ANSI-89(来自 e,u where e.id=u.id)
于 2011-07-27T06:56:29.497 回答
0

为了我:

  • 当涉及一张表时 - 我不使用表别名。
  • 当某些表涉及查询时 - 我使用表别名。

例如:

SELECT deptno, dname FROM dept WHERE loc = 'NEW YORK'

或者

SELECT d.deptno, d.dname, e.ename, e.job FROM dept d
JOIN emp e ON d.deptno = e.deptno
WHERE d.loc = 'NEW YORK'

使用表别名,大查询看起来更清晰、更短。

于 2011-07-27T06:54:17.243 回答
0

恕我直言,最好的标准是这样的:

select
    o.name as office_name,
    e.name as employee_name,
    count(*) as count
from employee e
left join office o on o.id = e.office_id
where e.name like 'a%'
group by 1
order by 1

您的目标是提高清晰度和维护。这里展示的功能/好处是:

  • 大写无任何内容(即选择不选择)
  • 仅对保留字使用反引号转义
  • 单数形式的表名(即employeenot employees
  • 以复数形式查看名称(例如 current_employees)
  • 下划线分隔名称部分(即没有 camelCase 或 flatcase 等)
  • 主键始终命名id
  • 外键始终命名为 table_id
  • 在查询中列名发生冲突的地方,将它们别名为<table>_<column>
  • 查询格式如上
    • 左对齐,除了列,它们在自己的行上
    • 主要关键字的换行符
  • 表别名通常使用名称部分的所有首字母,例如my_table_name mtn
  • Group by并且order by更喜欢数字而不是表达式(如果您更改表达式,则不需要 group by 或 order by 子句,否则您违反了 DRY 原则)

这来自多年的 SQL 编码,我发现这让事情变得最简单。

如果你总是有一个一致的格式,你会发现语法错误也更容易找到。

于 2011-07-27T08:04:35.913 回答
0

正如其他人所说,这是编码风格的问题。就我个人而言,我不喜欢对实体名称使用保留字 - 它使代码更具可移植性并防止混淆,例如:

SELECT 'name', 'surname', 'phone' WHERE 'city'='ny' FROM 'employees' ORDER BY 'name'

这只是狼吞虎咽;mysql 使用反引号来封装实体引用,而不是单引号。OTOH Oracle 使用双引号。当您使用分隔符时,引用变得区分大小写。

我使用的编程标准是总是在列名前加上表名或别名(通常是后者以减少输入量),以使代码的意图更加清晰。我还在我的表名前加上数据库名——使用状态机制(USE some_db;)在数据库之间切换很麻烦:

SELECT e.name
, e.surname
, e.phone
FROM avopa.employees
WHERE e.city='ny'
ORDER BY e.name;

注意 SQL 关键字大写,实体引用小写,每行一个表达式

于 2011-07-27T11:12:56.287 回答