当我进行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
为什么?这有标准吗?
恕我直言,最好的标准是:
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
not employees
)id
<table>_<column>
my_table_name mtn
Group by
和order by
更喜欢数字而不是表达式(如果你改变了表达式,你不需要分组或命令条款,否则你违反了DRY原则)这来自多年的SQL编码,我发现这使得事情变得最简单。
如果您始终使用一致的格式,则会发现语法错误也更容易找到。
SELECT `name`, `surname`, `phone` WHERE `city`='ny' ORDER BY `name`.
注意`和'之间有区别(第一个用于字段名称,另一个用于字符串)。虽然`符号只是严格的necessary,例如当name具有特殊字符或name是SQL关键字时。
目的是使您的SQL尽可能可读,既适用于您自己也适用于以后可能遇到它的其他人。
低于它的清晰
仅在字段名称周围使用引号(如果它们包含空格(或其他特殊字符))。否则,请不要使用它们,因为它会使您的代码变得混乱。
SELECT
name,
surname,
phone
FROM
employees
WHERE
city='ny'
ORDER BY
name
虽然这主要是个人风格,但有些形式有其优点。我的偏好:
SELECT e.`name`, e.`surname`, e.`phone`
FROM `employees` e
WHERE e.`city`= 'ny'
OR e.`city` = 'wa'
ORDER BY e.`name`
AS
:员工AS e)另一个例子:
SELECT e.`name`, e.`surname`, e.`phone`, u.rank
FROM `employees` e
[INNER] JOIN `unionreps` u
ON e.ID = u.ID
为了我:
例如:
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'
使用表别名,大查询看起来会更清晰,更短。
正如其他人所说,它是编码风格的问题。我个人不喜欢不使用保留字作为实体名称 - 它使代码更具可移植性并防止混淆,如:
SELECT'name','surname','phone'WHERE'city'='ny'FROM'employters'ORDER BY'name'
这只是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大小写,每行一个表达式