Inner Join

Februāris 25, 2008

Šajā rakstā detalizēti paskatīsimies uz pašu izplatītāko tabulu kombinēšanas veidu – INNER JOIN.

For english speaking only check SQL join types.

Inner Join

Diemžēl man nav īstas skaidrības kā latviski tiek tulkots Inner Join. Līdz ar to esmu spiests visā šai rakstā uz to tā arī atsaukties.

Inner Join tiek lietots, lai atlasītu tos un tikai tos ierakstus no abām tabulām, kur abu tabulu ieraksti atbilst kombinēšanas nosacījumam. Visbiežāk kombinēšanas nosacījums ir tāds, ka pirmās tabulas noteiktas kolonas vērtībām ir jāsakrīt ar otrās tabulas noteiktas kolonas vērtībām. Iedomājamies, ka mums ir tabulas A un B, kā attēlots iepriekšējā rakstā. Tādā gadījumā Inner Join rezultāts grafiski izskatītos šādi:


Inner Join

Sintakse

SELECT <kolonu saraksts>
FROM <kreisās puses tabula>
[INNER] JOIN <labās puses tabula>
ON <kombinēšanas nosacījums>

Lasīt pārējo šī ieraksta daļu »


Dekarta reizinājums (Cross Join)

Februāris 19, 2008

Šajā rakstā detalizēti paskatīsimies uz vienu no tabulu kombinēšanas veidiem – CROSS JOIN.

For english speaking only check SQL join types. 

Kas ir Dekarta reizinājums (tas pats arī Cross Join, Cartesian Join, Cartesian Product)?

Iedomājamies, ka mums ir 2 tabulas A un B. Grafiski to ieraksti ir attēloti šādi:
Tabula A un B

CROSS JOIN rezultāts būtu šāds:

Cross Join

Tātad kā to viegli noprast katrs ieraksts tabulā A tiek kombinēts ar katru ierakstu tabulā B. Vispārīgā gadījumā tas, protams, var rezultēties diezgan mežonīgā ierakstu skaitā, piemēram, ja tabulā A ir 100 000 (simttūkstoš) ieraksti (kas ir pietiekami parasts skaits), tabulā B tikpat, tad Dekarta reizinājums būs 10 000 000 000 (desmit miljardi) Lasīt pārējo šī ieraksta daļu »


Oracle licencēšana un redakcijas (editions)

Februāris 14, 2008

Vairumā izstrādātāju un to personu vidū, kuri nosaka izvēlēto DBVS, galvās ir iesēdies mīts (kam, protams, ir arī zināms pamats, to nevar noliegt :) , ka Oracle ir ļoti dārga.
Mazliet paskatīsimies uz faktiem, cik dārga tad tā ir un kādas ir iespējas cenu samazināt.

Tātad sākam ar faktu numur viens – Oracle ir veselas 5 redakcijas (editions).

Nez kāpēc cilvēki tiklīdz kā iedomājas Oracle, tā uzreiz saista to ar Enterprise Edition. Tas būtu tas pats kā jebkuru mašīnas izvēli sākt ar tās maksimālo standartkomplektu. Bet patiesībā dzīvē, ja vien neesam “biezie“, mēs jau vispirms paskatamies uz lētākajiem komplektiem un tikai tad, ja piedāvātās iespējas mūs neapmierina, vai naudas makā ir vairāk nekā lētākais komplekts prasa, tad skatamies uz nākošo līmeni.

Fakts numur divi – visas versijas ir iespējams lejuplādēt no Oracle mājaslapas. Vēl vairāk – saskaņā ar pašreizējo licences versiju (kas krietni sen nav mainījusies) – jebkuru redakciju var izmantot pašizglītošanās mērķiem un viena prototipa izveidē.

Tad nu lūk sāksim ar zemāko līmeni un lēnām kāpsim augstāk.

Express Edition (XE)

Šīs redakcijas oficiālā lapa ir šeit. Līdzīgi kā galvenajiem konkurentiem Microsoft SQL Server un IBM DB2, šī versija ir bezmaksas. Šo versiju salīdzinājumu varat atrast vienā no iepriekšējiem aprakstiem. Tātad pilnīgi bez maksas jūs varat iegūt versiju, kas:

  • izmantos ne vairāk kā 1G RAM;
  • izmantos ne vairāk kā 4G datus;
  • izmantos ne vairāk kā 1 procesoru;
  • darbojas uz Linux un Windows operētājsistēmām.

