Технически не будет никакой разницы между операциями SELECT * FROM TAB_NAME
и SELECT a,* FROM TAB_NAME a
.
Здесь вы просто указываете псевдоним.
Но вы можете понять разницу, когда вы будетепопробуйте получить другой столбец с * из TAB_NAME.Это означает, что если вы хотите ввести данные как
SELECT *,COL_1,COL2...
FROM TAB_NAME
или
SELECT *,CONCAT(...)
FROM TAB_NAME
или что-то с *, вы должны указать псевдоним.
Но вопрос в том, почему?Позвольте мне попытаться объяснить,
Как вы знаете здесь SELECT *
означает, что вы пытаетесь выбрать все столбцы.Итак, *
означает «все», и если вы ставите *
после условия SELECT
, это означает, что вы уже дали команду вашей системе выбрать все, передав специальный символ, и после этого ваша система может ожидать только FROM
пункт вместо любой другой вещи.Поскольку вы уже указали своей системе / базе данных выбрать все, тогда ничего не останется для выбора, и, следовательно, ваша система всегда будет ждать предложения FROM
.Поэтому он будет выдавать ошибку каждый раз.
НО теперь вопрос в том, как будет работать внутренний запрос
SELECT a.*,COL_1,COL2...
FROM TAB_NAME a
или
SELECT a.*,a.COL_1,a.COL2...
FROM TAB_NAME a
или
SELECT a.*,CONCAT(c1,c2)
FROM TAB_NAME a
или
SELECT a.*,CONCAT(a.c1,a.c2)
FROM TAB_NAME a
или что-нибудь подобное.
Здесь ваша система поймет, что вы пытаетесь выбрать все из таблицы a, что означает, что вы можетевыберите любой другой столбец / функцию и т. д. из таблицы a или из любой другой таблицы.Это причина, по которой ваша система / база данных позволит вам вставлять другие столбцы col / func также после, если требуется, или вы можете использовать из условия from после a.*