Aggregate Function MS SQL Server

Fungsi aggregate merupakan fungsi yang mengembalikan nilai rangkuman atau dengan kata lain melakukan perhitungan pada seperangkat nilai dan mengembalikannya dalam single value (nilai tunggal).

Misalkan kita mempunyai data seperti table dibawah ini :






COUNT()
Untuk menghitung jumlah baris yang dihasilkan  berdasarkan kondisi tertentu.
misalkan :

SELECT COUNT(*) FROM pegawai WHERE gaji_pokok>='200000'




AVG()
Menghasilkan nilai rata-rata, tidak seperti fungsi min dan max hanya dapat menerima data numerik sebagai parameter.

SELECT AVG(gaji_pokok) from pegawai




MIN()
Mengembalikan nilai terkecil dalam satu set.

SELECT MIN(gaji_pokok) from pegawai




MAX()
Mengembalikan nilai terbesar dalam satu set

SELECT MAX(gaji_pokok) from pegawai




SUM()
Berfungsi untuk mengembalikan jumlah dari sebuah parameter nilai, tidak seperti max dan min, sum hanya dapat menerima ekspresi numerik.

SELECT SUM(gaji_pokok) from pegawai 




VAR()
Fungsi ini dipergunakan untuk menghitung varian statistik dari semua nilai, menggunakan bertipe numeric dan menghasilkan nilai float.

SELECT VAR(gaji_pokok) FROM pegawai




STDEV()
Dipergunakan untuk menghitung standar deviasi dan hanya dapat digunakan pada column yang tipe datanya numerik, fungsi stdev selalu mengembalikan nilai float dari hasil perhitungan fungsi.

SELECT STDEV(gaji_pokok) FROM pegawai 


Using View Ms. SQL Server

Mungkin beberapa teman yang belajar SQL Server sudah tidak asing lagi dengan yang namanya View, memang view sangat berguna untuk menyelesaikan beberapa case terutama pada pemprosesan table. View adalah table yang dihasilkan dari hasil query di MS. SQL Server, dibentuk dari satu atau beberapa table sekaligus.

Create View
Untuk membuat sebuah view sintaks penulisannya adalah

CREATE VIEW view_name [nama_kol1, nama_kol2, ...] as  Select_Statement

Alter View
Untuk mengubah atau memodifikasi sebuah view yang sudah dibuat sintaks penulisannya :

ALTER VIEW view_name [nama_kol1, nama_kol2, ...] as  Select_Statement

Drop View
Jika ingin mengapus / delete view gunakan sintaks :

DROP VIEW view_name

Untuk lebih memahami mengenai view, sekarang buat table pegawai dengan nama database dbpemerintahan seperti gambar dibawah ini


Misalkan ingin membuat view  manager logistik berisi informasi mengenai pegawai yang ada di divisi logistik.
CREATE VIEW manager_logistik AS
               SELECT * FROM pegawai WHERE divisi='logistik'
Jika menginginkan tidak semua column ditampilkan di view dan menentukan nama column yang ada di view bisa dengan menggunakan contoh perintah ini
CREATE VIEW manager_umum (umum_nip,umum_nama_depan, umum_nama_belakang, umum_gaji_pokok) AS select nip, nama_depan, nama_belakang, gaji_pokok from pegawai where divisi='umum' 

Semisalkan ditambahkan data baru ke dalam table pegawai maka prosesnya akan berpengaruh kepada view yang telah dibuat, dari hasil yang ada coba ketikan :
SELECT * FROM manager_umum
data akan tampil seperti gambar diatas,  yaitu berisi data pegawai yang berada pada divisi umum.
Sekarang buat view lagi dengan mengetikan :
CREATE VIEW hitung_umum (jlh_peg) AS SELECT count(*) FROM PEGAWAI WHERE divisi='umum' 
Perintah ini dipergunakan untuk menghitung jumlah data yang ditemukan dengan kondisi divisinya sama dengan umum.
SELECT * FROM hitung_umum
hasilnya berjumlah 2,
Coba tambahkan data ke dalam table pegawai dengan mengetikan :
INSERT INTO pegawai values ('1012','roger','smith','80000','umum')
Check kembali view yang telah dibuat, data view otomatis terupdate sesuai dengan kondisi terakhir  dari dua orang bertambah satu menjadi 3 pegawai, begitu juga dengan jumlah pegawai yang ada di view hitung_total_umum.

Index Table Clustered and Nonclustered SQL Server

Penggunaan index di table microsoft sql server pada dasarnya berfungsi untuk mengurutkan data sehingga proses pencarian set data bisa lebih cepat karena data sudah tersusun dengan kondisi tertentu.

Command index yang digunakan adalah :

CREATE INDEX [Nama_Index] ON [Nama_Table] ( [Nama_Kolom] [ASC/DESC] )

kebiasaan saya dalam penamaan sebuah index table dengan menyebutkan Idx_ di depan nama table yang saya index itu sendiri.

