<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Samouczek SQL</title>
	<atom:link href="http://olowiak.com/IT/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://olowiak.com/IT</link>
	<description>czyli SQL dla opornych i bystrzaków :)</description>
	<lastBuildDate>Sat, 19 Nov 2011 13:52:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Cloud Computing &#8211; City Cloud -&gt; o co właściwie chodzi?</title>
		<link>http://olowiak.com/IT/?p=68</link>
		<comments>http://olowiak.com/IT/?p=68#comments</comments>
		<pubDate>Wed, 09 Nov 2011 18:19:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[city cloud]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=68</guid>
		<description><![CDATA[Nowy wpis zamiast lekcji będzie dotyczył dosyć popularnego ostatnio tematu w świecie IT &#8211; Cloud Computing. Praca w chmurze weszła w nasze życie w siedmiomilowych butach i radzi sobie bardzo dobrze. Model chmury obliczeniowej sprawdza się bardzo dobrze także, a może i zwłaszcza w polskich warunkach. Bo przecież redukujemy koszty, bo oszczędzamy sobie pracy, bo [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=68&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Nowy wpis zamiast lekcji będzie dotyczył dosyć popularnego ostatnio tematu w świecie IT &#8211; Cloud Computing.</p>
<p>Praca w chmurze weszła w nasze życie w siedmiomilowych butach i radzi sobie bardzo dobrze. Model chmury obliczeniowej sprawdza się bardzo dobrze także, a może i zwłaszcza w polskich warunkach. Bo przecież redukujemy koszty, bo oszczędzamy sobie pracy, bo jest to łatwiejsze.</p>
<p>Oczywiście nadal istnieje korporacyjne przekonanie, że duża firma powinna mieć swoją serwerownię i swoich administratorów. Swoje licencje i serwery poczty oraz serwery domeny i plików&#8230; Oczywiście w dobie oszczędności i recesji na rynku &#8211; to myślenie powoli się zmienia.</p>
<p>Ale przedstawmy zagadnienie obrazowo.</p>
<p>Firma będzie się nazywała JACEX &#8211; to takie &#8216;polskie&#8217; <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Firma ta, której właścicielem jestem oczywiście ja &#8211; Jacek &#8211;  zajmuje się produkcją rowerów. Mam 10 fabryk, poddostawców, magazyny logistyczne, dział personalny, księgowość, zakupy itd. Ale moja firma MUSI korzystać z komputerów ponieważ inaczej się nie da. Ponieważ mamy system magazynowy, serwer poczty, system księgowy oraz RCP &#8211; potrzebujemy także serwerów.</p>
<p>Serwery pociągają za sobą konieczność postawienia serwerowni oraz służb, które to utrzymują &#8211; czyli musimy zainwestować w informatyków. Serwerownia to &#8211; prócz przetargów i projektowania podczas budowania tego monstrum &#8211; także system gaśniczy, system podtrzymania zasilania i mnóstwo przepisów do spełnienia. Także oczywisty problem z całą otoczką jaką są przeglądy, zużywanie sprzętu, serwisy serwerów, kończące się miejsce na dyskach&#8230;</p>
<p>Kwoty rosną z dnia na dzień a i sama praca staje się coraz bardziej wymagająca.</p>
<p>Możemy wejść w popularny w ostatnich czasach outsourcing &#8211; wypchnięcie pewnych usług na zewnątrz. Czy jest to tańsze i lepsze zależy tylko i wyłącznie od tego, czy mądrze wejdziemy w ten proces.</p>
<p>Czyli co? Powierzchnie magazynowe wynajmujemy, służby utrzymania ruchu oddajemy firmie zewnętrznej.. co jeszcze? Co tylko nam sie podoba &#8211; świat oferuje usługi na wszystko co możliwe &#8211; oczywiście musimy to zrobić mądrze aby nam się to opłacało.</p>
<p>Zapytacie jaki ma to związek z samouczkiem albo w ogóle z IT? I po co właściwie o tym piszę? Dochodzimy powoli do sedna czyli do tematów &#8222;wydania&#8221; na zewnątrz systemów IT.</p>
<p>Z punktu widzenia menadżera IT &#8211; mam oczywiście swoje zdanie na ten temat. Przede wszystkim zdrowy rozsądek. Natomiast jesli mówimy o firmie JACEX &#8211; zastanówmy się, po co w mojej firmie serwerownia? Po co mi serwery? Po co oprogramowanie i licencje? Po co drodzy specjaliści? I wreszcie po co mi taki problem? Przecież dla mnie najważniejsze żeby to działało.</p>
<p>Mail oddajemy więc np&#8230; do Google &#8211; oni po podpisaniu umowy zagwarantują nam obieg poczty oraz zagwarantują bezpieczeństwo. Ale co z systemami, które sa nasze &#8211; napisane przez nas lub dla nas? Tutaj dochodzimy do Cloud Computing czyli chmury obliczeniowej.</p>
<p>Usługi takie są oferowane przez różne firmy &#8211; w skrócie polega to na wykupieniu/wynajęciu u firmy trzeciej mocy obliczeniowej i dyskowej, z której będziemy korzystać na potrzeby naszej firmy.</p>
<p>Takie rozwiązanie testowałem dłuższy czas aby zorientować się po części dla własnych potrzeb a po części dla potrzeb mojej firmy. W ręce wpadła mi firma <a href="http://www.citycloud.pl/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.citycloud.pl/?referer=');">City Cloud</a> &#8211; głównie ze względu na ceny.</p>
<p><a href="http://www.citycloud.pl/" onclick="pageTracker._trackPageview('/outgoing/www.citycloud.pl/?referer=');"><img class="aligncenter size-full wp-image-69" title="citycloud" src="http://olowiak.com/IT/wp-content/uploads/2011/11/citycloud.jpg" alt="" width="297" height="68" /></a></p>
<p>Ponieważ nigdy nie korzystałem z rozwiązań Cloud Computing &#8211; miałem pewne obawy czy potrafię w ogóle to poustawiać i czy zorientuje się jak to jeść&#8230; i czym&#8230; i za ile <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>No i miłe zaskoczenie &#8211; interfejs przyjazny, tworzenie konta błyskawiczne, wybór maszyn prosty, konfiguracja systemu banalna.</p>
<p>System testowałem pod kątem serwerów SQL (no ba! <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) oraz zdalnego łączenia sie do nich jak i do samych serwerów. Także dla mnie ważna sprawa, żeby moje programy w firmie JACEX można było łatwo podłączyć przez ODBC do serwerów bazodanowych.</p>
<p>Wszystko banał.</p>
<p>Ceny jak dla mnie znośne jeśli brać pod uwagę prywatną osobę &#8211; dla firmy małej i średniej jest na pewno taniej niż utrzymanie działu IT i serwerowni (uwierzcie mi, wiem co mówię <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p>A jeśli nie lubicie klikać w linki to podam kilka szczegółów, które mnie osobiście przekonały, że w niektórych przypadkach Cloud Computing z wykorzystaniem City Cloud jest najlepszym rozwiązaniem.</p>
<table border="0" width="100%">
<tbody>
<tr>
<td width="201"><strong>Profil/ konfiguracja</strong></td>
<td width="105"><strong>Koszt/ godzina</strong></td>
<td width="121"><strong>Koszt/ miesiąc</strong></td>
<td width="92"><strong>Procesor</strong></td>
<td width="85"><strong>Pamięć</strong></td>
</tr>
<tr>
<td width="201">Small</td>
<td width="105">7 gr</td>
<td width="121">55 PLN</td>
<td width="92">1</td>
<td width="85">0,5 GB</td>
</tr>
<tr>
<td width="201">Standard</td>
<td width="105">10 gr</td>
<td width="121">73 PLN</td>
<td width="92">1</td>
<td width="85">1 GB</td>
</tr>
<tr>
<td width="201">Standard Plus</td>
<td width="105">15 gr</td>
<td width="121">112 PLN</td>
<td width="92">1</td>
<td width="85">2 GB</td>
</tr>
<tr>
<td width="201">Medium</td>
<td width="105">21 gr</td>
<td width="121">151 PLN</td>
<td width="92">2</td>
<td width="85">2 GB</td>
</tr>
<tr>
<td width="201">Medium Plus</td>
<td width="105">32 gr</td>
<td width="121">230 PLN</td>
<td width="92">2</td>
<td width="85">4 GB</td>
</tr>
<tr>
<td width="201">Large</td>
<td width="105">42 gr</td>
<td width="121">309 PLN</td>
<td width="92">4</td>
<td width="85">4 GB</td>
</tr>
<tr>
<td width="201">Large Plus</td>
<td width="105">64 gr</td>
<td width="121">466 PLN</td>
<td width="92">4</td>
<td width="85">8GB</td>
</tr>
<tr>
<td width="201">Superior</td>
<td width="105">75 gr</td>
<td width="121">544 PLN</td>
<td width="92">6</td>
<td width="85">8 GB</td>
</tr>
<tr>
<td width="201">Superior Plus</td>
<td width="105">1,19 PLN</td>
<td width="121">859 PLN</td>
<td width="92">6</td>
<td width="85">16 GB</td>
</tr>
<tr>
<td width="201">Full Throttle</td>
<td width="105">1,30 PLN</td>
<td width="121">938 PLN</td>
<td width="92">8</td>
<td width="85">16 GB</td>
</tr>
</tbody>
</table>
<p>Prócz cen serwerów oczywiście bogata gama softu i systemów operacyjnych. No i najwazniejsze dla mine &#8211; jest MSSQL <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Niestety nie zauważyłem tam Oracle&#8217;a ale można swój soft dograć więc jeśli macie licencję to śmiało możecie soft odpalić na ich serwerach.</p>
<p>Aha&#8230; ważna uwaga &#8211; jeśli nie potrzebujecie serwera full wypas to nie zaznaczajcie tej opcji &#8211; ceny są dosyć wysokie. Dla potrzeb średniej firmy najtańsze serwery zazwyczaj wystarczają &#8211; oczywiście wybierzecie to, co dla Was najodpowiedniejsze.</p>
<p>Kolejna sprawa, na którą warto zwrócić uwagę, a co oferuję City Cloud &#8211; serwery można wstrzymać lub zatrzymać jesli z nich nie korzystacie (przerwa świąteczna, noc, przestój w firmie itp). Kwoty wtedy maleją prawie do zera &#8211; polecam zapamiętać.</p>
<p>I to tyle &#8211; natchniony mnóstwem Cloudów opisywanych w magazynach IT chciałem sam stworzyć coś o tej technologii no i stworzyłem o produkcie, który sam na własnej skórze przetestowałem.</p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funkcje wbudowane SQL &#8211; cz.2</title>
		<link>http://olowiak.com/IT/?p=63</link>
		<comments>http://olowiak.com/IT/?p=63#comments</comments>
		<pubDate>Wed, 29 Jun 2011 09:41:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[CASE]]></category>
		<category><![CDATA[DECODE]]></category>
		<category><![CDATA[ELSE]]></category>
		<category><![CDATA[IS NULL]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[THEN]]></category>
		<category><![CDATA[WHEN]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=63</guid>
		<description><![CDATA[Druga część tego małego zbioru informacji o funkcjach wbudowanych to tak na prawdę uzupełnienie o dwie ważne funkcje. Pierwszą z nich jest funkcja skalarna decode. składnie decode: decode (wyrażenie_testowane, wartość_a_1, wartość_b_1, wartość_a_2, wartość_b_2, &#8230;.., wartość_a_n, wartość_b_n, wartość_domyślna) A oto opis tego co zapisaliśmy: funkcja testuje wartość wyrażenia testowanego i zwraca wartość_b_x w przypadku, gdy wyrażenie [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=63&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Druga część tego małego zbioru informacji o funkcjach wbudowanych to tak na prawdę uzupełnienie o dwie ważne funkcje.</p>
<p>Pierwszą z nich jest <strong>funkcja skalarna decode.</strong></p>
<p>składnie <strong>decode:</strong></p>
<blockquote><p>decode (wyrażenie_testowane,</p>
<p>wartość_a_1, wartość_b_1,</p>
<p>wartość_a_2, wartość_b_2,</p>
<p>&#8230;..,</p>
<p>wartość_a_n, wartość_b_n,</p>
<p>wartość_domyślna)</p></blockquote>
<p><strong>A oto opis tego co zapisaliśmy: </strong>funkcja testuje wartość wyrażenia testowanego i zwraca wartość_b_x w przypadku, gdy wyrażenie testowane ma wartość_a_x. Jeżeli żadne z wartości_a_x nie jest równe wartości testowanej, to funkcja zwraca wartość_domyślna.</p>
<p>myślę, że sprawa jest tutaj prosta. Ale&#8230; dla przykładu zróbmy selecta.</p>
<blockquote><p>SELECT tow_nazwa, tow_cena,</p>
<p>decode (tow_podatek,</p>
<p>22, &#8216;podatek pełny&#8217;,</p>
<p>7, &#8216;podatek ulgowy&#8217;,</p>
<p>&#8216;brak podatku&#8217;) podatki</p>
<p>FROM towary;</p></blockquote>
<p>Możemy łatwo teraz ocenić, że z tabelki towary wybieramy nazwę i cenę oraz kolumnę podatki, która wypisze nam &#8216;podatek pełny&#8217; lub &#8216;podatek ulgowy&#8217; w zależności czy w kolumnie tow_podatek znajdzie 22 czy 7. Jeśli nic nie znajdzie &#8211; napisze &#8216;brak podatku&#8217;.</p>
<p><strong>FUNKCJA DECODE ROZUMIE NULL </strong>- co nie jest tak oczywiste w przypadku kolejnej funkcji <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (mam tu na myśli rozumienie w sensie niepomijania, nie wypisywania 0 ani błędu. Rozumie także jeśli testujemy NULL)</p>
<p>Kolejna funkcja to właściwie całe wyrażenie &#8211; <strong>CASE</strong></p>
<p>W pewnym zakresie odpowiada ono funkcji <strong>DECODE</strong>. Pozwala nam kształtować wartość zwracanej kolumny w sposób elastyczny i dynamicznie modyfikowany.</p>
<p>Oto składnia:</p>
<blockquote><p>SELECT tow_nazwa, <strong>CASE</strong> tow_podatek</p>
<p>WHEN 22 THEN &#8216;normalny&#8217;</p>
<p>WHEN 7 THEN &#8216;ulgowy&#8217;</p>
<p>ELSE &#8216;maly&#8217;</p>
<p>END</p>
<p>FROM towary;</p></blockquote>
<p>Widzimy tutaj, że prócz nowych słów WHEN, THEN, END &#8211; mamy podobną sytuację jak w przypadku DECODE &#8211; osiągnęliśmy to samo.</p>
<p>Można zapytać po co nam w takim razie CASE? Otóż bywa mnóstwo sytuacji kiedy nie da się jej zastąpić przez DECODE ponieważ nie osiągniemy zadanego wyniku lub tez mamy zbyt wiele zmiennych.</p>
<p>Oto prosty przykład:</p>
<blockquote><p>SELECT tow_nazwa</p>
<p>,CASE</p>
<p>WHEN tow_podatek IS NULL THEN &#8216;brak danych&#8217;</p>
<p>WHEN tow_cena &gt; 2000 THEN &#8216;drogo&#8217;</p>
<p>WHEN tow_cena &gt; 200 THEN &#8216;srednio&#8217;</p>
<p>ELSE &#8216;tanio&#8217;</p>
<p>END</p>
<p>FROM towary t;</p></blockquote>
<p>Spróbujcie to samo zrobić z DECODE <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  nie ma szans <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>* Ważne jest też, że <strong>CASE NIE ROZUMIE &#8216;NULL&#8217; &#8211; ale rozumie IS NULL &#8211; </strong>wiem, głupie ale nie zgłębiłem jeszcze powodu dla czego taki a nie inny mechanizm tu działa.</p>
<p>To tyle z funkcji wbudowanych &#8211; mam nadzieję, że się przyda taka lekcja.</p>
<p>Zwróćcie także uwagę na zapisy tych kodów &#8211; użyłem tam specjalnie pewnych znaków w pewnych miejscach &#8211; ktoś wie czemu? <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=63</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funkcje wbudowane SQL &#8211; cz.1</title>
		<link>http://olowiak.com/IT/?p=58</link>
		<comments>http://olowiak.com/IT/?p=58#comments</comments>
		<pubDate>Tue, 28 Jun 2011 10:23:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[abs]]></category>
		<category><![CDATA[DML]]></category>
		<category><![CDATA[funkcje]]></category>
		<category><![CDATA[funkcje numeryczne]]></category>
		<category><![CDATA[funkcje wbudowane]]></category>
		<category><![CDATA[funkcje znakowe]]></category>
		<category><![CDATA[length]]></category>
		<category><![CDATA[lpad]]></category>
		<category><![CDATA[ltrim]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[power]]></category>
		<category><![CDATA[round]]></category>
		<category><![CDATA[rpad]]></category>
		<category><![CDATA[rtrim]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[sign]]></category>
		<category><![CDATA[soundex]]></category>
		<category><![CDATA[sqrt]]></category>
		<category><![CDATA[substr]]></category>
		<category><![CDATA[to_char]]></category>
		<category><![CDATA[to_number]]></category>
		<category><![CDATA[trunc]]></category>
		<category><![CDATA[zaokrąglenia]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=58</guid>
		<description><![CDATA[Dzisiejszy temat to właściwie teoria do przeczytania w każdej książce czy manualu &#8211; jednak skoro mamy mieć wszystko w jednym miejscu; jest to pozycja obowiązkowa. W SQL jest wbudowanych wiele gotowych już funkcji, które ułatwiają nam życie. Po wywołaniu ich w poleceniu SELECT bądź innych poleceniach DML (data manipulation language &#8211; zapytania służące do manipulacji [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=58&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Dzisiejszy temat to właściwie teoria do przeczytania w każdej książce czy manualu &#8211; jednak skoro mamy mieć wszystko w jednym miejscu; jest to pozycja obowiązkowa.</p>
<p>W SQL jest wbudowanych wiele gotowych już funkcji, które ułatwiają nam życie. Po wywołaniu ich w poleceniu SELECT bądź innych poleceniach DML (data manipulation language &#8211; zapytania służące do manipulacji danymi), oraz podaniu argumentów &#8211; funkcje obliczają coś dla nas bądź też wykonują za nas pewne obliczenia.</p>
<p>Funkcje możemy zagnieżdżać w innych funkcjach i to dowolna ilość razy &#8211; to znaczy, że wartość zwrócona z jednej funkcji może być argumentem dla kolejnej funkcji itd.</p>
<p>Ponieważ sam język SQL ma wiele różnych funkcji &#8211; przytoczę tylko najczęściej używane lub zwyczajnie takie, którymi ja się posługuję najczęściej.</p>
<p><strong>Funkcje znakowe</strong></p>
<p>- <strong><em>lower (tekst), upper (text), initcap (text)</em></strong> &#8211; te funkcje zwracają &#8216;text&#8217; zmieniając odpowiednio wielkość liter (na małe, na duże, zaczynające się od dużej litery)</p>
<p>- <strong><em>lpad (text, n [,text1])  , rpad (text, n [,text1])</em></strong> &#8211; funkcja służąca do dopisywania z lewej lub prawej strony tekst1 w taki sposób aby text osiągał szerokość n znaków. Jeżeli text1 nie jest podany to text jest dopełniany spacjami.</p>
<p>- <strong><em>ltrim (text [,text1]), rtrim (text [,text2])</em></strong> &#8211; usuwają z prawej lub lewej strony znaki z text, które znajdują się w text1. Jeżeli w text1 nie ma znaków to usuwane są spacje. ( na przykład ltrim (samouczek [,aue]) usunie nam z &#8216;samouczek&#8217; litery aue dokładnie w takiej kolejności.)</p>
<p>- <strong><em>replace (text, text1 [,text2])</em></strong> &#8211; chyba wszystko jasne w tej funkcji &#8211; czy aby na pewno? <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> : podmieniamy wszystkie wystąpienia ciągu text1 w ciągu text na text2</p>
<p>- <strong><em>substr (text, m [,n])</em></strong> &#8211; wycina z ciągu text n znaków począwszy od pozycji m. Jeśli nie podamy n to wycina wszystkie znaki od pozycji m do końca ciągu text. Jeśli chcemy wycinać znaki od końca ciągu text &#8211; musimy m ustawić na ujemne.</p>
<p>- <strong><em>to_char (liczba [,wzorzec])</em></strong> &#8211; zamienia liczbę na postać ZNAKOWĄ podaną we wzorcu. O wzorcach później, chyba, że kogoś nagli to pytać, pisać itd <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>- <strong><em>to_number (text, [,wzorzec]</em>)</strong> &#8211; zamienia ciąg ZNAKÓW na postać LICZBOWĄ oczywiście wg. wzorca</p>
<p>- <strong><em>length (text)</em></strong> &#8211; zwraca nam długość ciągu tekstu, jeśli text ma wartość NULL to zwraca nam oczywiście NULL (bo nie wiadomo co) a nie 0. Wbrew pozorom użyteczna funkcja.</p>
<p>Warto tez wspomnieć o funkcji, o której sam dowiedziałem się stosunkowo niedawno</p>
<p>- <strong><em>soundEX(text)</em></strong> &#8211; zwraca podobnie brzmiace ciągi tekstów &#8211; głównie może służyć do wyszukiwania nazwisk kiedy wiemy, że dzwoni ale nie wiemy w jakiej parafii <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Do kompletu mamy jeszcze funkcje numeryczne, których oczywiście także jest bez liku. Oto kilka podstawowych:</p>
<p><strong>Funkcje numeryczne</strong></p>
<p>- <strong><em>round (m, [,n])</em></strong> &#8211; zaokrągla m do n-tego miejsca po przecinku. Ważne, że ujemne n zaokrągla do n-tego miejsca PRZED przecinkiem. Jeśli n nie jest podane to n=0</p>
<p>- <strong><em>trunc (m, [,n])</em></strong> &#8211; obcina m do n-tego miejsca po przecinku, ujemne n zamienia na 0 n cyfr przed przecinkiem, jeśli nie podano to wiadomo, że n=0</p>
<p>- <strong><em>power (m, n)</em></strong> &#8211; podnoszenie do potęgi n (podnosimy m do n)</p>
<p>- <strong><em>sqrt (m)</em></strong> &#8211; pierwiastek kwadratowy z liczby m</p>
<p>- <strong><em>sign (m)</em></strong> &#8211; zwraca nam znak liczby, czyli podaje informacje czy liczba jest ujemna czy dodatnia czy 0. W prosty sposób &#8211; wynikiem są 1, 0 , -1 w zalezności od znaku liczby m</p>
<p>- <strong><em>abs (m)</em></strong> &#8211; zwraca wartość bezwzględną liczby m</p>
<p>- <strong><em>mod (m, n)</em></strong> &#8211; zwraca resztę z dzielenia m przez n, jeśli n=0 zwraca m.</p>
<p>Oczywiście jest ich o wiele więcej łącznie ze wszystkimi sin, tan, sinh, cosh itd&#8230;</p>
<p>Przedstawiłem Wam podstawowe funkcje jakie są wbudowane w języku SQL &#8211; ponieważ jest ich ogrom, nie sposób wypisać je wszystkie. Stosując kombinacje tych funkcji jesteśmy w stanie wyciągnąć bardzo wiele informacji z tabel.</p>
<p>W następnej lekcji rozszerzymy temat o funkcje skalarne oraz ciekawe wyrażenia CASE.</p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=58</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selekcja wierszy</title>
		<link>http://olowiak.com/IT/?p=53</link>
		<comments>http://olowiak.com/IT/?p=53#comments</comments>
		<pubDate>Thu, 03 Feb 2011 11:07:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[IN]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[nvl]]></category>
		<category><![CDATA[where]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=53</guid>
		<description><![CDATA[Temat dzisiejszy należy do łatwych i przyjemnych. A dodatkowo do banalnych Pod tajemniczą nazwą selekcji wierszy kryje się nic innego jak tylko warunek WHERE, który zawęża nam wynik zapytania. Nie zawsze bowiem potrzebujemy informacji o wszystkich rekordach w tabeli &#8211; to oczywiste. Dodając do instrukcji SELECT klauzulę WHERE wraz z jakimś wyrażeniem logicznym (czyli tym [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=53&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Temat dzisiejszy należy do łatwych i przyjemnych. A dodatkowo do banalnych <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pod tajemniczą nazwą selekcji wierszy kryje się nic innego jak tylko warunek <strong>WHERE</strong>, który zawęża nam wynik zapytania. Nie zawsze bowiem potrzebujemy informacji o wszystkich rekordach w tabeli &#8211; to oczywiste. Dodając do instrukcji SELECT klauzulę <strong>WHERE </strong>wraz z jakimś wyrażeniem logicznym (czyli tym co będzie określało dokładniej czego szukamy) &#8211; zapytanie zwróci nam jedynie wiersze, dla których wyrażenie przyjęło wartość prawdziwą (tylko to o co zapytaliśmy i nic więcej).</p>
<p>Oczywiście aby ćwiczyć skuteczniej możemy wykonywać instrukcje na bazie, którą Wam udostępniłem.</p>
<p> </p>
<p>Przykłady zastosowań (oczywiście ogranicza nas jedynie wyobraźnia i potrzeby szefa <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  )</p>
<p>1. Wyświetl informację o klientach indywidualnych</p>
<blockquote><p>SELECT *</p>
<p>FROM klienci</p>
<p>WHERE klt_typ = &#8216;IND&#8217;;</p>
</blockquote>
<p>2. Wypisz opis zamówień złożonych przez klientów o numerach 1002 i 1003</p>
<blockquote><p>SELECT zam_opis</p>
<p>FROM zamowienia</p>
<p>WHERE zam_klt_id IN (1002, 1003);</p>
</blockquote>
<p> </p>
<p style="text-align: center;"><strong>Formuła po klauzuli WHERE może być dowolnie skomplikowana</strong></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">!! Musimy pamiętać o naszych kochanych NULLach &#8211; zostaną one POMINIĘTE przy selekcji jeżeli nie uwzględnimy ich po klauzuli WHERE !!</p>
<p style="text-align: left;">Przykładem niech będzie dajmy na to wybranie towarów objętych podatkiem innym niż 22%.</p>
<p style="text-align: left;">Z pozoru proste zadanie komplikuje się ponieważ kiedy napiszemy:</p>
<blockquote><p style="text-align: left;">SELECT *</p>
<p style="text-align: left;">FROM towary</p>
<p style="text-align: left;">WHERE tow_podatek &lt;&gt; 22;</p>
</blockquote>
<p style="text-align: left;">&#8230; to zapytanie nie zwróci wszystkich rekordów różnych od 22, NULL zostanie pominięty. A przecież może zdarzyć się tak, że jeszcze nie wpisaliśmy jaki mamy podatek lub mamy w firmie metodę, że nie wpisujemy 0 (zero) dla nieopodatkowanych produktów/usług/czegokolwiek &#8211; zwyczajnie zostawiamy puste pole, które domyślnie jest NULLem.</p>
<p style="text-align: left;">Poprawnie to zapytanie powinno wyglądać więc tak:</p>
<blockquote><blockquote>
<p>SELECT *</p>
<p>FROM towary</p>
<p>WHERE tow_podatek &lt;&gt; 22</p>
<p>OR tow_podatek is NULL;</p>
</blockquote>
<p> </p>
</blockquote>
<p>Jeżeli mamy trochę wyobraźni lub gdy musimy zamienić NULL na 0 (zero), powinniśmy użyć funkcji NVL &#8211; takie zapytanie także będzie poprawne i NULLe nie zostaną pominięte:</p>
<blockquote><blockquote>
<p>SELECT *</p>
<p>FROM towary</p>
<p>WHERE nvl(tow_podatek,0) &lt;&gt; 22;</p>
</blockquote>
</blockquote>
<p>Czyli jeżeli gdzieś będzie NULL to zamieni nam się na 0.</p>
<p> </p>
<p>Ot i cała filozofia. Bierzcie i jedzcie <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=53</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wartość NULL i trójstanowa logika Oracle</title>
		<link>http://olowiak.com/IT/?p=48</link>
		<comments>http://olowiak.com/IT/?p=48#comments</comments>
		<pubDate>Fri, 03 Dec 2010 09:45:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[!=]]></category>
		<category><![CDATA[>]]></category>
		<category><![CDATA[<]]></category>
		<category><![CDATA[=]]></category>
		<category><![CDATA[AND]]></category>
		<category><![CDATA[BETWEEN]]></category>
		<category><![CDATA[FALSE]]></category>
		<category><![CDATA[from]]></category>
		<category><![CDATA[IN]]></category>
		<category><![CDATA[IS]]></category>
		<category><![CDATA[konkatenacja]]></category>
		<category><![CDATA[LIKE]]></category>
		<category><![CDATA[logika]]></category>
		<category><![CDATA[niepusty]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[nvl]]></category>
		<category><![CDATA[operatory]]></category>
		<category><![CDATA[OR]]></category>
		<category><![CDATA[priorytety operatorów]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[^=]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=48</guid>
		<description><![CDATA[Dzisiaj czas na ciut trudniejsze tematy. O ile ważne w naszej pracy &#8211; o tyle ciężkie do zrozumienia i zwirtualizowania sobie zagadnienia. Jednak przy odrobinie chęci okazuje się, że nie są to czary i magia ale zwykła logika, która ułatwi nam analizę danych oraz pozwoli zrozumieć nasze dotychczasowe błędy. (poza tym później będzie jeszcze trudniej [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=48&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Dzisiaj czas na ciut trudniejsze tematy. O ile ważne w naszej pracy &#8211; o tyle ciężkie do zrozumienia i zwirtualizowania sobie zagadnienia. Jednak przy odrobinie chęci okazuje się, że nie są to czary i magia ale zwykła logika, która ułatwi nam analizę danych oraz pozwoli zrozumieć nasze dotychczasowe błędy. (poza tym później będzie jeszcze trudniej <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  )</p>
<p> </p>
<p>Zaczynamy!</p>
<p> </p>
<p><strong><span style="text-decoration: underline;">Każde wyrażenie arytmetyczne zawierające choć jeden składnik lub czynnik z wartością pustą produkuje pusty wynik</span>.</strong></p>
<p>Wypiszemy teraz z naszej bazy, nazwy towarów oraz ceny brutto (bez używania funkcji NVL)</p>
<blockquote><p><strong>SELECT</strong> tow_nazwa, tow_cena <strong>*</strong>(1+ tow_podatek/100)</p>
<p><strong>FROM</strong> towary;</p>
</blockquote>
<p>Przyjrzyjmy się wynikom i przeanalizujmy pojawienie się NULLi.</p>
<p>*Zasada ta nie obowiązuje w przypadku operatora konkatenacji (złączenia), kiedy wartość NULL jest traktowana jako pusty napis o zerowej długości.*</p>
<p>Wypiszmy teraz jako jeden napis imię, nazwisko, nazwę i adres klientów. Całość nazwiemy &#8222;Dane klientów&#8221;</p>
<blockquote><p><strong>SELECT</strong> klt_imie<strong>||</strong>&#8216; &#8216;<strong>||</strong>klt_nazwisko<strong>||</strong>&#8216; &#8216;<strong>||</strong>klt_nazwa<strong>||</strong>&#8216; &#8216;<strong>||</strong>klt_adres &#8222;Dane klientów&#8221;</p>
<p><strong>FROM</strong> klienci</p>
</blockquote>
<p>Możemy zauważyć, że podana na początku zasada nie zawsze działa&#8230; <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Jeżeli wyrażenie logiczne zawiera wartość pustą i jeżeli pomimo to wynik wyrażenia jest jednoznaczny, to wynik jest niepusty.</p>
<p>Wykonując te polecenia SQL musimy przeanalizować sobie wyniki oraz czytać na głos regułki &#8211; pomoże to zrozumieć o co chodzi.</p>
<p>Oczywiście wspieramy się tablicą prawdy dla NULL:</p>
<blockquote><p><strong>NOT NULL =&gt; NULL</strong></p>
<p><strong>TRUE AND NULL =&gt; NULL</strong></p>
<p><strong>FALSE AND NULL =&gt; FALSE</strong></p>
<p><strong>TRUE OR NULL =&gt; TRUE</strong></p>
<p><strong>FALSE OR NULL =&gt; NULL</strong></p>
</blockquote>
<p>Myślimy tutaj czysto logicznie.  Pod NULL podstawiamy jednocześnie TRUE i FALSE (bo nie wiemy co to jest) i na podstawie tabeli prawdy dostajemy wyniki. Dla przykładu: FALSE i NULL to FALSE ponieważ FALSE przy operaterze AND dla zarówno FALSE jak i TRUE daje FALSE. TRUE i NULL natomiast są NULLem ponieważ dla TRUE przy operatorze AND występują zarówno TRUE i FALSE &#8211; nie wiemy więc co tam jest i dlatego dajemy NULL. Proste <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p> </p>
<p>Dla miłego zakończenia dzisiejszej lekcji, wypiszemy sobie domyślne realizowane kolejności operatorów.</p>
<p><strong>Priorytety operatorów</strong></p>
<p>Składowe złożonych wyrażeń łączone są ze sobą w kolejności zależnej od priorytetów operatorów. W przypadku operatorów o tym samym priorytecie łączenie następuje od lewej do prawej strony.</p>
<p>Domyślną kolejność łączenia możemy zmienić przy pomocy nawiasów.</p>
<p>Poniżej znajdują się operatory uszeregowane w wiersze według priorytetu łączenia, od największego do najmniejszego.</p>
<blockquote><p><strong>*, /, NOT</strong></p>
<p><strong>+,  -,  ||</strong></p>
<p><strong>&lt;, &lt;=, =, &gt;=,  &gt;, &lt;&gt;, !=, ^=, IS, IN, BETWEEN, LIKE</strong></p>
<p><strong>AND</strong></p>
<p><strong>OR</strong></p>
</blockquote>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=48</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dokumentacja baz danych &#8211; 3xTAK!</title>
		<link>http://olowiak.com/IT/?p=38</link>
		<comments>http://olowiak.com/IT/?p=38#comments</comments>
		<pubDate>Fri, 22 Oct 2010 09:32:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[DB2Docbook]]></category>
		<category><![CDATA[docbook]]></category>
		<category><![CDATA[dokumentacja]]></category>
		<category><![CDATA[dokumentacja baz danych]]></category>
		<category><![CDATA[ProITSoft]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=38</guid>
		<description><![CDATA[DB2Docbook &#8211; dokumentowanie bazy danych w formacie Docbook Świetny program do wspierania procesu dokumentacji baz danych. MSSQL, mySQL, PostgreSQL mu nie straszne. Pliki źródłowe w formacie XML, możliwość rozbicia dokumentacji na fragmenty, możliwość przekształcania formatu Docbook na HTML, PDF, docx itp..  to tylko kilka z wielu zalet programu. Czemu o tym piszę? Wiem, że większość [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=38&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p><a title="DB2Docbook" href="http://www.proitsoft.com.pl/db2docbook.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.proitsoft.com.pl/db2docbook.html?referer=');"><strong>DB2Docbook &#8211; dokumentowanie bazy danych w formacie Docbook</strong></a></p>
<p>Świetny program do wspierania procesu dokumentacji baz danych. MSSQL, mySQL, PostgreSQL mu nie straszne. Pliki źródłowe w formacie XML, możliwość rozbicia dokumentacji na fragmenty, możliwość przekształcania formatu Docbook na HTML, PDF, docx itp..  to tylko kilka z wielu zalet programu.</p>
<p>Czemu o tym piszę?</p>
<p>Wiem, że większość z Wass nie dokumentuje swoich poczynań w świecie IT. Programy, całe systemiki powstają bez dokumentacji technicznej.</p>
<p>Piszę tego posta trochę na marginesie mojej głównej działalności ale i ku przestrodze. Jako szef działu IT widzę teraz problem od innej strony &#8211; bez dokumentacji nasze dzieła są martwe i skazane na niepowodzenie.</p>
<p>Ponieważ to Samouczek SQL &#8211; uczulam na dokumentację baz danych. Ułatwi to pracę i nauczy dobrych nawyków na przyszłość.</p>
<p>Polecam <strong>DB2Docbook firmy </strong><a href="http://www.proitsoft.com.pl/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.proitsoft.com.pl/?referer=');"><strong>ProITSoft</strong></a> i namawiam do choćby przetestowania aplikacji. Dokumentacje i utrzymywanie ich aktualnych wersji to podstawa pracy w działach IT &#8211; nie zapominajcie o tym!</p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=38</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operatory i priorytety</title>
		<link>http://olowiak.com/IT/?p=29</link>
		<comments>http://olowiak.com/IT/?p=29#comments</comments>
		<pubDate>Mon, 20 Sep 2010 13:09:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[AND]]></category>
		<category><![CDATA[BETWEEN]]></category>
		<category><![CDATA[FALSE]]></category>
		<category><![CDATA[konkatenacja]]></category>
		<category><![CDATA[NOT]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[operator]]></category>
		<category><![CDATA[operator wzorca]]></category>
		<category><![CDATA[operator zakresu]]></category>
		<category><![CDATA[operatory arytmetyczne]]></category>
		<category><![CDATA[operatory logiczne]]></category>
		<category><![CDATA[operatory porównań]]></category>
		<category><![CDATA[OR]]></category>
		<category><![CDATA[TRUE]]></category>
		<category><![CDATA[wzorzec]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=29</guid>
		<description><![CDATA[Czas na trochę logiki bazodanowej i sposobu myślenia Oracle. Ta lekcja będzie wstępem do konstruowania bardziej rozbudowanych zapytań (niekoniecznie trudniejszych). Logika, którą musimy poznać zanim zaczniemy brnąć dalej, opiera się na zrozumieniu kolejności wykonywanych działań, zrozumieniu co to jest NULL, oraz poznaniu operatorów. Oczywiście nie przedstawię wszystkich operatorów dostępnych w Oracle &#8211; wszystko możemy doczytać [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=29&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Czas na trochę logiki bazodanowej i sposobu myślenia Oracle. Ta lekcja będzie wstępem do konstruowania bardziej rozbudowanych zapytań (niekoniecznie trudniejszych).</p>
<p>Logika, którą musimy poznać zanim zaczniemy brnąć dalej, opiera się na zrozumieniu kolejności wykonywanych działań, zrozumieniu co to jest NULL, oraz poznaniu operatorów.</p>
<p>Oczywiście nie przedstawię wszystkich operatorów dostępnych w Oracle &#8211; wszystko możemy doczytać w sieci lub manualu do Oracla zwanym ORAREF (Oracle reference manual) &#8211; te, które przedstawię są wystarczające w 80% czynności administracyjnych lub statystycznych.</p>
<p>Zacznijmy <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>W instrukcji SELECT mogą wystąpić dowolnie skomplikowane wyrażenia zbudowane z nazw kolumn, wywołań funkcji i ze stałych literałów. Budując różne wyrażenia łączymy poszczególne komponenty przy pomocy operatorów. Poniżej przedstawię opis niektórych operatorów dostępnych w Oracle SQL.</p>
<p><strong>Operatory arytmetyczne</strong></p>
<blockquote><p><strong>+ , &#8211; , * , /        &#8211; dodawanie, odejmowanie, mnożenie, dzielenie</strong></p></blockquote>
<p><strong>Operator konkatenacji</strong></p>
<blockquote><p><strong>||    -operator ten służy do łączenia dwu wartości tekstowych.</strong></p></blockquote>
<p><strong>Operatory porównań</strong></p>
<p><strong>&gt; , &gt;= , = , &lt; , &lt;= , &lt;&gt; , != , ^=</strong></p>
<p><strong>Operator zakresu</strong></p>
<blockquote><p><strong>x [NOT] BEETWEEN y AND z           &#8211; operator ten sprawdza czy wartość x mieści [nie mieści]  się w przedziale domkniętym &lt;y,z&gt;</strong></p></blockquote>
<p><strong>Operator przynależności do listy</strong></p>
<blockquote><p><strong>x [NOT] IN (x1, x2,&#8230;,xn)        &#8211; operator ten sprawdza, czy wartość x znajduje [nie znajduje] się na liście wartości x1,x2&#8230;</strong></p></blockquote>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</strong><br />
<script type="text/javascript"><!--google_ad_client = "ca-pub-6876369194465771";/* grafika */google_ad_slot = "4111721871";google_ad_width = 468;google_ad_height = 60;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br />
<strong>Operator wzorca</strong></p>
<blockquote><p><strong>x [NOT] LIKE y</strong></p></blockquote>
<p>Tutaj należy się wyjaśnienie. Operator ten sprawdza czy wartość x &#8216;przystaje&#8217; [nie przystaje] do maski y. Chodzi tutaj o porównanie wartości (będziemy o tym pisać szerzej w innych lekcjach). Dla przykładu jeśli wybrać z kolumny wiek wszystkich 22-latków wystarczy, że napiszemy  = &#8217;22&#8242; . natomiast jeżeli chcemy znaleźć nazwiska zaczynające się na &#8216;Oło&#8217;, musimy skorzystać z maski. Czyli porównamy sobie to tak: wybierz z tabeli ludzie imię i nazwisko ale tylko tych osób których nazwiska zaczynają się na oło. Skorzystamy z tekiego zapisu<strong> SELECT imie, nazwisko FROM ludzie where nazwisko LIKE &#8216;oło%&#8217;;</strong></p>
<p><strong>! w ogromnym skrócie: % zastępuje nam dowolną ilość znaków natomiast &#8216;_&#8217;  (podkreślenie) zastępuje dokładnie jeden znak. Bazę danych o moje nazwisko możemy więc zapytać na mnóstwo sposobów:</strong></p>
<p><strong>- o___ia%</strong></p>
<p><strong>- oł%k</strong></p>
<p><strong>- o_o_i%</strong></p>
<p><strong>PAMIĘTAJMY O CASE SENSITIVE &#8211; WIELOŚĆ LITER MA ZNACZENIE<br />
</strong></p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
</strong></p>
<p><strong>Operator testowania wartości</strong></p>
<blockquote><p><strong>x IS [NOT] NULL                            &#8211; sprawdza czy x zawiera NULL czy nie</strong></p></blockquote>
<p><strong>Operatory logiczne</strong></p>
<blockquote><p><strong>AND, NOT, OR     &#8211; podstawowe operatory logiczne (i, nie, lub)</strong></p></blockquote>
<p>Dla operatorów logicznych istnieje tabela prawdy &#8211; niektórzy mogą kojarzyć ją z logiczną tabelą prawdy, o której mówi się na matematyce w szkole podczas logiki lub teorii zbiorów. Na podstawie tej tabeli możemy określić czy nasz SQL będzie miał powodzenie czy wyświetli bzdurę tylko dla tego, że źle zapytaliśmy. Niby jest to oczywiste ale warto tabelę znać.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="154" valign="top"><strong>AND</strong></td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">NULL</td>
</tr>
<tr>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">NULL</td>
</tr>
<tr>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">FALSE</td>
</tr>
<tr>
<td width="154" valign="top">NULL</td>
<td width="154" valign="top">NULL</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">NULL</td>
</tr>
</tbody>
</table>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="154" valign="top"><strong>OR</strong></td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">NULL</td>
</tr>
<tr>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">TRUE</td>
</tr>
<tr>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">NULL</td>
</tr>
<tr>
<td width="154" valign="top">NULL</td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">NULL</td>
<td width="154" valign="top">NULL</td>
</tr>
</tbody>
</table>
<table style="height: 39px;" border="1" cellspacing="0" cellpadding="0" width="626">
<tbody>
<tr>
<td width="154" valign="top"><strong>NOT</strong></td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top"><strong>NULL</strong></td>
</tr>
<tr>
<td width="154" valign="top"></td>
<td width="154" valign="top">FALSE</td>
<td width="154" valign="top">TRUE</td>
<td width="154" valign="top"><strong>NULL</strong></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=29</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Próbki (SAMPLES)</title>
		<link>http://olowiak.com/IT/?p=25</link>
		<comments>http://olowiak.com/IT/?p=25#comments</comments>
		<pubDate>Mon, 20 Sep 2010 11:36:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[%]]></category>
		<category><![CDATA[ORDER BY]]></category>
		<category><![CDATA[próbki]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=25</guid>
		<description><![CDATA[Temat próbek jest dość krótki i prosty (chociaż wyniki są czasem zaskakujące). Jeżeli nie wyspecyfikujemy w zapytaniu klauzuli ORDER BY , to dane są zwracane w kolejności w jakiej są składowane. Aby ze wskazanej tabeli w losowy sposób wybrać tylko część wierszy, można skorzystać z klauzuli SAMPLE. SELECT tow_nazwa FROM towary SAMPLE(20); powyższy sql wyświetli [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=25&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Temat próbek jest dość krótki i prosty (chociaż wyniki są czasem zaskakujące).</p>
<p>Jeżeli nie wyspecyfikujemy w zapytaniu klauzuli <strong>ORDER BY</strong> , to dane są zwracane w kolejności w jakiej są składowane.</p>
<p>Aby ze wskazanej tabeli w losowy sposób wybrać tylko część wierszy, można skorzystać z klauzuli <strong>SAMPLE.</strong></p>
<blockquote><p>SELECT tow_nazwa FROM towary SAMPLE(20);</p>
</blockquote>
<p>powyższy sql wyświetli nazwy losowo wybranych 20% towarów.</p>
<p> </p>
<p>Na pewno są jakieś zastosowania tej funkcji, ja osobiście nie używam ale jednak warto o niej wiedzieć <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=25</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortowania</title>
		<link>http://olowiak.com/IT/?p=22</link>
		<comments>http://olowiak.com/IT/?p=22#comments</comments>
		<pubDate>Mon, 20 Sep 2010 10:26:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[ASC]]></category>
		<category><![CDATA[DESC]]></category>
		<category><![CDATA[ORDER]]></category>
		<category><![CDATA[ORDER BY]]></category>
		<category><![CDATA[sortowanie]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=22</guid>
		<description><![CDATA[Wiersze zwracane przez zapytanie (wyświetlane) nie są uporządkowane w żaden sposób, pojawiają się w nieokreślonej kolejności. Aby uporządkować ich kolejność należy zastosować na końcu zapytania klauzulę (polecenie) ORDER BY. Jeżeli nie potrzebujemy sortowania lepiej nie używać niepotrzebnie tej klauzuli &#8211; generuje ona dodatkowy nakład pracy dla naszej bazy danych a w przypadku wielu milionów rekordów, [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=22&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Wiersze zwracane przez zapytanie (wyświetlane) nie są uporządkowane w żaden sposób, pojawiają się w nieokreślonej kolejności.</p>
<p>Aby uporządkować ich kolejność należy zastosować na końcu zapytania klauzulę (polecenie) <strong>ORDER BY</strong>.</p>
<p>Jeżeli nie potrzebujemy sortowania lepiej nie używać niepotrzebnie tej klauzuli &#8211; generuje ona dodatkowy nakład pracy dla naszej bazy danych a w przypadku wielu milionów rekordów, będzie to miało znaczenie.</p>
<p>* Aby posortować wynik zapytania po klauzuli <strong>ORDER BY </strong>należy dodać nazwę kolumny, według której chcemy posortować wynik zapytania</p>
<blockquote><p>SELECT * FROM towary ORDER BY tow_nazwa;</p>
</blockquote>
<p>Posortowaliśmy wynik w sposób następujący: wszystkie rekordy z tabeli towary będą posortowane po kolumnie tow_nazwa.</p>
<p>Domyślnie porządek sortowania jest rosnący, można to zmienić wstawiając po nazwie kolumny, według której sortujemy, odpowiednio <strong>ASC </strong>lub <strong>DESC.</strong></p>
<p>Spróbujmy wypisać wszystkie informacje o towarach, porządkując je wg, nazwy malejąco:</p>
<blockquote><p>SELECT * FROM towary ORDER BY tow_nazwa DESC;</p>
</blockquote>
<p> </p>
<p>* Kilka ciekawostek, których nie stosuje się na codzień w kodowaniu, a które mogą przydać się niektórym  wścibskim koderom <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>- zamiast kolumny lub aliasu po klauzuli <strong>ORDER BY </strong>może pojawić się numer określający pozycję składnika z listy składników klauzuli SELECT, według którego ma być posortowany wynik</p>
<blockquote><p>SELECT tow_nazwa,</p>
<p>tow_cena,</p>
<p>tow_cena * (1 + NVL(tow_podatek, 0)/100)</p>
<p>FROM towary</p>
<p>ORDER BY 3 DESC;</p>
</blockquote>
<p>Powyższy slq posortuje wynik według ceny brutto czyli 3 pozycji naszego selectu.</p>
<p>- po klauzuli <strong>ORDER BY</strong> może pojawić się kilka kolumn lub wyrażeń lub numerów rozdzielonych przecinkami. W takim wypadku wynik zapytania zostanie posortowany według pierwszej pozycji, następnie w przypadku, gdy pierwsza kolumna jest równa, to podzbiór zostanie posortowany według drugiej pozycji, itd.</p>
<p>- możemy zastosować więcej niż jedno sortowanie, jak to zrobić? oczywiście do Waszej dyspozycji przykład:</p>
<blockquote><p>SELECT tow_nazwa,</p>
<p>tow_cena,</p>
<p>NVL(tow_podatek,0)</p>
<p>FROM towary</p>
<p>ORDER BY 3 DESC, tow_nazwa ASC;</p>
</blockquote>
<p>W ten sposób sortujemy wg podatku malejąco a następnie wg ceny rosnąco.</p>
<p><strong>!!! W przypadku sortowania w porządku rosnącym wartości puste (NULL) zostają wypisane na końcu, w przypadku sortowania w porządku malejącym wypisane zostają na początku !!!</strong></p>
<p><strong>! Pozycje znajdujące się po klauzuli ORDER BY nie muszą znajdować się na liście pozycji po klauzuli SELECT !</strong></p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=22</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Projekcja &#8211; klauzula SELECT &#8211; operacje na jednej tablicy</title>
		<link>http://olowiak.com/IT/?p=17</link>
		<comments>http://olowiak.com/IT/?p=17#comments</comments>
		<pubDate>Fri, 11 Jun 2010 20:13:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Kurs podstawowy]]></category>
		<category><![CDATA[aliasy]]></category>
		<category><![CDATA[as]]></category>
		<category><![CDATA[distinct]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[nvl]]></category>

		<guid isPermaLink="false">http://olowiak.com/IT/?p=17</guid>
		<description><![CDATA[Aby wydobyć informacje z bazy danych musimy o nie jakoś zapytać. Skupimy się na razie na jednej tablicy czy jak kto woli tabeli. Aby zacząć pytać musimy wiedzieć co chcemy otrzymać oraz gdzie się to znajduje. Zakładając, że mamy dane osobowe: imię, nazwisko, adres znajdujące się w tabeli ADRESY &#8211; zapytajmy tabelę o wyświetlenie imion [...]]]></description>
			<content:encoded><![CDATA[<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://olowiak.com/IT/?p=17&amp;layout=button_count&amp;show_faces=true&amp;width=260&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><p>Aby wydobyć informacje z bazy danych musimy o nie jakoś zapytać. Skupimy się na razie na jednej tablicy czy jak kto woli tabeli.</p>
<p>Aby zacząć pytać musimy wiedzieć co chcemy otrzymać oraz gdzie się to znajduje.</p>
<p>Zakładając, że mamy dane osobowe: imię, nazwisko, adres znajdujące się w tabeli ADRESY &#8211; zapytajmy tabelę o wyświetlenie imion z naszej tabeli. Posłuży nam do tego SELECT:</p>
<blockquote><p><strong>SELECT imie FROM adresy</strong></p></blockquote>
<p>czyli: wybierz imiona z tabeli adresy &#8211; w ten sposób otrzymamy wynik, którym jest kolumna &#8216;imie&#8217; z jej zawartością.</p>
<p><strong>!WAŻNE! &#8211; bazę możemy skonfigurować w dowolny sposób, między innymi tak aby tolerowała znaki narodowe czyli tzw ogonki czy np. tak aby ignorowała kapitaliki czyli wielkie litery. W naszym kursie zakładamy, że nie mamy polskich znaków oraz, że bazie danych jest wszystko jedno czy zapytamy o IMIE, imie, Imie, czy ImiE &#8211; w przeciwnym razie wszystkie te nazwy oznaczały by co innego. Dla uproszczenia przyjmiemy w kursie, że tylko instrukcję będziemy pisać wielkimi literami a nazwy obiektów (kolumn, tabel itp) małymi. Pamiętajmy jednak, że w przypadku baz danych &#8211; wielkość MA znaczenie <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Możemy oczywiście wybrać więcej niż jedną kolumnę &#8211; załóżmy, że chcemy tym razem mieć imię i nazwisko &#8211; w tym przypadku oddzielamy nazwy kolumn przecinkiem</p>
<blockquote><p><strong>SELECT imie, nazwisko FROM adresy</strong></p></blockquote>
<p>Wybierać możemy nie tylko kolumny ale także &#8216;stałe&#8217;. Stałe to właściwie słowa, które wyświetlą nam się kiedy spełnimy odpowiednie warunki &#8211; ponieważ do warunków jeszcze nie doszliśmy, zakładamy że spełniamy wszystkie <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Przykład: wybiezmy z naszej tabeli adresy ale w taki sposób aby poprzedzał je wyraz &#8216;adres&#8217;. Nic prostrzego:</p>
<blockquote><p><strong>SELECT &#8216;ADRES&#8217;, adres FROM adresy</strong></p></blockquote>
<p>w wyniku otrzymamy coś w ten deseń:</p>
<p><em>ADRES   warszawa kolejowa 3</em></p>
<p><em>ADRES  starachowice szkolna 2</em></p>
<p><em>ADRES  kielce sienkiewicza 18</em></p>
<p>Czyli każdy nasz rekord (pojedyńczy wynik, wiersz) zostanie poprzedzony wyrazem ADRES.</p>
<p>Czasami musimy wybrać wszystkie kolumny z danej tabeli. W naszym przykładzie jest ich 3 ale co kiedy było by ich 120? Oczywiście nie musimy ich wszystkich wypisywać &#8211; możemy zastąpić je wszystkie gwiazdką:</p>
<blockquote><p><strong>SELECT * FROM klienci</strong></p></blockquote>
<p>w wyniku otrzymamy wszystkie kolumny z tabeli klienci <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Czasami kiedy tworzymy jakieś zestawienie dla naszego szefa &#8211; musimy wykonać ładną prezentację. Problem pojawia się kiedy w jakiejś kolumnie nie ma wartości. Na przykład mamy w tabeli imię i nazwisko ale nie wpisaliśmy adresu bądź jest nam on nieznany. Jeżeli w tabelce nie ma wartości to przyjmuje ona domyślną wartość NULL (o nullach więcej i szerzej pomówimy w przyszłości). Jak teraz wyglądał by przykładowy wiersz w naszym wyniku?</p>
<p><em>imie|nazwisko|adres<br />
</em></p>
<p><em>Jacek |Ołowiak |NULL</em></p>
<p>nie wygląda to uroczo, może dało by się zastąpić ten NULL czymś sensownym? Ano dało by się. Służy nam <strong>funkcja NVL &#8211; sprawdza ona czy w danej kolumnie jest wartość NULL, jeżeli jest to zastępuje ją jakimś słowem lub inną daną</strong></p>
<p>Zróbmy to w taki sposób aby dla wpisów nie posiadających adresu umieścić informację &#8222;brak adresu&#8221;. Ok? No to do dzieła:</p>
<blockquote><p><strong>SELECT imie , nazwisko , NVL(adres, &#8216;brak adresu&#8217;) FROM adresy</strong></p></blockquote>
<p>czyli <em>NVL(nazwa_kolumny, wartosc_zastepcza)</em></p>
<p><strong>!WAŻNE! &#8211; wartość zastępcza MUSI być tego samego typu co badana kolumna &#8211; czyli jeżeli tutaj mamy tekst to nie moglibyśmy wstawić tutaj np. kolumny wiek, która była by numerem</strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>To jeszcze nie koniec poznawania zaledwie podstaw SELECTu <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>z prostrzych, które możemy tutaj poruszyć nie mącąc w głowach to:</p>
<p><strong>DISTINCT &#8211; służy nam do wybrania unikatowych wartości z tabel, czyli nie interesuje nas ilość danych ale to jakie dane tam są.</strong></p>
<p>Dla przykładu może się zdarzyć, że chcemy zobaczyć jakie nazwiska znajdują się w naszej tabelce &#8211; jeśli wybralibyśmy normalnie to otrzymamy pełną kolumnę nazwisko. A co jeśli mamy tam dwudziestu Ołowiaków i 40 Nowaków? Nie chcemy tego liczyć, chcemy aby pokazały się tylko raz:</p>
<blockquote><p><strong>SELECT DISTINCT nazwisko FROM adresy</strong></p></blockquote>
<p><strong>ALIASY</strong> <strong>- to nazwy jakie możemy nadać kolumnom &#8211; nie musimy ich pokazywać szefowi tak jak się nazywają w rzeczywistości  &#8211; zwłaszcza, że często używa się skrotów w nazewnictwie kolumn.</strong></p>
<p>Zakładając, że mamy w tabeli faktury, kolumny cen_net, cen_bru&#8230;. &#8211; dla przeciętnego odbiorcy takie zestawienie będzie kłopotliwe do odczytania. Nazwijmy je normalnie ceny netto i ceny brutto. Robimy to używając <strong>aliasów.</strong></p>
<blockquote><p><strong>SELECT   cen_net    AS   &#8216;ceny netto&#8217;  , cen_bru AS   &#8216;ceny brutto&#8217;   FROM   faktury</strong></p></blockquote>
<p>I po kłopocie, dodam tylko, że <em>słowo kluczowe AS nie jest wymagane</em><strong>.</strong></p>
<p><strong>&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Ostatnim elementem w tym rozdziale (aby nie było wszystkiego zbyt dużo) są operacje modyfikujące wyświetlane dane.<strong></strong></p>
<p>Jak wspomniałem na samym początku, w klauzuli SELECT możemy dokonywać obliczeń.</p>
<p>podam prosty przykład ponieważ szerzej omówimy to w kolejnych rozdziałach.</p>
<p>Dla ułatwienia przyjmijmy, że z tabeli wypłaty chcemy mieć kwoty netto i brutto. Niestety nasz durny administrator nie przewidział, że będziemy potrzebować wartości brutto&#8230;. musimy więc ją jakoś wyliczyć. Wiemy, że stawka podatku dla naszych zarobków to 17%. Co należy zrobić? No dodać wartośc podatku do wartości netto, brawo <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>więc:</p>
<blockquote><p><strong>SELECT netto,</strong></p>
<p><strong>netto + ((netto *17)/100) AS brutto</strong></p>
<p><strong>FROM wyplaty</strong></p></blockquote>
<p>Zgadza się? Jednocześnie użyliśmy aliasu aby nasz wynik nazwać brutto <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Operacje, które ćwiczyliśmy NIE ZMIENIAJĄ WARTOŚCI W TABELI a jedynie modyfikują je przy wyświetlaniu dla uzyskania oczekiwanego wyniku &#8211; niby oczywiste ale warto wspomnieć. <img src='http://olowiak.com/IT/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://olowiak.com/IT/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

