Это основной вопрос о операторах sql.разница между select * и select table name
В чем разница между
SELECT * FROM "Users"
и
SELECT "Users".* FROM "Users"
Это основной вопрос о операторах sql.разница между select * и select table name
В чем разница между
SELECT * FROM "Users"
и
SELECT "Users".* FROM "Users"
Разница в том, что одна из них содержит имя таблицы дважды.
Вы имеете в виду, что нет никакой разницы в производительности или чем-то еще? –
Я имею в виду, что для всех целей и целей, кроме одного из них, повторяющего имя таблицы, нет никакой разницы. – Oded
@JohnnyCash ах, вы должны были задать этот вопрос конкретным – pinkpanther
[TableName]. [Column] обычно используется для определения таблицы, которую вы хотите использовать, когда две таблицы присутствуют в объединении или сложном операторе, и вы хотите определить, какой столбец использовать из двух с тем же имя.
Это наиболее распространенное использование в объединении, хотя для базового оператора, такого как выше, нет разницы, и вывод будет таким же.
В случае примера, приведенного вами, нет никакой разницы между ними, когда дело доходит до semantics.When речь идет о производительности может быть слишком мало ... просто разбор две разных строк длины ....
Но это верно только для примера, данного вами. Где, как и в запросах, где задействованы несколько таблиц, tableName.*
рассортировать таблицу, из которой мы хотим выбрать все столбцы.
Пример: Если у вас есть два стола TableA
и TableB
. Предположим, что у них есть столбец с одинаковыми именами Name
. Если вы хотите указать, из какой таблицы вы хотите выбрать столбец Name
. Table-name
квалификатор помогает.
`select TableA.Name, TableB.Name where TableA.age=TableB.age`
Это все, что я могу сказать.
, это не так в общем, но только в приведенном выше примере. как только задействовано более одной таблицы, существует семизначное различие. – cproinger
@cproinger Мой ответ для предоставленного им экземпляра ... вопрос слишком короткий, так что это мой ответ ... но именно так я и хотел знать, есть ли разница между использованием '*' и 'table. * 'не более того, что я думал .... – pinkpanther
@cproinger см. есть надпись для ответа Одеда, которую он сделал слишком общим .... – pinkpanther
В вашем случае нет разницы. Он появляется, когда вы выбираете из нескольких таблиц. * принимает данные из всех таблиц, TABLE_NAME. * - все данные из этой таблицы. Предположим, у нас есть база данных с 2 таблицами:
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 |
+----+------------+
Для приведенных примеров единственная разница в синтаксисе. Что оба этих вопроса разделяют, так это то, что они действительно плохие. Select *
Зло, независимо от того, как вы его пишете, и может вызвать вас во всех неприятностях. Вставьте в список столбцов, которые вы хотите включить в свой набор результатов.
Указанные конкретные примеры возвращают тот же результат и имеют одинаковую производительность. Поэтому в этом отношении не было бы никакой разницы.
Однако в некоторых продуктах SQL разница в интерпретации *
и alias.*
влияет, в частности, на то, что еще можно добавить к запросу. Более конкретно, в Oracle, вы можете смешать alias.*
с другими выражениями возвращается в виде столбцов, то есть это
SELECT "Users".*, SomeColumn * 2 AS DoubleValue FROM "Users"
work бы.В то же время, *
должны стоять на своих собственных, а это означает, что следующий
SELECT *, SomeColumn * 2 AS DoubleValue FROM "Users"
будет illegal.
Вы пробовали делать независимые исследования перед публикацией здесь? Это похоже на вопрос, на который вы могли бы найти разумный ответ с быстрым поиском Google. –
Попробуйте просмотреть планы выполнения, чтобы увидеть, есть ли разница. – harpo