Contohnya :

CREATE INDEX idx_nip_pegawai ON pegawai (nip ASC )

Untuk melihat index yang telah dibuat melalui SQL Server Management Studio pada pada :

Database -> Tables -> Nama Tabel -> Indexes

Untuk menghapus index yang sudah dibuat bisa menggunakan perintah :

DROP [Nama_Table.Nama_Index]

Dengan melakukan index pada table akan mempercepat proses pencarian atau pemrosesan data akan tetapi penentuan column index juga harus hati-hati, karena tidak semua column perlu dilakukan pengindexan, jika jumlah data record yang ditampung masih sedikit tidak terlihat pengaruhnya akan tetapi jika isi data telah menjadi besar maka akan berdampak pada performance database.

Jika data yang ditampung nantinya besar, lebih elegan jika menggunakan pengindexan clustered maupun nonclustered, tergantung kondisi yang memungkinkan dan dianggap paling cocok.


Ada beberapa perbedaan clustered index dan nonclustered index pada sql server yaitu dalam clustered index hanya terdiri satu dalam satu table atau hanya dapat diterapkan satu kali pada satu table, sedangkan nonclustred boleh lebih dari satu (banyak). Selain itu clustered index lebih cepat karena menyatu dengan fisik table dan tidak memerlukan memory tambahan sedangkan nonclustered index memerlukan memory tambahan.

Clustered Index
Saat create table dan belum ada clusterd index, maka SQL Server secara otomatis menjadikan primary key sebagai clusterd index, di clustred index boleh memiliki 2 kolom yang dikenal dengan composite clustered index.  Jika clustered index yang terbentuk otomatis oleh primary key constraint terhapus maka primary key juga akan ikut terhapus pada table tersebut. Yang harus diperhatikan yaitu clusterd index yang berasal dari primary key tidak bisa dihapus menggunakan query penghapusan. Penggunaan clustered index sangat baik ketika memperbaharui data atau menghasilkan data.

Kalau menurut pemahaman saya pribadi clustered index ini ibarat sebuah buku kamus, yang susunan kata demi kata sudah tersusun sesuai susunan abjad,  sehingga memudahkan pencarian kata ( jadi ingat waktu sma dulu kalau pelajaran bahasa inggris bawa kamus besar)

Command Clustered Index :

CREATE CLUSTERED INDEX [Nama_Index] ON [Nama_Table] ( [Nama_Kolom1] [ASC/DESC], [Nama_Kolom2] [ASC/DESC])


Nonclustered Index
setiap kali membuat nonclustered index maka akan membentuk table tambahan yang berisi data index dalam artian data hasil index terpisah dari table sumber. Jadi jika diasumsikan non clustered index ini seperti bagian index dari sebuah buku atau skripsi, ...

Command Non-clustered Index :

CREATE NONCLUSTERED INDEX [Nama_Index] ON [Nama_Table] ( [Nama_Kolom1] [ASC/DESC], [Nama_Kolom2] [ASC/DESC])

Sebagai contoh :

Buat table dengan nama pegawai pada database dbpemerintah dengan isian data seperti tampilan berikut :

Sebagai contoh misalkan kita memiliki database dengan nama dbpemerintah dan table pegawai, dengan isi data seperti gambar dibawah ini :





Terlihat isi column nip, nama depan nama belakang dan gaji pokok belum tersusun rapi. sekarang coba gunakan perintah clustered index

CREATE CLUSTERED INDEX idx_nm_depan on pegawai(nama_depan)

lihat hasilnya,




ketika melakukan query select table pegawai, sudah tersusun berdasarkan  nama depan secara ASC default jika tidak menyebukan saat melakukan create clustered index. Jika melakukan insert data maka data akan langsung di urutkan ASC berdasarkan kolom nama_depan.

Bagaimana jika ingin mengurutkan nama depan ASC dan nama belakang ASC berdasarkan nama depan. apa kah harus create clustered index lagi ?, jawabannya tidak, karena clustered index hanya bisa dibuat satu kali. Jika ingin melakukan hal tersebut delete dulu index yang pernah dibuat setelah itu baru buat kembali clustered index index multiple column dengan perintah

CREATE CLUSTERED INDEX idx_nm_depan_belakang ON pegawai (nama_depan ASC, nama_belakang ASC)

Setelah ini mari dicoba menggunakan non clustered index, sebenarnya sama saja, hanya saja jika menggunakan non clustered index tidak merubah data misalkan jika saat awal masih terlihat data yang tidak berurutan, setelah menggunakan non clustered index maka data yang ditampilkan masih tetap tidak berurutan (sorting).

CREATE NONCLUSTERED INDEX idx_nm_dpn_nm_blk ON pegawai(nama_depan ASC, nama_belakang ASC)

untuk mengetahui informasi mengenai index dari sebuah table bisa mengetikan perintah

sp_helpindex pegawai



Sekarang coba melakukan query pencarian dengan mengetikan

