розніца паміж абярыце * і абярыце імя табліцы

Гэта асноўнае пытанне аб SQL заявы.

У чым розніца паміж

SELECT * FROM "Users"

і

SELECT "Users".* FROM "Users"
0
Паспрабуйце паглядзець планы выканання, каб убачыць, калі ёсць розніца.
дададзена аўтар harpo, крыніца
Паспрабуйце паглядзець планы выканання, каб убачыць, калі ёсць розніца.
дададзена аўтар harpo, крыніца
Паспрабуйце паглядзець планы выканання, каб убачыць, калі ёсць розніца.
дададзена аўтар harpo, крыніца
Вы спрабавалі рабіць незалежнае даследаванне, перш чым адпраўляць сюды? Гэта падобна на такое пытанне, вы маглі б знайсці разумны адказ з хуткім пошукам Google.
дададзена аўтар Daniel Mann, крыніца
Вы спрабавалі рабіць незалежнае даследаванне, перш чым адпраўляць сюды? Гэта падобна на такое пытанне, вы маглі б знайсці разумны адказ з хуткім пошукам Google.
дададзена аўтар Daniel Mann, крыніца

15 адказы

[TableName]. [Калонка] звычайна выкарыстоўваецца, каб дакладна вызначыць табліцу, якую хочаце выкарыстоўваць, калі дзве табліцы ў якасці падарунка аб'яднання або складанае заяву, і вы хочаце, каб вызначыць, якія калонкі выкарыстоўваць з двух з такім жа імем.

Гэта найбольш распаўсюджанае ўжыванне ў аб'яднанне, хоць, для асноўнага заявы, такія як адзін вышэй няма ніякай розніцы, і вынік будзе той жа.

6
дададзена

[TableName]. [Калонка] звычайна выкарыстоўваецца, каб дакладна вызначыць табліцу, якую хочаце выкарыстоўваць, калі дзве табліцы ў якасці падарунка аб'яднання або складанае заяву, і вы хочаце, каб вызначыць, якія калонкі выкарыстоўваць з двух з такім жа імем.

Гэта найбольш распаўсюджанае ўжыванне ў аб'яднанне, хоць, для асноўнага заявы, такія як адзін вышэй няма ніякай розніцы, і вынік будзе той жа.

6
дададзена

[TableName]. [Калонка] звычайна выкарыстоўваецца, каб дакладна вызначыць табліцу, якую хочаце выкарыстоўваць, калі дзве табліцы ў якасці падарунка аб'яднання або складанае заяву, і вы хочаце, каб вызначыць, якія калонкі выкарыстоўваць з двух з такім жа імем.

Гэта найбольш распаўсюджанае ўжыванне ў аб'яднанне, хоць, для асноўнага заявы, такія як адзін вышэй няма ніякай розніцы, і вынік будзе той жа.

6
дададзена

У вашым выпадку няма ніякай розніцы. Яна ўзнікае, калі вы выбіраеце з некалькіх табліц. * Прымае дадзеныя з усіх табліц, 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 |
+----+------------+
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 |
+----+------------+
2
дададзена

У выпадку прыкладу, прыведзенага вамі, няма ніякай розніцы паміж імі, калі справа даходзіць да semantics.When гаворка ідзе пра прадукцыйнасць можа быць занадта мала ... проста разбор дзве розных радкоў даўжыні ....

Але гэта дакладна толькі для прыкладу, прыведзенага вамі. Дзе, як у запытах, дзе некалькі табліц ўдзельнічаюць TABLENAME. * неадназначнасць табліцу, з якой табліцы мы хочам, каб выбраць усе слупкі.

прыклад:   Калі ў вас ёсць дзве табліцы TableA і TableB . Давайце выкажам здагадку, што ў іх ёсць слупок з тымі ж імёнамі, што з'яўляецца Імя . Калі вы хочаце, каб паказаць, з якой табліцы неабходна выбраць Імя слупок. <�Код> Табліца імя Класіфікатар дапамагае.

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

Гэта ўсё, што я магу сказаць.

