SQL select deyiminde Order By 1'in amacı nedir?


154

İş yerinde bazı eski kodu okuyorum ve bir order by 1cümle ile birkaç görüş olduğunu fark ettim . Bu neyi başarıyor?

Misal:

Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME CONDITION) AS SUM_X,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME OTHER CONDITION) AS SUM_Y    
FROM payment A    
ORDER BY 1;

5
Bilginize: Görüşün yalnızca sunum için kullanılacağını garanti edemezseniz, görünümlerde SİPARİŞ VERMEK genellikle kötü uygulama olarak kabul edilir. Bu bir israftır, çünkü görünümü bir ORDER BY ile başka bir sorguda kullanırsanız ORDER BY 2x ortaya çıkar.
OMG Ponies

3
@OMG Midilli: ORDER BYa VIEW. Standart SQL buna izin vermez. SQL Server, 2005'ten beri yasadışı ilan etti. SQL uygulamasında, buna izin veren davranış büyük ölçüde belgelenmemiş ve sezgiseldir. Başka bir deyişle, kesinlikle kaçınılmalıdır.
oneday10

@onedaywhen: Koroya vaaz veriyorsunuz, ancak MySQL , Oracle IME gibi görüntülemelerde ORDER BY'a izin veriyor . SQL Server, ORDER BY varsa sağlar TOPve SSMS eklemeyi sever TOP 100 PERCENT.
OMG Ponies

@OMG Ponies @ "MySQL görünümlerde SİPARİŞE izin verir" - MySQL bir CHECKkısıtlamaya izin verir CREATE TABLE, ancak aslında onur vermez - aslında hiç kontrol edilmez! Soru şu ki, bu SQL ürünleri her zaman görünümlerde onur mu , ORDER BYörneğin bir sorguya sahip kullanıldığında da ORDER BYiki kez sıralanıyor mu? Hatta davranışı belgeliyorlar mı veya bunu çözmek için yürütme planlarına bakmanız mı gerekiyor? Cevapları bildiğimizi düşünüyorum;)
gün

FYI Sadece ORDER BY 1boş bir takma ad istediğiniz yere çapraz uygulama hilesi kullanarak başka bir kullanım keşfetti . Ne yazık ki kod örneğin bir yorum için çok büyük, bu yüzden FYI altında bir cevap olarak yayınladım.
AndrewD

Yanıtlar:


208

Bu:

ORDER BY 1

... "Sıralı" olarak bilinir - sayı, SELECT yan tümcesinde tanımlanan sütun sayısına göre sütun anlamına gelir. Verdiğiniz sorguda şu anlama gelir:

ORDER BY A.PAYMENT_DATE

Önerilen bir uygulama değildir, çünkü:

  1. Açık / açık değil
  2. Sütun sırası değişirse, sorgu hala geçerlidir, bu nedenle istemediğiniz bir şeyle sipariş verme riskiyle karşı karşıya kalırsınız

1
Sorum Ordinals kullanmak için bir ters olup olmadığını soran sorum: stackoverflow.com/questions/2253040/…
OMG Ponies

Bu yalnızca sqletikete sahiptir. Standart SQL'de, yalnızca OREDER BYcümle içinde sütun korelasyon adlarına izin verilir, çünkü teoride, tablo korelasyon adları kapsam dışıdır, yani olması gerekir ORDER BY PAYMENT_DATE;. Elbette, tüm SQL uygulamaları Standartlara uygun değildir.
oneday10

SQL Server'da test edildi ve çalışıyor;WITH cte AS( SELECT 1 AS Col1, 'z' AS Col2 UNION SELECT 2 AS Col1, 'y' AS Col2 UNION SELECT 3 AS Col1, 'x' AS Col2 ) SELECT Col2, Col1 FROM cte ORDER BY 1
Ivanzinho

@OMG Ponies, bunun önerilen bir uygulama olmadığını söylediniz, peki bir sonraki en iyi yedek ne olacak? çünkü merak ediyorum merak ediyorum .. teşekkürler!
dian jin

40

Bu, küme tabanlı operatörler kullandığınızda kullanışlıdır, örneğin, birleşim

select cola
  from tablea
union
select colb
  from tableb
order by 1;

4
Aha, bu mantıklı. Şimdiye kadar gördüğüm ilk iyi sebep bu.
echo

4
@Lazer Ben inanmıyorum, bir sendika yapmak için muhtemelen dahili olarak bir tür yapar, ancak bu mantıklı bir çıkış sorusunun aksine bir uygulama sorusudur ve SQL ruhunda satırları sırayla çıkarmaya gerek yoktur. Ayrıca inenleri sıralamak isterseniz ne olur? O zaman orijinal soruna geri dönersiniz.
daven11

3
yine de ... Ben tercih ediyorumorder by tablea.cola
Shahar Shokrani

1
@ShaharShokrani bu işe yaramaz. ama diyebilirim ki, tablea birleşiminden kola'yı x olarak seçmeyi tercih ediyorum.
Özgür Öztürk

col * ile seçin (tablea union dan cola col seçin tableb dan colb col seçin) col tarafından sipariş
hareluya86

8