SELECT * FROM pegawai WHERE nama_depan LIKE '%a'


Keuntungan dan kerugian menggunakan index 
keuntungannya yaitu ketika melakukan query akan terasa lebih cepat daripada tidak melakukan pengindexan, namun kerugiannya jika index yang dibuat banyak jika terjadi insert edit dan delete maka prosesnya akan berulang kali sesuai jumlah index yang dibuat berimbas pada performance,  jika data index  tidak ditemukan maka proses akan dimulai dari awal lagi.
Tutorial Belajar MySQL Part 2: Sejarah MySQL dan Masa Depan MySQL

Tutorial Belajar MySQL Part 2: Sejarah MySQL dan Masa Depan MySQL

Kisah tentang UNIREG dan Tcx

Cerita tentang MySQL bermula pada tahun 1979, ketika Michael Widenius (a.k.a. Monty), seorang programmer asal Swedia, mengembangkan sebuah sistem database sederhana yang dinamakan UNIREG. UNIREG ini menggunakan koneksi low-level ISAM database engine dengan indexing (baca : sistem database sederhana yang mendukung index).
Monty bekerja pada perusahaan bernama TcX di Swedia. TcX pada tahun 1994 mulai mengembangkan aplikasi berbasis web, dan berencana menggunakan UNIREG sebagai sistem databasenya. Namun malang bagi Monty, UNIREG dianggagap tidak cocok untuk database yang dinamis seperti web.
TcX mencoba mencari alternatif sistem database lainnya, salah satunya adalah mSQL (miniSQL), sebuah RDBMS yang tidak terlalu mahal dan hampir open source, maksudnya jika anda membeli aplikasi ini, anda juga akan mendapatkan source code nya juga. Namun mSQL versi 1 ini juga memiliki kekurangan, yaitu tidak mendukung indexing, sehingga performanya tidak terlalu bagus.
Dengan hasutan petinggi-petinggi TcX, Monty mencoba menghubungi David Hughes (programmer yang mengembangkan mSQL) untuk menanyakan apakah ia tertarik mengembangkan sebuah konektor di mSQL yang dapat dihubungkan dengan UNIREG ISAM sehingga mendukung indexing. Pada saat itu Hughes menolak, dengan alasan sedang mengembangkan teknologi indexing yang independen untuk mSQL versi 2.
Michael "Monty" Widenius
Dikarenakan penolakan David Hughes, TcX (dan juga Monty) akhirnya memutuskan untuk merancang dan mengembangkan sendiri konsep sistem database baru. Sistem ini merupakan gabungan dari UNIREG dan mSQL (yang source codenya dapat bebas digunakan). Sehingga pada May 1995, sebuah RDBMS baru, yang dinamakan MySQL dirilis.
David Axmark dari Detron HB, rekanan TcX mengusulkan agar MySQL di ‘jual’ dengan model bisnis baru. Ia mengusulkan agar MySQL dikembangkan dan dirilis dengan gratis. Pendapatan perusahaan selanjutnya di dapat dari menjual jasa “support” untuk perusahaan yang ingin mengimplementasikan MySQL. Konsep bisnis yang juga diterapkan perusahaan-perusahaan Open Source lainnya.

Asal Nama MySQL

Asal penamaan MySQL sendiri agak unik. Monty berkata :
“It is not perfectly clear where the name MySQL derives from. TcX’s base directory and a large amount of their libraries and tools have had the prefix ‘My’ for well over ten years. However, my daughter (some years younger) is also named My. So which of the two gave its name to MySQL is still a mystery.”
Berbagai sumber menyatakan, bahkan juga di situs MySQL sendiri bahwa “My” dari MySQL berasal dari nama anak perempuan Monty. Namun seperti kutipan diatas, Monty pun mengakui bahwa selama ia di TcX, library dan aplikasi yang dikembangkan perusahaan itu juga banyak dimulai dengan awalan “My”.
Logo lumba-lumba dalam lambang MySQL di namai Sakila, yang berasal dari sebuah kontest “Name the Doplhin” yang diadakan MySQL AB. Nama Sakila ini diajukan oleh  Ambrose Twebaze, seorang programmer open source dari Swaziland, Afrika. ‘Sakila‘ memiliki akar dari bahasa Siswati, bahasa yang digunakan di Swaziland.
MySQL 'Sakila' Logo

MySQL dan MySQL AB

