Temat: Nauka SQL Serwer 2005

A to jeszcze taka informacja dla wszystkich chcących nauczyć się ogólnie SQL. Otóż poza podstawowymi poleceniami (wspólnymi dla silników baz danych różnych dostawców) mamy także szereg rozszerzeń i różnic składniowych. Są w sieci całe tabele porównawcze dla różnych silników, warto przeczytać, jak można osiągnąć daną rzecz w danym "narzeczu".

SELECT a,b,c INTO tmp FROM X inaczej zadziała w PL/SQL (X musi być zadeklarowaną wcześniej zmienną, w szczególności może być zmienną "rekordową", co pozwala odczytać cały jeden rekord), a inaczej w T-SQL (X stanie się tabelą, zawierającą wynik zapytania).

SELECT 2+2 zadziała w T-SQL, ale w PL/SQL już potrzeba "FROM dual".

Zabawa ze zmiennymi:

w PL/SQL:
DECLARE zmienna varchar(20);

BEGIN
zmienna := 'Ala ma kota';

DBMS_OUTPUT.PUT_LINE(zmienna);
END;

(swoją drogą nie mam pojęcia, jak wyświetlić zawartość zmiennej tekstowej w selekcie :/

w T-SQL

DECLARE @zmienna VARCHAR(20)
SET @zmienna = 'Ala ma kota'
SELECT @zmienna

i wiele innych różnic. Czasami parsery dwóch silnikó potrafią zrobić to samo, ale wyrażone inaczej (inna składnia), a czasem po prostu nie potrafią czegoś zrobić i trzeba to "obchodzić na okrągło" elementarnymi poleceniami SQL. Dawniej było to np. rankingowanie danych, tabele tymczasowe, zmiana typu kolumny, w której są już dane. Różne jest podejście do "standardów" (dawniej SQL92, teraz bodajże SQL2003)

Inaczej mogą nazywać się funkcje wbudowane (np. daty/czasu, operacji na literałach) - SQLLite i T-SQL na przykład.

Dodatkowo silniki mogą oferować dodatkową funkcjonalność - obsługa XML, szyfrowanie, funkcje systemowe (zwykle blokowane przez dbadminów), dynamiczny SQL (dzięki niemu mogłem czynić "cuda" na polu metod numerycznych :) )

Warto mieć pod ręką porównania, chociażby http://troels.arvin.dk/db/rdbms/

Dobrze jest sobie napisać na szybko jakieś złożone (pod względem róznych konstrukcji) wyrażenie i sprawdzić, czy dany silnik je "strawi". Jak nie, to spróbować pozamieniać wyrażenia innymi, obejść je, aż w końcu uzyska się żądany efekt. Wtedy wiadomo pi razy oko, co można z danym silnikiem zrobić.

Tutaj quick'n'dirty zapytanie do zabawy z SQLLite (bardzo fajna baza! "gada" z .NET), po którym nie wiedziałem za bardzo, czego się spodziewać. Przy takich testach dobrze wrzucić do bazy dane w Unicode i zobaczyć wynik. SQLLite przeszedł pomyślnie test.

SELECT
(CASE WHEN t.id > 100 THEN 'działa CASE :)' END) as XXX,
t.*,
t.nazwisko || CAST(t.id AS VARCHAR(10)) || '!!!!' AS YYY,
(SELECT ID+2 FROM T1 abc where abc.id=t.id) as 'AS ze spacjami !'

FROM T1 t
INNER JOIN T2 tt ON (t.id= tt.id) AND (t.id > 1)

WHERE t.nazwisko in (select nazwisko from T1 ttt where ttt.id> 1)
AND t.nazwisko like '%3%'

UNION

SELECT
(CASE WHEN t.id < 10 THEN '< 10' ELSE t.id END) as XXX,
t.*,
t.nazwisko || ' 1111111' as YYY,
datetime('now','localtime','-3 months', '-1000 years', '-20 days')

FROM T1 t
INNER JOIN T2 tt ON (t.id= tt.id)

ORDER BY id
LIMIT 333


Obrazek
Adrian Olszewski edytował(a) ten post dnia 28.04.09 o godzinie 10:53
Michał Piotr Krużel

Michał Piotr Krużel Business
Intelligence
Consultant, BI
Masters

Temat: Nauka SQL Serwer 2005

Mikołaj W.:
A ja mam inne pytanie - mianowicie wiem z doświadczenia (i opisów technicznych) ze wersje MS Express Edition są zaprojektowane do "oszczędnego" korzystania z zasobów systemowych. Enterprise na pewno taki nie jest (bierze co jest i woła o więcej :D).

Jak jest z developerem ? czy jak zainstaluje na lapku to mam się spodziewać wersji Enterprise (po uruchomieniu kwerend mogę iść na kawę)?

Pozdrawiam,
MWW
Mam zainstalowaną wersje Dev na swoim firmowym laptopie: C2D 2GHz, 1.5 GB Ram : da sie pracować, oczywiście nie tak szybko jak na serwerach firmowych które mają lepsze parametry :], ale z tą kawą to przesada.. trzeba wziąć pod uwagę że na swoim laptopie pracuję tylko ja a nie 500 i więcej osób , mi sqlserver 2005 zabiera około 350 MB zasobów, a sql2008 (bo mam dwa:D) około 500 więc nawet czasem równolegle się pracuje;-) - obydwie wersje dev.
pozdrawiam MK



Wyślij zaproszenie do