Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


SQL

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search
O kartais štai taip vat įdomiai atsitinka, kad koks nors lenkas ima ir suhakina kokį nors SQL ne ten, kur reikia, tai dar beje, kas su SQL susidūręs, tai gali perskaityti, kas atsitiko, kai šitą debilišką numerį šitam vairuotojui išdavė...

SQL - taigi tokia kalba, kaip ir programavimo, nors kad programavimo kalba tai daugelis abejoja, į ką prityrę SQL specai visad atsako, kad jie SQL priemonėmis gali ir skaičių Pi išskaičiuoti ir netgi pateikia tam įrodymus bei faktus.

Visa šita SQL kalba skirta tik tam, kad būtų galima kaip tai standartiškai dirbti su reliacinėmis duomenų bazėmis, bet kaip bebūtų keista, kartais ir su nereliacinėmis irgi visai tinka.


SQL pagrindai

Visas SQL susideda iš dviejų esminių dalių - viena vadinasi DDL (Data Definition Language) ir yra skirta tam, kad apibrėžtų visokius duomenis su tų duomenų struktūra. Kita dalis yra skirta darbui su duomenimis ir vadinasi DML (Data Manipulation Language). Teoriškai abi šios dalys gali būti realizuotos visiškai paskirai, praktiškai irgi kartais taip ir būna.

Pats pirmas, seniausias abiejų šių dalių standartas yra SQL-86, kuris kažkodėl kartais vadinamas dar ir SQL-87. Nors šitas standartas ir yra absurdiškai pasenęs, jis visgi kadaise padėjo SQL pagrindus, tai nuo jo reikalavimų ir verta pradėti mokytis, nes ten patys elementariausi dalykai. Bet kadangi pats standartas tenai surašytas labai baisiai, kažkokioje sugadintoje Backus-Naur formoje, tai čia paprasčiau jį paaiškinsim.


SQL DDL pagrindai

Realiacinė duomenų bazė visada yra sudaryta iš lentelių, o lentelės savo esme yra panašios į kokio nors exel lenteles - eilutėse yra duomenys, o stulpeliais apibrėžiama duomenų rūšis ir paskirtis. Taigi, kuriant duomenų bazę, svarbu apibrėžti visas ją sudarančias lenteles.

Duomenų apibrėžimui naudojamos tokios pagrindinės komandos:

  • CREATE tablename - sukurti lentelę, pvz., CREATE pipedija (id INTEGER, straipsnis VARCHAR);
  • ALTER tablename - modifikuoti lentelę, pvz., ALTER TABLE pipedija ADD komentaras VARCHAR;
  • DROP TABLE tablename - ištrinti lentelę, pvz., DROP TABLE pipedija;

Kaip apibrėšit tą duomenų bazę, taip paskui ir naudosit, o naudojimo metu struktūros kaitalioti paprastai neprireikia.


SQL DML pagrindai

Darbui su duomenimis naudojamos tokios pagrindinės komandos, kurios jau gali turėti daugiau visokių modifikatorių ir įvairovės, kurią čia pat irgi pavardinam jums:

  • SELECT fieldname FROM tablename - gauti duomenis iš lentelės, pvz., SELECT * FROM pipedija
  • INSERT INTO tablename (fieldname, otherfieldname) VALUES ("value1", "value2") - įrašyti duomenis į lentelę, pvz., INSERT into pipedija (straipsnis) VALUES ("kažkoks jūsų tekstas");
  • UPDATE tablename SET fieldname = "somevalue" - atnaujinti visus duomenis lentelėje, juos paverčiant į tuos, kuriuos nurodysit
  • DELETE FROM tablename - ištrinti visus duomenis lentelėje

Čia pastebėkim, kad pagal nutylėjimą SQL nesiaiškina, ką jūs norit atnaujint ar ištrint ir jei kitaip nenurodyst, tai trins ar kaitalios visiškai viską.

Tai dabar esminis papildymas viskam yra WHERE kriterijus, su kuriuo naudojamos praktiškai visos komandos, išskyrus, aišku, INSERT. Tai štai jums pavyzdžiai:

  • SELECT fieldname FROM tablename WHERE fieldname = "something";
  • UPDATE tablename SET fieldname = "this" WHERE fieldname = "that";
  • DELETE FROM tablename WHERE fieldname = "nothing";

Gera praktika yra visada turėti tą WHERE, nes kitaip labai jau lengvai galima pridaryti nesąmonių.

Taip pat čia pastebėkim, kad netgi JOIN nenagrinėjame, nes pvz., SQL-86 standarte jo net ir nebuvo, tai buvo toksai jau pagerintas fyčeris, nors ir sunku įsivaizduoti, kaip be jo gyvent.

Tai štai, jei kažkur pabandėte šituos dalykus padaryti praktiškai, tai jūs dabar jau kažką suprantate apie SQL ir galėtumėt tą SQL kur nors panaudoti.


Pipedijai žinomi SQL

Yra gyvas galas visokiausių SQL serverių, kuriuos gamina patys įvairiausi gamintojai. Tai paprastai bendra yra tai, kad visi palaiko tam tikrą bainį SQL standartą, tačiau visi turi vienų ar kitų išplėtimų. Tai tie išplėtimai gali būti labai įvairūs, bet dažniausiai būna tokie, kur truputį vieni nuo kitų skiriasi. Tai rezultatas tada toks, kad SQL kaip ir standartas, ale nors ir standartas, vienoje sistemoje pastatytos duomenų bazės į kitą sistemą perkelti nepavyksta. Ir kuo gudresnius dalykus naudojate, tuo paskui sunkiau ką nors perkelti. Taip kad bendra gera taisyklė yra neskubėti per daug naudotis visokiais fyčeriais.

Beje, geras pirminis pasirinkimas yra MySQL, nes dauguma dalykų, kurie veikia ant šios DB, veiks ir ant kitų. Bet irgi nebūtinai, nes ir MySQL turi savo gražumų.

Štai čia yra kai kurios SQL sistemos, kurios yra garsiausios, žinomiausios ar populiariausios, ar šiaip kaip nors istoriškai svarbios:

...ir aišku, dar visokių, katruos tingėjom pavardinti.

Vienas svarbus momentas: dauguma SQL palaikančių duomenų bazių yra reliacinės duomenų bazės. Tačiau ne kiekviena reliacinė duomenų bazė palaiko SQL. Kai kurios tiesiog kurtos be SQL palaikymo, o kai kurios kurtos tais laikais, kai SQL išvis net ir nebuvo.


Skaičius Pi suskaičiuojamas per SQL

Tai čia tiesiog vienas iš variantų tiesiog:

set nocount on
 
declare @iteration bigint
set @iteration = 100000 /* increase the iteration to get more precision */
 
create table #values
(
    id bigint identity(0,1) primary key,
    divisor as id*2 + 1,
    multiplier as (id*2 + 2)%4 - 1
)
 
declare @count bigint
set @count = 0
while (@count<= @iteration)
begin
     insert into #values default values
     set @count = @count + 1
end
 
/*This query shows how the value of pi converges to the actual value as the iteration increases */
select  a.id + 1 as iteration,
            sum(cast (4.0 as decimal(38,35))* b.multiplier/b.divisor)
from
           #values a,
           #values b
where
           b.id < =a.id
group by
           a.id
  
drop table #values