Kembali ke kisah MySQL, Pada tahun 1995 itu juga, TcX berubah nama menjadi MySQL AB, dengan Michael Widenius, David Axmark dan Allan Larsson sebagai pendirinya. Titel “AB” dibelakang MySQL, adalah singkatan dari “Aktiebolag”, istilah PT (Perseroan Terbatas) bagi perusahaan Swedia.
MySQL AB menjadi perusahaan di belakang MySQL, menyediakan jasa dan bertanggung jawab dalam mengembangkan, memasarkan, dan menyediakan dukungan untuk MySQL. MySQL sendiri dirilis dengan “dual licencing“, atau dua lisensi yakni versi gratis dan versi berbayar.
Lisensi pertama di rilis dibawah GNU GPL (General Public License – atau dikenal juga dengan Gak Pakai Lisensi). Lisensi GPL ini membebaskan anda menggunakan MySQL tanpa membayar loyalti kepada MySQL AB, dengan beberapa syarat tertentu. Misalnya, jika anda menggunakan MySQL dalam aplikasi yang anda buat, aplikasi tersebut juga harus bersifat gratis dan berada di bawah lisensi GPL.
Lisensi kedua di peruntukkan bagi perusahaan-perusahaan komersil, maupun pengembang software yang berniat menjual aplikasinya, dan menggunakan MySQL sebagai databasenya. Untuk keperluan ini, anda diharuskan membeli lisensi komersial dari MySQL AB. Lebih lanjut tentang permasalahan seputar lisensi MySQL, dapat mengunjungi situs MySQL.
MySQL AB juga memegang hak copyright dari source code MySQL dan pemilik hak merk dagang “MySQL”. Dengan kata lain, walaupun kita memiliki source code MySQL, namun sistem database maupun aplikasi yang kita buat tidak boleh menggunakan merk “MySQL” tanpa membayar loyalti kepada pihak MySQL AB. Hal ini pula yang menjelaskan mengapa salah satu aplikasi administasi MySQL berbasis web PhpMyAdmin, tidak menggunakan kata “MySQL” pada nama programnya.

Sang Penguasa pasar database mulai mendekat: Oracle dan Sun Microsystem

Pada tahun-tahun berikutnya, MySQL AB semakin berkembang. Di tahun 2002, MySQL AB telah memiliki  kantor pusat baru di Cupertino, California, Amerika Serikat, selain di negara asalnya, Swedia. Perkiraan pengguna aktif setidaknya sudah mencapai 3 juta pengguna.
Tahun 2005 MySQL AB merilis MySQL 5. MySQL versi 5 ini menargetkan pengguna-pengguna perusahaan, dengan meyediakan fasilitas-fasilitas tambahan baru, seperti stored procedures, triggers, views, cursors, distributed transactions, dan federated storage engines. Dengan model bisnis dan aplikasi yang sudah lengkap, MySQL mulai menjadi ancaman bagi raksasa industri database lainnya, terutama Microsoft SQL Server dan Oracle.
Mรฅrten Mickos, CEO MySQL, menkonfirmasi bahwa di tahun 2006, Oracle pernah berniat membeli MySQL, namun Larry Ellison, CEO Oracle saat itu, berkomentar :
“We’ve spoken to them, in fact we’ve spoken to almost everyone. Are we interested? It’s a tiny company. I think the revenues from MySQL are between $30 million and $40 million. Oracle’s revenue next year is $15 billion.”
Sebuah pernyataan yang ditutup-tutupi, karena pada tahun itu juga Oracle telah membeli Sleepycat, sebuah perusahaan yang mengembangkan Berkeley DB transactional storage engine bagi MySQL, bahkan sebelumnya Oracle juga telah membeli Innobase, perusahaan di balik InnoDB storage engine MySQL.

Akuisisi MySQL AB oleh Sun Micosystem

Tahun 2008 merupakan akhir bagi MySQL AB sebagai perusahaan yang berdiri sendiri, ketika Sun Microsystems membeli MySQL AB seharga US $1 Milliar. Selayaknya proses akuisisi, seluruh manajemen MySQL AB, menjadi bagian dari ribuan karyawan SUN lainnya, termasuk Michael Widenius (Monty) dan David Axmark (2 orang pendiri MySQL AB). Akan tetapi tak berapa lama kemudian, keduanya mulai merasa tidak nyaman dan sering mengkritisi kebijakan SUN, sehingga mereka memutuskan keluar dari perusahaan itu.
Mรฅrten Mickos, CEO MySQL AB yang selama ini memimpin MySQL juga meninggalkan SUN tahun 2009. Sehingga MySQL praktis telah kehilangan pemimpin bisnis dan pendiri yang telah membuat MySQL sesukses sekarang. Dan akhirnya April 2009, raksasa di industri database: Oracle, mulai mendekati Sun Microsystems untuk mengakuisisinya.

Gerakan “Save MySQL

Kabar akuisisi ini seolah-olah menjadi kiamat untuk MySQL. Sebuah gerakan “Save MySQL” didirikan untuk menolak akuisisi ini. Gerakan ini di prakarsai oleh Monty Widenius sendiri (pendiri MySQL), dan didukung oleh sekitar 50.000 lebih pengembang serta programmer dari seluruh dunia. Gerakan ini mendesak Komisi Ekonomi Eropa untuk menolak proses akuisisi SUN Microsystem oleh Oracle. Berbagai pemimpin organisasi Free Software juga ikut dalam gerakan ini.
Save MySQL

