Jaka jest różnica między pojedynczymi i podwójnymi cudzysłowami w SQL?
Pojedyncze cudzysłowy są używane do wskazania początku i końca łańcucha w SQL. Podwójne cudzysłowy na ogół nie są używane w SQL, ale mogą się różnić w zależności od bazy danych.
Trzymaj się pojedynczych cudzysłowów.
To i tak jest podstawowe zastosowanie. Możesz użyć pojedynczych cudzysłowów dla aliasu kolumny - tam, gdzie chcesz, aby nazwa kolumny, do której się odwołujesz w kodzie aplikacji, była czymś innym niż nazwa kolumny w bazie danych. Na przykład: PRODUCT.id
byłby bardziej czytelny jako product_id
, więc używasz jednego z następujących:
SELECT PRODUCT.id AS product_id
SELECT PRODUCT.id 'product_id'
Oba działają w Oracle, SQL Server, MySQL… ale wiem, że niektórzy powiedzieli, że TOAD IDE wydaje się nieco żal przy stosowaniu metody pojedynczych cudzysłowów.
Musisz użyć pojedynczych cudzysłowów, gdy alias kolumny zawiera znak spacji, np. product id
, Ale nie jest zalecane, aby alias kolumny był więcej niż jednym słowem.
SELECT * FROM USERS 'Users'
nie działa w SQL Server, aleSELECT * FROM USERS "Users"
działa.SELECT PRODUCT.id 'product_id'
nie będzie działać w Oracle. Pojedyncze cudzysłowy dotyczą tylko literałów znakowych. Nie można ich używać do identyfikatorów w (standardowym) SQL (chociaż niektóre DBMS po prostu ignorują standard SQL, jeśli chodzi o identyfikatory cytowane)Prosta reguła dla nas, aby pamiętać, czego użyć w takim przypadku:
W MySQL i MariaDB The ` (lewy apostrof) symbol jest taka sama jak „ symbol. Można użyć ” kiedy wasz
SQL_MODE
zostałANSI_QUOTES
włączony.źródło
Pojedyncze cudzysłowy ograniczają stałą ciągu lub stałą daty / godziny.
Podwójne cudzysłowy ograniczają identyfikatory np. Nazw tabel lub nazw kolumn. Jest to na ogół konieczne tylko wtedy, gdy twój identyfikator nie pasuje do reguł dla prostych identyfikatorów.
Zobacz też:
Możesz zmusić MySQL do stosowania podwójnych cudzysłowów zgodnie ze standardem ANSI:
Możesz zmusić Microsoft SQL Server do używania podwójnych cudzysłowów zgodnie ze standardem ANSI:
źródło
W ANSI SQL podwójne cudzysłowy podają nazwy obiektów (np. Tabele), co pozwala im zawierać znaki niedozwolone w inny sposób lub być takie same jak słowa zastrzeżone (naprawdę tego unikaj).
Pojedyncze cudzysłowy dotyczą ciągów znaków.
Jednak MySQL jest nieświadomy tego standardu (chyba że jego SQL_MODE zostanie zmieniony) i pozwala na stosowanie ich zamiennie dla łańcuchów.
Ponadto Sybase i Microsoft również używają nawiasów kwadratowych do cytowania identyfikatorów.
Więc jest to trochę specyficzne dla dostawcy.
Inne bazy danych, takie jak Postgres i IBM, są zgodne ze standardem ansi :)
źródło
Używam tego mnemonicznego:
To nie jest w 100% poprawne zgodnie ze specyfikacją, ale ten mnemonik pomaga mi (człowiekowi).
źródło
Różnica polega na ich użyciu. Pojedyncze cudzysłowy są najczęściej używane do odsyłania ciągu w GDZIE, POSIADANIE, a także w niektórych wbudowanych funkcjach SQL, takich jak CONCAT, STRPOS, POSITION itp.
Jeśli chcesz użyć aliasu z odstępem pomiędzy nimi, możesz użyć podwójnych cudzysłowów w celu odniesienia się do tego aliasu.
Na przykład
Oto podzapytanie z tabeli zamówień posiadające account_id jako klucz obcy, który agreguję, aby wiedzieć, ile zamówień zostało złożonych na każdym koncie. Tutaj nadałem jednej kolumnie dowolną nazwę jako „liczbę” ze względu na cel.
Teraz napiszmy zapytanie zewnętrzne, aby wyświetlić wiersze, w których „liczba” jest większa niż 20.
Możesz zastosować tę samą sprawę także do wyrażeń Common Table.
źródło