2013-06-02 4 views
0

Это основной вопрос о операторах sql.разница между select * и select table name

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

SELECT * FROM "Users" 

и

SELECT "Users".* FROM "Users" 
+2

Вы пробовали делать независимые исследования перед публикацией здесь? Это похоже на вопрос, на который вы могли бы найти разумный ответ с быстрым поиском Google. –

+0

Попробуйте просмотреть планы выполнения, чтобы увидеть, есть ли разница. – harpo

ответ

1

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

+0

Вы имеете в виду, что нет никакой разницы в производительности или чем-то еще? –

+0

Я имею в виду, что для всех целей и целей, кроме одного из них, повторяющего имя таблицы, нет никакой разницы. – Oded

+0

@JohnnyCash ах, вы должны были задать этот вопрос конкретным – pinkpanther

6

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

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

1

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

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

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

`select TableA.Name, TableB.Name where TableA.age=TableB.age` 

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

+0

, это не так в общем, но только в приведенном выше примере. как только задействовано более одной таблицы, существует семизначное различие. – cproinger

+0

@cproinger Мой ответ для предоставленного им экземпляра ... вопрос слишком короткий, так что это мой ответ ... но именно так я и хотел знать, есть ли разница между использованием '*' и 'table. * 'не более того, что я думал .... – pinkpanther

+0

@cproinger см. есть надпись для ответа Одеда, которую он сделал слишком общим .... – pinkpanther

2

В вашем случае нет разницы. Он появляется, когда вы выбираете из нескольких таблиц. * принимает данные из всех таблиц, 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 | 
+----+------------+ 
0

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

0

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

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

SELECT "Users".*, SomeColumn * 2 AS DoubleValue FROM "Users" 

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

SELECT *, SomeColumn * 2 AS DoubleValue FROM "Users" 

будет illegal.

Смежные вопросы