Akuisisi Sun Microsystem (dan juga MySQL) oleh Oracle Corporation

Gerakan ini setidaknya berhasil membujuk komisi anti monopoli eropa, untuk menyetujui proses akuisisi dengan syarat Oracle meneruskan proyek MySQL setidaknya sampai 2015. Namun banyak pengamat mengatakan bahwa berbagai tekanan juga di lakukan oleh pihak Oracle agar akuisisi ini berlangsung mulus, sehingga Oracle Corporation secara resmi mengakuisisi Sun Microsystem (dan juga MySQL !) seharga US $ 7,4 Milyar pada 27 Januari 2010.
Oracle MySQL Logo

Masa Depan MySQL

Akhir kisah, setidaknya kita masih bisa menggunakan MySQL sampai dengan 2015, sesuai dengan janji Oracle. Tetapi, apakah kedepannya MySQL masih dirilis dengan gratis, atau dijadikan salah satu produk berbayar oleh Oracle? kita hanya bisa berharap.
Di lain pihak , Monty Widenius, diam-diam telah memulai sebuah proyek baru, MariaDB, yang memiliki kode dasar yang sama dengan MySQL 5.1. Apakah MariaDB merupakan “the next generation” dari RDBMS gratis penerus MySQL? atau MariaDB nantinya akan tenggelam diantara RDBMS lainnya yang juga banyak bermunculan? mari kita ikuti terus perkembangannya.
Kisah ini setidaknya juga menjadi gambaran, bagaimana perusahaan raksasa, seperti Oracle, menggunakan kakuatan kapitalisnya untuk “mencaplok” saingan-saingan untuk tumbuh lebih besar lagi. MySQL sekarang secara resmi menggunakan logo oracle dalam produk-produknya.

Untuk tutorial MySQL selanjutnya kita akan membahas sedikit teori tentang database, sehingga dapat menjadi dasar bagi kita sebelum menginstall aplikasi MySQL.
Tutorial Belajar MySQL Part 1: Pengertian MySQL dan Kelebihan MySQL

Tutorial Belajar MySQL Part 1: Pengertian MySQL dan Kelebihan MySQL

Mengawali tutorial belajar MySQL, pada Tutorial MySQL kali ini kita akan membahas tentang pengertian MySQL dan kelebihan MySQL jika dibandingkan dengan aplikasi database lainnya. Kepopuleran MySQL tidak hanya karena gratis, tetapi juga merupakan sebuah aplikasi database yang dapat disandingkan dengan aplikasi database berbayar lain, seperti Oracle dan Microsoft SQL Server.
Kepopuleran MySQL juga disebabkan karena MySQL merupakan salah satu aplikasi standar dalam pengembangan web, bersama dengan Web Server Apache, dan bahasa pemograman PHP.

Pengertian MySQL sebagai RDBMS
Bagi mahasiswa maupun web developer, kalau bicara database, kemungkinan besar akan membicarakan MySQL. Tapi, kenapa harus MySQL? Bagaimana dengan Oracle? Jawaban singkat, padat dan tepat adalah: gratis dan user friendly.
MySQL adalah salah satu aplikasi RDBMS (Relational Database Management System). Pengertian sederhana RDBMS adalah: aplikasi database yang menggunakan prinsip relasional. Apa itu prinsip relasional? Kita akan membicarakannya dalam tutorial berikutnya.
MySQL juga bukan satu-satunya RDBMS, list lengkapnya ada di wikipedia. Diantaranya yang banyak dikenal adalah: Oracle, Sybase, Microsoft Access, Microsoft SQL Server, dan PostgreSQL.
MySQL bersifat gratis dan open source. Artinya setiap orang boleh menggunakan dan mengembangkan aplikasi ini. Namun walaupun gratis, MySQL di support oleh ribuan programmer dari seluruh dunia, dan merupakan sebuah aplikasi RDBMS yang lengkap, cepat, dan reliabel.
Berikut beberapa keunggulan MySQL dibandingkan dengan RDBMS lainnya:

Speed

Sebuah studi dari eWeek di February 2002 yang membandingkan performa kecepatan MySQL dengan RDBMS lainnya, seperti Microsoft SQL Server 2000, IBM DB2, Oracle 9i dan Sybase :
MySQL has the best overall performance and that MySQL scalability matches Oracle … MySQL had the highest throughput, even exceeding the numbers generated by Oracle.”
Yang terjemahan bebasnya, MySQL memiliki kecepatan yang lebih dibandingkan pesaing yang berbayar. Bagi anda ingin membaca paper tersebut, tersedia di situs MySQL

Reliability

Biasanya sesuatu yang gratis susah diandalkan, bahkan banyak bug dan sering hang. Tidak demikian dengan MySQL, karena sifatnya yang open source, setiap orang dapat berkontribusi memeriksa bug dan melakukan test case untuk berbagai skenario yang memerlukan sistem 24 jam online, multi-user dan data ratusan GB. Hasilnya, MySQL merupakan RDBMS yang reliabel namun memiliki performa diatas rata-rata.

