<?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>Together..</title>
	<atom:link href="http://www.havetogether.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.havetogether.com</link>
	<description>Mencari arti kebersamaan</description>
	<lastBuildDate>Thu, 25 Feb 2010 02:59:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Menampilkan Database dalam Grafik</title>
		<link>http://www.havetogether.com/menampilkan-database-dalam-grafik.html</link>
		<comments>http://www.havetogether.com/menampilkan-database-dalam-grafik.html#comments</comments>
		<pubDate>Thu, 25 Feb 2010 02:54:23 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=468</guid>
		<description><![CDATA[Membaca banyak data dari suatu database tentu sangat melelahkan dan merepotkan, apalagi jika harus menganalisanya.  Data akan lebih mudah dibaca dan dianalisa ketika disajikan dalam bentuk grafik atau report yang bisa dicetak..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html" rel="bookmark">Zoom dan Scrolling Grafik dengan Keyboard</a><!-- (10.652)--></li>
		<li><a href="http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html" rel="bookmark">Membuat Cross-hair pada Grafik dengan Komponen TChart</a><!-- (10.6138)--></li>
		<li><a href="http://www.havetogether.com/menyiapkan-database-untuk-wordpress.html" rel="bookmark">Menyiapkan Database untuk WordPress</a><!-- (7.163)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Membaca banyak data dari suatu database tentu sangat melelahkan dan merepotkan, apalagi jika harus menganalisanya.  Data akan lebih mudah dibaca dan dianalisa ketika disajikan dalam bentuk grafik atau report yang bisa dicetak.</p>
<p style="text-align: justify;">Buka kembali project <strong>TChart </strong>seperti pada tulisan terdahulu, jika tidak punya download <a class="downloadlink" href="http://www.havetogether.com/downloads/TChart+Source+Code+ver.1.3" title=" downloaded 3 times" >TChart Source Code ver.1.3 (3) - 8.65 KB</a>,  kemudian ekstrak dan klik ganda file TChart.dpr melalui Widows  Explorer. Sesuai dengan paragraf awal artikel ini download <a class="downloadlink" href="http://www.havetogether.com/downloads/Linked+Database+Source+Code" title=" downloaded 4 times" >Linked Database Source Code (4) - 23.43 KB</a>,  kemudian ekstrak di komputer kamu.. sebelum kamu menambahkan file .pas ke project, buatlah terlebih dahulu driver ODBC karena jika dipaksakan maka sebuah pesan error <em>[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified </em>akan muncul, dan program Delphi kamu akan <em>autoclose</em> (tertutup sendiri).</p>
<p style="text-align: justify;">Database yang akan dihubungkan dengan grafik memakai Ms Access, cara koneksi dengan program Delphi biasanya memakai komponen ADO melalui ODBC. Segera buat driver ODBC, dengan mengklik Start -&gt; Control Panel.. pada windows yang ditampilkan klik ganda menu Administrative Tools, klik ganda lagi pada menu Data Sources (ODBC) sampai muncul kotak dialog ODBC Data Source Administrator, pilih tab System DSN dan lakukan langkah-langkah seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a rel="attachment wp-att-1319" href="http://www.havetogether.com/?attachment_id=1319"><img class="alignnone size-full wp-image-1319" title="linked1_odbc1" src="http://www.havetogether.com/wp-content/uploads/2010/02/linked1_odbc1.jpg" alt="" width="415" height="354" /></a></p>
<p style="text-align: justify;"><a rel="attachment wp-att-1320" href="http://www.havetogether.com/?attachment_id=1320"><img class="alignnone size-full wp-image-1320" title="linked2_odbc2" src="http://www.havetogether.com/wp-content/uploads/2010/02/linked2_odbc2.jpg" alt="" width="429" height="330" /></a></p>
<p style="text-align: justify;">Jika sudah selesai, klik kanan <em>mouse </em>pada project TChart.exe, pada menu yang  muncul klik Add.. kemudian  cari dan pilih 2 buah file .pas (uLinked, uqfmLinked) yang akan ditambahkan seperti  gambar  di bawah ini</p>
<p><a rel="attachment wp-att-1323" href="http://www.havetogether.com/?attachment_id=1323"><img class="alignnone size-full wp-image-1323" title="linked3_addproject" src="http://www.havetogether.com/wp-content/uploads/2010/02/linked3_addproject.jpg" alt="" width="590" height="341" /></a></p>
<p style="text-align: justify;">Seperti biasa aktifkan form fmMainTChart, kemudian klik ganda komponen TPopupMenu  bernama pmOtherDemo.. pada popmenu yang muncul klik ganda Linked Database</p>
<p style="text-align: justify;"><a rel="attachment wp-att-1324" href="http://www.havetogether.com/?attachment_id=1324"><img class="alignnone size-full wp-image-1324" title="linked4_popmenulink" src="http://www.havetogether.com/wp-content/uploads/2010/02/linked4_popmenulink.jpg" alt="" width="590" height="283" /></a></p>
<p>Tambahkan code seperti di bawah ini  untuk menampilkan aplikasi ini melalui aplikasi TChart</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miLinkedDatabaseClick(Sender: TObject);
<strong>begin</strong>
 fmLinked.ShowModal
<strong>end</strong>;</pre>
<p>Tekan tombol Run untuk menjalankan  aplikasi ini… jika muncul pesan <em>Form ‘fmMainTChart‘ references form  ‘fmLinked’ declarated in unit ‘uLinked’ which is not in your USES  list. Do you wish to add it?</em> tekan tombol Yes. Tekan kembali tombol  Run.. Jika tidak  ada pesan lain yang muncul berarti aplikasi telah berjalan dengan baik.</p>
<p style="text-align: justify;">1. <strong>Menghubungkan database dengan komponen grafik<br />
</strong></p>
<p style="text-align: justify;">Komponen yang dipakai dalam unit uLinked ini, sebenarnya turunan dari komponen TChart yaitu TDBChart, karena untuk menghubungkan database (melalui dataset) lebih cocok menggunakan komponen TDBChart. Selain penambahan nilai <strong>Dataset</strong> dalam <em>property</em> <strong>Data Source</strong> dari komponen TChartSeries, semua <em>property</em>-nya sama dengan komponen TChart. TChartSeries adalah komponen yang ada di dalam TDBChart yang nantinya dipakai untuk menampilkan data dalam wujud grafik.. untuk lebih jelasnya klik ganda komponen TDBChart pada unit uLinked, di sana ada sebuah Series1 (series jenis Bar, atau TBarSeries), perhatikan gambar di bawah</p>
<p style="text-align: justify;"><a rel="attachment wp-att-1325" href="http://www.havetogether.com/?attachment_id=1325"><img class="alignnone size-full wp-image-1325" title="linked5_datasetseries" src="http://www.havetogether.com/wp-content/uploads/2010/02/linked5_datasetseries.jpg" alt="" width="431" height="352" /></a></p>
<p style="text-align: justify;">Pada gambar di atas dipilih data source jenis <strong>Dataset</strong> dan data yang akan ditampilkan berasal dari tabel Orders (direfresentasikan dalam komponen <strong>tbOrdes</strong>), kemudian sebagai sumbu Y dipilih field <strong>AmountPaid</strong>, sedang sumbu X field <strong>SaleDate</strong>.</p>
<p style="text-align: justify;"><a rel="attachment wp-att-1326" href="http://www.havetogether.com/?attachment_id=1326"><img class="alignnone size-full wp-image-1326" title="linked6_coding" src="http://www.havetogether.com/wp-content/uploads/2010/02/linked6_coding.jpg" alt="" width="558" height="158" /></a></p>
<p style="text-align: justify;">Perhatikan deklarasi yang ditambahkan dalam bagian <strong>published </strong>unit uLinked (bagian ini menggantikan bagian public, sebenarnya tidak ada alasan khusus untuk menghapus bagian public.. daripada kosong, kan?!&#8230;) juga function GetCompanyGrid, yang berisi code :</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>function </strong>TfmLinked.GetCompanyGrid: <strong>String</strong>;
<strong>begin</strong>
 Result:= tbCustomer.FieldbyName('COMPANY').AsString;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Function ini hanya untuk mendapatkan nilai field COMPANY dari record yang dipilih, ketika variabel FCompanyGrid dipanggil. Variabel ini nantinya dipakai sebagai title dari series dalam report dengan menggunakan Quick Report..</p>
<p style="text-align: justify;"><strong>Prosedur untuk me-<em>refresh</em> data yang ditampilkan dalam grafik<br />
</strong></p>
<p style="text-align: justify;">Ketika terjadi <em>scrolling</em> atau <em>editing</em> data pada dataset master (dsCustomer, reprensetasi dari tabel Customer) maka data pada dataset client (dsOrders, representasi dari tabel Orders) otomatis berubah sesuai dengan data master-nya. Logikanya data-data yang ditampilkan dalam grafik seharusnya berubah mengikuti nilai dari tabel Orders (ingat dataset yang dimasukkan dalam Series1 adalah tbOrders) . Untuk itu Klik ganda sel di sebelah kanan event <strong>OnDataChange</strong> pada komponen <em>TDataSource</em> <strong>dsCustomer</strong>, dan lihat code-nya.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmLinked.dsCustomerDataChange(Sender: TObject; Field: TField);
<strong>begin</strong>
 dbcLinked.CheckDataSource(Series1);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Metode <strong>CheckDataSource </strong>akan me-<em>refresh</em> semua data pada TChartSeries baik dari dataset Query, Table atau sumber data TChartSeries lain. Metode ini dapat dipanggil secara rutin jika kita ingin menambahkan atau memodifikasi data yang ditampilkan secara <em>realtime </em>pada TChartSeries. Jadi data yang di-plot pada <em>TChartSeries</em> <strong>Series1 </strong>akan berubah ketika ada perubahan data pada dataset <strong>tbOrders</strong>.</p>
<p style="text-align: justify;"><strong>Mem-<em>preview </em>report</strong></p>
<p style="text-align: justify;">Selain ditampilkan dalam aplikasi, agar grafik dapat dicetak maka perlu di-<em>preview </em>terlebih dahulu. Manfaatkan komponen Button yang ada dengan mengklik ganda komponen tersebut dan ketikkan code berikut :</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmLinked.btPrintPreviewClick(Sender: TObject);
<strong>begin</strong>
 qrLinked.Preview;
<strong>end</strong>;</pre>
<p style="text-align: justify;">2. <strong>Membuat report dengan Quick Report</strong></p>
<p style="text-align: justify;">Berikut tip untuk yang belum mengetahui cara praktis membuat form report dengan QuickReport, klik menu File -&gt; New -&gt; Other&#8230; pada kotak dialog New Items yang muncul, aktifkan tab New pilih Report.. maka sebuah form yang hanya terdiri atas komponen TQuickRep akan dibuatkan.</p>
<p style="text-align: justify;">Dalam form qrLinked (dari unit uqfmLinked), hanya band summary yang diaktifkan (cuma <em>property </em>Bands.HasSummary yang diberi nilai True), kemudian komponen TQRChart ditambahkan pada band summary ini. Pada komponen TQRChart tersebut memang disengaja tidak ada series yang dibuat, karena akan dibuat secara <em>realtime </em>melalui prosedur event <strong>BeforePrint </strong>dari komponen <em>TQuickRep </em><strong>qrLinked</strong>, seperti code di bawah ini.. tetapi sebelumnya deklarasikan variabel <strong>bsNewSeries </strong>dalam bagian <strong>public </strong>dari unit uqfmLinked.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>public</strong>
 bsNewSeries: TBarSeries;
</pre>
<pre style="padding-left: 30px;"><strong>procedure </strong>TqrLinked.QuickRepBeforePrint(Sender: TCustomQuickRep;
<strong>  var </strong>PrintReport: Boolean);
<strong>begin</strong>
 <strong>if  </strong>bsNewSeries = <strong>nil then</strong>
 <strong>begin</strong>
   bsNewSeries:= TBarSeries.Create(Self);
   bsNewSeries.ParentChart:= qrdbcLinked;
   bsNewSeries.Title:= fmLinked.FCompanyGrid;
   bsNewSeries.BarStyle:= bsRectangle;
   bsNewSeries.SeriesColor:= clGreen;
   bsNewSeries.Marks.Visible:= False;
   bsNewSeries.DataSource:= fmLinked.tbOrders;
   bsNewSeries.YValues.ValueSource:= 'AmountPaid';
   bsNewSeries.XLabelsSource:= 'SaleDate';
 <strong>end</strong>;<strong>
end</strong>;</pre>
<p style="text-align: justify;">Prosedur di atas sebenarnya hanya memberi nilai pada beberapa <em>property </em>dari series dalam bentuk code. Catatan yang perlu diperhatikan adalah title dari series yang dibuat secara <em>realtime </em>tersebut sesuai dengan nilai dari variabel <strong>FCompanyGrid </strong>pada unit uLinked, warna bar &#8216;Hijau&#8217;, dan Data Source, sumbu Y, sumbu X dibuat sama dengan komponen <em>TDBChart </em>dalam unit uLinked.</p>
<p style="text-align: justify;">Untuk membebaskan memori dari series yang terbentuk secara <em>realtime </em>tadi maka klik ganda sel di sebelah kanan event <strong>AfterPreview </strong>dari komponen <em>TQuickRep </em><strong>qrLinked</strong>.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TqrLinked.QuickRepAfterPreview(Sender: TObject);
<strong>begin</strong>
 bsNewSeries.Free;
 bsNewSeries:= <strong>nil</strong>;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar download untuk artikel ini:<br />
1. <a class="downloadlink" href="http://www.havetogether.com/downloads/TChart+Source+Code+ver.1.3" title=" downloaded 3 times" >TChart Source Code ver.1.3 (3) - 8.65 KB</a><br />
2. <a class="downloadlink" href="http://www.havetogether.com/downloads/Linked+Database+Source+Code" title=" downloaded 4 times" >Linked Database Source Code (4) - 23.43 KB</a><br />
3. <a class="downloadlink" href="http://www.havetogether.com/downloads/TChart+Application+ver.1.3" title=" downloaded 2 times" >TChart Application ver.1.3 (2) - 647 KB</a></p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html" rel="bookmark">Zoom dan Scrolling Grafik dengan Keyboard</a><!-- (10.652)--></li>
		<li><a href="http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html" rel="bookmark">Membuat Cross-hair pada Grafik dengan Komponen TChart</a><!-- (10.6138)--></li>
		<li><a href="http://www.havetogether.com/menyiapkan-database-untuk-wordpress.html" rel="bookmark">Menyiapkan Database untuk WordPress</a><!-- (7.163)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/menampilkan-database-dalam-grafik.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zoom dan Scrolling Grafik dengan Keyboard</title>
		<link>http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html</link>
		<comments>http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html#comments</comments>
		<pubDate>Fri, 22 Jan 2010 13:18:09 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=450</guid>
		<description><![CDATA[Salah satu feature yang menarik dari aplikasi grafik yang dibuat dengan komponen Delphi, TChart, adalah bisa mengontrol grafik dengan menggunakan tombol-tombol Keyboard dan mudah dalam hal coding..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html" rel="bookmark">Membuat Cross-hair pada Grafik dengan Komponen TChart</a><!-- (15.2389)--></li>
		<li><a href="http://www.havetogether.com/menampilkan-database-dalam-grafik.html" rel="bookmark">Menampilkan Database dalam Grafik</a><!-- (12.9967)--></li>
		<li><a href="http://www.havetogether.com/komponen-delphi-tchart.html" rel="bookmark">TChart Component</a><!-- (7.48912)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Kontrol grafik, seperti <em>zoom</em> (memperbesar/memperkecil) atau <em>scrolling</em> (menggeser), dalam suatu aplikasi biasanya dilakukan dengan tombol navigasi. Salah satu feature yang menarik dari aplikasi grafik yang dibuat dengan komponen Delphi, <strong>TChart</strong>, adalah bisa mengontrol grafik dengan menggunakan tombol-tombol <em>Keyboard</em> dan mudah dalam hal <em>coding</em>.</p>
<p style="text-align: justify;">Lanjutkan project <strong>TChart </strong>pada tulisan terdahulu, atau download <a class="downloadlink" href="http://www.havetogether.com/downloads/TChart+Source+Code+ver.1.2" title=" downloaded 7 times" >TChart Source Code ver.1.2 (7) - 6.44 KB</a>, kemudian ekstrak dan jalankan program Delphi, buka project <strong> TChart </strong>(atau klik ganda file TChart.dpr melalui Widows Explorer). Selanjutnya download <a class="downloadlink" href="http://www.havetogether.com/downloads/Keyboard+Control+Source+Code" title=" downloaded 8 times" >Keyboard Control Source Code (8) - 2.18 KB</a>, kemudian ekstrak dan tambahkan pada project TChart  tersebut dengan meng-klik kanan <em>mouse </em>pada project TChart.exe. Pada menu yang muncul klik Add.. kemudian cari file .pas yang ingin ditambahkan seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a rel="attachment wp-att-1261" href="http://www.havetogether.com/?attachment_id=1261"><img class="alignnone size-full wp-image-1261" title="keyboard1_addproject" src="http://www.havetogether.com/wp-content/uploads/2010/01/keyboard1_addproject.jpg" alt="" width="590" height="368" /></a></p>
<p style="text-align: justify;">Aktifkan form fmMainTChart, kemudian klik ganda komponen TPopupMenu bernama pmOtherDemo.. pada popmenu yang muncul klik ganda menu Keyboard Scrolling</p>
<p style="text-align: justify;"><a rel="attachment wp-att-1262" href="http://www.havetogether.com/?attachment_id=1262"><img class="alignnone size-full wp-image-1262" title="keyboard2_popmenukeyboard" src="http://www.havetogether.com/wp-content/uploads/2010/01/keyboard2_popmenukeyboard.jpg" alt="" width="590" height="283" /></a></p>
<p style="text-align: justify;">Tambahkan code seperti di bawah ini untuk menampilkan aplikasi ini melalui aplikasi TChart</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miKeyboardScrollingClick(Sender: TObject);
<strong>begin</strong>
  fmKeyboard.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tekan tombol Run untuk menjalankan aplikasi ini… jika muncul pesan <em>Form ‘fmMainTChart ‘ references form ‘fmKeyboard’ declarated in unit ‘uKeyboard’ which is not in your USES list. Do you wish to add it?</em> tekan tombol Yes. Tekan kembali tombol Run.. seharusnya aplikasi TChart telah berjalan dengan baik..</p>
<p style="text-align: justify;">1. <strong>Inisialisasi aplikasi melalui prosedur event OnCreate dan OnShow form fmKeyboard</strong></p>
<p style="text-align: justify;">Seperti aplikasi pada umumnya, aplikasi ini juga perlu diinisialisasi melalui event <strong>OnCreate </strong>dan <strong>OnShow </strong>form ini (<strong>fmKeyboard</strong>). Klik ganda sel di sebelah kanan  event <strong>OnCreate </strong>form <strong>fmKeyboard</strong></p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.FormCreate(Sender: TObject);
<strong>begin</strong>
 Series1.FillSampleValues(500);
<strong>end</strong>;
</pre>
<p style="text-align: justify;">prosedur di atas hanya untuk menginisialisasi grafik, yaitu nilai random dengan rentang sebanyak 500 data di-plot dalam TChartSeries melalui metode <strong>FillSampleValues</strong>.</p>
<p style="text-align: justify;">Berikutnya klik ganda sel di sebelah kanan  event <strong>OnShow </strong>form <strong>fmKeyboard</strong></p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.FormShow(Sender: TObject);
<strong>begin </strong>
  ctKeyboard.SetFocus;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Proses <em>zoom</em> dan <em>scrolling</em> grafik dengan menggunakan tombol <em>Keyboard </em>hanya dapat dilakukan jika komponen TChart yang dimaksud menjadi focus form. Sehingga setiap kali aplikasi ini ditampilkan, komponen TChart (<strong>ctKeyboard</strong>) harus di-set menjadi fokus. Prosedur event OnShow tersebut sebenarnya bisa diganti (dihapus) dengan memberi nilai <strong>ctKeyboard </strong>pada property <em>ActiveControl </em>form <strong>fmKeyboard</strong>. Tetapi jika aplikasi mempunyai komponen TChart yang dapat di-<em>zoo</em>m dan <em>scrolling </em>lebih dari satu, pemberian nilai property <em>ActiveControl</em> tersebut tidak dapat dilakukan</p>
<p style="text-align: justify;">2. <strong>Prosedur untuk mengontrol grafik dengan <em>Keyboard</em></strong></p>
<p style="text-align: justify;">Ketika user menekan suatu tombol <em>Keyboard (</em>atau kombinasi beberapa tombol) dan form tersebut sedang diaktifkan, perintah-perintah dalam event <strong>OnKeyDown </strong>akan dijalankan. Event <strong>OnKeyDown </strong>akan terjadi jika property <em>KeyPreview </em>form bernilai True. Klik ganda sel di sebelah kanan event <strong>OnKeyDown </strong>form <strong>fmKeyboard</strong></p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.FormKeyDown(Sender: TObject; <strong>var </strong>Key: Word;
 Shift: TShiftState);
<strong>var</strong>
  dX, dY, dXRange, dYRange: Double;
<strong>begin</strong>
  dX:= 0;
  dY:= 0;

 <strong> with </strong>Series1.GetHorizAxis <strong>do </strong>dXRange:= Maximum - Minimum;
 <strong> with </strong>Series1.GetVertAxis <strong>do </strong>dYRange:= Maximum - Minimum;

 <strong> if </strong>ssShift <strong>in </strong>Shift <strong>then</strong>
 <strong> begin</strong>
    <strong>Case </strong>key <strong>of</strong>
      VK_LEFT, VK_UP    : ctKeyboard.ZoomPercent( 110 );
      VK_RIGHT, VK_DOWN : ctKeyboard.ZoomPercent( 90 );
 <strong>   end</strong>;
    exit;
 <strong> end</strong>
 <strong> else</strong>
 <strong> Case </strong>key <strong>of</strong>
    VK_LEFT  : dX:= dXRange/100;
    VK_RIGHT : dX:= -dXRange/100;
    VK_UP    : dY:= -dYRange/100;
    VK_DOWN  : dY:= dYRange/100;
    VK_NEXT  : dY:= dYRange/10;
    VK_PRIOR : dY:= -dYRange/10;
    VK_SPACE : <strong>begin </strong>ctKeyboard.UndoZoom; Exit; <strong>end</strong>;
 <strong> end</strong>;

 <strong> if </strong>chInverted.Checked <strong>then</strong>
 <strong> begin</strong>
    dX:= -dX;
    dY:= -dY;
 <strong> end</strong>;

 <strong> with </strong>ctKeyboard <strong>do</strong>
 <strong> begin</strong>
    LeftAxis.Scroll(dY, chLimit.Checked);
    RightAxis.Scroll(dY, chLimit.Checked);
    BottomAxis.Scroll(dX, chLimit.Checked);
    TopAxis.Scroll(dX, chLimit.Checked);
    SetFocus;
 <strong> end</strong>;<strong>
end</strong>;
</pre>
<p style="text-align: justify;">Proses <em>scrolling </em>komponen TChart sebenarnya hanya menggeser range skala sumbu horisontal atau skala sumbu vertikal (nilai property <em>Maximum </em>dikurangi dengan property <em>Minimum</em>). Nilai skala maksimum dan minimum sumbu horisontal grafik diperoleh setelah dihubungkan dengan menggunakan metode <strong>GetHorizAxis </strong>dan untuk sumbu vertikal dengan metode <strong>GetVertAxis</strong>. Range skala sumbu horisontal grafik disimpan dalam variabel <strong>dXRange</strong>, sedang variabel <strong>dYRange </strong>untuk menyimpan range skala sumbu vertikal grafik. Flag <strong>ssShift </strong>merupakan salah satu nilai klas bertipe TShiftState yang digunakan untuk menentukan keadaan tombol <em>Keyboard </em><strong>Alt</strong>, <strong>Ctrl</strong>, <strong>Shift </strong>dan tombol <em>Mouse</em>. Tabel berikut ini menjelaskan masing-masing arti nilai flag :</p>
<table border="0" cellspacing="0" cellpadding="0" width="274">
<tbody>
<tr>
<td style="text-align: center;" width="75" valign="top"><strong>Nilai</strong></td>
<td style="text-align: center;" width="199" valign="top"><strong>Arti </strong></td>
</tr>
<tr>
<td width="75" valign="top">ssShift</td>
<td width="199" valign="top">Tombol   <em>Keyboard Shift</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssAlt</td>
<td width="199" valign="top">Tombol   <em>Keyboard Alt</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssCtrl</td>
<td width="199" valign="top">Tombol   <em>Keyboard Ctrl</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssLeft</td>
<td width="199" valign="top">Tombol   kiri <em>Mouse</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssRight</td>
<td width="199" valign="top">Tombol   kanan <em>Mouse</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssMiddle</td>
<td width="199" valign="top">Tombol   tengah <em>Mouse</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssDouble</td>
<td width="199" valign="top"><em>Mouse</em> diklik ganda</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Pada prosedur event <strong>OnKeyDown </strong>di atas, <strong>jika tombol Shift ditekan bersamaan dengan tombol panah kiri atau atas (VK_LEFT, VK_UP) maka grafik diperbesar 1,1 kalinya (110 %). Dan grafik diperkecil 90 % jika kombinasi tombol Shift dan tombol panah kanan atau bawah (VK_RIGHT, VK_DOWN) ditekan user</strong>. Penggunaan prosedur <strong>Exit </strong>untuk mengeluarkannya dari prosedur yang sekarang sedang dijalankan. <strong>Jika tombol <em>Keyboard </em>Shift tidak ditekan, kemudian user menekan salah satu tombol panah atau Page Up atau Page Down maka proses scrolling grafik akan dilakukan</strong> dengan menggunakan metode <strong>Scroll </strong>pada masing-masing sumbu grafik. Metode Scroll mempunyai <em>sintax</em> :</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>Scroll(<strong>Const </strong>Offset: Double; InsideLimits: Boolean);</pre>
<p style="text-align: justify;">metode ini akan mengeser nilai skala maksimum dan minimum suatu sumbu grafik berdasarkan konstanta <strong>Offset</strong>, dan jika ingin menggeser grafik secara tidak terbatas maka variabel <strong>InsideLimits </strong>harus bernilai False. Pada prosedur event <strong>OnKeyDown </strong>di atas, nilai variabel <strong>InsideLimits </strong>tergantung pada nilai property <em>Checked</em> komponen TCheckBox <strong>chLimit</strong> atau sederhananya di-centang atau tidak pada <em>checkbox</em> <strong>Scrolling Limited</strong>.</p>
<p style="text-align: justify;">Nilai variabel <strong>dX </strong>menentukan <em>scrolling </em>sumbu horisontal sedang variabel <strong>dY </strong>untuk <em>scrolling </em>sumbu vertikal grafik. Kedua variabel tersebut pertama kali diinisialisasi dengan nilai 0 untuk menghapus nilai sebelumnya. Jika user menekan salah satu tombol panah maka grafik akan digeser searah tanda panah tersebut, sebesar nilai range sumbu grafik dibagi dengan 100.</p>
<p style="text-align: justify;">Pada sumbu horisontal, nilai range sumbu horisontal (variabel <strong>dXRange</strong>) adalah 500 data sehingga jika pengguna menekan tombol panah kiri maka grafik akan digeser ke kiri sebesar 5 titik (= 500/100).</p>
<p style="text-align: justify;">Sedang jika pengguna menekan tombol <strong>Page Up</strong> (VK_PRIOR) atau <strong>Page Down</strong> (VK_NEXT), grafik akan digeser secara vertikal sebesar nilai range sumbu vertikal (variabel <strong>dYRange</strong>) dibagi 10. Nilai range sumbu vertikal tergantung pada data random yang di-plot dalam TChartSeries.</p>
<p style="text-align: justify;">Untuk me-reset <em>zoom </em>grafik digunakan tombol <strong>SPACE </strong>(VK_SPACE) dengan memanggil metode <strong>UndoZoom</strong>. Dan arah proses <em>scrolling </em>akan terbalik dengan arah tombol panah jika <em>checkbox </em><strong>Inverted Scrolling</strong><strong> </strong>di-centang, yaitu hanya dengan memberi nilai minus pada variabel <strong>dX </strong>dan <strong>dY</strong>.</p>
<p style="text-align: justify;">3. <strong>Mengembalikan fokus pada grafik setelah <em>mouse</em> dialihkan ke area di luar grafik<br />
</strong></p>
<p style="text-align: justify;"><em>Zoom </em>dan <em>Scrolling </em>dengan <em>Keyboard </em>hanya dapat terjadi jika fokus aplikasi ada pada komponen <em>TChart </em>yang dimaksud. Makanya setelah mengklik dua buah <em>checkbox</em>, <strong>Inverted Scrolling</strong> dan <strong>Scrolling Limited</strong>, fokus perlu dikembalikan ke grafik  (komponen <em>TChart </em><strong>ctKeyboard</strong>). Klik ganda masing masing komponen <em>TCheckBox</em>, sehingga pada jendela <em>Code Editor</em> akan muncul dua buah prosedur bernama <strong>chInvertedClick </strong>dan <strong>chLimitClick</strong>.</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.chInvertedClick(Sender: TObject);
<strong>begin</strong>
  ctKeyboard.SetFocus;
<strong>end</strong>;</pre>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.chLimitClick(Sender: TObject);
<strong>begin</strong>
  ctKeyboard.SetFocus;
  <strong>if </strong>chLimit.Checked <strong>then </strong>
    ShowMessage('Scrolling grafik terbatas hanya pada data yang telah di-plot.'+#13+
                'Lakukan zoom terlebih dahulu sebelum scrolling grafik.');
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tambahan kode program pada prosedur <strong>chlimitsClick</strong>, untuk menampilkan sebuah pesan ketika <em>checkbox </em><strong>Scrolling Limited</strong> di-centang.</p>
<p>Nuwun..</p>
<p style="text-align: justify;">Daftar download untuk artikel ini:<br />
1. <a class="downloadlink" href="http://www.havetogether.com/downloads/TChart+Source+Code+ver.1.2" title=" downloaded 7 times" >TChart Source Code ver.1.2 (7) - 6.44 KB</a><br />
2. <a class="downloadlink" href="http://www.havetogether.com/downloads/Keyboard+Control+Source+Code" title=" downloaded 8 times" >Keyboard Control Source Code (8) - 2.18 KB</a><br />
3. <a class="downloadlink" href="http://www.havetogether.com/downloads/TChart+Application+ver.1.2" title=" downloaded 6 times" >TChart Application ver.1.2 (6) - 297.07 KB</a></p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html" rel="bookmark">Membuat Cross-hair pada Grafik dengan Komponen TChart</a><!-- (15.2389)--></li>
		<li><a href="http://www.havetogether.com/menampilkan-database-dalam-grafik.html" rel="bookmark">Menampilkan Database dalam Grafik</a><!-- (12.9967)--></li>
		<li><a href="http://www.havetogether.com/komponen-delphi-tchart.html" rel="bookmark">TChart Component</a><!-- (7.48912)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Relasi Tabel dalam Pernyataan SQL</title>
		<link>http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html</link>
		<comments>http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html#comments</comments>
		<pubDate>Thu, 14 Jan 2010 08:08:44 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pernyataan SQL]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=442</guid>
		<description><![CDATA[Data dalam suatu tabel dapat dihubungkan dengan tabel lain dengan operator relasi..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (24.2043)--></li>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (20.1406)--></li>
		<li><a href="http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html" rel="bookmark">Operator dan Predikat Pernyataan SQL</a><!-- (19.1542)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Data dalam suatu tabel dapat dihubungkan dengan tabel lain dengan operator relasi.</p>
<p style="text-align: justify;">1. <strong>Equi-Join</strong></p>
<pre><em>Syntax</em>:
<strong>SELECT </strong>column_list
<strong>FROM </strong>table_reference, table_reference [, table_reference...]
<strong>WHERE </strong>predicate [<strong>AND </strong>predicate...]</pre>
<p style="text-align: justify;">Operator Equi-Join digunakan untuk menggabungkan dua tabel, suatu tabel sumber dan anggota, yang mempunyai nilai dari satu kolom atau lebih. Untuk <em>record </em>tabel sumber yang sesuai dengan tabel anggota, akan dimasukkan dalam hasil. Jika tidak ada kecocokan, data tersebut tidak dimunculkan dalam hasil. Contoh pernyataan berikut ini menggabungkan tabel Customer dan Orders berdasarkan nilai-nilai dalam kolom CustNo, dimana keduanya mempunyai kolom tersebut.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Customer C, Orders O
WHERE (C.CustNo = O.CustNo)</pre>
<p style="text-align: justify;">Tabel juga dapat digabungkan dengan menggunakan hasil penggabungan beberapa nilai kolom. Di sini, kolom ID1 dan ID2 dari tabel Joining digabungkan dan dibandingkan dengan nilai-nilai kolom tunggal ID tabel Source.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Source S, Joining J
WHERE (S.ID = J.ID1 || J.ID2)</pre>
<p>2. <strong>INNER JOIN</strong></p>
<pre><em>Syntax</em>:
<strong>SELECT </strong>column_list
<strong>FROM </strong>table_reference
[<strong>INNER</strong>] <strong>JOIN </strong>table_reference <strong>ON </strong>predicate
[[<strong>INNER</strong>] <strong>JOIN </strong>table_reference <strong>ON </strong>predicate...]</pre>
<p style="text-align: justify;">Fungsinya sama dengan operator Equi-Join hanya saja kolom untuk setiap tabel dibandingkan dalam klausa ON untuk nilai-nilai yang sama. Contoh pernyataan pertama dan kedua dalam operator Equi-Join, jika dideklarasikan dengan operator INNER JOIN menjadi :</p>
<pre style="padding-left: 30px;">SELECT *
FROM Customer C
INNER JOIN Orders O ON (C.CustNo = O.CustNo)</pre>
<pre style="padding-left: 30px;">SELECT *
FROM Source S
INNER JOIN Joining J ON (S.ID = J.ID1 || J.ID2)</pre>
<p>Untuk database Ms Access, pernyataan INNER JOIN harus menyertakan tanda kurung jika menggabungkan lebih dari dua tabel, seperti berikut ini</p>
<pre style="padding-left: 30px;">SELECT *
FROM (Customer C
INNER JOIN Orders O ON (C.CustNo = O.CustNo))
INNER JOIN AddCusPrice A ON (C.CustNo = A.CustNo)</pre>
<p>3.<strong> OUTER JOIN</strong></p>
<pre><em>Syntax</em>:
<strong>SELECT </strong>column_list
<strong>FROM </strong>table_reference
<strong>LEFT </strong>| <strong>RIGHT </strong>| <strong>FULL </strong>[<strong>OUTER</strong>] <strong>JOIN </strong>table_reference <strong>ON </strong>predicate
[<strong>LEFT </strong>| <strong>RIGHT </strong>| <strong>FULL </strong>[<strong>OUTER</strong>] <strong>JOIN </strong>table_reference <strong>ON </strong>predicate...]</pre>
<p style="text-align: justify;">Fungsinya sama dengan operator Equi-Join dan INNER JOIN yaitu menggabungkan dua macam tabel. Perbedaannya, pada operator OUTER JOIN, <em>record </em>dari tabel sumber yang tidak cocok dengan tabel anggota akan dimunculkan dalam hasil. Kolom tabel anggota untuk <em>record </em>dalam tabel sumber yang tidak cocok mempunyai nilai kosong (bukan nol). Pernyataan berikut ini menggabungkan tabel Customer dan Orders berdasarkan nilai-nilai dalam kolom CustNo. Untuk <em>record </em>tabel Customer yang tidak mempunyai kecocokan nilai di antara Customer.CustNo dan Orders.CustNo, kolom dari tabel Orders berisi nilai kosong (bukan nol).</p>
<pre style="padding-left: 30px;">SELECT *
FROM Customer C
LEFT OUTER JOIN Orders O ON (C.CustNo = O.CustNo)</pre>
<p style="text-align: justify;">Peubah LEFT menyebabkan semua <em>record </em>tabel pada sisi kiri operator OUTER JOIN dimasukkan dalam hasil, dengan atau tanpa kecocokan dalam tabel sebelah kanan. Jika tidak ada kecocokan <em>record </em>dari tabel sebelah kanan, maka kolom tersebut berisi nilai kosong. Gunakan peubah RIGHT jika menginginkan kondisi sebaliknya. Dan peubah FULL menyebabkan semua <em>record </em>dari seluruh tabel yang ditetapkan dalam klausa FROM dimasukkan dalam hasil, dengan atau tanpa kecocokan nilai. Tabel juga dapat digabung dengan mengunakan ekpresi yang menghasilkan suatu nilai tunggal sebagai predikat perbandingan. Di sini, kolom ID1 dan ID2 dari tabel Joining dibandingan secara terpisah dengan dua nilai yang dihasilkan oleh fungsi SUBSTRING dengan menggunakan kolom tunggal ID tabel Source.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Source S
RIGHT OUTER JOIN Joining J ON (SUBSTRING(S.ID FROM 1 FOR 2) = J.ID1)
                          AND (SUBSTRING(S.ID FROM 3 FOR 1) = J.ID2)</pre>
<p>4. <strong>Cartesian</strong></p>
<pre><em>Syntax</em>:
<strong>SELECT </strong>*
<strong>FROM </strong>table_reference, table_reference [,table_reference...]</pre>
<p style="text-align: justify;">Menggabungkan kolom dua buah tabel dalam satu hasil, tetapi tidak ada korelasi di antara <em>record </em>tabel. Operator Cartesian Join mencocokkan setiap <em>record </em>tabel sumber dengan setiap <em>record </em>tabel anggota. Jika tabel sumber mempunyai 10 <em>record </em>dan tabel anggota juga mempunyai 10 <em>record </em>maka hasilnya berisi 100 <em>record</em>.</p>
<pre style="padding-left: 30px;">SELECT *
FROM "Employee.dbf", "Items.db"</pre>
<p>5. <strong>UNION</strong></p>
<pre><em>Syntax</em>:
<strong>SELECT </strong>col_1 [, col_2, ... col_n]
<strong>FROM </strong>table_reference
<strong>UNION </strong>[<strong>ALL</strong>]
<strong>SELECT </strong>col_1 [, col_2, ... col_n]
<strong>FROM </strong>table_reference</pre>
<p style="text-align: justify;">Menyusun <em>record </em>satu tabel pada akhir tabel yang lain. Pernyataan SELECT untuk tabel sumber dan anggota harus berisi kolom dengan jumlah yang sama.</p>
<pre style="padding-left: 30px;">SELECT
  CustNo,
  Company
FROM Customers
UNION
SELECT
  CustNo,
  Company
FROM Old_Customers</pre>
<p style="text-align: justify;">Jika ada perbedaan tipe data kolom tertentu di antara dua tabel, suatu pesan kesalahan akan terjadi jika kolom yang sama dari tabel kedua (atau selanjutnya) kehilangan data. Sebagai contoh, kolom tabel pertama bertipe Date dan kolom tabel kedua bertipe TimeStamp, sebagian nilai bertipe TimeStamp akan hilang jika memasukkan kolom bertipe Date. Pesan kesalahan akan dibangkitkan untuk situasi ini. Gunakan fungsi CAST untuk mengubah tipe kolom tersebut.</p>
<pre style="padding-left: 30px;">SELECT
  S.ID,
  CAST(S.Date_Field AS TIMESTAMP)
FROM Source S
UNION ALL
SELECT
  J.ID,
  J.Timestamp_Field
FROM Joiner J</pre>
<p style="text-align: justify;">Secara default, operator UNION akan mengumpulkan <em>record </em>non-distinct dalam <em>record </em>tunggal. Gunakan ALL untuk mempertahankan <em>record </em>non-distinct. Untuk menggabungkan dua buah tabel dimana satu tabel tidak mempunyai suatu kolom tabel lain, gunakan suatu ekpresi atau literal yang sesuai. Sebagai contoh, tabel Joining tidak mempunyai kolom yang sesuai dengan kolom Name dari tabel Source, buat ekpresi untuk menampung nilai kolom bayangan Joining.Name. Kolom Source.Name diasumsikan bertipe CHAR(10).</p>
<pre style="padding-left: 30px;">SELECT
  S.ID,
  S.Name
FROM Source S
UNION ALL
SELECT
  J.ID,
  CAST("" AS CHAR(10))
FROM Joiner J</pre>
<p>6. <strong>Heterogeneous</strong></p>
<pre><em>Syntax</em>:
<strong>SELECT </strong>column_list
<strong>FROM </strong>":database_reference:table_reference", ":database_reference:table_reference"
     [,":database_reference:table_reference"...]
<strong>WHERE </strong>predicate [<strong>AND </strong>predicate...]</pre>
<p style="text-align: justify;">Menggabungkan dua buah tabel dari database yang berbeda. Tabel yang digabung dapat bertipe dBASE ke Paradox atau Paradox ke InterBase, selama dapat diakses oleh BDE (local, ODBC, or SQL Links).</p>
<pre style="padding-left: 30px;">SELECT *
FROM ":DBDEMOS:Customer.db" C, ":BCDEMOS:Orders.db" O
WHERE (C.CustNo = O.CustNo)</pre>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (24.2043)--></li>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (20.1406)--></li>
		<li><a href="http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html" rel="bookmark">Operator dan Predikat Pernyataan SQL</a><!-- (19.1542)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operator dan Predikat Pernyataan SQL</title>
		<link>http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html</link>
		<comments>http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html#comments</comments>
		<pubDate>Mon, 11 Jan 2010 08:05:14 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pernyataan SQL]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=440</guid>
		<description><![CDATA[Pernyataan SQL, terutama Data Manipulation Language (DML), kadang-kadang mengunakan beberapa operator dan predikat untuk mendeklarasikan pernyataannya..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (18.1445)--></li>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (16.773)--></li>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (16.1014)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pernyataan SQL, terutama Data Manipulation Language (DML), kadang-kadang mengunakan beberapa operator dan predikat untuk mendeklarasikan pernyataannya.</p>
<p>1. <strong>Aritmatika</strong></p>
<pre><em>Syntax</em>:
numeric_value1 + numeric_value2
numeric_value1 - numeric_value2
numeric_value1 * numeric_value2
numeric_value1 / numeric_value2</pre>
<p style="text-align: justify;">Digunakan untuk melakukan perhitungan aritmatika dalam query SELECT. Secara normal perhitungan aritmatika dilakukan mulai dari operasi perkalian, pembagian, penjumlahan, dan kemudian pengurangan. Gunakan tanda kurung untuk melalukan perhitungan di luar keadaan normal. Pernyataan berikut akan melakukan operasi penjumlahan sebelum melakukan operasi perkalian.</p>
<pre style="padding-left: 30px;">SELECT
  (N.Numbers * (N.Multiple + 1)) AS Result
FROM Numbertable N</pre>
<p style="text-align: justify;">Operator aritmatika hanya beroperasi pada data bertipe numerik, gunakan fungsi CAST untuk mengkonversi tipe data menjadi data bertipe numerik.</p>
<p>2. <strong>Logika</strong></p>
<pre><em>Syntax</em>:
[<strong>NOT</strong>] predicate <strong>OR </strong>[<strong>NOT</strong>] predicate
[<strong>NOT</strong>] predicate <strong>AND </strong>[<strong>NOT</strong>] predicate</pre>
<p style="text-align: justify;">Operator OR dan NOT digunakan untuk menghubungkan dua predikat dalam klausa tunggal WHERE. Jika menggunakan operator OR, akan menghasilkan nilai True jika salah satu atau kedua prdikat bernilai True. Jika operator AND digunakan, untuk menghasilkan nilai True, kedua perdikat harus bernilai True. Pernyataan berikut akan menampilkan data (bernilai True) jika salah satu predikat dalam klausa WHERE bernilai True.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Reservations
WHERE ((ReserveDate &lt; "1/31/1998") OR (Paid = TRUE))</pre>
<p style="text-align: justify;">Dan operator NOT berfungsi untuk menegasi nilai predikat. Pernyataan berikut hanya menampilkan baris dimana kolom Paid yang bernilai False.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Reservations
WHERE (NOT (Paid = "TRUE"))</pre>
<p style="text-align: justify;">3. <strong>Predikat</strong><br />
3.1. <strong> Comparison</strong></p>
<pre><em>Syntax</em>:
value1 &lt; value2    kurang dari
value1 &gt; value2    lebih dari
value1 = value2    sama dengan
value1 &lt;&gt; value2   tidak sama dengan
value1 != value2   tidak sama dengan (alternatif)
value1 &gt;= value2   lebih besar dari atau sama dengan
value1 &lt;= value2   kurang dari atau sama dengan</pre>
<p style="text-align: justify;">Membandingkan dua nilai (nilai kolom, literal, atau hasil perhitungan) yang sejenis. Hasil perbandingan dapat dimodifikasi dengan menggunakan operator logika, seperti NOT.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Orders
WHERE NOT (ItemsTotal &gt;= 1000)</pre>
<p style="text-align: justify;">Perbandingan predikat hanya dapat digunakan dalam klausa WHERE atau HAVING, atau dalam klausa ON pada penggabungan tabel dan tidak dapat digunakan dalam pernyataan SELECT.</p>
<p>3.2. <strong>BETWEEN</strong></p>
<pre><em>Syntax</em>:
value1 [<strong>NOT</strong>] <strong>BETWEEN </strong>value2 <strong>AND </strong>value3</pre>
<p style="text-align: justify;">Membandingkan suatu nilai dalam suatu range nilai. Jika nilai tersebut lebih besar atau sama dengan nilai terendah range dan kurang dari atau sama dengan nilai terbesar range maka BETWEEN bernilai True. Sebaliknya jika nilai tersebut lebih rendah dari nilai terendah range atau lebih besar dari nilai terbesar range maka BETWEEN bernilai False. BETWEEN dapat digunakan untuk semua data bertipe non-Blob, tetapi semua nilai yang dibandingkan harus bertipe sama atau sesuai. Untuk mengkonversi data gunakan fungsi CAST. Nilai yang digunakan dalam perbandingan BETWEEN dapat berupa nilai kolom, literal, atau nilai hasil perhitungan.</p>
<pre style="padding-left: 30px;">SELECT
  Saledate
FROM Orders
WHERE (Saledate BETWEEN "1/1/1988" AND "12/31/1988")</pre>
<p>3.3. <strong>EXIST</strong></p>
<pre><em>Syntax</em>:
<strong>EXISTS </strong>subquery</pre>
<p style="text-align: justify;">Untuk menyaring tabel yang didasarkan pada keberadaan nilai kolom suatu tabel dalam subquery. Subquery dinyatakan dengan menggunakan klausa WHERE. EXIST bernilai True jika subquery telah menghasilkan setidaknya satu <em>record</em> data, dan bernilai False jika tidak ada <em>record </em>yang didapatkan. Subquery tersebut dapat disaring lagi dengan menggunakan kondisi-kondisi lain. Gunakan operator NOT untuk mengkonversi predikat pembanding EXIST. Sebagai contoh, pernyataan berikut menghasilkan <em>record </em>yang menyinggung semua pelanggan yang telah membukukan total pesanan melebihi $ 1,000.</p>
<pre style="padding-left: 30px;">SELECT
  C.Company,
  C.CustNo
FROM Customer C
WHERE EXISTS(SELECT O.CustNo
             FROM Orders O
             WHERE (O.CustNo = C.CustNo) AND (O.ItemsTotal &gt; 1000))</pre>
<p>3.4. <strong>IN</strong></p>
<pre><em>Syntax</em>:
value [<strong>NOT</strong>] <strong>IN </strong>(value_set)</pre>
<p style="text-align: justify;">Untuk menyaring tabel yang didasarkan pada keberadaan nilai kolom suatu tabel dalam suatu set nilai pembanding tertentu. Nilai kolom atau nilai literal atau nilai hasil perhitungan (termasuk kombinasinya) dapat digunakan sebagai nilai pembanding predikat IN. Nilai pembanding dapat berupa daftar pernyataan statis yang dipisahkan tanda koma.</p>
<pre style="padding-left: 30px;">SELECT
  C.Company,
  C.State
FROM Customer C
WHERE (C.State IN ("CA", "HI"))</pre>
<p style="text-align: justify;">Atau pernyataan dinamis yang dihasilkan melalui suatu subquery. Subquery dapat menghasilkan banyak baris, tetapi harus hanya menghasilkan kolom tunggal sebagai nilai pembanding.</p>
<pre style="padding-left: 30px;">SELECT
  C.Company,
  C.State
FROM Customer C
WHERE (C.State IN (SELECT R.State
                   FROM Regions R
                   WHERE (R.Region = "Pacific")))</pre>
<p style="text-align: justify;">Predikat IN dapat digunakan untuk semua data bertipe non-Blob, tetapi semua nilai yang dibandingkan harus bertipe sama atau sesuai. Untuk mengkonversi data gunakan fungsi CAST. Predikat IN berguna jika ingin menyaring data yang bernilai tidak ‘berdekatan’ (data noncontiguous). Dan gunakan predikat BETWEEN jika ingin menampilkan baris data bernilai mendekati range tertentu.</p>
<p>3.5. <strong>LIKE</strong></p>
<pre><em>Syntax</em>:
value [<strong>NOT</strong>] <strong>LIKE </strong>[substitution_char] comparison_value [substitution_char] [<strong>ESCAPE </strong>escape_char]</pre>
<p style="text-align: justify;">Untuk menyaring tabel berdasarkan persamaan nilai kolom terhadap nilai pembanding. Karakter pengganti <em>wildcard </em>(“%”) dapat digunakan dalam perbandingan untuk mewakili jumlah karakter yang tidak diketahui. Predikat perbandingan LIKE bernilai True jika bagian nilai kolom cocok dengan posisi karakter wildcard. Posisi karakter <em>wildcard</em> bisa pada permulaan, pertengahan, atau akhir nilai perbandingan (atau berbagai kombinasi posisi tersebut). Sebagai contoh, pernyataan berikut akan menampilkan <em>record</em> dimana nilai kolom diawali huruf “A” tanpa memperhitungkan banyaknya karakter sesudah huruf tersebut.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Customer
WHERE (Company LIKE "A%")</pre>
<p style="text-align: justify;">Karakter pengganti garis bawah (“_”) dapat digunakan dalam perbandingan untuk mewakili suatu karakter tunggal. Sebagai contoh, pernyataan berikut akan menampilkan <em>record </em>dimana nilai kolom diawali huruf  “b” dan diakhiri huruf “n”, dengan sebuah karakter diantara nilai tersebut. nilai yang cocok misalnya “bin” atau “ban” tetapi bukan “barn”.</p>
<pre style="padding-left: 30px;">SELECT
  Words
FROM Dictionary
WHERE (Words LIKE "b_n")</pre>
<p style="text-align: justify;">Gunakan operator NOT untuk menegasi hasil perbandingan. Dan gunakan kata kunci ESCAPE untuk memunculkan karakter <em>wildcard</em> “%” atau “_” sebagai data dalam kolom. Karakter yang mengikuti kata kunci ESCAPE diperlakukan sebagai suatu karakter lepas untuk memunculkan suatu karakter <em>wildcard</em> sebagai data. Contoh berikut menunjukkan karakter “^” sebagai karakter lepas dan karakter “%” diperlakukan sebagai data dalam kolom PercentValue. Jadi penyaringan data berdasarkan string “10%”.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Sales
WHERE (PercentValue LIKE "%10^%%" ESCAPE "^")</pre>
<p style="text-align: justify;"><em>Case-sensitive</em> (huruf besar/kecil mempunyai nilai berbeda) berlaku dalam predikat perbandingan ini. Dan hanya data bertipe Char yang dapat dinyatakan dalam predikat LIKE.</p>
<p>3.6. <strong>IS NUL</strong></p>
<pre><em>Syntax</em>:
column_reference <strong>IS </strong>[<strong>NOT</strong>] <strong>NULL</strong></pre>
<p style="text-align: justify;">Predikat perbandingan IS NULL digunakan untuk menyaring tabel berdasarkan kolom tertentu yang berisi suatu nilai kosong (bukan nol). Untuk kolom bertipe numeric, nilai 0 (nol) tidak sama dengan nilai kosong. Gunakan operator NOT untuk menegasi hasil predikat perbandingan ini.</p>
<pre style="padding-left: 30px;">SELECT *
FROM Customer
WHERE (InvoiceDate IS NULL)</pre>
<p>3.7. <strong>SOME/ANY/ALL</strong></p>
<pre><em>Syntax</em>:
column_reference comparison_predicate <strong>SOME </strong>| <strong>ANY </strong>| <strong>ALL </strong>(subquery)</pre>
<p style="text-align: justify;">Predikat perbandingan SOME, ANY, dan ALL digunakan untuk menyaring suatu tabel dengan membandingkan suatu nilai kolom terhadap beberapa nilai perbandingan. Predikat perbandingan ANY dan SOME bernilai True jika predikat perbandingan yang mengiringinya bernilai True untuk beberapa nilai subquery. Sebagai contoh, untuk menampilkan beberapa <em>record </em>dalam tabel Holding, nilai dalam kolom Pur_Price hanya membutuhkan nilai yang lebih besar dari beberapa nilai yang dihasilkan dalam subquery kolom Price tabel Old_Sales.</p>
<pre style="padding-left: 30px;">SELECT *
FROM "Holdings.db" H
WHERE (H."Pur_Price" &gt; ANY (SELECT O."Price"
                            FROM "Old_Sales.db"))</pre>
<p style="text-align: justify;">Predikat perbandingan ALL bernilai True jika predikat perbandingan yang mengiringinya bernilai True untuk semua nilai subquery. Sebagai contoh, untuk menampilkan beberapa <em>record </em>dalam tabel Holding, nilai dalam kolom Pur_Price hanya membutuhkan nilai yang lebih besar dari setiap nilai yang dihasilkan dalam subquery kolom Price tabel Old_Sales.</p>
<pre style="padding-left: 30px;">SELECT *
FROM "Holdings.db" H
WHERE (H."Pur_Price" &gt; ALL (SELECT O."Price"
                            FROM "Old_Sales.db"))</pre>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (18.1445)--></li>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (16.773)--></li>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (16.1014)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fungsi-fungsi dalam Pernyataan SQL</title>
		<link>http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html</link>
		<comments>http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html#comments</comments>
		<pubDate>Fri, 08 Jan 2010 11:36:22 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pernyataan SQL]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=438</guid>
		<description><![CDATA[Setiap bahasa pemrograman biasanya memiliki fungsi-fungsi yang memudahkan pengguna-nya, tidak terkecuali SQL. Beberapa fungsi yang tertulis dalam artikel ini merupakan fungsi standar dari bahasa pemrograman SQL..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (21.6729)--></li>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (20.4872)--></li>
		<li><a href="http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html" rel="bookmark">Operator dan Predikat Pernyataan SQL</a><!-- (19.7364)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Setiap bahasa pemrograman biasanya memiliki fungsi-fungsi yang memudahkan pengguna-nya, tidak terkecuali SQL. Beberapa fungsi yang tertulis dalam artikel ini merupakan fungsi standar dari bahasa pemrograman SQL.</p>
<p>1. <strong>Concatenation</strong></p>
<pre><em>Syntax</em>:
value1 || value2</pre>
<p style="text-align: justify;">Digunakan untuk menggabungkan dua nilai karakter (nilai kolom, literal, parameter, atau nilai hasil perhitungan) menjadi data bertipe string. Pernyataan berikut ini mengkombinasikan nilai-nilai kolom dengan karakter literal.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  LastName || ", " || FirstName
FROM Names</pre>
<p style="text-align: justify;">Fungsi ini tidak dapat digunakan dengan kolom bertipe Memo atau Blob.</p>
<p style="text-align: justify;">2. <strong>LOWER</strong></p>
<pre><em>Syntax</em>:
<strong>LOWER</strong>(column_reference)</pre>
<p style="text-align: justify;">Mengkonversi semua nilai karakter (nilai kolom, literal, parameter, atau nilai hasil perhitungan) menjadi huruf kecil.  Database seperti SQL Server memakai pernyataan LOWERCASE. Pernyataan SELECT berikut mengubah nilai-nilai dalam kolom Name menjadi huruf kecil.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  LOWER(Name)
FROM Country</pre>
<p style="text-align: justify;">Perubahan nilai akibat fungsi ini tidak akan disimpan jika diberlakukan dalam pernyataan SELECT. Jika dinyatakan sebagai nilai kondisi (update_atom) dalam pernyataan UPDATE, perubahan nilai tersebut akan disimpan. Fungsi LOWER hanya dapat digunakan dengan kolom bertipe karakter atau literal dan tidak dapat digunakan untuk kolom bertipe Memo dan Blob.</p>
<p style="text-align: justify;">3. <strong>UPPER</strong></p>
<pre><em>Syntax</em>:
<strong>UPPER</strong>(column_reference)</pre>
<p style="text-align: justify;">Merupakan kebalikan dari fungsi LOWER, yaitu mengkonversi semua nilai karakter (nilai kolom, literal, parameter, atau nilai hasil perhitungan) menjadi huruf kapital. Sebagai contoh, pernyataan berikut akan menyaring data berdasarkan nilai kolom Name yang dikonversi ke dalam huruf kapital yang diawali karakter PE (nilai lateral).</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  Name,
  Capital,
  Continent
FROM Country
WHERE UPPER(Name) LIKE UPPER("Pe%")</pre>
<p style="text-align: justify;">Sama seperti fungsi LOWER, perubahan nilai akibat fungsi ini tidak akan disimpan jika diakukan dalam pernyataan SELECT. Jika dinyatakan sebagai nilai kondisi dalam pernyataan UPDATE, perubahan nilai tersebut akan disimpan.</p>
<p style="text-align: justify;">4. <strong>SUBSTRING</strong></p>
<pre><em>Syntax</em>:
<strong>SUBSTRING</strong>(column_reference <strong>FROM </strong>start_index [<strong>FOR </strong>length]</pre>
<p style="text-align: justify;">Mengutip substring dari nilai karakter (nilai kolom, literal, parameter, atau nilai hasil perhitungan) yang dinyatakan dalam kolom yang dimaksud (<strong>colom_reference</strong> dalam <em>syntax</em> di atas). Klausa FROM adalah posisi karakter untuk memulai pengutipan substring. Karakter pertama nilai sumber diberi indeks 1 (satu). Dan kata kunci FOR menyatakan banyaknya substring yang ingin dikutip. Jika kata kunci FOR tidak dideklarasikan maka substring dimulai dari posisi yang dinyatakan oleh kata kunci FROM sampai akhir string. Contoh berikut mengutip tiga huruf  dimulai dari huruf kedua, hasilnya adalah “BCD” jika nilai asalnya adalah “ABCDE” dan dimasukkan dalam kolom lietral bernama Sub</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  SUBSTRING("ABCDE" FROM 2 FOR 3) AS Sub
FROM Country</pre>
<p style="text-align: justify;">Dan pernyataan SELECT berikut hanya akan menampilkan huruf kedua dan seterusnya dari kolom Name, artinya nilai “Belgium” dalam kolom tersebut akan ditampilkan sebagai “elgium”.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  SUBSTRING(Name FROM 2)
FROM Country</pre>
<p style="text-align: justify;">Perubahan nilai akibat fungsi ini tidak akan disimpan jika diberlakukan dalam pernyataan SELECT. Jika dinyatakan sebagai nilai kondisi (update_atom) dalam pernyataan UPDATE, perubahan nilai tersebut akan disimpan. Fungsi SUBSTRING hanya dapat digunakan dengan kolom bertipe karakter atau literal dan tidak dapat digunakan untuk kolom bertipe Memo dan Blob.</p>
<p style="text-align: justify;">5. <strong>TRIM</strong></p>
<pre><em>Syntax</em> :
<strong>TRIM</strong>([<strong>LEADING</strong>|<strong>TRAILING</strong>|<strong>BOTH</strong>] [trimmed_char] <strong>FROM </strong>column_reference)</pre>
<p style="text-align: justify;">Untuk menghapus karakter pertama, terakhir atau kedua-duanya (pertama dan terkahir) dari nilai karakter (nilai kolom, literal, parameter, atau nilai hasil perhitungan). Berkut ini deskripsi parameter yang ada dalam fungsi TRIM :</p>
<table style="text-align: justify;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center;" width="118" valign="top"><strong>Parameter</strong></td>
<td style="text-align: center;" width="315" valign="top"><strong>Deskripsi</strong></td>
</tr>
<tr>
<td width="118" valign="top">LEADING</td>
<td width="315" valign="top">Menghapus   karakter terakhir sisi kiri <em>string</em></td>
</tr>
<tr>
<td width="118" valign="top">TRAILING</td>
<td width="315" valign="top">Menghapus   karakter terakhir sisi kanan <em>string</em></td>
</tr>
<tr>
<td width="118" valign="top">BOTH</td>
<td width="315" valign="top">Menghapus   karakter terakhir kedua sisi <em>string</em></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><em>Case-sensitivity</em> (huruf besar/kecil mempunyai nilai berbeda) berlaku dalam pernyataan parameter tersebut. FROM merupakan nilai karakter sumber yang akan dihapus. Tabel berikut menunjukkan hasil dari variasi deklarasi fungsi TRIM.</p>
<table style="text-align: justify; height: 82px;" border="0" cellspacing="0" cellpadding="0" width="281">
<tbody>
<tr>
<td style="text-align: center;" width="304" valign="top"><strong>TRIM syntax</strong></td>
<td style="text-align: center;" width="68" valign="top"><strong>Hasil</strong></td>
</tr>
<tr>
<td width="304" valign="top">TRIM(LEADING   &#8220;_&#8221; FROM &#8220;_ABC_&#8221;)</td>
<td width="68" valign="top">&#8220;ABC_&#8221;</td>
</tr>
<tr>
<td width="304" valign="top">TRIM(TRAILING   &#8220;_&#8221; FROM &#8220;_ABC_&#8221;)</td>
<td width="68" valign="top">&#8220;_ABC&#8221;</td>
</tr>
<tr>
<td width="304" valign="top">TRIM(BOTH   &#8220;_&#8221; FROM &#8220;_ABC_&#8221;)</td>
<td width="68" valign="top">&#8220;ABC&#8221;</td>
</tr>
<tr>
<td width="304" valign="top">TRIM(BOTH   &#8220;A&#8221; FROM &#8220;ABC&#8221;)</td>
<td width="68" valign="top">&#8220;BC&#8221;</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Perubahan nilai akibat fungsi ini tidak akan disimpan jika diberlakukan dalam pernyataan SELECT. Jika dinyatakan sebagai nilai kondisi (update_atom) dalam pernyataan UPDATE, perubahan nilai tersebut akan disimpan. Fungsi TRIM hanya dapat digunakan dengan kolom bertipe karakter atau literal dan tidak dapat digunakan untuk kolom bertipe Memo dan Blob.</p>
<p style="text-align: justify;">6. <strong>AVG</strong></p>
<pre><em>Syntax</em>:
<strong>AVG</strong>([<strong>ALL</strong>] column_reference | <strong>DISTINCT </strong>column_reference)</pre>
<p style="text-align: justify;">Menghitung rerata dari nilai numerik (nilai kolom, literal, parameter, atau nilai hasil perhitungan). Nilai 0 (nol) dalam suatu kolom tetap diperhitungkan, sedangkan jika tidak ada nilai (kosong bukan nol) maka fungsi AVG akan mengabaikannya. Kombinasi nilai kolom dan suatu konstanta dapat digunakan dalam fungsi AVG.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  AVG(ItemsTotal),
  AVG(ItemsTotal * 0.0825) AS AverageTax
FROM Orders</pre>
<p style="text-align: justify;">ALL untuk mendapatkan nilai rerata semua <em>record</em> sedang DISTINCT akan mengabaikan nilai yang sama suatu kolom pada saat perhitungan nilai rerata. Jika kata kunci DISTINCT tidak dinyatakan, ALL adalah kata kunci default. Jika memakai klausa GROUP BY, fungsi AVG akan menghitung satu nilai untuk tiap kelompok. Nilai tersebut merupakan pengumpulan kolom untuk semua baris pada tiap kelompok. Pernyataan berikut mengelompokkan nilai rerata kolom ItemsTotal dari tabel Orders, menghasilkan subtotal untuk tiap perusahaan dalam tabel Company.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  C."Company",
  AVG(O."ItemsTotal") AS Average
FROM "Customer.db" C, "Orders.db" O
WHERE (C."CustNo" = O."CustNo")
GROUP BY C."Company"
ORDER BY C."Company"</pre>
<p style="text-align: justify;">Fungsi AVG hanya beroperasi pad nilai numerik. Untuk nilai non-numerik, sebelum menggunakan fungsi ini, gunakan fungsi CAST untuk mengkonversi kolom menjadi bertipe numerik. Dan fungsi ini tidak dapat digunakan dengan kolom betipe Memo dan Blob.</p>
<p style="text-align: justify;">7. <strong>COUNT</strong></p>
<pre><em>Syntax</em>:
<strong>COUNT</strong>(* | [<strong>ALL</strong>] column_reference | <strong>DISTINCT </strong>column_reference)</pre>
<p style="text-align: justify;">Untuk menghitung banyaknya <em>record</em> yang ditampilkan oleh pernyataan SELECT (tunggal atau multi query). Jika menambahkan klausa WHERE, fungsi COUNT menampilkan banyaknya <em>record</em> yang tersaring.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT COUNT(*)
FROM "Clients.dbf"
WHERE State = "CA"</pre>
<p style="text-align: justify;">8. <strong>MAX</strong></p>
<pre><em>Syntax</em>:
<strong>MAX</strong>([<strong>ALL</strong>] column_reference | <strong>DISTINCT </strong>column_reference)</pre>
<p style="text-align: justify;">Menghitung nilai terbesar dari nilai (nilai kolom, literal, parameter, atau nilai hasil perhitungan) yang menggunakan dataset. Dataset dapat berupa tabel, suatu dataset yang disaring, atau kelompok logika yang dihasilkan oleh klausa GROUP BY. Fungsi MAX memberikan nilai kosong untuk kolom yang bernilai kosong (bukan nol). ALL untuk mendapatkan nilai tertinggi semua baris sedang DISTINCT akan mengabaikan nilai yang sama suatu kolom pada saat menghitung nilai tertinggi. Jika kata kunci DISTINCT tidak dinyatakan, ALL adalah kata kunci default. Kombinasi nilai kolom dan suatu konstanta dapat digunakan dalam fungsi MAX.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  MAX(ItemsTotal),
  MAX(ItemsTotal * 0.0825) AS HighestTax
FROM Orders</pre>
<p style="text-align: justify;">Jika menggunakan kolom bertipe numerik, nilai yang dihasilkan bertipe sama dengan tipe kolom tersebut (seperti Integer atau Float) . Fungsi MAX tidak dapat digunakan dengan kolom bertipe Memo atau Blob.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  C."Company",
  MAX(O."ItemsTotal") AS Biggest
FROM "Customer.db" C, "Orders.db" O
WHERE (C."CustNo" = O."CustNo")
GROUP BY C."Company"
ORDER BY C."Company"</pre>
<p style="text-align: justify;">9. <strong>MIN</strong></p>
<pre><em>Syntax</em>:<strong>
MIN</strong>([<strong>ALL</strong>] column_reference | <strong>DISTINCT </strong>column_reference)</pre>
<p style="text-align: justify;">Fungsi MIN merupakan kebalikan dari fungsi MAX yaitu menghitung nilai terkecil dari nilai (nilai kolom, literal, parameter, atau nilai hasil perhitungan) yang menggunakan dataset. Deskripsi lainnya hampir sama dengan fungsi MAX.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  MIN(ItemsTotal)
FROM Orders</pre>
<p style="text-align: justify;">10. <strong>SUM</strong></p>
<pre><em>Syntax</em>:
<strong>SUM</strong>([<strong>ALL</strong>] column_reference | <strong>DISTINCT </strong>column_reference)</pre>
<p style="text-align: justify;">Menghitung total dari nilai (nilai kolom, literal, parameter, atau nilai hasil perhitungan) yang menggunakan dataset. Deskripsi lainnya hampir sama dengan fungsi MAX. Contoh penulisan syntax-nya adalah :</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  SUM(Salary + (Sarary * 0.1))
FROM "Employee.db"</pre>
<p style="text-align: justify;">11. <strong>CAST</strong></p>
<pre><em>Syntax</em>:
<strong>CAST</strong>(column_reference <strong>AS </strong>data_type)</pre>
<p style="text-align: justify;">Mengkonversi kolom tertentu dalam tipe data tertentu. CAST dapat diterapkan juga untuk nilai literal dan nilai hasil perhitungan. Fungsi ini dapat digunakan dalam daftar kolom pernyataan SELECT, predikat untuk klausa WHERE dan modifikasi nilai dalam pernyataan UPDATE. Parameter <strong>data_tipe</strong> yang dapat digunakan adalah Char, Integer, Numeric dan seterusnya, sedangkan yang tidak dapat dipakai adalah Blob, Memo dan Byte. Pernyataan berikut mengkonversi nilai kolom bertipe TimeStamp ke tipe Date</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  CAST(SaleDate AS DATE)
FROM ORDERS</pre>
<p style="text-align: justify;">Kombinasi fungsi CAST dengan fungsi yang lain dapat digunakan selama tipe datanya sesuai, seperti contoh berikut.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  SaleDate,
  SUBSTRING(CAST(CAST(SaleDate AS DATE) AS CHAR(10)) FROM 1 FOR 1)
FROM Orders</pre>
<p style="text-align: justify;">Perubahan nilai akibat fungsi ini tidak akan disimpan jika diberlakukan dalam pernyataan SELECT. Jika dinyatakan sebagai nilai kondisi (update_atom) dalam pernyataan UPDATE, perubahan nilai tersebut akan disimpan.</p>
<p style="text-align: justify;">12. <strong>EXTRACT</strong></p>
<pre><em>Syntax</em>:
<strong>EXTRACT</strong>(extract_field <strong>FROM </strong>column_reference)</pre>
<p style="text-align: justify;">Untuk mendapatkan kolom tahun, bulan dan hari dari kolom bertipe Date atau TimeStamp. Jika kolom yang dideklarasikan tidak mempunyai nilai maka hasilnya adalah kosong (bukan nol). Jika nilainya tidak kosong, fungsi EXTRACT akan menyatakan nilai elemen tanggal tertentu sebagai data bertipe SmallInt. Parameter <strong>extract_fields</strong> yang diperbolehkan adalah : YEAR, MONTH, DAY, HOUR, MINUTE, atau SECOND. Parameter YEAR, MONTH, dan DAY hanya digunakan dengan kolom bertipe Date dan TimeStamp. Sedangkan parameter HOUR, MINUTE, dan SECOND hanya digunakan dengan kolom bertipe TimeStamp dan Time.</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  SaleDate,
  EXTRACT(YEAR FROM saledate) AS YY,
  EXTRACT(MONTH FROM saledate) AS MM,
  EXTRACT(DAY FROM saledate) AS DD
FROM Orders</pre>
<p style="text-align: justify;">Pernyataan berikut menggunakan kolom DOB (berisi tanggal lahir) yang menyaring record dimana tanggal lahirnya adalah bulan MEI (dinyatakan dengan angka 5).</p>
<pre style="text-align: justify; padding-left: 30px;">SELECT
  DOB,
  LastName,
  FirstName
FROM People
WHERE (EXTRACT(MONTH FROM DOB) = 5)</pre>
<p style="text-align: justify;">Fungsi EXTRACT hanya beroperasi pada data bertipe Date, Time dan TimeStamp. Gunakan fungsi CAST untuk mengkonversi tipe data menjadi data bertipe waktu.</p>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (21.6729)--></li>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (20.4872)--></li>
		<li><a href="http://www.havetogether.com/operator-dan-predikat-pernyataan-sql.html" rel="bookmark">Operator dan Predikat Pernyataan SQL</a><!-- (19.7364)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pernyataan Data Manipulation Language (DML) SQL</title>
		<link>http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html</link>
		<comments>http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html#comments</comments>
		<pubDate>Wed, 06 Jan 2010 11:34:06 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pernyataan SQL]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=436</guid>
		<description><![CDATA[Data Manipulation Language (DML) berisi pernyataan SQL yang digunakan untuk mencari/menampilkan, menyisipkan/memasukkan, memperbaharui dan menghapus data tabel..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/pernyataan-data-definition-language-ddl-sql.html" rel="bookmark">Pernyataan Data Definition Language (DDL) SQL</a><!-- (23.877)--></li>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (21.686)--></li>
		<li><a href="http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html" rel="bookmark">Fungsi-fungsi dalam Pernyataan SQL</a><!-- (20.0793)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em>Data Manipulation Language</em> (DML) berisi pernyataan SQL yang digunakan untuk mencari/menampilkan, menyisipkan/memasukkan, memperbaharui dan menghapus data tabel. Saya membagi pernyataan DML menjadi dua bagian, yaitu Pernyataan dan Klausa.</p>
<p style="text-align: justify;">1. <strong>Pernyataan</strong><br />
1.1. <strong>SELECT</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>SELECT </strong>[<strong>DISTINCT</strong>] * | column_list
<strong>FROM </strong>table_reference
[<strong>WHERE </strong>predicates]
[<strong>GROUP BY</strong> group_list]
[<strong>HAVING</strong> having_condition]
[<strong>ORDER BY</strong> order_list]</pre>
<p style="text-align: justify;">Digunakan untuk mencari/menampilkan <em>record</em> dari tabel. <em> </em>Pernyataan ini bisa menampilkan semua atau sebagian data tabel. Gunakan tanda bintang (&#8220;*&#8221;) untuk menampilkan nilai dari semua kolom. Kolom yang dideklarasikan dalam klausa SELECT dapat berasal dari satu tabel atau banyak tabel, juga dapat berupa kolom tabel, nilai lateral, dan nilai hasil perhitungan yang dipisahkan oleh tanda koma. Klausa FROM mengidentifikasikan tabel dimana datanya akan ditampilkan. Pernyataan berikut akan menampilkan data dari dua kolom (CustNo dan Company), plus sebuah nilai lateral (“Current”) dan nilai hasil perhitungan untuk semua <em>record</em> dari tabel Customer</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  CustNo,
  Company,
  "Current" AS CURRENT,
  CAST(LastInvoiceDate AS DATE)
FROM Customer</pre>
<p style="text-align: justify;">Gunakan kata kunci DISTINCT untuk membatasi data yang ditampilkan hanya sekali pada <em>record</em> yang berbeda, artinya data yang sama pada kolom tersebut hanya ditampilkan sekali saja. Kata kunci ini hanya dapat dipakai dengan kolom sederhana bertipe Char dan Integer, tidak dapat dipakai untuk kolom yang bertipe Blob dan Memo. Untuk mendapatkan <em>record</em> dengan suatu kriteria logika, tambahkan klausa WHERE dalam pernyataan tersebut dan untuk mengelompokkan data gunakan klausa GROUP BY. Klausa HAVING digunakan untuk membatasi <em>record</em> yang ditampilkan berdasarkan hasil dari fungsi aggregate, sedangkan untuk mengurutkan data gunakan klausa ORDER BY. Pernyataan SELECT juga dapat digunakan sebagai <em>subquery</em> dalam pernyataan INSERT, DELETE dan UPDATE.</p>
<p style="text-align: justify;">1.2. <strong>DELETE</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>DELETE</strong>
<strong>FROM</strong> table_reference
[<strong>WHERE</strong> predicates]</pre>
<p style="text-align: justify;">Digunakan untuk menghapus satu <em>record</em> atau lebih dari suatu tabel. Klausa WHERE akan membatasi penghapusan tersebut berdasarkan kriteria logika yang dideklarasikan. Jika tidak mendeklarasikan klausa WHERE maka semua <em>record </em>dalam tabel tersebut akan terhapus. Pernyataan berikut akan menghapus semua data tabel Employee.</p>
<pre style="padding-left: 30px; text-align: justify;">DELETE
FROM Employee</pre>
<p style="text-align: justify;">Dan pernyataan di bawah ini akan menghapus semua baris dalam tabel Employee jika nilai dari kolom Empno ditemukan dalam subquery pencarian data kolom Empno dari tabel Old_Employee.</p>
<pre style="padding-left: 30px; text-align: justify;">DELETE
FROM Employee
WHERE (Empno IN (SELECT Empno FROM Old_Employee))</pre>
<p style="text-align: justify;">Pernyataan DELETE hanya mendukung subquery SELECT dalam klausa WHERE.</p>
<p style="text-align: justify;">1.3. <strong>INSERT</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>INSERT INTO</strong> table_reference
[(columns_list)] <strong>
VALUES</strong> (update_atoms)</pre>
<p style="text-align: justify;">Pernyataan INSERT berfungsi untuk menambahkan <em>record</em> data baru pada suatu tabel. Nama tabel yang dinyatakan dalam klausa INTO merupakan tabel yang akan menerima data. Daftar kolom yang dipisahkan oleh tanda koma dan berada dalam tanda kurung merupakan kolom-kolom dari tabel, sedang klausa VALUES merupakan nilai-nilai yang disisipkan yang dipisahkan oleh tanda koma dan berada dalam tanda kurung. Jika tidak ada kolom yang dideklarasikan, maka nilai yang diberikan disimpan dalam kolom secara berurutan dalam struktur tabel, sehingga nilai pertama dalam klausa VALUES akan dimasukkan dalam kolom pertama tabel, demikian seterusnya.</p>
<p style="text-align: justify;">Jika daftar kolom dinyatakan secara jelas maka nilai yang diberikan akan disimpan sesuai dengan urutan daftar kolom tersebut. Kolom-kolom yang tidak dinyatakan dalam daftar kolom tidak mempunyai nilai (kosong bukan nol). Jumlah kolom yang dinyatakan harus sama dengan jumlah nilai dalam klausa VALUES. Pernyataan berikut hanya memasukkan suatu nilai dalam kolom CustNo dan Company dari tabel Employee, dan nilai kolom-kolom lain adalah kosong.</p>
<pre style="padding-left: 30px; text-align: justify;">INSERT INTO Customer
(CustNo, Company)
VALUES (9842, "Inprise Corporation")</pre>
<p style="text-align: justify;">Untuk menambahkan <em>record</em> pada satu tabel yang berasal dari tabel lain, hilangkan klausa VALUES dan gunakan subquery sebagai sumber baris baru tersebut.</p>
<pre style="padding-left: 30px; text-align: justify;">INSERT INTO Customer
(CustNo, Company)
SELECT CustNo, Company
FROM OldCustomer</pre>
<p style="text-align: justify;">Pernyataan INSERT juga hanya mendukung subquery SELECT dalam klausa VALUES.</p>
<p style="text-align: justify;">1.4. <strong>UPDATE</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>UPDATE </strong>table_reference
<strong>SET </strong>column_ref = update_atom
[, column_ref = update_atom...]
[<strong>WHERE </strong>predicates]</pre>
<p style="text-align: justify;">Untuk memodifikasi satu <em>record</em> atau lebih yang telah ada dalam suatu tabel. Nama tabel dalam pernyataan UPDATE merupakan tabel yang akan menerima perubahan data. Setiap ungkapan dalam klausa SET terdiri atas nama kolom, operator penugasan (=), nilai update dari kolom tersebut. Nilai kondisi <strong>update_atom</strong> dalam pernyataan UPDATE bisa berupa nilai lateral, nilai tunggal (satu <em>record</em>) dari hasil subquery SELECT, atau nilai hasil perhitungan.</p>
<pre style="padding-left: 30px; text-align: justify;">UPDATE SalesInfo
SET TaxRate = 0.0825</pre>
<p style="text-align: justify;">Jika nilai kondisi <strong>update_atom</strong> berasal dari suatu subquery SELECT, sebuah pernyataan SELECT harus dibuat untuk setiap kolom yang akan di-update dalam tabel yang dimaksud. Subquery SELECT tersebut harus berada dalam tanda kurung. Pernyataan berikut meng-update dua kolom OnHand dan InventoryDate dalam tabel Inventory, masing-masing dengan subquery SELECT terpisah.</p>
<pre style="padding-left: 30px; text-align: justify;">UPDATE Inventory
SET OnHand = OnHand – (SELECT SUM(Orders.QtySold)
                       FROM Orders
                       WHERE (Orders.PartNo = Inventory.PartNo)
                             AND (Orders.OrderDate BETWEEN "10/01/1999"
                             AND "10/31/1999")),
InventoryDate = OnHand – (SELECT MAX(Orders.OrderDate)
                          FROM Orders
                          WHERE (Orders.PartNo = Inventory.PartNo)
                                AND (Orders.OrderDate BETWEEN "10/01/1999"
                                AND "10/31/1999"))</pre>
<p style="text-align: justify;">Klausa WHERE membatasi update <em>record</em> dalam tabel, jika tidak ada klausa WHERE yang dinyatakan maka semua baris tabel akan di-update dengan menggunakan ungkapan dalam klausa SET.</p>
<pre style="padding-left: 30px; text-align: justify;">UPDATE SalesInfo
SET TaxRate = 0.0825
WHERE (State = "CA")</pre>
<p style="text-align: justify;">Pernyataan UPDATE hanya mendukung subquery SELECT dalam klausa WHERE.</p>
<p style="text-align: justify;">2. <strong>Klausa</strong><br />
2.1. <strong>FROM</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>FROM </strong>table_reference [, table_reference...]</pre>
<p style="text-align: justify;">Digunakan untuk menetapkan tabel yang datanya akan ditampilkan melalui suatu pernyataan SELECT. Nilai klausa FROM adalah daftar nama tabel yang dipisahkan oleh tanda koma. Nama alias suatu tabel yang didefinisikan dalam klausa FROM dapat digunakan dalam suatu pernyataan. Pada pernyataan SELECT berikut, nama alias Res didefinisikan untuk tabel RERSERVAT</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  Res.ResNo,
  Res.Amt_Paid
FROM Reservat Res
WHERE (Res.Pay_Method = "VISA")</pre>
<p style="text-align: justify;">Klausa ini diterapkan dalam pernyataan SELECT.</p>
<p style="text-align: justify;">2.2. <strong>WHERE</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>WHERE </strong>predicates</pre>
<p style="text-align: justify;">Menyatakan kondisi-kondisi penyaringan data dalam pernyataan SELECT dan UPDATE. Nilai klausa WHERE adalah satu ungkapan logika atau lebih, atau predikat, atau penilaian True atau False setiap <em>record</em> tabel. Multi predikat dalam klausa WHERE harus dipisahkan oleh salah satu operator logika OR atau AND dan setiap nilai predikat dapat dinegasikan dengan operator NOT.</p>
<p style="text-align: justify;">Tanda kurung dapat digunakan untuk mengisolasi perbandingan logika dan kelompok pembanding yang menghasilkan kriteria penilaian baris yang berbeda. Sebagai contoh, pernyataan SELECT berikut menampilkan semua <em>record</em> dimana kolom Shape berisi nilai “round” atau “square” tetapi hanya jika kolom Color berisi nilai “red”.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  Shape,
  Color,
  Cost
FROM Objects
WHERE ((Shape = "round") OR (Shape = "square"))
      AND (Color = "red")</pre>
<p style="text-align: justify;">Tetapi jika semua tanda kurung dalam klausa WHERE tersebut dibuang maka hasilnya akan sangat berbeda. Pernyataan tersebut (semua tanda kurung dibuang) akan menampilkan baris dimana kolom Shape berisi nilai “round” tanpa memperhatikan nilai kolom Color, juga akan menampilkan baris dimana kolom Shape berisi nilai “square” tetapi hanya jika kolom Color berisi nilai “red”. Klausa WHERE menyaring data sebelum pengelompokan data oleh klausa GROUP BY.</p>
<p style="text-align: justify;">2.3. <strong>ORDER BY</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>ORDER BY</strong> column_reference [, column_reference...] [<strong>ASC</strong>|<strong>DESC</strong>]</pre>
<p style="text-align: justify;">Mengurutkan <em>record</em> yang ditampilkan oleh pernyataan SELECT berdasarkan nilai satu kolom atau lebih. Nilai dari klausa ini adalah daftar kolom yang dipisahkan oleh tanda koma. Kolom-kolom tersebut dapat berasal dari satu atau banyak tabel. Jika kolom-kolom tersebut berasal dari banyak tabel, tabel-tabel tersebut harus merupakan bagian dari gabungan tabel. Gunakan kata kunci ASC (atau ASCENDING) untuk mengurutkan data dari yang paling kecil ke yang paling besar, dan jika sebaliknya gunakan kata kunci DESC (atau DESCENDING). Jika tidak dinyatakan maka pengurutan data berdasarkan metode ASC. Pernyataan berikut mengurutkan data secara ascending oleh Year yang dikutip dari kolom LastInvoiceDate, selanjutnya secara descending oleh kolom State, dan kemudian secara ascending oleh hasil konversi huruf besar kolom Company.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  EXTRACT(YEAR FROM LastInvoiceDate) AS YY,
  State,
  UPPER(Company)
FROM Customer
ORDER BY
  YY DESC,
  State ASC, 3</pre>
<p style="text-align: justify;">2.4. <strong>GROUP BY</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>GROUP BY</strong> column_reference [, column reference...]</pre>
<p style="text-align: justify;">Mengelompokan data berdasarkan suatu kolom. Sebagai contoh, suatu query dengan fungsi SUM menghasilkan <em>record</em> tunggal yang merupakan total seluruh nilai dari kolom dalam fungsi SUM tersebut. Tetapi jika klausa GROUP BY ditambahkan, maka fungsi SUM melakukan penjumlahan sekali untuk masing-masing kelompok <em>record</em>. Klausa GROUP BY diperlukan jika kolom aggregate dan non-aggregate dimasukkan dalam pernyataan SELECT yang sama.</p>
<p style="text-align: justify;">Setiap kolom yang dinyatakan dalam klausa ini merupakan bagian dari tabel yang ditetapkan dalam klausa FROM query, juga terdaftar dalam klausa SELECT query dan tidak mempunya fungsi aggregate yang diberlakukan dalam klausa SELECT. Dalam pernyataan SELECT berikut, nilai kolom Sales dikelompokan berdasarkan nilai-nilai dalam kolom Company. Hasilnya adalah total penjualan untuk setiap perusahaan.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  C.Company,
  SUM(O.ItemsTotal) AS TotalSales
FROM Customer C, Orders O
WHERE C.CustNo = O.CustNo
GROUP BY C.Company
ORDER BY C.Company</pre>
<p style="text-align: justify;">Nama kolom yang dinyatakan dalam klausa GROUP BY dapat berupa nama korelasi kolom, seperti contoh berikut ini :</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  C.Company Co,
  SUM(O.ItemsTotal) AS TotalSales
FROM Customer C, Orders O
WHERE C.CustNo = O.CustNo
GROUP BY Co
ORDER BY 1</pre>
<p style="text-align: justify;">Nilai hasil perhitungan tidak dapat dinyatakan dalam klausa GROUP BY. Dan klausa ini hanya dapat diterapkan dalam pernyataan SELECT.</p>
<p style="text-align: justify;">2.5. <strong>HAVING</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>HAVING</strong> predicates</pre>
<p style="text-align: justify;">Untuk membatasi <em>record</em> yang ditampilkan oleh pernyataan SELECT dimana nilai-nilai kolom yang telah dikumpulkan memenuhi kriteria yang ditetapkan. Klausa HAVING hanya dapat digunakan dalam pernyataan SELECT jika pernyataan tersebut mempunyai klausa GROUP BY dan satu kolom atau lebih menjadi subjek fungsi aggregate. Nilai klausa HAVING adalah satu ekpresi logika atau lebih, atau predikat yang menilai True atau False tiap <em>record</em> aggregate dari tabel. Sebagai contoh, pernyataan SELECT di bawah menampilkan semua baris dimana total penjualan untuk perusahaan melebihi 1,000.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  Company,
  SUM(sales) AS TOTALSALES
FROM Sales1998
GROUP BY Company
HAVING (SUM(sales) &gt;= 1000)
ORDER BY Company</pre>
<p style="text-align: justify;">Pernyataan multi predikat harus dipisahkan oleh salah satu operator logika OR atau AND dan setiap predikat dapat dinegasikan dengan operator NOT. Tanda kurung dapat digunakan untuk mengisolasi perbandingan logika dan kelompok pembanding yang menghasilkan kriteria penilaian <em>record </em>yang berbeda.</p>
<p style="text-align: justify;">Pernyataan SELECT dapat terdiri atas klausa WHERE dan HAVING. Klausa WHERE menyaring data yang dikumpulkan dan menggunakan kolom yang bukan subjek fungsi aggregate. Sedang klausa HAVING melanjutkan penyaring data setelah dikumpulkan dan kolom yang digunakan adalah subjek dari fungsi aggregate. Perhatikan contoh berikut ini, sama dengan contoh terdahulu tetapi data yang ditampilkan jika nilai kolom State adalah “CA”.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  Company,
  SUM(sales) AS TOTALSALES
FROM Sales1998
WHERE (State = "CA")
GROUP BY Company
HAVING (SUM(sales) &gt;= 1000)
ORDER BY Company</pre>
<p style="text-align: justify;">Pernyataan berikut menggunakan subquery yang menjumlah semua penjualan untuk California (“CA”) dan menghitung nilai total yang dibagi dua. Nilai perhitungan ini kemudian digunakan untuk membatasi data hasil fungsi aggregate dimana subtotal (didasarkan pada nomor pelanggan) dikelompokkan pada lebih dari atau sama dengan nilai hasil perhitungan tersebut.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  O.CustNo,
  SUM(O.ItemsTotal)
FROM Orders O
GROUP BY O.CustNo
HAVING SUM(O.ItemsTotal) &gt;= (SELECT SUM(O2.ItemsTotal) / 2
                             FROM Customer C,Orders O2
                             WHERE (C.CustNo = O2.CustNo) AND (C.State = "CA"))</pre>
<p style="text-align: justify;">Jadi klausa HAVING menyaring data setelah pengumpulan oleh klausa GROUP BY, dan untuk menyaring data sebelum pengumpulan data gunakan klausa WHERE.</p>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/pernyataan-data-definition-language-ddl-sql.html" rel="bookmark">Pernyataan Data Definition Language (DDL) SQL</a><!-- (23.877)--></li>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (21.686)--></li>
		<li><a href="http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html" rel="bookmark">Fungsi-fungsi dalam Pernyataan SQL</a><!-- (20.0793)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pernyataan Data Definition Language (DDL) SQL</title>
		<link>http://www.havetogether.com/pernyataan-data-definition-language-ddl-sql.html</link>
		<comments>http://www.havetogether.com/pernyataan-data-definition-language-ddl-sql.html#comments</comments>
		<pubDate>Mon, 04 Jan 2010 11:30:51 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pernyataan SQL]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=434</guid>
		<description><![CDATA[Dengan pernyataan DLL kamu bisa membuat, mengubah dan menghapus tabel dan juga untuk membuat dan menghapus indeks atau view..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (21.8885)--></li>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (13.8332)--></li>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (13.3414)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em>Data Definition Language</em> (DDL) berisi pernyataan SQL yang digunakan untuk mendefinisikan, mengatur semua atribut dan properti sebuah database. Dengan pernyataan DLL kamu bisa membuat, mengubah dan menghapus tabel dan juga untuk membuat dan menghapus indeks atau view.</p>
<p style="text-align: justify;">1. <strong>CREATE TABLE</strong></p>
<pre style="text-align: justify;"><em>Syntax:</em>
<strong>CREATE TABLE</strong> table_name
(column_definition [,column_definition, ...] [, primary_key_constraint])</pre>
<p style="text-align: justify;">Digunakan untuk membuat suatu tabel<em> </em>, mendefinisikan kolom-kolomnya, dan mendefinisikan primary key. Untuk database client tunggal, nama tabel yang digunakan harus berada dalam tanda kutip dan memenuhi aturan yang berlaku. Definisi kolom/fields berisi kombinasi nama kolom, tipe data beserta ukurannya (jika ada). Daftar definisi kolom dipisahkan oleh tanda koma dan berada dalam tanda kurung. Jumlah dan jenis ukuran harus disesuaikan dengan tipe kolom. Sedangkan Primary key digunakan untuk membuat indeks utama dari tabel. Pernyataan berikut membuat tabel Paradox bernama employee.db dengan primary key kolom Last_Name dan First_Name :</p>
<pre style="padding-left: 30px; text-align: justify;">CREATE TABLE "employee.db"
(Last_Name CHAR(20),  First_Name CHAR(15), Salary NUMERIC(10,2), Dept_No SMALLINT,
PRIMARY KEY (Last_Name, First_Name))</pre>
<p style="text-align: justify;">Jika kamu ingin membuat tabel <em>dBASE</em> berikan ekstensi .dbf pada waktu pemberian nama, menjadi employee.dbf. Dalam penulisan nama tabel, diperbolehkan untuk tidak menyertakan ekstensinya tetapi tanda kutip harus dihilangkan jika tidak maka nama tabel adalah db/dbf.</p>
<p style="text-align: justify;">Dan jika ingin membuat tabel dengan kolom berkarakter non-alpanumerik atau nama kolom berspasi, kamu harus memasukkan nama kolom tersebut dalam tanda kutip dan sertakan di depan nama kolom tersebut dengan nama tabel (dengan atau tanpa ekstensi). Tetapi sebaiknya hindari nama kolom berspasi, gunakan tanda garis bawah &#8220;_&#8221;. Berikut ini dua macam cara pembuatan tabel dengan nama kolom berspasi.</p>
<pre style="padding-left: 30px; text-align: justify;">CREATE TABLE "abc.db"
(ID CHAR(3),  "ABC.db"."Funny Name" CHAR(10))</pre>
<pre style="padding-left: 30px; text-align: justify;">CREATE TABLE abc
(ID CHAR(3), ABC."Funny Name" CHAR(10))</pre>
<p style="text-align: justify;">2. <strong>ALTER TABLE</strong></p>
<pre style="text-align: justify;"><em>Syntax:</em>
<strong>ALTER TABLE</strong> table_reference <strong>DROP</strong> [COLUMN] column_reference
| <strong>ADD</strong> [COLUMN] column_reference [,reference <strong>DROP</strong> [COLUMN] column_reference
| <strong>ADD</strong> [COLUMN] column_reference...]</pre>
<p style="text-align: justify;">Pernyataan ini berfungsi untuk menambahkan atau menghapus suatu kolom dari tabel yang telah ada. Dalam pernyataan ALTER TABLE yang sama, diperbolehkan menghapus satu kolom dan menambahkan kolom yang lain. Kata kunci DROP hanya memerlukan nama kolom yang akan dihapus, sedangkan ADD memerlukan kombinasi lengkap dari nama kolom, tipe data dan mungkin ukurannya yang sesuai. Pernyataan berikut menghapus kolom FullName dan menambahkan kolom LastName dalam tabel Names.</p>
<pre style="padding-left: 30px; text-align: justify;">ALTER TABLE Names
DROP FullName, ADD LastName CHAR(25)</pre>
<p style="text-align: justify;">Pernyataan ini juga memungkinkan penghapusan dan penambahan kolom bernama sama dalam satu pernyataan ALTER TABLE, tetapi data dalam kolom lama tersebut akan hilang.</p>
<pre style="padding-left: 30px; text-align: justify;">ALTER TABLE Names
DROP LastName, ADD LastName CHAR(30)</pre>
<p style="text-align: justify;">Jika kolom yang dihapus merupakan bagian dari primary key maka indeks utama akan dihapus. Dan jika kolom tersebut adalah kolom berkarakter non-alpanumerik atau nama kolom berspasi, kamu harus memasukkan nama kolom tersebut dalam tanda kutip dan sertakan di depan nama kolom tersebut dengan nama tabel (dengan atau tanpa ekstensi). Perhatikan kode pernyataan berikut ini:</p>
<pre style="padding-left: 30px; text-align: justify;">ALTER TABLE "Customer.db"
ADD "Customer.db"."#ID" CHAR(3)</pre>
<p style="text-align: justify;">3. <strong>DROP TABLE</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>DROP TABLE</strong> table_reference</pre>
<p style="text-align: justify;">Digunakan untuk menghapus suatu tabel yang telah ada. Pernyataan berikut ini menghapus suatu tabel</p>
<pre style="padding-left: 30px; text-align: justify;">DROP TABLE Employee</pre>
<p style="text-align: justify;">4. <strong>CREATE INDEX</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>CREATE</strong> [<strong>UNIQUE</strong>] [<strong>ASC</strong> | <strong>DESC</strong>] <strong>INDEX </strong>index_reference <strong>ON</strong>
table_reference (column_reference [,column_reference...])</pre>
<p style="text-align: justify;">Pernyataan CREATE INDEX digunakan untuk membuat suatu indeks sekunder dari tabel yang telah ada. Nama indeks tidak boleh mengandung spasi. Kata kunci UNIQUE digunakan untuk membuat suatu indeks yang akan membangkitkan pesan kesalahan jika <em>record</em> bernilai sama dimasukkan dalam kolom yang sama. Secara default, indeks tidak unik. Pernyataan ASC (atau ASCENDING) disertakan jika kamu ingin membuat suatu indeks yang mengurutkan data dari yang paling kecil ke yang paling besar, dan jika sebaliknya gunakan kata kunci DESC. Secara default pengurutan data bersifat ascending jika kedua kata kunci tersebut tidak dinyatakan. Indeks sekunder dari suatu tabel <em>Paradox</em> dapat dibuat multi kolom melalui pernyataan berikut :</p>
<pre style="padding-left: 30px; text-align: justify;">CREATE INDEX CustDate ON "Orders.db" (CustNo, SaleDate)</pre>
<p style="text-align: justify;">Sedangkan untuk tabel <em>dBASE</em> hanya boleh membuat indeks tunggal.</p>
<pre style="padding-left: 30px; text-align: justify;">CREATE UNIQUE INDEX Namex ON "Employee.dbf" (Last_Name)</pre>
<p style="text-align: justify;">5. <strong>DROP INDEX</strong></p>
<pre style="text-align: justify;"><em>Syntax</em>:
<strong>DROP INDEX</strong> table_reference.index_reference | PRIMARY</pre>
<p style="text-align: justify;">Pernyataan ini digunakan untuk menghapus suatu indeks utama atau sekunder. Untuk menghapus indeks utama atau sekunder tabel <em>dBASE</em> atau suatu indeks sekunder tabel <em>Paradox</em>, penulisan nama tabel dan nama indek dipisahkan oleh simbol titik (“.”).</p>
<pre style="padding-left: 30px; text-align: justify;">DROP INDEX "Employee.dbf".Namex</pre>
<p style="text-align: justify;">Untuk menghapus indeks utama tabel <em>Paradox</em> sertakan kata kunci PRIMARY di belakang nama tabel.</p>
<pre style="padding-left: 30px; text-align: justify;">DROP INDEX Orders.PRIMARY</pre>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (21.8885)--></li>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (13.8332)--></li>
		<li><a href="http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html" rel="bookmark">Ketentuan dan Aturan Umum dalam Pernyataan SQL</a><!-- (13.3414)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/pernyataan-data-definition-language-ddl-sql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ketentuan dan Aturan Umum dalam Pernyataan SQL</title>
		<link>http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html</link>
		<comments>http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html#comments</comments>
		<pubDate>Sat, 02 Jan 2010 11:12:52 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[pernyataan SQL]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=429</guid>
		<description><![CDATA[SQL (Structured Query Languange) merupakan bahasa pemrograman yang digunakan untuk mengakses tabel dalam database, baik database client tunggal maupun client-server..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (24.5487)--></li>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (18.3735)--></li>
		<li><a href="http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html" rel="bookmark">Fungsi-fungsi dalam Pernyataan SQL</a><!-- (18.0725)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em>SQL (Structured Query Languange)</em> merupakan bahasa pemrograman yang digunakan untuk mengakses tabel dalam database, baik database client tunggal maupun client-server. Nama tabel, nama kolom (<em>fields</em>), alias tabel/<em>fields</em>, dalam pernyataan SQL mempunyai aturannya sendiri.</p>
<p style="text-align: justify;">1. <strong>Nama Tabel</strong><br />
Nama tabel hanya boleh terdiri atas karakter alphanumeric dan lambang garis bawah &#8220;_&#8221;. Untuk database client tunggal seperti <em>dBASE</em>, <em>Paradox</em>, <em>Foxpro</em> dinyataan berada dalam tanda kutip (tunggal/ganda), sedang database client-server biasanya tidak perlu ada tanda kutip. Nama tabel juga dapat dideklarasikan secara lengkap bersama file <em>path</em>-nya, contoh :</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM 'Parts.dbf'</pre>
<p style="text-align: justify;">atau</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM "c:sampleparts.dbf"</pre>
<p style="text-align: justify;">Nama alias dapat disertakan dalam deklarasi nama tabel, caranya deklarasikan nama alias yang berada di antara tanda titik dua sebelum nama  tabel kemudian tutup dengan tanda kutip seperti di bawah ini.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM ":DBDEMOS:Customer.db"</pre>
<p style="text-align: justify;">2. <strong>Nama Kolom</strong><br />
Aturannya sama dengan penulisan nama tabel.</p>
<p style="text-align: justify;">3. <strong>Format Data bertipe Date</strong><br />
Format data tanggal yang diterima adalah format tanggal Amerika dan Eropa. Jika tanda pemisah data adalah garis miring (“/”) dan mode <em>shortdate</em>-nya menempatkan bulan sebelum hari maka format tanggal yang digunakan adalah format Amerika yaitu MM/DD/YY atau MM/DD/YYYY. Format Eropa menggunakan tanda pemisah titik (“.”) dan mode <em>shortdate</em>-nya menempatkan hari sebelum bulan, yaitu DD.MM.YY atau DD.MM.YYYY. Kombinasi dengan mode <em>sortdate</em>, penempatan bulan sebelum hari dan tanda pemisah titik tidak diterima oleh Local SQL. Contoh format Amerika</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM Orders
WHERE (SaleDate &lt;= "1/23/1998")</pre>
<p style="text-align: justify;">Contoh format Eropa</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM Orders
WHERE (SaleDate &lt;= "23.1.1998")</pre>
<p style="text-align: justify;">4. <strong>Format Data bertipe Time</strong><br />
SQL menyarankan literal Time berformat hh:mm:ss AM/PM, dimana hh adalah jam, mm adalah menit dan ss adalah detik. Penanda AM/PM adalah suatu opsi dan bersifat <em>case-insensitive</em> (“AM” sama dengan “am”). Literal Time harus berada dalam tanda kutip.</p>
<pre style="padding-left: 30px; text-align: justify;">INSERT INTO WorkOrder
  (ID, StartTime)
VALUES ("B00120","10:30:00 PM")</pre>
<p style="text-align: justify;">AM atau PM mengindikasikan separuh hari, jika tidak dinyatakan maka data waktu dibandingkan dengan jam 12. Jika kurang dari jam 12 waktu dalam AM, jika lebih besar dari jam 12 adalah petang (PM). Sebagai contoh, pernyataan berikut hanya akan menampilkan data dimana kolom <strong>Event_time</strong> berisi nilai &#8220;<strong>1:00:00 PM</strong>&#8221; dan mengabaikan nilai &#8220;<strong>1:00:00 AM</strong>&#8220;</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM "Events.db"
WHERE (Event_Time = "13:00:00")</pre>
<p style="text-align: justify;">5. <strong>Nilai Boolean</strong><br />
Literal Boolean bernilai True dan False dapat dinyatakan dalam pernyataan SQL dengan atau tanpa kutip dan bersifat <em>case-insensitive</em> (huruf besar/kecil bernilai sama).</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM Transfers
WHERE (Paid = TRUE)
      AND NOT (Incomplete = "False")</pre>
<p style="text-align: justify;">Nilai tipe Boolean dapat dikonversi menjadi bertipe lain dengan menggunakan fungsi CAST. Hasil konversi nilai True ke tipe data Integer adalah 1 (satu), False menjadi 0 (nol), dan kosong (NULL) menjadi kosong (NULL). Dalam tipe Char, nilai True adalah T, False menjadi F, dan kosong (NULL) menjadi kosong (NULL). Nilai Boolean juga dapat diekpresikan secara langsung sebagai “T” untuk nilai True dan “F” untuk nilai False, pendeklarasiannya harus menyertakan tanda kutip.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM Transfers
WHERE (Paid = "T")
      AND NOT (Incomplete = "F")</pre>
<p style="text-align: justify;">6. <strong>Nama Alias Tabel</strong><br />
Nama alias tabel dapat digunakan untuk menghubungkan suatu kolom dengan tabel dimana kolom tersebut berasal. Hal ini berguna ketika berbagai kolom dengan nama yang sama dinyatakan dalam <em>query</em> yang sama, khususnya <em>query multi-tabel</em>. Nama alias tabel didefinisikan dalam klausa FROM pada pernyataan SELECT dengan identitas yang khas. Identitas ini, nama alias tabel, dapat digunakan untuk mengawali nama kolom. Jika nama tabel bukan string dalam tanda kutip, secara ekplisit nama alias tabel adalah nama tabel tersebut dan dapat digunakan untuk mengawali nama kolom.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM Customer
LEFT OUTER JOIN Orders ON (Customer.CustNo = Orders.CustNo)</pre>
<p style="text-align: justify;">Untuk database client tunggal, jika nama tabel berada dalam tanda kutip maka awali nama kolom dengan  string yang berada dalam tanda kutip tersebut,</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM "Customer.db"
LEFT OUTER JOIN "Orders.db" ON ("Customer.db".CustNo = "Orders.db".CustNo)</pre>
<p style="text-align: justify;">atau gunakan nama lengkap tabel sebagai nama alias tabel yang didefinisikan dalam klausa FROM (dan awali semua kolom dengan nama tersebut),</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM "Customer.db" CUSTOMER
LEFT OUTER JOIN "Orders.db" ORDERS ON (CUSTOMER.CustNo = ORDERS.CustNo)</pre>
<p style="text-align: justify;">atau gunakan suatu karakter pembeda sebagai nama alias tabel yang didefinisikan dalam klausa FROM (dan awali semua kolom dengan karakter tersebut).</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT *
FROM "Customer.db" C
LEFT OUTER JOIN "Orders.db" O ON (C.CustNo = O.CustNo)</pre>
<p style="text-align: justify;">7. <strong>Nama Alias Kolom</strong><br />
Gunakan kata kunci <strong>AS</strong> untuk menetapkan nama alias suatu kolom, nilai aggregate, atau nilai literal. Nama alias kolom tidak diperbolehkan berada dalam tanda kutip dan juga tidak boleh mengandung spasi. Pernyataan berikut menetapkan Sub dan Word sebagai nama alias kolom.</p>
<pre style="padding-left: 30px; text-align: justify;">SELECT
  SUBSTRING(Company FROM 1 FOR 1) AS Sub,
  "Text" AS Word
FROM Customer</pre>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/relasi-tabel-dalam-pernyataan-sql.html" rel="bookmark">Relasi Tabel dalam Pernyataan SQL</a><!-- (24.5487)--></li>
		<li><a href="http://www.havetogether.com/pernyataan-data-manipulation-language-dml-sql.html" rel="bookmark">Pernyataan Data Manipulation Language (DML) SQL</a><!-- (18.3735)--></li>
		<li><a href="http://www.havetogether.com/fungsi-fungsi-dalam-pernyataan-sql.html" rel="bookmark">Fungsi-fungsi dalam Pernyataan SQL</a><!-- (18.0725)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/ketentuan-dan-aturan-umum-dalam-pernyataan-sql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merancang Antarmuka ADC 8 bit dengan PPI 8255</title>
		<link>http://www.havetogether.com/merancang-antarmuka-adc-8-bit-dengan-ppi-8255.html</link>
		<comments>http://www.havetogether.com/merancang-antarmuka-adc-8-bit-dengan-ppi-8255.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 11:38:09 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Instrumentasi]]></category>
		<category><![CDATA[antarmuka ADC]]></category>
		<category><![CDATA[hardware komputer]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=427</guid>
		<description><![CDATA[Rancangan ADC 8 bit umumnya terbagi dalam 4 rangkaian yaitu pengkodean alamat, clock, Pengubah Analog ke Digital (ADC), dan Port I/O..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/antarmuka-adc.html" rel="bookmark">Antarmuka ADC</a><!-- (14.606)--></li>
		<li><a href="http://www.havetogether.com/parallel-port.html" rel="bookmark">Parallel Port</a><!-- (9.98445)--></li>
		<li><a href="http://www.havetogether.com/serial-port.html" rel="bookmark">Serial Port</a><!-- (9.18194)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Rancangan ADC 8 bit umumnya terbagi dalam 4 rangkaian yaitu pengkodean alamat, <em>clock, </em>Pengubah Analog ke Digital (ADC), dan <em>Port</em> I/O<em></em>. Rancangan ini menerima alamat, data dan sinyal kontrol melalui <em>port</em> I/O dan mentransfer informasi ke/dari prosesor (komputer) melalui bus data.</p>
<p style="text-align: justify;">1. <strong>Pendekodean Alamat</strong><br />
Rangkaian untuk pendekodean alamat dipilih sistem Pendekodean Alamat Dapat Dipilih, dengan pertimbangan jika ternyata alamat yang diset sama dengan alamat peralatan lain maka dengan mudah dapat diganti. Rangkaian pendekodean alamat ini menggunakan sebuah IC pembanding 8 bit SN 74LS688, tiga buah jumper dan sebuah larik tahanan yang terdiri dari 3 buah resistor, seperti terlihat pada gambar di bawah ini.</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1177" title="adc8bit1_dekoder" src="http://www.havetogether.com/wp-content/uploads/2009/12/adc8bit1_dekoder.jpg" alt="adc8bit1_dekoder" width="258" height="189" /><br />
Penentuan alamat dilakukan dengan mengeset jumper, jika tidak di-jumper maka input yang bersangkutan (Qn) mendapat tegangan +5V melalui salah satu dari 3 buah resistor yang ada, sedang jika di-jumper maka input tersebut dihubungkan dengan GND dan resistor yang ada akan mencegah terjadinya hubungan singkat.</p>
<p style="text-align: justify;">2.    <em><strong>Clock</strong></em><br />
Sebagai pembangkit <em>Clock</em> (detak) ADC, digunakan IC 7402 yang terdiri atas 4 buah gerbang NOR. Dan untuk mendapatkan frekuensi <em>clock</em> digunakan komponen resistor sebesar 330 O dan kapasitor sebesar 1 nano, sehingga frekuensi <em>clock</em>-nya = 1/(4RC) = 75,76 KHz.</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1180" title="adc8bit2_clock" src="http://www.havetogether.com/wp-content/uploads/2009/12/adc8bit2_clock.jpg" alt="adc8bit2_clock" width="269" height="182" /></p>
<p style="text-align: justify;">3. <strong>Pengubah Analog ke Digital (ADC)</strong><br />
Untuk pengubah analog ke digital digunakan piranti keluaran dari ADC 0809. Perhatikan gambar di bawah ini</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1181" title="adc8bit3_adc" src="http://www.havetogether.com/wp-content/uploads/2009/12/adc8bit3_adc.jpg" alt="adc8bit3_adc" width="347" height="220" /></p>
<p style="text-align: justify;">Sesuai gambar di atas, cara kerja ADC 0809 bisa dijelaskan sebagai berikut. Mula-mula dipilih isyarat analog input mana yang akan dikonversi (IN0 s/d IN07), pemilihan ini dilakukan dengan cara memberikan kombinasi 3 bit alamat (CBA) yang sesuai kepada dekoder menurut tabel kebenaran di bawah ini</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="86" valign="top">
<p align="center"><strong>Input</strong></p>
</td>
<td width="53" valign="top">
<p align="center"><strong>C</strong></p>
</td>
<td width="49" valign="top">
<p align="center"><strong>B</strong></p>
</td>
<td width="49" valign="top">
<p align="center"><strong>A</strong></p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN0</p>
</td>
<td width="53" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN1</p>
</td>
<td width="53" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN2</p>
</td>
<td width="53" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN3</p>
</td>
<td width="53" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN4</p>
</td>
<td width="53" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN5</p>
</td>
<td width="53" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN6</p>
</td>
<td width="53" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
</tr>
<tr>
<td width="86" valign="top">
<p align="center">IN7</p>
</td>
<td width="53" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Setelah itu, kombinasi ketiga bit tersebut dikunci/digrendel dengan memberikan isyarat ALE (<em>Address Latch Enable</em>). Selanjutnya isyarat input analog yang dipilih siap untuk dikonversi, yaitu dengan memberikan isyarat SC (<em>Start Conversion</em>). Setelah konversi selesai, maka ADC 0809 akan mengeluarkan isyarat EOC (<em>End of Conversion</em>). Untuk membaca hasil konversinya pada output, sebelumnya harus diberikan dahulu isyarat OE (<em>Output Enable</em>). Desain lengkap dari antarmuka ADC adalah seperti gambar di bawah ini</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1182" title="adc8bit4_adcfulldesign" src="http://www.havetogether.com/wp-content/uploads/2009/12/adc8bit4_adcfulldesign.jpg" alt="adc8bit4_adcfulldesign" width="600" height="475" /></p>
<p style="text-align: justify;">3. <strong><em>Port</em> I/O</strong><br />
Seperti gambar lengkap desain antar muka ADC di atas, sebagai <em>port</em> I/O digunakan PPI 8255 yang menyediakan 24 pin input/output yang dapat dikonfigurasikan dalam satu, dua, atau tiga <em>port</em> I/O. PPI 8255 dipakai dalam bentuk pin DIP, menggunakan catu daya tunggal +5 V. Pemakaian pin PPI 8255 dalam rancangan ADC ini dapat dilihat pada <strong>tabel pemakaian PPI 8255</strong> di bawah ini</p>
<table border="1" cellspacing="0" cellpadding="0" width="377">
<tbody>
<tr>
<td colspan="2" width="132">
<h4 style="text-align: center;">Port</h4>
</td>
<td width="76">
<p style="text-align: center;"><strong>I/O</strong></p>
</td>
<td width="170">
<p style="text-align: center;"><strong>Fungsi</strong></p>
</td>
</tr>
<tr>
<td width="37" valign="top">
<p align="center">A</p>
</td>
<td width="95" valign="top">
<p align="center">PA0 – PA7</p>
</td>
<td width="76" valign="top">
<p align="center">Output</p>
</td>
<td width="170" valign="top">Tidak dipakai</td>
</tr>
<tr>
<td width="37" valign="top">
<p align="center">B</p>
</td>
<td width="95" valign="top">
<p align="center">PB0 – PB7</p>
</td>
<td width="76" valign="top">
<p align="center">Input</p>
</td>
<td width="170" valign="top">Input Data ADC 0809</td>
</tr>
<tr>
<td rowspan="6" width="37" valign="top">
<p align="center">C</p>
</td>
<td width="95" valign="top">
<p align="center">PC0</p>
</td>
<td width="76" valign="top">
<p align="center">Output</p>
</td>
<td width="170" valign="top">Mengaktifkan Saklar A</td>
</tr>
<tr>
<td width="95" valign="top">
<p align="center">PC1</p>
</td>
<td width="76" valign="top">
<p align="center">Output</p>
</td>
<td width="170" valign="top">Mengaktifkan Saklar B</td>
</tr>
<tr>
<td width="95" valign="top">
<p align="center">PC2</p>
</td>
<td width="76" valign="top">
<p align="center">Output</p>
</td>
<td width="170" valign="top">Mengaktifkan Saklar C</td>
</tr>
<tr>
<td width="95" valign="top">
<p align="center">PC3</p>
</td>
<td width="76" valign="top">
<p align="center">Output</p>
</td>
<td width="170" valign="top">Start/ALE ADC 0809</td>
</tr>
<tr>
<td width="95" valign="top">
<p align="center">PC4</p>
</td>
<td width="76" valign="top">
<p align="center">Input</p>
</td>
<td width="170" valign="top">EOC/OE</td>
</tr>
<tr>
<td width="95" valign="top">
<p align="center">PC5 – PC7</p>
</td>
<td width="76" valign="top">
<p align="center">Input</p>
</td>
<td width="170" valign="top">Tidak dipakai</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Pemrograman dilakukan dengan format tertentu ke dalam register <em>control word</em> yang ada dalam PPI 8255 (perhatikan gambar di bawah ini)</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1183" title="adc8bit5_control" src="http://www.havetogether.com/wp-content/uploads/2009/12/adc8bit5_control.jpg" alt="adc8bit5_control" width="311" height="330" /></p>
<p style="text-align: justify;">Dari Tabel pemakaian PPI 8255 dan gambar di atas maka <strong>inisialisasi PPI 8255</strong> adalah seperti yang ditunjukkan berikut ini</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="34" valign="top">
<p align="center"><strong>D7</strong></p>
</td>
<td width="46" valign="top">
<p align="center"><strong>D6</strong></p>
</td>
<td width="46" valign="top">
<p align="center"><strong>D5</strong></p>
</td>
<td width="46" valign="top">
<p align="center"><strong>D4</strong></p>
</td>
<td width="49" valign="top">
<p align="center"><strong>D3</strong></p>
</td>
<td width="46" valign="top">
<p align="center"><strong>D2</strong></p>
</td>
<td width="49" valign="top">
<p align="center"><strong>D1</strong></p>
</td>
<td width="49" valign="top">
<p align="center"><strong>D0</strong></p>
</td>
</tr>
<tr>
<td width="34" valign="top">
<p align="center">1</p>
</td>
<td width="46" valign="top">
<p align="center">0</p>
</td>
<td width="46" valign="top">
<p align="center">0</p>
</td>
<td width="46" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
<td width="46" valign="top">
<p align="center">0</p>
</td>
<td width="49" valign="top">
<p align="center">1</p>
</td>
<td width="49" valign="top">
<p align="center">0</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Keterangan<br />
- D0 : PC0 – PC3 (<em>port</em> C<sub>lowwer</sub>), logika 0 = output<br />
- D1 : PB0 – PB7 (<em>port</em> B), logika 1 = input<br />
- D2 : Mode untuk <em>port</em> B, logika 0 = Mode 0<br />
- D3 : PC4 – PC7 (<em>port</em> C<sub>upper</sub>), logika 1 = input<br />
- D4 : PA0 – PA7 (<em>port</em> A), logika 0 = output<br />
- D5, D6 : Mode untuk <em>port</em> A, logika 0 = Mode 0<br />
- D7 : Mode Set Flag, logika 1 = Aktif</p>
<p style="text-align: justify;">Secara ringkas <strong>operasi dasar PPI 8255</strong> ditunjukkan dalam tabel di bawah ini</p>
<table style="height: 119px;" border="1" cellspacing="0" cellpadding="0" width="638">
<tbody>
<tr>
<td width="35" valign="top">
<p align="center"><strong>CS</strong></p>
</td>
<td width="38" valign="top">
<p align="center"><strong>RD</strong></p>
</td>
<td width="42" valign="top">
<p align="center"><strong>WR</strong></p>
</td>
<td width="31" valign="top">
<p align="center"><strong>A<sub>1</sub></strong></p>
</td>
<td width="31" valign="top">
<p align="center"><strong>A<sub>0</sub></strong></p>
</td>
<td width="89" valign="top">
<p align="center"><strong>Operasi</strong></p>
</td>
<td width="168" valign="top">
<p align="center"><strong>Tujuan</strong></p>
</td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">0</p>
</td>
<td width="42" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td rowspan="3" width="89">
<p align="center">Baca data</p>
</td>
<td width="168" valign="top"><em>Port </em>A</td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">0</p>
</td>
<td width="42" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="168" valign="top"><em>Port </em>B<em></em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">0</p>
</td>
<td width="42" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="168" valign="top"><em>Port </em>C<em></em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">1</p>
</td>
<td width="42" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td rowspan="4" width="89">
<p align="center">Tulis data</p>
</td>
<td width="168" valign="top"><em>Port </em>A<em></em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">1</p>
</td>
<td width="42" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="168" valign="top"><em>Port </em>B<em></em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">1</p>
</td>
<td width="42" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">0</p>
</td>
<td width="168" valign="top"><em>Port </em>C<em></em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">1</p>
</td>
<td width="42" valign="top">
<p align="center">0</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td width="168" valign="top"><em>Control Word   Register</em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">1</p>
</td>
<td width="38" valign="top">
<p align="center">x</p>
</td>
<td width="42" valign="top">
<p align="center">x</p>
</td>
<td width="31" valign="top">
<p align="center">x</p>
</td>
<td width="31" valign="top">
<p align="center">x</p>
</td>
<td rowspan="3" width="89">
<p align="center">8255 tidak aktif</p>
</td>
<td width="168" valign="top">3 <em>state</em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">1</p>
</td>
<td width="42" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">x</p>
</td>
<td width="31" valign="top">
<p align="center">x</p>
</td>
<td width="168" valign="top">3 <em>state</em></td>
</tr>
<tr>
<td width="35" valign="top">
<p align="center">0</p>
</td>
<td width="38" valign="top">
<p align="center">0</p>
</td>
<td width="42" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td width="31" valign="top">
<p align="center">1</p>
</td>
<td width="168" valign="top">Kondisi ilegal<em></em></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Berdasarkan inisialisasi PPI 8255 yang diberikan dan tabel operasi dasar PPI 8255 di atas serta desain pendekodean alamat diperoleh alamat untuk masing-masing <em>port</em> seperti tabel di bawah ini</p>
<table border="1" cellspacing="0" cellpadding="0" width="468">
<tbody>
<tr>
<td width="40" valign="top">
<p align="center"><strong>A9</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A8</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A7</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A6</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A5</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A4</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A3</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A2</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A1</strong></p>
</td>
<td width="40" valign="top">
<p align="center"><strong>A0</strong></p>
</td>
<td width="69" valign="top">
<p align="center"><strong>Aktif</strong></p>
</td>
</tr>
<tr>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="69" valign="top"><em>Port </em>A</td>
</tr>
<tr>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="69" valign="top"><em>Port </em>B<em></em></td>
</tr>
<tr>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="69" valign="top"><em>Port </em>C<em></em></td>
</tr>
<tr>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">0</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="40" valign="top">
<p align="center">1</p>
</td>
<td width="69" valign="top">Kendali<em></em></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Berikut penjelasannya: perhatikan kembali gambar desain pendekodean alamat, <strong>keluaran P mempunyai nilai sama dengan </strong><strong>masukan Q yang bersesuaian</strong>. Dari sifat ini Nilai A9 (P7) sama dengan Q7, artinya <strong>A9 berlogika 1 </strong>karena pin Q7 terhubung dengan V­<sub>CC</sub>, <strong>demikian juga dengan A8</strong>. Sedangkan <strong>A5 – A7 berlogika 0</strong> karena pin Q3 – Q5 terhubung dengan <em>ground</em>. Nilai <strong>A2 – A4 tergantung jumper pada input Q0, Q1, dan Q3</strong>. Jika kamu tidak memberikan jumper maka ketiganya berlogika 1, jika sebaliknya berlogika 0 (tabel di atas menunjukkan A2 &#8211; A4 berlogika 1, artinya tidak di-jumper). Selanjutnya untuk nilai<strong> A0 dan A1 didapat dari inisialisasi PPI 8255</strong>.</p>
<p style="text-align: justify;">Jadi kesimpulannya <em>port</em> A dialamati dengan nilai (011 0001 1100)<sub>bin</sub> atau 31CH, <em>port</em> B dialamati dengan nilai (011 0001 1101) <sub>bin</sub> atau 31DH, <em>port</em> C dialamati dengan nilai (011 0001 1110)<sub>bin</sub> atau 31EH, <em>port</em> kendali dialamati dengan nilai (011 0001 1111)<sub>bin</sub> atau 31FH.</p>
<p style="text-align: justify;">Alamat <em>port</em> kendali PPI yaitu : 31FH diisi dengan nilai 8AH (dari inisialisasi PPI 8255) atau dalam bahasa Delphi ditulis: Port[$31F] := $8A</p>
<p style="text-align: justify;">Secara visual komponen utama yang dipasang dalam rancangan antarmuka ADC seperti gambar dibawah ini</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1184" title="adc8bit6_adcvisual" src="http://www.havetogether.com/wp-content/uploads/2009/12/adc8bit6_adcvisual.jpg" alt="adc8bit6_adcvisual" width="580" height="263" /></p>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/antarmuka-adc.html" rel="bookmark">Antarmuka ADC</a><!-- (14.606)--></li>
		<li><a href="http://www.havetogether.com/parallel-port.html" rel="bookmark">Parallel Port</a><!-- (9.98445)--></li>
		<li><a href="http://www.havetogether.com/serial-port.html" rel="bookmark">Serial Port</a><!-- (9.18194)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/merancang-antarmuka-adc-8-bit-dengan-ppi-8255.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Antarmuka ADC</title>
		<link>http://www.havetogether.com/antarmuka-adc.html</link>
		<comments>http://www.havetogether.com/antarmuka-adc.html#comments</comments>
		<pubDate>Sun, 20 Dec 2009 11:35:15 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Instrumentasi]]></category>
		<category><![CDATA[antarmuka ADC]]></category>
		<category><![CDATA[hardware komputer]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=425</guid>
		<description><![CDATA[Antarmuka dipergunakan untuk dialog antara prosesor dengan peralatan peripheral. Antarmuka harus diaktifkan ketika prosesor akan membaca atau memberi keluaran data dari/ke peripheral..

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/merancang-antarmuka-adc-8-bit-dengan-ppi-8255.html" rel="bookmark">Merancang Antarmuka ADC 8 bit dengan PPI 8255</a><!-- (18.4053)--></li>
		<li><a href="http://www.havetogether.com/parallel-port.html" rel="bookmark">Parallel Port</a><!-- (9.47898)--></li>
		<li><a href="http://www.havetogether.com/serial-port.html" rel="bookmark">Serial Port</a><!-- (7.99956)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Antarmuka biasanya berkaitan dengan cara suatu besaran (<em>entity</em>) melewati suatu batas (<em>traversing a boundary</em>) sehingga menjadi besaran lain. Antarmuka menerima alamat, data dan sinyal kontrol melalui saluran I/O dan mentransfer informasi ke/dari prosesor melalui bus data.</p>
<p style="text-align: justify;">Antarmuka dipergunakan untuk dialog antara prosesor dengan peralatan peripheral. Antarmuka harus diaktifkan ketika prosesor akan membaca atau memberi keluaran data dari/ke peripheral. Cara untuk mengaktifkan antarmuka ada dua yaitu : I/O memori terpeta (<em>memory mapped I/O</em>) dan I/O terisolasi (<em>isolated I/O</em>).</p>
<p style="text-align: justify;">Pada I/O memori terpeta, setiap komponen antarmuka dipilih seperti memilih suatu register. Oleh karena itu, setiap komponen mempunyai alamat yang ditentukan dengan tepat. Alamat semua komponen I/O secara bersama-sama merupakan ruang alamat I/O dan dapat dengan sempurna dihubungkan dengan ruang alamat ROM/RAM. Sebagai konsekuensinya, antarmuka membutuhkan logika pengurai (dekoder). Jika alamat antarmuka ada pada bus alamat, maka dekoder akan memberikan sinyal sehingga komponen-komponen antarmuka dapat diaktifkan. Pengaktifan komponen-komponen antarmuka dilakukan dengan memberikan sinyal rendah (low) kepada <em>chip select</em> (CS).</p>
<p style="text-align: justify;">Pada I/O terisolasi, memori dan komponen I/O merupakan unit-unit dengan ruang alamat masing-masing. Untuk itu, I/O membutuhkan saluran pengendali dan alamat. Pada I/O terisolasi hanya terdapat dua instruksi yakni instruksi masuk dan instruksi keluar. Pada PC dipilih I/O terisolasi karena kebutuhan akan penyimpanan selalu bertambah.</p>
<p style="text-align: justify;">1. <strong>ADC (<em>Analog to Digital Converter</em>)</strong><br />
Proses mengubah sinyal analog menjadi sinyal yang ekivalen dalam bentuk digital disebut pengubahan analog ke digital (ADC). ADC yang paling banyak digunakan adalah ADC dengan metode pendekatan berulang (<em>successive-approximation</em>) dengan alasan waktu konversinya yang singkat dan konstan. ADC jenis ini terdiri atas perbandingan tegangan, pengubah digital ke analog (DAC), SAR (<em>successive-approximation register</em>) dan detak (<em>clock</em>). ADC membagi range tegangan masukan menjadi 2<sup>n</sup> – 1 band (pita) dengan n adalah jumlah bit dalam keluaran word. Hubungan antara tegangan input dan angka output adalah linear.</p>
<p style="text-align: justify;">Beberapa parameter yang menentukan mutu sebuah ADC, yaitu: kesalahan kuantisasi, ketidaklineran, kode tidak lengkap (hilang) dan waktu konversi. Resolusi suatu konverter A/D, yang dinyatakan dengan bit, menunjukkan tingkat ketelitian konverter A/D di dalam mengubah sinyal analog ke digital. Semakin banyak bitnya, maka semakin peka konverter A/D tersebut terhadap perubahan masukan analognya. Misalnya untuk konverter A/D 8 bit dengan jangkauan masukan 10 Volt, tegangan terkecil yang dapat dibedakan adalah 10/256 = 39.0625 mV, sedangkan pada konverter A/D 12 bit adalah 10/4096 = 2.44 mV.</p>
<p style="text-align: justify;">Kesalahan kuantisasi muncul karena keterbatasan variasi bit yang tersedia terhadap nilai-nilai analognya. Misalnya, pengukuran besaran analog dengan menggunakan konverter 8 bit. Besaran itu sendiri dapat mempunyai nilai sembarang yang bersifat malar. Sedangkan konverter 8 bit tersebut hanya dapat mengeluarkan nilai yang terbatas jumlahnya untuk mewakili nilai-nilai besaran analog tersebut.</p>
<p style="text-align: justify;">Karakteristik linier didekati dengan karakteristik bentuk tangga, sehingga timbul kesalahan kuantisasi sebesar setengah dari tinggi anak tangga. Karena tinggi anak tangga adalah sama dengan bit penting terendah (<em>Least Significant Bit</em>, LSB) dalam bilangan biner, maka kesalahan tersebut sama dengan setengah LSB. Kesalahan ini diperkecil dengan memperbanyak posisi biner.</p>
<p style="text-align: justify;">Di samping itu, masih terdapat kesalahan yang disebabkan karena komponen konverter yang tidak linier. Oleh produsen konverter, besar kesalahan ini dinyatakan sebagai ketidaklinieran dalam persentase dari LSB (dinyatakan dalam %).</p>
<p style="text-align: justify;">Kadang-kadang kombinasi bit tertentu tidak tersedia, dengan perkataan lain sebuah anak tangga dilompati. Kombinasi semacam ini disebut kode yang hilang (<em>missing code</em>). Kode yang hilang tidak terjadi bila kesalahan linieritas kurang dari ½ LSB.</p>
<p style="text-align: justify;">Waktu yang dibutuhkan oleh konverter A/D untuk mengubah tegangan menjadi kombinasi bit disebut dengan waktu konversi (<em>conversion time</em>). Waktu konversi ini pada konverter yang bekerja atas dasar prinsip pendekatan bertingkat tidak gayut pada besarnya tegangan yang diukur.</p>
<p style="text-align: justify;">2. <strong>Dekoder Alamat</strong><br />
Untuk memberikan alamat pada antarmuka digunakan dekoder alamat. Alamat yang dipilih adalah alamat yang belum dipakai komputer untuk mengalamati piranti lain. Jika alamat yang dikendalikan ada pada register alamat maka antarmuka dalam keadaan aktif, dan sebaliknya jika tidak ada. Alamat yang diambil berasal dari slot ekspansi yaitu A0 &#8211; A9 dan satu jalur AEN (<em>address enable</em>).</p>
<p style="text-align: justify;">2.1. <strong>Peta Alamat <em>Port</em> I/O</strong><br />
Peta alamat <em>port</em> I/O dibagi menjadi dua bagian, bagian pertama berada pada alamat 0000H – 01FFH, yaitu bagian untuk peralatan <em>port</em> I/O yang berada pada sistem board. Alamat ini digunakan untuk mengalamati peralatan pendukung unit pemroses mikro dan sistem input dan ouput yang ada pada sistem<em> board</em>.</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1168" title="antarmuka1_petaboard" src="http://www.havetogether.com/wp-content/uploads/2009/12/antarmuka1_petaboard.jpg" alt="antarmuka1_petaboard" width="358" height="267" /></p>
<p style="text-align: justify;">Gambar di atas memperlihatkan peta penggunaan <em>port</em> yang ada pada sistem <em>board</em>. Perlu dicatat bahwa alamat 00C0H – 01FFH tidak digunakan sebagai <em>port</em> I/O sekaligus. Alamat-alamat ini tidak dapat digunakan sebagai <em>port</em> input, tetapi bisa digunakan sebagai <em>port</em> ouput untuk digunakan dalam pendesainan antarmuka.</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1171" title="antarmuka2_petaslot" src="http://www.havetogether.com/wp-content/uploads/2009/12/antarmuka2_petaslot.jpg" alt="antarmuka2_petaslot" width="300" height="364" /></p>
<p style="text-align: justify;">Gambar di atas memperlihatkan bagian kedua dari peta alamat <em>port</em> I/O yang berada pada alamat 0200H – 03FFH. Alamat-alamat ini digunakan untuk mengalamati <em>card-card</em> yang terpasang dalam slot-slot ekspansi. Pada slot-slot ini biasanya dipasang <em>card-card</em> antarmuka yang akan meningkatkan unjuk kerja sistem.</p>
<p style="text-align: justify;">2.2. <strong>Teknik Pendekodean Alamat <em>Port</em> I/O</strong><br />
Teknik pengkodean alamat <em>port</em> I/O ada tiga macam yaitu Pendekodean Alamat Tetap, Pendekodean Alamat Dapat Dipilih dan Pendekodean Dengan Menggunakan PROM.</p>
<p style="text-align: justify;"><strong>Pengkodean Alamat Tetap,</strong> menggunakan alamat yang tidak dapat diubah sehingga akan timbul masalah jika alamat yang dirancang sama dengan alamat dari <em>port</em> I/O yang sudah ada tetapi rancangannya tidak rumit.</p>
<p style="text-align: justify;"><strong>Pengkodean Alamat Dapat Dipilih,</strong> alamatnya dapat diubah jika alamat yang digunakan sama dengan alamat <em>port</em> I/O yang sudah ada, dengan menggunakan sebuah pembanding misal pembanding 8 bit SN74LS688. Kadang-kadang, dalam satu <em>card</em> alamat-alamat yang akan didekodekan mempunyai perbedaan yang jauh, ini biasanya terjadi jika beberapa macam <em>card</em> dijadikan dalam satu <em>card</em> dan alamat dari masing-masing <em>card</em> harus dipertahankan.</p>
<p style="text-align: justify;">Jika digunakan sistem Pendekodean Alamat Tetap atau Pendekodean Alamat Dapat Dipilih akan memerlukan rangkaian yang sangat banyak dan rumit. Untuk mengatasinya digunakan PROM (<em>Programmable Read Only Memory</em>) untuk rangkaian pendekodean alamat. Suatu PROM jika dialamati akan mengeluarkan isi dari memori dengan alamat yang telah ditentukan tersebut. Jika PROM diisi dengan nilai-nilai tertentu maka dengan mudah dapat digunakan sebagai pendekodean alamat. PROM yang digunakan haruslah PROM dengan kecepatan tinggi, lebih cepat dari waktu minimum pendekodean, yaitu 92 nano sekon</p>
<p style="text-align: justify;">Nuwun..</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.havetogether.com/merancang-antarmuka-adc-8-bit-dengan-ppi-8255.html" rel="bookmark">Merancang Antarmuka ADC 8 bit dengan PPI 8255</a><!-- (18.4053)--></li>
		<li><a href="http://www.havetogether.com/parallel-port.html" rel="bookmark">Parallel Port</a><!-- (9.47898)--></li>
		<li><a href="http://www.havetogether.com/serial-port.html" rel="bookmark">Serial Port</a><!-- (7.99956)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/antarmuka-adc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
