FAQ |
Calendar |
![]() |
|
Programming Share, tanya jawab, saling bantu antar programmer dengan berbagai macam bahasa pemrograman. |
![]() |
|
Thread Tools |
#1
|
|||
|
|||
![]()
Yang mau belajr SQL sama2 sharing di sini ya...
Berikut ini contoh soalnya... Spoiler for ambil hanya angka di ujung kanan saja: Spoiler for contoh data: Quote: PERISMM 3D 16/05/08 7.65 BBTN 3D 16/05/08 7.65 PERISMM 3D 9/10/08 10.25 PERISMM 3D 01/02/10 6.25 PERISMM 3D 01/02/10 6.25 HSBC 3D 01/02/10 6.25 NIAGA 3D 01/05/09 8.25 PERISMM 3D 01/08/08 8.55 PERISMM 3D 01/10/09 6 BCA 3D 02/02/09 10.15 PERISMM 3D 02/03/09 9.50 PERISMM 3D 02/05/08 6.7 data seperti di atas, yang mau diambil hanya angka di ujung kanan saja Spoiler for solusinya: angka yang mau kita ambil posisinya selalu paling kanan, jadi kita bisa pakai fungsi right buat mengambilnya. kemudian angka di ujung dengan teks lainnya dipisahkan dengan spasi. Asalkan kita bisa hitung jumlah karakter dari ujung kanan sampai spasi pemisah tadi. nah... jika jumlah karakternya sudah kita dapat maka kita bisa pakai fungsi right untuk mengambil angka di kanan tersebut. pemecahannya sebenarnya mudah asal kita tahu yang kita inginkan. solusinya adalah seperti berikut ini, hanya bisa jalan di sql server 2005 ke atas karena pake CTE Code: with t as ( select 'PERISMM 3D 16/05/08 7.65' as data union all select 'BBTN 3D 16/05/08 7.65' as data union all select 'PERISMM 3D 9/10/08 10.25' as data union all select 'PERISMM 3D 01/02/10 6.25' as data union all select 'PERISMM 3D 01/02/10 6.25' as data union all select 'HSBC 3D 01/02/10 6.25' as data union all select 'NIAGA 3D 01/05/09 8.25' as data union all select 'PERISMM 3D 01/08/08 8.55' as data union all select 'PERISMM 3D 01/10/09 6' as data union all select 'BCA 3D 02/02/09 10.15' as data union all select 'PERISMM 3D 02/03/09 9.50' as data union all select 'PERISMM 3D 02/05/08 6.7' as data ) select right(data,charindex(' ',reverse(data))-1) as hasil from t Spoiler for outputnya: Code: hasil ------------------------ 7.65 7.65 10.25 6.25 6.25 6.25 8.25 8.55 6 10.15 9.50 6.7 (12 row(s) affected) Spoiler for perhitungan pakai view: Spoiler for pertanyaan: Quote: Originally Posted by ScreamX kalo misal'a ada perhitungan'a misal field nilai_a dan nilai_b dengan perhitungan (nilai_a+nilai_b) terus hasil ini di masukin ke field nilai_akhir dengan table yang berbeda.. Code: Table Mahasiswa create table Mahasiswa( NPM NUMBER(8)NOT NULL PRIMARY KEY, NAMA VARCHAR2(25), TGL_LAHIR DATE, ALAMAT VARCHAR2(25), KOTA VARCHAR2(15), TELP CHAR(13) ); Table MK create table Mata_Kuliah ( KD_MK CHAR(4) NOT NULL PRIMARY KEY, NAMA_MK VARCHAR2(15), SKS NUMBER(1) ); Table Nilai CREATE TABLE NILAI ( NPM number(8) NOT NULL, KD_MK CHAR (4) NOT NULL, NILAI_UTS NUMBER(5), NILAI_UAS NUMBER(5), CONSTRAINT PK_NILAI PRIMARY KEY(NPM, KD_MK), CONSTRAINT FK_NILAI_MAHASISWA FOREIGN KEY (NPM) REFERENCES MAHASISWA (NPM), CONSTRAINT FK_NILAI_MATA_KULIAH FOREIGN KEY(KD_MK) REFERENCES MATA_KULIAH(KD_MK) ); Table Nilai Hasil : Create table Hasil ( Npm number(8), Nama varchar(25), Nama_MK varchar(25), Sks number(1), Nilai_Hasil number(5) ); gan, tabel hasil tuh ngambil data dari tiap-tiap tabel, field nilai_hasil ngambil data dari hasil perhitungan field nilai_uts dan nilai_uas dari table Nilai gimana'a gan..? Spoiler for jawaban: Kalau maunya data nampil dengan field2 sepertidi tabel hasil, bisa pakai query saja Code: SELECT m.npm, m.nama, mk.nama_mk, mk.sks, (n.nilai_uts+n.nilai_uas)/2 as nilai_hasil FROM mahasiswa m JOIN mata_kuliah mk on m.npm = mk.npm JOIN nilai n on mk.kd_mk = n.kd_mk ini query standar bisa jalan di database (rdbms) mana aja Spoiler for TRIGGER in ACTION: Quote: Originally Posted by aditz.joe ![]() bahas ttg TRIGGER woii...minta link" belajar nya gitu..... Contoh penggunaan trigger untuk mencatat stock barang berdasarkan transaksi keluar masuk barang. Code: mysql> create table barang ( -> id int auto_increment, -> nama varchar(100) null, -> stock int not null default 0, -> primary key (id) -> ); Query OK, 0 rows affected (0.05 sec) mysql> create table transaksi ( -> id int auto_increment, -> tanggal date null, -> barang_id int null, -> quantity int not null default 0, -> primary key (id), -> foreign key (barang_id) references barang (id) -> ); Query OK, 0 rows affected (0.06 sec) Masukkan data barang satu per satu kemudian tampilkan isi tabel. Dapar terlihat di bawah, stock barang tersebut masih 0 (nol besar) Code: mysql> insert into barang (nama) values ('laptop'); Query OK, 1 row affected (0.00 sec) mysql> insert into barang (nama) values ('kamera'); Query OK, 1 row affected (0.00 sec) mysql> select * from barang; +----+--------+-------+ | id | nama | stock | +----+--------+-------+ | 1 | laptop | 0 | | 2 | kamera | 0 | +----+--------+-------+ 2 rows in set (0.00 sec) Sekarang buat trigger di tabel transaksi untuk mengupdate stock pada tabel barang sesuai dengan quantity yang dimasukkan ke dalam tabel transaksi. Code: mysql> delimiter $$ mysql> create trigger trg_transaksi_insert -> after insert on transaksi -> for each row begin -> update barang -> set barang.stock = barang.stock + new.quantity -> where barang.id = new.barang_id; -> end$$ Query OK, 0 rows affected (0.08 sec) mysql> delimiter ; Sekarang buat transaksi barang masuk Code: mysql> insert into transaksi (tanggal, barang_id, quantity) -> values ('2011-05-30', 1, 20); Query OK, 1 row affected (0.04 sec) mysql> insert into transaksi (tanggal, barang_id, quantity) -> values ('2011-05-30', 2, 50); Query OK, 1 row affected (0.01 sec) Tampilkan isi tabel barang dan.... Jreng... jreng... jreng.... data stock sudah ter-update Code: mysql> select * from barang; +----+--------+-------+ | id | nama | stock | +----+--------+-------+ | 1 | laptop | 20 | | 2 | kamera | 50 | +----+--------+-------+ 2 rows in set (0.00 sec) Sekarang coba buat transaksi barang keluar (quantity-nya kita buat minus) Dan lihatlah.... secara ajaib stock barang langsung berkurang ![]() Code: mysql> insert into transaksi (tanggal, barang_id, quantity) -> values ('2011-05-30', 2, -15); Query OK, 1 row affected (0.01 sec) mysql> select * from barang; +----+--------+-------+ | id | nama | stock | +----+--------+-------+ | 1 | laptop | 20 | | 2 | kamera | 35 | +----+--------+-------+ 2 rows in set (0.00 sec) Ini isi tabel transaksinya Code: mysql> select * from transaksi; +----+------------+-----------+----------+ | id | tanggal | barang_id | quantity | +----+------------+-----------+----------+ | 1 | 2011-05-30 | 1 | 20 | | 2 | 2011-05-30 | 2 | 50 | | 3 | 2011-05-30 | 2 | -15 | +----+------------+-----------+----------+ 3 rows in set (0.00 sec) Semoga berguna Spoiler for menghitung absensi pake group by: Quote: Originally Posted by pengumpul ![]() gan ane punya kasus mhn pencerahannya. ane pgn mengetahui jumlah absen masuk dari (bln 2 tgl 31) sampai (bln 3 tgl 1). mohon pencerahannya gan??? Silakan lihat query dasarnya seperti dibawah ini, Code: mysql> select * from pegawai; +----+-------+ | id | nama | +----+-------+ | 1 | ane | | 2 | udin | | 3 | jamal | | 4 | budi | +----+-------+ 4 rows in set (0.09 sec) mysql> select * from absen; +------+---------+---------+---------+ | id | tgl_msk | bln_msk | thn_msk | +------+---------+---------+---------+ | 1 | 30 | 2 | 2011 | | 2 | 30 | 2 | 2011 | | 3 | 30 | 2 | 2011 | | 1 | 31 | 2 | 2011 | | 2 | 31 | 2 | 2011 | | 3 | 31 | 2 | 2011 | | 4 | 31 | 2 | 2011 | | 1 | 1 | 3 | 2011 | | 3 | 1 | 3 | 2011 | | 2 | 1 | 3 | 2011 | +------+---------+---------+---------+ 10 rows in set (0.00 sec) mysql> select nama, count(*) as "jumlah masuk" -> from pegawai a join absen b on a.id=b.id; +------+--------------+ | nama | jumlah masuk | +------+--------------+ | ane | 10 | +------+--------------+ 1 row in set (0.03 sec) mysql> select nama, count(*) as "jumlah masuk" -> from pegawai a join absen b on a.id=b.id -> group by nama; +-------+--------------+ | nama | jumlah masuk | +-------+--------------+ | ane | 3 | | budi | 1 | | jamal | 3 | | udin | 3 | +-------+--------------+ 4 rows in set (0.00 sec) Contoh di atas menggunakan database mysql, jelas terlihat bahwa ketika kita lupa memberikan clause group by, maka query tetapjalan namun tidak memberikan hasil yang kita ingnkan. Hasil yang benar baru muncul ketika kita berikan cluase group by. untuk menampilkan nama tertentu silakan masuk filter nama='...' ke where clause saja. Spoiler for Trit ane yang lain: Programmer berdasarkan LEVEL-nya Belajar SQL bareng Aplikasi Database Sederhana (C#) Penampakan TV Raksasa di Indonesia Jika Istilah Komputer Diterjemahkan ke Bahasa Malaysia </div> |
![]() |
|
|