1
дададзена
@cproinger см ёсць upvote для адказу Адэд, ён зрабіў занадта агульны характар ​​....
дададзена аўтар pinkpanther, крыніца
@cproinger Адкажу за выключэннем выпадку, прадугледжанага ім ... пытанне занадта кароткае, таму мой адказ ... але гэта тое, што я меў намер ён хацеў бы ведаць, ці ёсць нейкая розніца паміж выкарыстаннем * і табліца. * не больш, чым я думаў ....
дададзена аўтар pinkpanther, крыніца
@cproinger аднак я адрэдагаваў мой адказ цяпер.
дададзена аўтар pinkpanther, крыніца
@cproinger дзякуй за вашыя прапановы спакойнай ночы :)
дададзена аўтар pinkpanther, крыніца
гэта не так, у цэлым, але толькі ў дадзеным прыкладзе было паказана вышэй. як толькі ёсць больш чым адна табліца ёсць Sematic розніца.
дададзена аўтар cproinger, крыніца
я не ведаю, чаму odeds адказ атрымаў upvote, можа быць, для гумарыстычнага дотыку ў ім. дзякуй за рэдагаванне вашага, гэта значна больш карысна цяпер, я змяніў маё downvote ў upvote
дададзена аўтар cproinger, крыніца

У выпадку прыкладу, прыведзенага вамі, няма ніякай розніцы паміж імі, калі справа даходзіць да semantics.When гаворка ідзе пра прадукцыйнасць можа быць занадта мала ... проста разбор дзве розных радкоў даўжыні ....

Але гэта дакладна толькі для прыкладу, прыведзенага вамі. Дзе, як у запытах, дзе некалькі табліц ўдзельнічаюць TABLENAME. * неадназначнасць табліцу, з якой табліцы мы хочам, каб выбраць усе слупкі.

прыклад:   Калі ў вас ёсць дзве табліцы TableA і TableB . Давайце выкажам здагадку, што ў іх ёсць слупок з тымі ж імёнамі, што з'яўляецца Імя . Калі вы хочаце, каб паказаць, з якой табліцы неабходна выбраць Імя слупок. <�Код> Табліца імя Класіфікатар дапамагае.

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

Гэта ўсё, што я магу сказаць.

1
дададзена
@cproinger см ёсць upvote для адказу Адэд, ён зрабіў занадта агульны характар ​​....
дададзена аўтар pinkpanther, крыніца
@cproinger Адкажу за выключэннем выпадку, прадугледжанага ім ... пытанне занадта кароткае, таму мой адказ ... але гэта тое, што я меў намер ён хацеў бы ведаць, ці ёсць нейкая розніца паміж выкарыстаннем * і табліца. * не больш, чым я думаў ....
дададзена аўтар pinkpanther, крыніца
@cproinger аднак я адрэдагаваў мой адказ цяпер.
дададзена аўтар pinkpanther, крыніца
@cproinger дзякуй за вашыя прапановы спакойнай ночы :)
дададзена аўтар pinkpanther, крыніца
гэта не так, у цэлым, але толькі ў дадзеным прыкладзе было паказана вышэй. як толькі ёсць больш чым адна табліца ёсць Sematic розніца.
дададзена аўтар cproinger, крыніца
я не ведаю, чаму odeds адказ атрымаў upvote, можа быць, для гумарыстычнага дотыку ў ім. дзякуй за рэдагаванне вашага, гэта значна больш карысна цяпер, я змяніў маё downvote ў upvote
дададзена аўтар cproinger, крыніца

У выпадку прыкладу, прыведзенага вамі, няма ніякай розніцы паміж імі, калі справа даходзіць да semantics.When гаворка ідзе пра прадукцыйнасць можа быць занадта мала ... проста разбор дзве розных радкоў даўжыні ....

Але гэта дакладна толькі для прыкладу, прыведзенага вамі. Дзе, як у запытах, дзе некалькі табліц ўдзельнічаюць TABLENAME. * неадназначнасць табліцу, з якой табліцы мы хочам, каб выбраць усе слупкі.

прыклад:   Калі ў вас ёсць дзве табліцы TableA і TableB . Давайце выкажам здагадку, што ў іх ёсць слупок з тымі ж імёнамі, што з'яўляецца Імя . Калі вы хочаце, каб паказаць, з якой табліцы неабходна выбраць Імя слупок. <�Код> Табліца імя Класіфікатар дапамагае.

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

Гэта ўсё, што я магу сказаць.