Skalability

MySQL dapat memproses data yang sangat besar dan kompleks, tanpa ada penurunan performa yang berarti, juga mendukung sistem multi-prosesor. MySQL juga dipakai oleh perusahaan-perusahaan besar di dunia, seperti Epson, New York Times, Wikipedia, Google, Facebook, bahkan NASA.

User Friendly

Instalasi dan mempelajari MySQL cukup mudah dan tidak dipusingkan dengan banyak settingan. Cukup download aplikasi MySQL dan install, kita dapat menggunakan MySQL dalam waktu kurang dari 5 menit (dengan asumsi tidak mati lampu).

Portability and Standard Compliance

Database MySQL dapat dengan mudah berpindah dari satu sistem ke sistem lainnya. Misalkan dari sistem Windows ke Linux. Aplikasi MySQL juga dapat berjalan di sistem Linux (RedHat, SuSE, Mandrake, Debian), Embedded Linux (MontaVista, LynuxWorks BlueCat),Unix (Solaris, HP-UX, AIX), BSD (Mac OS X, FreeBSD), Windows (Windows 2000, Windows NT) dan RTOS (QNX).

Multiuser Support

Dengan menerapkan arsitektur client-server. Ribuan pengguna dapat mengakses database MySQL dalam waktu yang bersamaan.

Internationalization

Atau dalam bahasa sederhananya, mendukung beragam bahasa. Dengan dukungan penuh terhadap unicode, maka aksara non-latin seperti jepang, cina, dan korea bisa digunakan di dalam MySQL.

Wide Application Support

Biasanya database RDBMS tidak digunakan sendirian, namun ditemani dengan aplikasi atau bahasa pemograman lainnya untuk menyediakan interface, seperti C, C++, C#, Java, Delphi, Visual Basic,  Perl Python dan PHP. Kesemua itu di dukung oleh API (Application Programming Interface) oleh MySQL.

Open Source Code

Kitapun bisa (jika mampu dan mengerti), mengembangkan MySQL dengan mempelajari kode programmnya. MySQL di kembangkan dengan bahasa C and C++. Bahkan sudah terdapat berbagai variasi rasa RDBMS baru yang dikembangkan dari code MySQL, diantaranya: Drizzle, MariaDB, Percona Server dan OurDelta.

Sekian tentang pengertian dan kelebihan MySQL, serta alasan kenapa MySQL lebih banyak digunakan dan populer di kalangan web programmer. Namun jika kita bertanya kepada pegawai IT perusahaan enterprise besar, mereka mungkin akan menyebutkan Oracle atau Microsoft SQL Server sebagai RDBMS favorit.

Installasi SQL Server 2016 Cepat dan Mudah

Beberapa hari yang lalu versi Microsoft SQL Server 2016 sudah tersedia di website Microsoft, dan seperti yang terdahulu tersedia versi Express Edition. Penasaran dengan apa saja yang baru dari SQL  Server 2016 ini saya coba download.

Link Download tersedia pada https://www.microsoft.com/en-us/download/details.aspx?id=52679

Setelah mendowload beberapa lama, ternyata proses installasi sangat mudah, walau mudah tetap harus memiliki akses internet yang lumayan tinggi agar bisa cepat selesai proses installasinya.




Kebetulan disini menggunakan koneksi internet Indihome dari Telkom 10 Mbps, perlu waktu kurang lebih sekitar 25 menit untuk installasinya.
Perlu diperhatikan pada saat installasi, untuk Microsoft SQL Server Management Studio tidak include secara default, akan tetapi dimudahkan dengan adanya pilihan untuk melakukan installasi tersendiri.

Untuk pilihan saat ini ada dua yang versi 16.5 untuk penggunaan di production, satunya lagi versi 17.0 RC1 , tapi tidak direkomendasikan. Jadi pilih saja yang bersi 16.5 nanti akan ada proses download dan proses installasi awal segera berlanjut.


Union Except Intersect Table MS SQL Server

Pada MS SQL Server tersedia fasilitas Union, Excepet dan Intersect yang digunakan untuk mempermudah query dalam sebuah table, ada beberapa perbedaan penggunaan pada ketiga fasilitas tersebut.



  • Union

Dipergunakan untuk menggabungkan dua atau lebih hasil query select kedalam satu buah output.



untuk memahami pernggunaan union sql server perhatikan contoh dibawah ini, buat table pelanggan dan table perusahaan yang nantinya dari kedua table tersebut akan digabungkan

CREATE TABLE pelanggan
(
   id_pelanggan int,
   nama_depan varchar(64),
   nama_belakang varchar(64),
   nomor_telpon varchar(30),
   alamat varchar(100)
)

