Dec. 5, 2008

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?

:-D

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

Napisał Dominik w kategoriach O programowaniu | 1 komentarz

Co ostatnio czytałem.

Myślę że warto tu podzielić się w kilku słowach taką informacją i o tym co warta jest dana książka. Co czytałem ostatnio, bo nie sposób spamiętać już tego 8-)

I nie chodzi tu o manuale - tych było zbyt dużo :) Chodzi o książki. Dwie ostatnie - akurat z Helion’a:

SEO, czyli Pozycjonowanie w wyszukiwarkach internetowych, Wyd. II oraz Relacyjne bazy danych dla praktyków,  autor C.J.Date.

Pierwsza książka jest ciekawa, nawet przy fakcie że miałem już trochę do czynienia z SEO. Autorka wie o czym pisze, a książkę warto przeczytać choćby dlatego aby poznać zasady - a jest ich nawet sporo, a także obalić pewne mity. Ja sam będę miał niedługo okazję spróbować swoich sił w SEO. Bo takimi rzeczami jak SEO, e-commerce itp. ostatnio się interesuję.

Polecam książkę wszystkim zainteresowanym, oraz tym mniej rozgarniętym czyli spamerom, żeby się w końcu czegoś nauczyli ;)

Druga książka opisuje znakomicie teorie relacyjnego modelu danych, który w laboratoriach IBM stworzył matematyk E.F. Codd. I w tym sensie właśnie książka jest dla praktyków, którzy stosują różne metody w SQL na co dzień.

Wiadomo jak mocno praca programisty związana jest z bazami danych. Przyznam ze ja również mam sporo praktyki na tym polu.

W tej książce znalazłem balsam na swoja duszę, rozdrażnioną codziennym pędem do szybkich optymalnych praktycznych rozwiązań SQL. Jest tu opis formalny, który wręcz nudny - taki jakiego potrzebowałem do usystematyzowania wiedzy, i wyjaśnienia pewnych nieścisłości, które ma zapewne każdy praktyk. Dzięki niej można na chwilę oderwać się od języka SQL, który ma swoje niedoskonałości i spojrzeć na temat z trochę wyższego poziomu abstrakcji.

Teraz w kolejce manuale ;) Ale po nich ksiazki o High performance SQL, o zaawansowanym Perl’u, czyli tzw. wypas ;)

Napisał Dominik w kategoriach Praca, Życie | Brak komentarzy