Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.

Jak napisać dobre pytanie SQL?
Ten przepis składa się z pięciu składników:

  1. Podaj jasne, tekstowe wyjaśnienie problemu.
  2. Podaj odpowiednie przykładowe dane, takie jak DDL(utwórz instrukcje tabeli) i DML(wstaw oświadczenia). Przykładowe dane powinny wystarczyć do zademonstrowania problemu, w tym przypadków skrajnych. Zwykle wystarczy kilka odpowiednich wierszy.
  3. Podaj oczekiwane dane wyjściowe dla opublikowanych przykładowych danych.
  4. Pokaż swoje próby rozwiązania problemu.
  5. Oznacz prawidłowo. Oprócz sqlpodaj również odpowiedni tag rdbms (tj. sql-server, oracle, postgresql) i najniższą wersję, dla której potrzebujesz rozwiązania (tj. sql-server-2012, oracle10g).
    Pamiętaj - różne produkty używają różnych dialektów SQL, a to może mieć drastyczny wpływ na odpowiedzi, które możesz uzyskać.
    Różne wersje tego samego produktu mają inny zestaw wbudowanych funkcji i możliwości, które również mogą mieć drastyczny wpływ na odpowiedzi.

Nie dołączaj obrazów danych ani kodu!

Łącze do internetowego środowiska testowego SQL, takiego jak SQL Fiddle, Rextesterlub DB Fiddlemogą pomóc, ale nie zastąpią wszystkich danych w pytaniu.
Aby uzyskać więcej informacji , Przeczytaj Dlaczego mam podać MCVE dla czegoś, co wydaje mi się bardzo prostym zapytaniem SQL?i Pomóż mi napisać to zapytanie w SQL.

Informacje ogólne
Z Wikipedia:

SQL to skrót od Structured Query Language (nieformalnie) i zwykle wymawiane jako Sequel.

SQL jest oparty na algebrze relacyjnej. W algebrze relacyjnej relacja słów jest synonimem tablicy słów. SQL jest standardem stosowania algebry relacyjnej w środowisku technicznym.

Jednym z podzbiorów standardu SQL jest DDL (język definicji danych), który służy do tworzenia tabel i ograniczeń. Obejmują one:

  • CREATE
  • DROP
  • ALTER

Kolejnym podzbiorem jest DML (język manipulacji danymi), który służy do modyfikowania i przeglądania danych w bazie danych:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

Ostatnim „standardowym” podzbiorem poleceń jest DCL (Data Control Language):

  • GRANT
  • REVOKE

Wiele implementacji baz danych wymaga użycia języka SQL, a przez lata dostawcy wprowadzili dialekty SQL, aby zapewnić większą funkcjonalność, a także ją uprościć. Z powodu tych odchyleń od standardu SQL jest podzielony - składnia, która działa w jednej implementacji, niekoniecznie działa na innej.

Normy ISO / IEC (dawniej ANSI) okazały się korzystne w rozwiązywaniu takich sytuacji, ale ich przyjęcie jest selektywne. Zapytania zgodne z tymi standardami powinny być przenoszone do innych baz danych, chociaż wydajność może się różnić.

Większość DBMS ma dodatkowe języki do pisania procedur składowanych. W Oracle jest to PL / SQL (język proceduralny / język zapytań strukturalnych), w PostgreSQL jest to PL / pgSQL (język proceduralny / PostgreSQL). Poza procedurami lub funkcjami składowanymi Oracle i PostgreSQL używają języka SQL. Dlatego tagi plsqli plpgsqlpowinny być używane tylko w przypadku problemów bezpośrednio związanych z pisaniem procedur składowanych. Microsoft SQL Server używa terminu T-SQL (Transact-SQL) (tsql) zarówno dla „zwykłego” języka SQL (zapytania, DML itp.), Jak i używanego języka dla procedur składowanych.

Lista rozszerzeń proceduralnych

  • Standard ANSI / ISO: SQL / PSM (SQL / trwałe moduły składowane)
  • Interbase / Firebird: PSQL (proceduralny SQL)
  • IBM DB2 SQL: PL / SQL (język proceduralny, implementuje SQL / PSM)
  • IBM Informix: SPL (składowany język proceduralny)
  • IBM Netezza: NZPLSQL (na podstawie Postgres PL / pgSQL)
  • Microsoft / Sybase: T-SQL (Transact-SQL)
  • Mimer SQL: SQL / PSM (SQL / Persistent Stored Module, implementuje SQL / PSM)
  • MySQL: SQL / PSM (SQL / Persistent Stored Module, implementuje SQL / PSM)
  • MonetDB: SQL / PSM (SQL / Persistent Stored Module, implementuje SQL / PSM)
  • NuoDB: SSP (procedury składowane Starkeya)
  • Oracle: PL / SQL (język proceduralny / SQL, na podstawie Ada)
  • PostgreSQL: PL / pgSQL (język proceduralny / Structured Query Language PostgreSQL, implementuje SQL / PSM)
  • Sybase: Watcom-SQL (dialekt SQL Anywhere Watcom-SQL)
  • Teradata: SPL (zapisany język proceduralny)
  • SAP: SAP HANA (skrypt SQL)

Zalecenie dotyczące tagowania

Ten znacznik powinien być używany w przypadku ogólnych pytań dotyczących języka programowania SQL, oprócz tagów dla określonych produktów. Na przykład pytania dotyczące Microsoft SQL Server powinny używać tagu sql-server, a pytania dotyczące MySQL powinny używać tagu mysql. SQL jest parasolem, pod którym istnieją te produkty; oznaczanie ich według produktu (w tym wersji, np. oracle11g, sql-server-2008, hana) to najłatwiejszy sposób sprawdzenia, jakie funkcje są dostępne dla danego zadania. Bardzo często w pytaniach mysqlpomija się ten tag, ponieważ dyskusje na temat zapytań w MySQL są częściej określane jako MySQL niż ogólnie SQL.

Przeczytaj to podsumowaniestandardu SQL (w tym przypadku szeroko zaimplementowanego z 1992 r.) I jeśli możesz, zapoznaj się z samą książką.

Bardziej szczegółowe tagi

Kiedy zadajesz pytanie o SQL, możesz również dodać bardziej szczegółowe tagi. Oto lista dostępnych tagów:

Tagi specyficzne dla implementacji

Możesz określić swoje pytanie, dodając implementację, której użyłeś jako tag.

Inne zasoby

Darmowe książki o programowaniu SQL

Darmowe kursy online dotyczące SQL / bazy danych

Samouczek online dotyczący SQL / bazy danych

Testowanie online

Chociaż w pytaniu lub odpowiedzi zawsze należy podać kompletne przykłady kodu(np. Schemat, próbkę danych i oczekiwany wynik), możesz również odizolować problematyczny kod i odtworzyć go w środowisku online: