|
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
|