这是一个很好的MySQL实践

时间:2011-07-27 06:43:03

标签: mysql database standards database-table

当我进行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

为什么?这有标准吗?

6 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

目的是让您的SQL尽可能可读,无论是为了您自己还是为了以后可能会遇到它的其他人。

明确

  • 我对城市的价值是一个字符串
  • 我正在选择,过滤,我正在使用的表格和我正在排序的

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

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

答案 2 :(得分: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. 始终在列名称前指定表名称。这样,您可以安全地添加其他可能具有相同名称列的表而无需担心。
  5. 另一个例子:

    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,其中e.id = u.id)

答案 3 :(得分: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'

使用表别名,大查询会更清晰,更短。

答案 4 :(得分: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

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

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

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

如果您始终使用一致的格式,您也会发现语法错误也更容易找到。

答案 5 :(得分:0)

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

  

SELECT'name','surname','phone'WHER''city'='ny'FROM''''''''''''''''''''''''''''''

这只是gobbledgook; 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关键字为UPPER大小写,实体引用为LOWER大小写,每行一个表达式