Czyli SQL jakiego być może nie znacie.
Ale zacznę dowcipem od kolegi z pracy, który naprawdę bardzo mnie rozbawił (pewnie dlatego byłem wtedy w trakcie czytania książki o teorii relacyjnego modelu danych
)
Przychodzi SQL do baru, tam dwie tabele:
- Can I JOIN You?
A teraz do rzeczy. Czytałem swego czasu Manual MySQL. Ostatnio postanowiłem odświeżyć sobie w ramach wieczornej literatury moje podręczne notatki z owej tematyki.
I po przeczytaniu doszedłem do wniosku że jest tam kilka ciekawych, fajnych rzeczy, o których często nawet nie wiemy. Może dlatego ze są to rzeczy bardziej zaawansowane, czyli nie potrzebne Kowalskiemu.
I tak choćby bity i notacja b’:
#tworzymy tabelkę
CREATE TABLE t (b BIT(8));
#wstawiamy bity - znaczy dane 
INSERT INTO t SET b = b’11111111′;
INSERT INTO t SET b = b’1010′;
INSERT INTO t SET b = b’0101′;
#a tu pobieramy sobie wyniki z konwersją między systemami
SELECT b+0, BIN(b+0), OCT(b+0), HEX(b+0) FROM t;
Dalej - może nie takie zaawansowane, bo każdy SQL’ista
powinien to znać - mianowicie User Defined Variables czyli nasze zmienne w SQL
#przykład z manual’a
SET @t1=0, @t2=0, @t3=0;
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
#no to może jeszcze raz nasze bity
SET @v1 = b’1000001′;
SET @v2 = CAST(b’1000001′ AS UNSIGNED), @v3 = b’1000001′+0;
SELECT @v1, @v2, @v3;
Operator <=> czyli null safe equal. A po co to? Jak ktoś czytał książkę C.J. Date’a, o której pisałem wcześniej - będzie wiedział
#ale może przykład wystarczy by ‘przypomnieć’ sobie o co chodzi 
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0
Programiści, którzy zapomnieli o konstrukcji w linijce poniżej pewnie się teraz uśmiechną:
SELECT IF(1<2,’yes’,'no’) as wynik;
I niechaj SQL przemówi:
SELECT IF(STRCMP(’test’,'test1′),’no’,'yes’);
Przy okazji: potęga agregacji jest niekwestionowana, ale pamiętam pytanie o problem z DISTINCT + konkretne pole:
#więc:
SELECT COUNT(DISTINCT price) FROM shop;
Co jeszcze? Np. oprogramowanie GIS - mamy tu wsparcie od strony MySQL:
http://dev.mysql.com/doc/refman/5.0/en/opengis-geometry-model.html
Choć jeszcze nie używałem tego w konkretnych projektach np. www + mapy, po godzince zabawy mogę powiedzieć - fajna sprawa.
A na deser eksport tabeli do pliku CSV:
SELECT * INTO OUTFILE ‘/home/dominik/tabela.csv’
FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”‘
LINES TERMINATED BY ‘\n’
FROM shop;
Oraz coś, co naprawdę może się przydać (ahh, przypominają mi się stare czasy i praca nad pewnym katastrofalnym systemem) - tabela tymczasowa:
CREATE TEMPORARY TABLE tabela (
id int(10) unsigned NOT NULL auto_increment,
nazwisko VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO tabela SET nazwisko=”Thompson”;
INSERT INTO tabela SET nazwisko=”Torvalds”;
SELECT * FROM tabela;
Coś bardziej zaawansowanego? Optymalizacje - performance. Ale przecież to znamy, bo robimy na co dzień
Enjoy! ( and JOIN
)