yalnızca görünümü veya tabloyu sorgu sonucunun 1. sütununa göre sıralamak anlamına gelir.


7

Oracle inanıyorum # 1 sütununa göre sipariş anlamına gelir


7

Bu, sonuçlarınızı döndürülen ilk sütuna göre sıralar. Örnekte ödeme_tarihi ile sıralanacaktır.


4

İlk cevapta diğer cevap ORDER BY 1emirlerinde belirtildiği gibi .

Yine de kullanabileceğiniz başka bir örnekle karşılaştım. Aynı sütunu seçerek sipariş edilmesi gereken belirli sorgularımız var. NameAşağıdan sipariş verirseniz bir SQL hatası alırsınız .

SELECT Name, Name FROM Segment ORDER BY 1

neden bunu yapasın ki? neden takma ad değil. [çok geç yorum olsa]
abdul qayyum

1
@abdulqayyum bu işleri gerçekten yapmanın başka bir yolu. Yukarıdaki örnek çok basitleştirilmiştir. Bazen 'Ad' sütunu aslında başka bir tabloya eklediğiniz farklı tablolardan farklı sütunlardır. Bir grup takma ad eklemek okumayı zorlaştırabilir. Nerede kullanıldığının başka bir örneği, birçok farklı hesaplama seçerken ve takma adı gerekmeden tek bir sipariş vermek. (Her ne kadar burada şahsen hesaplamanın ne olduğunu söylemek için bir takma ad tercih ederim)
nicV


-1

Burada örnek bir test WAMP sunucusu veritabanından bir örnek: -

mysql> select * from user_privileges;

| GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
   +--------------------+---------------+-------------------------+--------------+
| 'root'@'localhost' | def           | SELECT                  | YES          |
| 'root'@'localhost' | def           | INSERT                  | YES          |
| 'root'@'localhost' | def           | UPDATE                  | YES          |
| 'root'@'localhost' | def           | DELETE                  | YES          |
| 'root'@'localhost' | def           | CREATE                  | YES          |
| 'root'@'localhost' | def           | DROP                    | YES          |
| 'root'@'localhost' | def           | RELOAD                  | YES          |
| 'root'@'localhost' | def           | SHUTDOWN                | YES          |
| 'root'@'localhost' | def           | PROCESS                 | YES          |
| 'root'@'localhost' | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | REFERENCES              | YES          |
| 'root'@'localhost' | def           | INDEX                   | YES          |
| 'root'@'localhost' | def           | ALTER                   | YES          |
| 'root'@'localhost' | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost' | def           | SUPER                   | YES          |
| 'root'@'localhost' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | LOCK TABLES             | YES          |
| 'root'@'localhost' | def           | EXECUTE                 | YES          |
| 'root'@'localhost' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost' | def           | CREATE VIEW             | YES          |
| 'root'@'localhost' | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost' | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost' | def           | CREATE USER             | YES          |
| 'root'@'localhost' | def           | EVENT                   | YES          |
| 'root'@'localhost' | def           | TRIGGER                 | YES          |
| 'root'@'localhost' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'127.0.0.1' | def           | SELECT                  | YES          |
| 'root'@'127.0.0.1' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | UPDATE                  | YES          |
| 'root'@'127.0.0.1' | def           | DELETE                  | YES          |
| 'root'@'127.0.0.1' | def           | CREATE                  | YES          |
| 'root'@'127.0.0.1' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | RELOAD                  | YES          |
| 'root'@'127.0.0.1' | def           | SHUTDOWN                | YES          |
| 'root'@'127.0.0.1' | def           | PROCESS                 | YES          |
| 'root'@'127.0.0.1' | def           | FILE                    | YES          |
| 'root'@'127.0.0.1' | def           | REFERENCES              | YES          |
| 'root'@'127.0.0.1' | def           | INDEX                   | YES          |
| 'root'@'127.0.0.1' | def           | ALTER                   | YES          |
| 'root'@'127.0.0.1' | def           | SHOW DATABASES          | YES          |
| 'root'@'127.0.0.1' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'127.0.0.1' | def           | LOCK TABLES             | YES          |
| 'root'@'127.0.0.1' | def           | EXECUTE                 | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'127.0.0.1' | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | SHOW VIEW               | YES          |
| 'root'@'127.0.0.1' | def           | CREATE ROUTINE          | YES          |
| 'root'@'127.0.0.1' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | CREATE USER             | YES          |
| 'root'@'127.0.0.1' | def           | EVENT                   | YES          |
| 'root'@'127.0.0.1' | def           | TRIGGER                 | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'::1'       | def           | SELECT                  | YES          |
| 'root'@'::1'       | def           | INSERT                  | YES          |
| 'root'@'::1'       | def           | UPDATE                  | YES          |
| 'root'@'::1'       | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | DROP                    | YES          |
| 'root'@'::1'       | def           | RELOAD                  | YES          |
| 'root'@'::1'       | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | FILE                    | YES          |
| 'root'@'::1'       | def           | REFERENCES              | YES          |
| 'root'@'::1'       | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | SHOW DATABASES          | YES          |
| 'root'@'::1'       | def           | SUPER                   | YES          |
| 'root'@'::1'       | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'::1'       | def           | LOCK TABLES             | YES          |
| 'root'@'::1'       | def           | EXECUTE                 | YES          |
| 'root'@'::1'       | def           | REPLICATION SLAVE       | YES          |
| 'root'@'::1'       | def           | REPLICATION CLIENT      | YES          |
| 'root'@'::1'       | def           | CREATE VIEW             | YES          |
| 'root'@'::1'       | def           | SHOW VIEW               | YES          |
| 'root'@'::1'       | def           | CREATE ROUTINE          | YES          |
| 'root'@'::1'       | def           | ALTER ROUTINE           | YES          |
| 'root'@'::1'       | def           | CREATE USER             | YES          |
| 'root'@'::1'       | def           | EVENT                   | YES          |
| 'root'@'::1'       | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | CREATE TABLESPACE       | YES          |
| ''@'localhost'     | def           | USAGE                   | NO           |
+--------------------+---------------+-------------------------+--------------+
85 rows in set (0.00 sec)

