разница между select * и select table name

Вопрос: Это основной вопрос о операторах sql. В чем разница между SELECT * FROM "Users" а также SELECT "Users".* FROM "Users" Ответ №1 [TableName]. [Column] обычно используется для определения таблицы, которую вы хотите использовать, когда две таблицы присутствуют в объединении или сложном операторе, и вы хотите определить, какой столбец использовать из двух с тем же

Вопрос:

Это основной вопрос о операторах sql.

В чем разница между

SELECT * FROM «Users»

а также

SELECT «Users».* FROM «Users» Ответ №1

[TableName]. [Column] обычно используется для определения таблицы, которую вы хотите использовать, когда две таблицы присутствуют в объединении или сложном операторе, и вы хотите определить, какой столбец использовать из двух с тем же именем.

Это наиболее распространенное использование в объединении, хотя для базового оператора, такого как выше, нет разницы, и вывод будет таким же.

Ответ №2

В вашем случае нет никакой разницы. Он появляется, когда вы выбираете из нескольких таблиц. * принимает данные из всех таблиц, TABLE_NAME. * – все данные из этой таблицы. Предположим, у нас есть база данных с двумя таблицами:

mysql> SELECT * FROM report; +—-+————+ | id | date | +—-+————+ | 1 | 2013-05-01 | | 2 | 2013-06-02 | +—-+————+ mysql> SELECT * FROM sites_to_report; +———+————+———————+——+ | site_id | report_id | last_run | rows | +———+————+———————+——+ | 1 | 1 | 2013-05-01 16:20:21 | 1 | | 1 | 2 | 2013-05-03 16:20:21 | 1 | | 2 | 2 | 2013-05-03 14:21:47 | 1 | +———+————+———————+——+ mysql> SELECT -> * -> FROM -> report -> INNER JOIN -> sites_to_report -> ON -> sites_to_report.report_id=report.id; +—-+————+———+————+———————+——+ | id | date | site_id | report_id | last_run | rows | +—-+————+———+————+———————+——+ | 1 | 2013-05-01 | 1 | 1 | 2013-05-01 16:20:21 | 1 | | 2 | 2013-06-02 | 1 | 2 | 2013-05-03 16:20:21 | 1 | | 2 | 2013-06-02 | 2 | 2 | 2013-05-03 14:21:47 | 1 | +—-+————+———+————+———————+——+ mysql> SELECT -> report.* -> FROM -> report -> INNER JOIN -> sites_to_report -> ON -> sites_to_report.report_id=report.id; +—-+————+ | id | date | +—-+————+ | 1 | 2013-05-01 | | 2 | 2013-06-02 | | 2 | 2013-06-02 | +—-+————+ Ответ №3

Разница в том, что один из них содержит имя таблицы дважды.

Ответ №4

В случае примера, предоставленного вами, нет никакой разницы между ними, когда дело доходит до семантики. Когда дело доходит до производительности, это может быть слишком мало… просто разбор двух строк длины.

Но это верно только для примера, данного вами. Где, как в запросах, в которых задействованы несколько таблиц tableName.* из таблицы, из которой мы хотим выбрать все столбцы.

Пример. Если у вас есть две таблицы TableA и TableB. Предположим, что они имеют столбец с теми же именами, что и Name. Если вы хотите указать, из какой таблицы вы хотите выбрать столбец Name. Table-name классификатор Table-name.

‘select TableA.Name, TableB.Name where TableA.age=TableB.age’

Это все, что я могу сказать.

Ответ №5

В приведенных примерах единственная разница в синтаксисе. Что оба этих вопроса разделяют, так это то, что они действительно плохие. Select * – это зло, независимо от того, как вы его пишете, и вы можете столкнуться со всеми неприятностями. Вставьте в список столбцов, которые вы хотите включить в свой набор результатов.

Ответ №6

Указанные конкретные примеры возвращают тот же результат и имеют одинаковую производительность. Поэтому в этом отношении не было бы никакой разницы.

Тем не менее, в некоторых продуктах SQL разница в интерпретации * и alias.* Влияет, в частности, на то, что еще вы можете добавить в запрос. Более конкретно, в Oracle вы можете смешивать alias.* С другими выражениями, возвращаемыми в виде столбцов, т.е.

SELECT «Users».*, SomeColumn * 2 AS DoubleValue FROM «Users»

будет работать. В то же время * должен стоять сам по себе, а это означает, что следующее

SELECT *, SomeColumn * 2 AS DoubleValue FROM «Users»

будет незаконным.

Оцените статью
Добавить комментарий