Permintaan SQL cepat. Bagian 1

Pendahuluan


Bahasa SQL sangat kuat diintegrasikan ke dalam kehidupan analis bisnis dan persyaratan untuk kandidat karena kesederhanaan, kemudahan dan prevalensi. Dari pengalaman saya sendiri, saya dapat mengatakan bahwa SQL paling sering digunakan untuk membentuk unduhan, etalase (dengan konstruksi laporan selanjutnya berdasarkan etalase ini) dan administrasi basis data. Dan karena pekerjaan sehari-hari analis tidak dapat dihindari terkait dengan unggahan data dan etalase, kemampuan untuk menulis pertanyaan SQL dapat menjadi faktor karena calon akan mendapatkan keuntungan atau dihilangkan. Berita sedihnya adalah tidak semua orang bisa berharap untuk mendapatkannya di bangku siswa. Berita baiknya adalah belajar SQL tidak rumit, cepat, dan sintaks kuerinya sederhana dan mudah. Ini terutama berlaku bagi mereka yang telah menemukan bahasa yang lebih kompleks.

Saya membagi pelatihan SQL menjadi tiga bagian. Bagian ini dikhususkan untuk sintaks dasar, yang digunakan dalam 80-90% kasus. Dua bagian selanjutnya akan dikhususkan untuk subqueries, Join'am dan operator khusus. Tujuan dari panduan ini adalah untuk dengan cepat dan praktis mempraktikkan sintaks SQL untuk menambahkannya ke gudang keterampilan.

Berlatih


Pengantar sintaks akan diperiksa menggunakan database terbuka yang dirancang khusus untuk praktik SQL. Agar pelatihan Anda seefektif mungkin, buka tautan di bawah ini di tab baru dan segera jalankan contoh di atas, ini akan memungkinkan Anda untuk lebih baik mengkonsolidasikan materi dan bekerja dengan sintaksis sendiri.

Klik disini

Setelah mengklik tautan, Anda dapat melihat editor kueri itu sendiri dan output data di bagian tengah layar, daftar tabel database di bagian kanan.

Struktur permintaan sql


Struktur umum dari permintaan adalah sebagai berikut:

SELECT ('  *    ; ') FROM ('; ') WHERE ('/, , city = 'Moscow'; ') GROUP BY (',     ; ') HAVING ('/    ; ') ORDER BY (',     ; ') 

Mari kita menganalisis strukturnya. Untuk kenyamanan, item pembelajaran saat ini dalam permintaan disorot oleh CAPS.

PILIH, DARI


SELECT, FROM - elemen yang diperlukan dari kueri yang menentukan kolom yang dipilih, urutannya, dan sumber data.

Pilih semua (ditunjukkan sebagai *) dari tabel Pelanggan:

 SELECT * FROM Customers 

Pilih kolom CustomerID, CustomerName dari tabel Pelanggan:

 SELECT CustomerID, CustomerName FROM Customers 


DIMANA


WHERE adalah elemen permintaan opsional yang digunakan ketika Anda perlu memfilter data dengan kondisi yang diinginkan. Sangat sering, di dalam elemen where, IN / NOT IN digunakan untuk memfilter kolom dengan beberapa nilai, DAN / ATAU untuk memfilter tabel dengan beberapa kolom.

Penyaringan dengan satu syarat dan satu nilai:

 select * from Customers WHERE City = 'London' 

Pemfilteran dengan satu kondisi dan beberapa nilai menggunakan IN (inklusi) atau NOT IN (pengecualian):

 select * from Customers where City IN ('London', 'Berlin') 

 select * from Customers where City NOT IN ('Madrid', 'Berlin','Bern') 

Pemfilteran dengan beberapa kondisi menggunakan AND (semua kondisi dipenuhi) atau ATAU (setidaknya satu kondisi dipenuhi) dan beberapa nilai:

 select * from Customers where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15 

 select * from Customers where City in ('London', 'Berlin') OR CustomerID > 4 

KELOMPOK OLEH


GROUP BY adalah elemen kueri opsional yang dengannya Anda dapat menentukan agregasi berdasarkan kolom yang diinginkan (misalnya, jika Anda perlu mengetahui berapa banyak pelanggan yang tinggal di setiap kota).

Saat menggunakan GROUP BY, itu wajib:

  1. daftar kolom yang digunakan untuk memotong adalah sama di dalam SELECT dan di dalam GROUP BY,
  2. fungsi agregat (SUM, AVG, COUNT, MAX, MIN) juga harus ditentukan di dalam SELECT dengan kolom di mana fungsi tersebut diterapkan.