Ve ek verildiğinde order by PRIVILEGE_TYPEveya verilebildiğinde order by 3. 3. sütunun ( PRIVILEGE_TYPE) alfabetik olarak sıralandığına dikkat edin .

mysql> select * from user_privileges order by PRIVILEGE_TYPE;
+--------------------+---------------+-------------------------+--------------+
| GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
+--------------------+---------------+-------------------------+--------------+
| 'root'@'127.0.0.1' | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | ALTER                   | YES          |
| 'root'@'localhost' | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | CREATE                  | YES          |
| 'root'@'localhost' | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost' | def           | CREATE ROUTINE          | YES          |
| 'root'@'127.0.0.1' | def           | CREATE ROUTINE          | YES          |
| 'root'@'::1'       | def           | CREATE TABLESPACE       | YES          |
| 'root'@'localhost' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'::1'       | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | CREATE USER             | YES          |
| 'root'@'127.0.0.1' | def           | CREATE USER             | YES          |
| 'root'@'::1'       | def           | CREATE USER             | YES          |
| 'root'@'localhost' | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | CREATE VIEW             | YES          |
| 'root'@'::1'       | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | DELETE                  | YES          |
| 'root'@'localhost' | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | DROP                    | YES          |
| 'root'@'localhost' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | EVENT                   | YES          |
| 'root'@'::1'       | def           | EVENT                   | YES          |
| 'root'@'localhost' | def           | EVENT                   | YES          |
| 'root'@'127.0.0.1' | def           | EXECUTE                 | YES          |
| 'root'@'::1'       | def           | EXECUTE                 | YES          |
| 'root'@'localhost' | def           | EXECUTE                 | YES          |
| 'root'@'127.0.0.1' | def           | FILE                    | YES          |
| 'root'@'::1'       | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | INDEX                   | YES          |
| 'root'@'127.0.0.1' | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | INSERT                  | YES          |
| 'root'@'localhost' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | LOCK TABLES             | YES          |
| 'root'@'::1'       | def           | LOCK TABLES             | YES          |
| 'root'@'localhost' | def           | LOCK TABLES             | YES          |
| 'root'@'127.0.0.1' | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | PROCESS                 | YES          |
| 'root'@'localhost' | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | REFERENCES              | YES          |
| 'root'@'localhost' | def           | REFERENCES              | YES          |
| 'root'@'127.0.0.1' | def           | REFERENCES              | YES          |
| 'root'@'::1'       | def           | RELOAD                  | YES          |
| 'root'@'localhost' | def           | RELOAD                  | YES          |
| 'root'@'127.0.0.1' | def           | RELOAD                  | YES          |
| 'root'@'::1'       | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'::1'       | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | SELECT                  | YES          |
| 'root'@'::1'       | def           | SELECT                  | YES          |
| 'root'@'localhost' | def           | SELECT                  | YES          |
| 'root'@'127.0.0.1' | def           | SHOW DATABASES          |  YES          |
| 'root'@'::1'       | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost' | def           | SHOW DATABASES          | YES          |
| 'root'@'127.0.0.1' | def           | SHOW VIEW               | YES          |
| 'root'@'::1'       | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | SHUTDOWN                | YES          |
| 'root'@'127.0.0.1' | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | SUPER                   | YES          |
| 'root'@'localhost' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | TRIGGER                 | YES          |
| 'root'@'localhost' | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | UPDATE                  | YES          |
| 'root'@'localhost' | def           | UPDATE                  | YES          |
| 'root'@'127.0.0.1' | def           | UPDATE                  | YES          |
| ''@'localhost'     | def           | USAGE                   | NO           |     +--------------------+---------------+-------------------------+--------------+
85 rows in set (0.00 sec)

KESİNLİKLE, uzun bir cevap ve bir sürü kaydırma. Ayrıca sorguların çıktısını bir metin dosyasına aktarmak için çok uğraştım. into outfileSinir bozucu şeyi kullanmadan bunu nasıl yapacağınız-

tee E: /sqllogfile.txt;

İşiniz bittiğinde günlüğe kaydetmeyi durdurun

tee off;

Umarım daha fazla netlik katar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.