Co oznacza sortowanie?

138

Co oznacza sortowanie w języku SQL i do czego służy?

LOVE_KING
źródło
2
@gbn: Nawiasem mówiąc, sortowanie działa w bardzo podobny sposób zarówno w MSSQL, jak i MySQL.
Piskvor opuścił budynek
1
możliwy duplikat [MySQL]: Co to jest metoda zestawiania?
wyjazd
@Piskvor: Z wyjątkiem niektórych opcji sortowania mySql (np. UTF8) nie są dostępne w MSSQL: msdn.microsoft.com/en-us/library/ms144250.aspx
CB
@CB: Nie zaprzeczam temu; podobieństwo jest głębsze niż (nie) obsługiwane zestawy znaków.
Piskvor opuścił budynek

Odpowiedzi:

60

Sortowanie można po prostu traktować jako porządek sortowania.

W języku angielskim (i jest to dziwny kuzyn, Amerykanin) zestawianie może być dość prostą sprawą polegającą na porządkowaniu według kodu ASCII.

Kiedy już opanujesz te dziwne języki europejskie ze wszystkimi ich akcentami i innymi cechami, nastąpi zmiana sortowania. Na przykład, chociaż różne akcentowane formy amogą istnieć w różnych punktach kodowych, może być konieczne posortowanie wszystkich tak, jakby były tą samą literą.

paxdiablo
źródło
4
Różne akcenty zazwyczaj oznacza to, że muszą one być klasyfikowane tak, jakby były różne litery - np e, ë, é, ě, i è może mieć różne litery na potrzeby zamawiającego (ale być może ta sama litera, szukając, do cholery te szalone Europejczyków;)).
Piskvor opuścił budynek
1
@Piskvor: czy współrzędne w Twoich informacjach nie wskazują określonego kraju za pomocą alfabetu z 42literami, 15w tym ze znakami diakrytycznymi?
Quassnoi
4
@Quassnoi: No tak, i? Czy gdziekolwiek sugeruję, że nie jestem szalony? ; o) (chociaż dzięki Bogu za Unicode, byłbym strasznie szalony, gdybym nadal musiał pracować z
zestawami
3
@Piskvor: przepraszam, przepraszam, jesteś całkowicie szalony! :)
Quassnoi
Czy to tylko dla sortowania, czy też dla where st= 'aaa'?
Royi Namir
42

Poza tym, że „litery akcentowane są sortowane inaczej niż te bez akcentu” w niektórych językach zachodnioeuropejskich, należy wziąć pod uwagę grupy liter, które czasami są również sortowane inaczej.

Tradycyjnie w języku hiszpańskim „ch” uważano za literę samą w sobie, podobnie jak „ll” (oba reprezentują jeden fonem), więc lista byłaby sortowana w następujący sposób:

  • caballo
  • cinco
  • coche
  • węgiel drzewny
  • czekolada
  • chueco
  • boazeria
  • (...)
  • lámpara
  • luego
  • llanta
  • lluvia
  • madera

Zauważ, że wszystkie słowa zaczynające się od pojedynczego c idą w parze, z wyjątkiem słów zaczynających się od ch, które idą po nich, to samo ze słowami rozpoczynającymi się od ll, które występują po wszystkich słowach zaczynających się od jednego l . To jest kolejność, którą zobaczysz w starych słownikach i encyklopediach, czasami nawet dzisiaj przez bardzo konserwatywne organizacje.

Królewska Akademia Języka zmieniła to, aby ułatwić hiszpańskiemu przystosowanie się do świata komputerów. Niemniej jednak ñ jest nadal uważane za inną literę niż n i występuje po niej, a przed o . Więc to jest poprawnie uporządkowana lista:

  • Namibia
  • número
  • ñandú
  • ñú
  • obra
  • ojo

Wybierając prawidłowe sortowanie, wszystko to zrobisz automatycznie :-)

Joe Pineda
źródło
OK, więc sortowanie jest przydatne do prawidłowego sortowania, ale czy nadal jest przydatne do porównań? Np. Chciałbym, aby „ñandú” i „nandu” były sobie równe, ze względów praktycznych… Czy mechanizm zestawiania mógłby mi pomóc w tym zadaniu?
CB
@CB: Jeśli masz na myśli coś takiego, jak zaznaczenie wszystkich wierszy, w których wartość kolumny jest równa „Aéreo”, a SQL S. zwraca wiersze z „aereo”, „aereó”, „AerEO” itp. - tak, ustawiając określone sortowanie tylko dla zapytanie może to zrobić. Wystąpią jednak problemy z wydajnością, jeśli to sortowanie będzie bardzo różne od natywnego sortowania bazy danych. A jeśli używasz tabel tymczasowych, musisz także śledzić sortowanie tempdb ... Ale możesz to zrobić.
Joe Pineda
W takim razie czy mógłbyś wyjaśnić trochę więcej? W szczególności, czy proste zapytanie „SELECT word FROM test WHERE word LIKE 'nandu'” byłoby w stanie to zrobić? Którego zestawienia należy użyć, aby działało? (Zwróć uwagę, że niepokoją mnie znaki diakrytyczne, a nie tylko akcenty ...)
CB
2
@CB przyjrzyj się części „AI” lub „AS” zestawienia (Accent Insensitive i Accent Sensitive).
Dustin Kendall,
14