Šai versijai nav oficiāla atbalsta un nav pieejami arī jauninājumi. Tai pašā laikā tā nāk līdz ar programmēšanas un administrēšanas vidi (Oracle Application Express, APEX), kurā var veidot pats savas web aplikācijas. Lai arī oficiāla atbalsta nav, tomēr ir speciāla vienkāršota dokumentācija un jautājumus, kā vienmēr var uzdot atbilstošajā Oracle forumā, kur gan vispirms Jums ir jāreģistrējas (reģistrēšanās ir bezmaksas).

Tai pašā laikā viss, ko Jūs uzrakstīsiet šai versijā, darbosies arī uz jebkuras nākošās versijas. Protams, tas nenozīmē, ka Jums nebūs jāveic testēšana, lai būtu par to 100% droši :)

Standard Edition One (SEO)

Šīs redakcijas oficiālā lapa ir šeit. Redakcijai pastāv ierobežojums – datubāze nedrīkst izmantot vairāk kā 2 procesoru ligzdas (socket). SEO salīdzinot ar Express Edition ir daudz un dažādas papildus iespējas, kā arī oficiāls atbalsts un jauninājumi. Uz šo brīdi (2008. gada februāris) cena ir 4995 ASV $ par procesoru vai 149$ (kopš 2008. gada 16. jūnija attiecīgi 5800 un 180) par lietotāju plus (named user plus), kur galvenā atšķirība no vienkārši lietotājiem ir, ka tiek skaitīti arī automātiskie devēji un faktiskie datubāzes gala lietotāji. Kā minimums jāiegādājas vismaz 5 lietotāju plus licences.

Standard Edition (SE)

Šīs redakcijas oficiālā lapa ir šeit. Funkcionāli nav nekādu īpašu atšķirību no SEO redakcijas, ja neskaita vienu būtisku lietu – RAC (Real Application Clusters). Klāsterēšanu, kur obligāti gan ir jāizmanto Oracle nodrošinātā klāsterēšanas programmatūra. Pie tam šai redakcijai RAC ir par brīvu atšķirībā no EE. Redakcijai pastāv ierobežojums – datubāze nedrīkst izmantot vairāk kā 4 procesoru ligzdas, tai skaitā RAC gadījumā kopā viss klāsteris arī nedrīkst saturēt vairāk kā 4 procesoru ligzdas. Uz šo brīdi (2008. gada februāris) cena ir 15 000 ASV $ par procesoru vai 300$ (kopš 2008. gada 16. jūnija attiecīgi 17 500 un 350) par lietotāju plus. Kā minimums jāiegādājas vismaz 5 lietotāju plus licences.

Enterprise Edition (EE)

Šīs redakcijas oficiālā lapa ir šeit. Tai nav nekādu procesoru, operatīvās atmiņas vai datu ierobežojumu. Tai ir vairāk funkcionālu iespēju, salīdzinot ar SE, kā vesela rinda papildus maksas iespēju, piemēram, Total Recall (tikai 11g versijā), Real Application Clusters (RAC), Database Vault, Real Application Testing (tikai 11g), OLAP, Partitioning, Data Mining u.c.
Uz šo brīdi (2008. gada februāris) cena ir 40 000 ASV $ par procesoru vai 800$ (kopš 2008. gada 16. jūnija attiecīgi 47 500 un 950) par lietotāju plus. Tiesa gan ir jāiegādājas vismaz 25 lietotāju plus licences uz katru procesoru.

Personal Edition (PE)

Šī zināmā mērā ir visnoslēpumainākā versija ar vismazāk pieejamo informāciju gan Oracle mājaslapā, gan arī vispār internetā. Šai redakcijā ir iekļautas visas EE papildus maksas iespējas izņemot RAC. To drīkst lietot uz jebkādas komplektācijas datora. Fantastika, vai ne? BET, protams, ir BET. Ir jābūt tikai vienam vienīgam gala lietotājam. Ja Jums šāds scenārijs der, tad cena ir 400 ASV $ (kopš 2008. gada 16. jūnija 460) par lietotāju plus. Rakstot šo rakstu par šo redakciju izraisījās arī diskusija Latvian Oracle User Group e-pasta listē.

Kopsavilkums

1. Izvēloties Oracle un mēģinot saprast izmaksas un minimālo standarta cenas komplektu, jums varētu palīdzēt šādi materiāli:

2. Atcerieties, ka neskaidros jautājumus var uzdot, piemēram, Latvian Oracle User Group e-pasta listē.