CREATE TABLE perusahaan
(
  id_perusahaan int,
  nama_pemilik varchar(64),
  nama_perusahaan varchar(64),
  nomor_telpon varchar(30),
  alamat varchar(100)
)

setelah membuat table di MS SQL Server setelah itu isikan, dengan dengan data yang ada dibawah ini pada table pelanggan :

INSERT INTO  pelanggan (id_pelanggan,nama_depan,nama_belakang,nomor_telpon,alamat) VALUES ('1','maman','suparman','(+62)8111','jawa barat')

INSERT INTO pelanggan (id_pelanggan,nama_depan,nama_belakang,nomor_telpon,alamat) VALUES ('2','anang','gulali','(+62)8213','kalimantan selatan')

INSERT INTO pelanggan (id_pelanggan,nama_depan,nama_belakang,nomor_telpon,alamat) VALUES ('3','donnie','subara','(+62)8111','jakarta')

INSERT INTO pelanggan (id_pelanggan,nama_depan,nama_belakang,nomor_telpon,alamat) VALUES ('4','imade','nyoman','(+62)8111','denpasar')

dan ini pada table perusahaan

INSERT INTO  perusahaan (id_perusahaan,nama_pemilik,nama_perusahaan,nomor_telpon,alamat) VALUES  ('100', 'jaja', 'bandung enterprise', '(+62)9992','indonesia')

INSERT INTO perusahaan (id_perusahaan,nama_pemilik,nama_perusahaan,nomor_telpon,alamat) VALUES ('200', 'joe', 'banjarlab tbk', '(+62)9995','indonesia')

sehingga terlihat 2 buah table dengan data seperti ini

table pelanggan




table perusahaan



setelah itu baru coba perintah union di ms sql server dengan perintah

SELECT 'pelanggan' as jenis,
                     nomor_telpon,
     alamat
FROM pelanggan
UNION
SELECT 'perusahaan', 
                     nomor_telpon,
                     alamat
FROM perusahaan

hasil yang tampil adalah :



mungkin ada yang bertanya, bagaimana menyatukan kedua table jika ada field yang berbeda, caranya cukup dengan menjadikan alias dari field yang ingin dibuat begitu juga jika field yang berbeda lebih dari satu dapat digabungkan. perhatikan contoh dibawah ini, field nama depan dan nama belakaang dijadikan field kontak yang ada di tabel pelanggan dan field nama_pemilik dan nama_perusahaan digabung juga menjadi field kontak


SELECT 'pelanggan' as jenis,
                     nama_depan+'  '+nama_belakang as kontak,
     nomor_telpon, 
                     alamat
FROM pelanggan
UNION
SELECT 'perusahaan', 
                     nama_pemilik+'  '+nama_perusahaan as kontak,
                     nomor_telpon, 
                     alamat
FROM perusahaan

hasil query penggunaan union akan tampil seperti ini





  • Except

Membandingkan hasil dari dua statemen select dan mengembalikan baris hasil dari statemen select pertama yang tidak ada dalam hasil statemen select yang kedua



untuk memahami maksud dari except buat table dengan struktur dibawah ini

table gudang

create table gudang
(
  kode_brg varchar(5),
  nama_brg varchar(24),
  
)

dan juga buat table penjualan


create table penjualan
(
   id_trans int,
   kode_brg varchar(5),
   jlh_jual int,
  
)

masukan data datanya dengan mengetika query insert ms sql server dibawah ini :

INSERT INTO gudang (kode_brg,nama_brg) VALUES ('A1', 'buku')
INSERT INTO gudang (kode_brg,nama_brg) VALUES ('A2', 'pencil')
INSERT INTO gudang (kode_brg,nama_brg) VALUES ('A3', 'spidol')
INSERT INTO gudang (kode_brg,nama_brg) VALUES ('A4', 'penggaris')
INSERT INTO gudang (kode_brg,nama_brg) VALUES ('A5', 'penghapus')

INSERT INTO penjualan (id_trans,kode_brg,jlh_jual) VALUES ('1','A1','2')
INSERT INTO penjualan (id_trans,kode_brg,jlh_jual) VALUES ('2','A1','1')
INSERT INTO penjualan (id_trans,kode_brg,jlh_jual) VALUES ('3','A2','1')
INSERT INTO penjualan (id_trans,kode_brg,jlh_jual) VALUES ('4','A1','1')
INSERT INTO penjualan (id_trans,kode_brg,jlh_jual) VALUES ('5','A4','2')

menghasilkan hasil data sepeperti ini :






sekarang ketik perintah dibawah ini untuk mengetahui salah satu penggunaan query select except

SELECT 
                 kode_brg   
FROM gudang
EXCEPT
SELECT 
                 kode_brg

FROM penjualan

akan terlihat hasil dari perintah select except dari dua table





  • Intersect

Membandingkan hasil dari dua statemen select dan mengembalikan hasil statemen yang ditemukan pada statemen select pertama dan statemen select yang kedua.

perintah sql intersect yang digunakan seperti ini :
SELECT 
                 kode_brg   
