SQL - Składnia języka
Łańcuchy znaków Łańcuch jest ciągiem znaków ograniczonych apostrofami (') lub cudzysłowami ("), np.: 'to jest napis' "a to jest inny napis"Wewnątrz łańcucha znakowego mogą występować znaki o specjalnym znaczeniu, które nie są normalnie wyświetlane. Każdy taki znak musi byś poprzedzony znakiem backslash (\). Nazywane są one znakami escape. W MySQL można używać następujących znaków escape:
Cudzysłów i apostrof można wstawić do łańcucha znakowego również na inne sposoby, co pokazują poniższe przykłady: mysql> SELECT 'tekst', '"tekst"', '""tekst""', 'tek''st', '\'tekst'; +-------+---------+-----------+--------+--------+ | tekst | "tekst" | ""tekst"" | tek'st | 'tekst | +-------+---------+-----------+--------+--------+ nmysql> SELECT "tekst", "'tekst'", "''tekst''", "tek""st", "\"tekst"; +-------+---------+-----------+--------+--------+ | tekst | 'tekst' | ''tekst'' | nap"is | "tekst | +-------+---------+-----------+--------+--------+ Znaków escape należy używać w każdym łańcuch znaków, w którym mogą wystąpić znaki specjalne
Liczby Liczby reprezentowane są przez ciąg cyfr, a jako separatora części ułamkowej używamu kropki (.). Wartości ujemne poprzedzamy znakiem minus (-).Przykłady poprawnego zapisu liczb: 1221 0 -32 294.42 -32032.6809e+10 148.00
Wartości szesnastkowe MySQL dopuszcza zapis liczb w systemie szesnastkowym (hexadecymalnym). Dotyczy to liczb całkowitych typu integer (64-bittowych). Przykłady poprawnego zapisu liczb szesnastkowych: mysql> SELECT x'FF'; -> 255 mysql> SELECT 0xa+0; -> 10 mysql> SELECT 0x5061756c; -> Paul
Wartość NULL Wartość NULL oznacza "brak danych" i ma zupełnie inne znaczenie niż zero dla wartości numerycznych lub pusty łańcuch znaków dla typów łańcuchowych.
Nazwy baz, tabel, indeksów, kolumn i aliasów
Poza powyższymi zasadami, w żadnej nazwie nie wolno używać znaków ASCII(0), ASCII(255) oraz apostrofu lub cudzysłowu. Jeżeli nazwa jest słowem zarezerwowanym lub zawiera znaki specjalne, to musi być zawsze ujęta w odwrotny apostrof (`), co widać w poniższym przykładzie: mysql> SELECT * FROM `select` WHERE `select`.id > 100; Mimo, iż dozwolone, to nie jest zalecane używanie nazw zaczynających sie od cyfr, gdyż może to powodować sytuacje niejednoznaczne. Odwołując sie do kolumn możesz użyć jednego z poniższych formatów:
Użycie elementów nazwa_bazy i/lub nazwa_tabeli jest konieczne tylko w sytuacjach, kiedy podanie samej nazwy kolumny jest niejednoznaczne (np. przy łączeniu dwóch tabel, z których każda zawiera pole o takiej samej nazwie).
Rozróżnianie wielkości liter w nazwach W MySQL bazy danych i tabele odpowiadają odpowiednio katalogom i plikom systemowym. Dlatego rozróżnianie wielkości liter w nazwach zależy od systemu operacyjnego, pod którym pracujesz. Pomimo, iż Windows nie odróżnia wielkości liter w nazwach, to nie wolno w jednej instrukcji SQL używać dla nazwy bazy lub tabeli używać różnej wielkości liter (np.: moja_tabela i MOJA_TABELA), gdyż taka instrukcja nie zostanie wykonana Aliasy nazw tabel zawsze odróżniają wielkość liter. Z kolei nazwy kolumn i ich aliasów nigdy nie odróżniają wielkości liter.
Komentarze W instrukcjach MySQL można umieszczać własne komentarze na 3 sposoby:
Wstawiając komentarze wielowierszowe należy przestrzegać 2 ograniczeń:
Przykłady komentowania instrukcji SQL: mysql> SELECT 1 + 1; # reszta wiersza jest komentarzem mysql> SELECT 1 + 1; -- reszta wiersza jest komentarzem
Słowa zarezerwowane Aby uniknąć problemów niejednoznaczności wskazane jest unikanie podanych tu słów w nazwach baz, tabel, indeksów, kolumn i aliasów. Musisz pamiętać również o tym, aby nigdy nie zostawiać spacji między nazwa funkcji a nawiasem otwierającym występującym po tej nazwie. Zostawienie choćby jednej spacji, spowoduje, że nazwa funkcji będzie traktowana jako nazwa pola tabeli. Lista słów zarezerwowanych: ADD ALL ALTER ANALYZE AND AS ASC AUTO_INCREMENT BDB BERKELEYDB BETWEEN BIGINT BINARY BLOB BOTHBY CASCADE CASE CHANGE CHAR CHARACTER COLUMN COLUMNS CONSTRAINT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP DATABASE DATABASES DAY_HOUR DAY_MINUTE DAY_SECOND DEC DECIMAL DEFAULT DELAYED DELETE DESC DESCRIBE DISTINCT DISTINCTROW DOUBLE DROP ELSE ENCLOSED ESCAPED EXISTS EXPLAIN FIELDS FLOAT FOR FOREIGN FROM FULLTEXT FUNCTION GRANT GROUP HAVING HIGH_PRIORITY HOUR_MINUTE HOUR_SECOND IF IGNORE IN INDEX INFILE INNER INNODB INSERT INT INTEGER INTERVAL INTO IS JOIN KEY KEYS KILL LEADING LEFT LIKE LIMIT LINES LOAD LOCK LONG LONGBLOB LONGTEXT LOW_PRIORITY MATCH MASTER_SERVER_ID MEDIUMBLOB MEDIUMINT MEDIUMTEXT MIDDLEINT MINUTE_SECOND MRG_MYISAM NATURAL NOT NULL NUMERIC ON OPTIMIZE OPTION OPTIONALLY OR ORDER OUTER OUTFILE PARTIAL PRECISION PRIMARY PRIVILEGES PROCEDURE PURGE READ REAL REFERENCES REGEXP RENAME REPLACE REQUIRE RESTRICT RETURNS REVOKE RIGHT RLIKE SELECT SET SHOW SMALLINT SONAME SQL_BIG_RESULT STARTING SQL_CALC_FOUND_ROWS SSL STRAIGHT_JOIN STRIPED SQL_SMALL_RESULT TABLE TABLES TERMINATED THEN TINYBLOB TINYINT TINYTEXT TO TRAILING UNION UNIQUE UNLOCK UNSIGNED UPDATE USAGE USE USER_RESOURCES USING VALUES VARBINARY VARCHAR VARYING WHEN WHERE WITH WRITE XOR YEAR_MONTH ZEROFILL
|