Никогда не слушайте, чтобы кто-нибудь говорил вам всегда делать что-то в SQL - альтернативно, всегда будьте осторожны с тем, чтобы кто-то говорил вам, что никогда не нужно что-то делать в SQL:)
В следующих примерах SELECT *
не может причинить вреда и, вероятно, имеет выгоду в отношении читабельности и обслуживания кода ( DRY и все такое):
Пример 1
Когда комманист атрибутов уже указан во «внутренней» области видимости:
SELECT *
FROM (
SELECT col1, col2, col3, col4, col5
FROM T1
) AS DT1;
Пример 2
Когда используется конструктор табличных значений в CTE, и каждый вынужден (например, в SQL Server!) Обернуть предложение VALUES
в табличное выражение (SELECT..FROM
), например.
WITH T1
AS
(
SELECT *
FROM (
VALUES (1, 1, 1, 2, 1),
(1, 1, 2, 1, 1),
(1, 2, 1, 1, 1)
) AS T (col1, col2, col3, col4, col5)
)
SELECT ...
Хорошо, так что этот последний пример - глупость, но учтите, что использование коммалистов при каждой возможности вызывало ошибку и затрудняло отладку:
WITH T2 (author_name, book_title, ISBN)
AS
(
SELECT book_title, ISBN, author_name
FROM (
VALUES ('9780321189561', 'C. J. Date', 'An Introduction to Database Systems')
) AS T (ISBN, author_name, book_title)
)
SELECT *
FROM T2;