Mengelompokkan jumlah pelanggan berdasarkan kota:

 select City, count(CustomerID) from Customers GROUP BY City 

Mengelompokkan jumlah pelanggan berdasarkan negara dan kota:

 select Country, City, count(CustomerID) from Customers GROUP BY Country, City 

Mengelompokkan penjualan berdasarkan ID produk dengan fungsi agregat yang berbeda: jumlah pesanan dengan produk ini dan jumlah barang yang terjual:

 select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails GROUP BY ProductID 

Pengelompokan penjualan dengan pemfilteran tabel sumber. Dalam hal ini, output akan berupa tabel dengan jumlah pelanggan di kota-kota Jerman:

 select City, count(CustomerID) from Customers WHERE Country = 'Germany' GROUP BY City 

Ganti nama kolom teragregasi menggunakan operator AS. Secara default, nama kolom teragregasi sama dengan fungsi agregat yang diterapkan, yang lebih jauh mungkin tidak nyaman untuk persepsi.

 select City, count(CustomerID) AS Number_of_clients from Customers group by City 

MEMILIKI


HAVING adalah elemen kueri opsional yang bertanggung jawab untuk memfilter pada tingkat data yang dikelompokkan (sebenarnya, DI MANA, tetapi hanya satu tingkat lebih tinggi).

Memfilter tabel teragregasi dengan jumlah pelanggan berdasarkan kota, dalam hal ini, kami hanya menurunkan kota-kota di mana setidaknya ada 5 pelanggan:

 select City, count(CustomerID) from Customers group by City HAVING count(CustomerID) >= 5 


Dalam kasus kolom berganti nama di dalam HAVING, Anda dapat menentukan jumlah konstruk agregasi (CustomerID) dan nama kolom baru number_of_clients:

 select City, count(CustomerID) as number_of_clients from Customers group by City HAVING number_of_clients >= 5 

Contoh kueri yang mengandung WHERE dan HAVING. Dalam kueri ini, tabel awal oleh pengguna pertama kali difilter, jumlah pelanggan menurut kota dihitung, dan hanya kota-kota itu yang tersisa di mana jumlah pelanggan setidaknya 5:

 select City, count(CustomerID) as number_of_clients from Customers WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend') group by City HAVING number_of_clients >= 5 

PESANAN OLEH


ORDER BY adalah elemen kueri opsional yang bertanggung jawab untuk menyortir tabel.

Contoh sederhana pengurutan menurut satu kolom. Dalam permintaan ini, pengurutan berdasarkan kota yang ditentukan oleh klien dilakukan:

 select * from Customers ORDER BY City 

Anda dapat mengurutkan berdasarkan beberapa kolom, dalam hal ini, pengurutan terjadi dalam urutan kolom yang ditentukan:

 select * from Customers ORDER BY Country, City 

Secara default, pengurutan meningkat untuk angka dan menurut abjad untuk nilai teks. Jika pemilahan terbalik diperlukan, maka dalam klausa ORDER BY, setelah nama kolom, tambahkan DESC:

 select * from Customers order by CustomerID DESC 

Membalikkan penyortiran dengan satu kolom dan penyortiran default dengan yang kedua:

 select * from Customers order by Country DESC, City 

Bergabunglah


BERGABUNG - elemen opsional yang digunakan untuk bergabung dengan tabel dengan kunci yang ada di kedua tabel. Kuncinya didahului oleh pernyataan ON.

Kueri tempat kami bergabung dengan tabel Pesanan dan Pelanggan oleh CustomerID kunci, dan nama tabel ditambahkan sebelum nama kolom kunci melalui titik:

 select * from Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID 

Seringkali situasi mungkin muncul ketika Anda perlu memetakan satu tabel dengan nilai dari yang lain. Tergantung pada tugasnya, berbagai jenis koneksi dapat digunakan. INNER JOIN - persimpangan, KANAN / KIRI BERGABUNG untuk memetakan satu meja dengan pengetahuan dari yang lain,

 select * from Orders join Customers on Orders.CustomerID = Customers.CustomerID where Customers.CustomerID >10 

Di dalam seluruh permintaan GABUNG, itu tertanam setelah elemen dari ke elemen di mana, permintaan contoh:

Jenis GABUNGAN lainnya dapat dilihat pada gambar indah di bawah ini:


Di bagian selanjutnya, kita akan berbicara lebih banyak tentang tipe JOIN dan pertanyaan bersarang.

Jika Anda memiliki pertanyaan / saran, selalu tanyakan untuk menghubungi!

Source: https://habr.com/ru/post/id480838/


All Articles