3. Pirms galīgā lēmuma pieņemšanas noteikti konsultējieties ar Oracle pārstāvjiem. Lai arī oficiāli neviens par atlaidēm neko nesaka, tomēr interneta forumos klīst nostāsti par dažādām atlaidēm un, piemēram, tādām lietām kā site licencēm, kad kāda organizācija acīmredzot ir samaksājusi tik daudz, ka drīkst instalēt savās struktūrvienībās, kādas Oracle datubāzes vien vēlas. Iespējams, ka Latvijā līdz tādam līmenim, gan neviens nevelk )

4. Atcerēties, ka licences cena kopā pat ar visu uzturēšanu un atbalstu nebūt nesatur visas tiešās izmaksas, nemaz nerunājot par netiešajām.

5. Un visbeidzot papildus standarta atrunai atgādinu, ka šim aprakstam ir tikai un vienīgi informatīvs raksturs, un visu šeit doto informāciju Jums ir pienākums pārbaudīt pašiem.

P.S. Paldies Edgaram Č. un Edgaram R. par atbalstu raksta izveidē!


Tabulu kombinēšana (Join) – termini

Februāris 11, 2008

For english speaking only check SQL join types.

SQL JOIN klauza kombinē ierakstus no divām tabulām. Tabulu kombinēšanām ir vairāki varianti un klasifikācija pēc vairākiem veidiem. Tā visa rezultātā pirmajā brīdī var nebūt īsti skaidrs kurš kombinēšanas veids ko īsti dara un kurā brīdī jāizmanto. SQL tabulu kombinēšanas veidi un to savsarpējā saistība ir parādīta ER diagrammā. Jāklikšķina uz tās, lai attēlu palielinātu un varētu visu salasīt.

SQL tabulu kombinēšanas veidi

Šajā rakstā ieskicēšu kombinēšanas klasificēšanas veidus.

Atkarība no kombinēšanas ierobežojuma esamības

Atkarībā no tā, vai kombinēšanai tiek uzlikts kāds ierobežojums vai nē, iegūst:

  • CROSS JOIN (saukts arī par CARTESIAN PRODUCT, CARTESIAN JOIN) – nav nekādu ierobežojumu. Latviski to sauc arī par Dekarta reizinājumu. Visi pārējie kombinēšanas veidi degradējas uz Dekarta reizinājumu, ja kombinēšanas nosacījums vienmēr ir spēkā (patiess).
  • NATURAL JOIN, NAMED COLUMNS JOIN, CONDITIONAL JOIN – tabulu kombinēšana ar ierobežojumu, kas klasificēti atkarībā no tā, kā tas sintaktiski pierakstīts. NATURAL JOIN un NAMED COLUMNS JOIN sintaktiskais pieraksts vienmēr dod tikai un vienīgi EQUI JOIN, tur nav iespējas izvēlēties nekādu citu operatoru kā vienādību. CONDITIONAL JOIN pieraksts ļauj izvēlēties vai nu lietot vienādību, vai arī kādu citu operatoru.

ER diagrammā attēloti dzeltenā krāsā.

Atkarība no ierakstu atlases

Atkarībā no tā, vai tiek atlasīti tikai tie ieraksti, kas apmierina nosacījumu (attiecīgi CROSS JOIN šis iedalījums nav piemērojams, jo tam nekāda ierobežojuma nav), vai arī pārējie ieraksti no iesaistītajām tabulām, iegūst:

ER diagrammā attēloti zaļā krāsā. Tātad šeit uzskaitītie kombinēšanas veidi – INNER vai kāds no OUTER var tikt izmantoti jebkuram no uzskaitītajiem pārējiem kombinēšanas veidiem, izņemot CROSS JOIN.

Atkarība no operatora izmantošanas

Atkarībā no tā, kāds operators tiek izmantots kombinēšanas nosacījumā, iedalījums ir:

  • EQUI JOIN – kombinēšanas nosacījumā tiek izmantota vienādība.
  • NONEQUI (THETA, θ) JOIN – kombinēšanas nosacījumā netiek izmantota vienādība, bet kāds cits operators.

ER diagrammā attēloti gaiši zilā krāsā. Tā kā NATURAL JOIN un NAMED COLUMNS JOIN operators netiek norādīts un tas noklusēti ir vienādība, tad tie vienmēr ir EQUI JOIN. Šis iedalījums nav piemērojams CROSS JOIN, jo tam nekāda nosacījuma nav.

Atkarība no iesaistītajām tabulām kombinēšanā

Atkarībā no tā, ar ko tabula tiek kombinēta:

  • SELF JOIN – tabula tiek kombinēta pati ar sevi.

ER diagrammā attēloti oranžā krāsā. SELF JOIN var būt reizē arī jebkurš no pārējiem kombinēšanas veidiem.

Tālākā lasāmviela

Sintakse, piemēri un viss pārējais sekos…