FROM gudang
INTERSECT
SELECT 
                 kode_brg

FROM penjualan
pada percobaan intersect cukup menganti perintah except menjadi intersect seperti perintah dibawah ini maka hasilnya akan terlihat :

terlihat kalau kode_barang yang ditampilkan adalah kode barang yang merupakan hasil dari intersect dari kedua query table.

Demikian tutorial Select Union Except Intersect Table dari Microsoft SQL Server ini, semoga dapat dipahami dan dapat bermanfaat bagi semuanya yang memerlukan informasi ini.

Pivot Unpivot MS SQL Server

Microsoft SQL Server memiliki fasilitas Pivot dan Unpivot Table, yang sangat berguna untuk mengelola table, metode ini biasanya saya gunakan dalam pembuatan rekap nilai yang nilainya sudah memiliki ketetapan khusus misalkan bulan yang terdiri atas nilai satu sampai dengan duabelas (1 sd 12) pada satu tahun. Tapi tidak menutup kemungkinan akan field yang nilainya belum ada ketetapan jadi sifatnya sangat dinamis sesuai dengan keperluan. Untuk memahami penggunaan Pivot dan Unpivot pada MS SQL Server perhatikan contoh dibawah ini.



  • Pivot
Digunakan untuk merubah nilai pada sebuah kolom menjadi beberapa kolom. 
langkah pertama buat dulu table pada MS SQL Server susunan table seperti dibawah ini :

CREATE TABLE sales (
   sal_kode varchar(4),
   sal_bln int,
   sal_omset int
)

setelah itu isikan dengan data

INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','1','20000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S002','2','35000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S003','1','22000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','2','22000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S003','2','20700')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','3','39000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S003','3','77000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','4','80000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S002','4','13000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S005','4','34500')

periksa kembali isian data yang tadi di olah dengan mengetikan perintah

SELECT  * FROM sales

terlihat data yang tampil seperti pada gambar dibawah ini :


sekarang dari data table sales di sql server  akan dibuat rekap omset perbulan dengan menggunakan metode PIVOT Table MS SQL Server.

SELECT  'Total Omset' AS TotalBulananSales, 
                         [1],[2],[3],[4]
FROM 
(SELECT sal_bln, sal_omset FROM sales) AS TabelSalesSumber
PIVOT
(
  SUM(sal_omset)
  FOR sal_bln 
  IN ([1],[2],[3],[4])
) AS PivotTabelSalesBulanan

hasilnya terlihat seperti ini :




Pada contoh diatas saya hanya membuat rekapan omset sales hanya sampai dengan bulan ke 4 jika ingin membuat sampai bulan 12 pada data satu tahun bisa langsung tambahkan saja pada field sampai 12, dan bisa juga  berdasarkan nilai pencarian  pada kode sales seperti contoh dibawah ini

SELECT  'Total Omset' AS TotalBulananSales, 
                     sal_kode,
                     [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
FROM 
(SELECT sal_bln, sal_omset, sal_kode 
        FROM sales WHERE sal_kode='S002') AS TabelSalesSumber
PIVOT

  SUM(sal_omset)
  FOR sal_bln 
  IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
) AS PivotTabelSalesBulanan 

hasil akhir seperti ini



  • Unpivot
Digunakan untuk merubah kolom menjadi baris
Untuk memahami perintah unpivot, buat sebuah table seperti dibawah ini,

CREATE TABLE bulanansales (
sal_kode varchar(4),
sal_jan int,
sal_feb int,
sal_mar int,
sal_apr int,
sal_mei int,
sal_jun int,
sal_jul int,
sal_agt int,
sal_sep int,
sal_okt int,
sal_nov int,
sal_des int


setelah itu isikan datanya seperti isian sampai tampil seperti dibawah ini dengan mengetikan perintah

SELECT * FROM bulanansales




Berdasarkan dari table yang ditampilkan semisalkan ingin merubah kolom menjadi baris per kode sales maka perintahnya bisa menggunakan UNPIVOT secara lengkapnya :


SELECT sal_kode, bulan, totalpenjualan
FROM
    (SELECT sal_kode, sal_jan, sal_feb, sal_mar, sal_apr, sal_mei, sal_jun, 
                 sal_jul, sal_agt, sal_sep, sal_okt, sal_nov, sal_des
FROM bulanansales WHERE sal_kode='A001') P
UNPIVOT
(
  totalpenjualan FOR bulan IN 
     (
    sal_jan, sal_feb, sal_mar, sal_apr, sal_mei, sal_jun, 
    sal_jul, sal_agt, sal_sep, sal_okt, sal_nov, sal_des
)
) AS tableUnpivot

hasil yang ditampilkan seperti dibawah ini


Demikian penjelasan mengenai pivot dan unpivot di microsoft sql server, semoga bermanfaat bagi yang memerlukannya. mohon maaf jika terjadi kesalahan dalam penyampaian