Reguły, które mówią, jak porównywać i sortować ciągi: kolejność liter; czy sprawa ma znaczenie, czy znaki diakrytyczne mają znaczenie itp.

Na przykład, jeśli chcesz, aby wszystkie litery były różne (powiedzmy, jeśli przechowujesz nazwy plików w UNIX), użyj UTF8_BINsortowania:

SELECT  'A' COLLATE UTF8_BIN = 'a' COLLATE UTF8_BIN

---
0

Jeśli chcesz zignorować różnice w wielkości liter i znakach diakrytycznych (na przykład w wyszukiwarce), użyj UTF8_GENERAL_CIsortowania:

SELECT  'A' COLLATE UTF8_GENERAL_CI = 'ä' COLLATE UTF8_GENERAL_CI

---
1

Jak widać, to zestawienie (reguła porównania) uwzględnia wielkie Ai małe litery za ätę samą literę, ignorując wielkość liter i różnice w znakach diakrytycznych.

Quassnoi
źródło
10

Sortowanie definiuje sposób sortowania i porównywania wartości ciągów

Na przykład określa, jak sobie z tym poradzić

  • akcenty ( äàaitp.)
  • sprawa ( Aa)
  • kontekst językowy:
    • W zestawieniu francuskim cote < côte < coté < côté.
    • W domyślnej wersji SQL Server Latin1 cote < coté < côte < côté
  • Sortowanie ASCII (sortowanie binarne)
gbn
źródło
5

Sortowanie oznacza przypisanie jakiejś kolejności do znaków w alfabecie, powiedzmy, ASCII lub Unicode itp.

Załóżmy, że masz 3 znaki w swoim alfabecie - {A, B, C}. Możesz zdefiniować dla niego kilka przykładowych sortowań, przypisując wartości całkowite do znaków

  1. Przykład 1 = {A = 1, B = 2, C = 3}
  2. Przykład 2 = {C = 1, B = 2, A = 3}
  3. Przykład 3 = {B = 1, C = 2, A = 3}

W rzeczywistości możesz zdefiniować n! zestawienia na alfabecie o rozmiarze n. Biorąc pod uwagę taką kolejność, różne procedury sortowania, takie jak sortowanie łańcuchów LSD / MSD, używają go do sortowania łańcuchów.

Murali Mohan
źródło
3

Sortowanie określa sposób sortowania i porównywania danych. Jest to bardzo często ważne w kontekście internacjonalizacji, np. Jak sortować japońskie kanji?

Jeśli korzystasz z Google Collation i sql server, znajdziesz wiele artykułów omawiających to!

Dr G.
źródło
3

Odniesienie zaczerpnięto z tego artykułu: Sortowanie to zestaw reguł służących do porównywania znaków w zestawie znaków. Orzekł również o sortowaniu znaków, a właściwa kolejność dwóch znaków różni się w zależności od języka. Funkcja Collation porównała dwa łańcuchy, na przykład, jeśli jedno słowo jest większe od drugiego, i odpowiednio je posortowała.

Jeśli używasz zestawu znaków „latin1”, możesz użyć sortowania „latin1_swedish_ci”.

Musisz wybrać prawidłowe sortowanie, ponieważ niewłaściwe sortowanie może wpłynąć na wydajność bazy danych.

Anvesh
źródło
2

http://en.wikipedia.org/wiki/Collation

Sortowanie to zestawienie pisemnych informacji w standardowe zamówienie. (...) Algorytm zestawiania, taki jak algorytm zestawiania Unicode, definiuje kolejność poprzez proces porównywania dwóch podanych ciągów znaków i decydowania, które powinny występować przed drugim.

S.Lott
źródło
1
Ten artykuł naprawdę wszystko wyjaśnia.
Joe Pineda
3
@Joe Pineda. Może to naprawdę wszystko wyjaśnia, ale czy czytelnik chce to wszystko wiedzieć? Czy jest możliwe, że czytelnik po prostu chce zwięzłej, rzetelnej odpowiedzi, która obejmuje najbardziej podstawowe i najczęściej używane elementy i funkcje zestawiania, aby mógł je szybko przeczytać i wznowić pracę nad zadaniem, zadaniem lub projektem, które spowodowały powstanie pytania zaczynać się?
cfwschmidt
2
@TJCrowder Doceniam ironię w tym
1

Sortowanie to sposób, w jaki serwer SQL decyduje o sposobie sortowania i porównywania tekstu.

Zobacz MSDN .

Oded
źródło