1
дададзена
@cproinger Адкажу за выключэннем выпадку, прадугледжанага ім ... пытанне занадта кароткае, таму мой адказ ... але гэта тое, што я меў намер ён хацеў бы ведаць, ці ёсць нейкая розніца паміж выкарыстаннем * і табліца. * не больш, чым я думаў ....
дададзена аўтар pinkpanther, крыніца
@cproinger см ёсць upvote для адказу Адэд, ён зрабіў занадта агульны характар ​​....
дададзена аўтар pinkpanther, крыніца
@cproinger аднак я адрэдагаваў мой адказ цяпер.
дададзена аўтар pinkpanther, крыніца
@cproinger дзякуй за вашыя прапановы спакойнай ночы :)
дададзена аўтар pinkpanther, крыніца
гэта не так, у цэлым, але толькі ў дадзеным прыкладзе было паказана вышэй. як толькі ёсць больш чым адна табліца ёсць Sematic розніца.
дададзена аўтар cproinger, крыніца
я не ведаю, чаму odeds адказ атрымаў upvote, можа быць, для гумарыстычнага дотыку ў ім. дзякуй за рэдагаванне вашага, гэта значна больш карысна цяпер, я змяніў маё downvote ў upvote
дададзена аўтар cproinger, крыніца

Розніца заключаецца ў тым, што адна з іх утрымлівае імя табліцы двойчы.

1
дададзена
@JohnnyCash ах вы павінны задалі гэтае пытанне канкрэтна
дададзена аўтар pinkpanther, крыніца
Я маю на ўвазе, што для ўсіх намераў і мэтаў, акрамя аднаго з іх паўтараючы імя табліцы, няма ніякай розніцы.
дададзена аўтар Oded, крыніца
Вы маеце на ўвазе няма ніякай розніцы аб прадукцыйнасці або што-то?
дададзена аўтар Johnny Cash, крыніца

Розніца заключаецца ў тым, што адна з іх утрымлівае імя табліцы двойчы.

1
дададзена
@JohnnyCash ах вы павінны задалі гэтае пытанне канкрэтна
дададзена аўтар pinkpanther, крыніца
Я маю на ўвазе, што для ўсіх намераў і мэтаў, акрамя аднаго з іх паўтараючы імя табліцы, няма ніякай розніцы.
дададзена аўтар Oded, крыніца
Вы маеце на ўвазе няма ніякай розніцы аб прадукцыйнасці або што-то?
дададзена аўтар Johnny Cash, крыніца

Розніца заключаецца ў тым, што адна з іх утрымлівае імя табліцы двойчы.

1
дададзена
@JohnnyCash ах вы павінны задалі гэтае пытанне канкрэтна
дададзена аўтар pinkpanther, крыніца
Я маю на ўвазе, што для ўсіх намераў і мэтаў, акрамя аднаго з іх паўтараючы імя табліцы, няма ніякай розніцы.
дададзена аўтар Oded, крыніца
Вы маеце на ўвазе няма ніякай розніцы аб прадукцыйнасці або што-то?
дададзена аўтар Johnny Cash, крыніца

Канкрэтныя прыклады, названыя б вяртаць адзін і той жа вынік і маюць такую ​​ж прадукцыйнасць. Там не было б ніякай розніцы ў гэтых адносінах, таму.

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

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

будзе працаваць . У той жа час, * павінен стаяць самастойна, а гэта азначае, што наступны

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

будзе незаконнай .

0
дададзена

Канкрэтныя прыклады, названыя б вяртаць адзін і той жа вынік і маюць такую ​​ж прадукцыйнасць. Там не было б ніякай розніцы ў гэтых адносінах, таму.

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

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

будзе працаваць . У той жа час, * павінен стаяць самастойна, а гэта азначае, што наступны

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

будзе незаконнай .

0
дададзена

Для прыкладаў, прадастаўленых вамі, адзінае адрозненне складаецца ў сінтаксісе. Што абодва запытаў падзяляюць тое, што яны на самой справе дрэнна. <�Код> Select * не з'яўляецца злом, незалежна ад таго, як вы пішаце, і вы можаце атрымаць ва ўсе віды праблем. Атрымаць у звычку пералічваць слупкі, якія вы хочаце быць уключаны ў выніковы набор.

0
дададзена

Для прыкладаў, прадастаўленых вамі, адзінае адрозненне складаецца ў сінтаксісе. Што абодва запытаў падзяляюць тое, што яны на самой справе дрэнна. <�Код> Select * не з'яўляецца злом, незалежна ад таго, як вы пішаце, і вы можаце атрымаць ва ўсе віды праблем. Атрымаць у звычку пералічваць слупкі, якія вы хочаце быць уключаны ў выніковы набор.

0
дададзена