Odpowiedzi:
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, ale SELECT * 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.
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:
SET GLOBAL SQL_MODE=ANSI_QUOTES
Możesz zmusić Microsoft SQL Server do używania podwójnych cudzysłowów zgodnie ze standardem ANSI:
SET QUOTED_IDENTIFIER ON
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óż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
(select account_id,count(*) "count of" from orders group by 1)sub
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.
select "count of" from
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;
Możesz zastosować tę samą sprawę także do wyrażeń Common Table.