Membangun kueri di server sql. Akses kueri

Kueri di Access adalah alat utama untuk mengambil, memperbarui, dan memanipulasi data dalam tabel database. Access, sesuai dengan konsep database relasional, menggunakan Structured Query Language (SQL) untuk mengeksekusi query. Setiap kueri di Access diimplementasikan menggunakan pernyataan SQL.

Jenis kueri utama adalah kueri pemilihan. Hasil query ini adalah tabel baru yang ada sebelum query ditutup. Rekaman dibentuk dengan menggabungkan rekaman tabel tempat kueri dibuat. Cara menggabungkan rekaman tabel ditentukan saat mendefinisikan hubungannya dalam skema data atau saat membuat kueri. Kondisi pemilihan yang dirumuskan dalam kueri memungkinkan Anda memfilter rekaman yang membentuk hasil penggabungan tabel.

Access dapat membuat beberapa tipe kueri:

  • ambil permintaan- memilih data dari satu tabel atau kueri, atau beberapa tabel terkait dan kueri lainnya. Hasilnya adalah tabel yang ada sebelum kueri ditutup. Pembentukan catatan tabel hasil dilakukan sesuai dengan kondisi pemilihan yang ditentukan dan saat menggunakan beberapa tabel dengan menggabungkan catatannya;
  • permintaan untuk membuat tabel- memilih data dari tabel yang saling berhubungan dan kueri lainnya, tetapi, tidak seperti kueri pemilihan, menyimpan hasilnya dalam tabel permanen baru;
  • perbarui, tambah, hapus permintaan- adalah permintaan tindakan, sebagai akibatnya data dalam tabel diubah.

Kueri di Access dalam mode desain berisi skema data yang menampilkan tabel yang digunakan, dan formulir kueri, yang menyusun struktur tabel kueri dan kondisi untuk memilih rekaman (Gambar 4.1).

Dengan menggunakan kueri, Anda dapat melakukan tipe pemrosesan data berikut ini:

  • sertakan dalam bidang tabel kueri yang dipilih pengguna;
  • membuat perhitungan di setiap catatan yang diterima;
  • pilih rekaman yang memenuhi kriteria seleksi;
  • buat tabel virtual baru berdasarkan gabungan catatan tabel terkait;
  • kelompok catatan yang memiliki nilai yang sama dalam satu atau beberapa bidang, secara bersamaan melakukan fungsi statistik pada bidang lain dari kelompok dan memasukkan satu catatan untuk setiap kelompok dalam hasil;
  • membuat tabel database baru menggunakan data dari tabel yang ada;
  • perbarui bidang dalam subset rekaman yang dipilih;
  • hapus subset record yang dipilih dari tabel database;
  • tambahkan subset rekaman yang dipilih ke tabel lain.

Kueri di Access berfungsi sebagai sumber rekaman untuk kueri, formulir, laporan lainnya. Dengan menggunakan kueri, Anda dapat mengumpulkan informasi lengkap untuk pembentukan dokumen tertentu dari area subjek dari beberapa tabel, kemudian menggunakannya untuk membuat formulir - representasi elektronik dari dokumen ini. Jika formulir atau laporan dibuat oleh panduan berdasarkan beberapa tabel yang saling berhubungan, maka kueri akan dibuat secara otomatis untuk tabel tersebut sebagai sumber rekaman.
Untuk mengkonsolidasikan, tonton tutorial video.

Permintaan ditulis tanpa menghilangkan tanda kutip, karena MySQL, MS SQL dan PostGree mereka berbeda.

Kueri SQL: mendapatkan bidang yang ditentukan (wajib) dari tabel

PILIH id, country_title, count_people FROM table_name

Kami mendapatkan daftar catatan: SEMUA negara dan populasinya. Nama bidang yang wajib diisi dipisahkan dengan koma.

PILIH * DARI nama_tabel

* menunjukkan semua bidang. Artinya, akan ada kesan SEMUANYA bidang data.

Kueri SQL: catatan keluaran dari tabel tidak termasuk duplikat

PILIH country_title BERBEDA DARI nama_tabel

Kami mendapatkan daftar catatan: negara tempat pengguna kami berada. Mungkin ada banyak pengguna dari satu negara. Dalam hal ini, ini adalah permintaan Anda.

Kueri SQL: menampilkan catatan dari tabel sesuai dengan kondisi yang ditentukan

PILIH id, country_title, city_title FROM table_name WHERE count_people> 100000000

Kami mendapatkan daftar catatan: negara-negara di mana jumlah orang lebih dari 100.000.000.

Kueri SQL: menampilkan catatan dari tabel dengan pemesanan

PILIH id, city_title FROM table_name ORDER BY city_title

Kami mendapatkan daftar catatan: kota dalam urutan abjad. Di awal A, di akhir I.

PILIH id, city_title FROM table_name ORDER BY city_title DESC

Kami mendapatkan daftar catatan: kota terbalik ( DESC) Oke. Di awal saya, di akhir A.

Permintaan SQL: menghitung jumlah catatan

PILIH JUMLAH (*) DARI table_name

Kami mendapatkan jumlah (jumlah) catatan dalam tabel. Dalam hal ini, TIDAK ada daftar catatan.

Kueri SQL: keluaran rentang catatan yang diperlukan

PILIH * DARI table_name LIMIT 2, 3

Kami mendapatkan 2 (kedua) dan 3 (ketiga) catatan dari tabel. Permintaan ini berguna saat membuat navigasi di halaman WEB.

Kueri SQL dengan kondisi

Output catatan dari tabel sesuai dengan kondisi yang diberikan menggunakan operator logika.

Kueri SQL: DAN konstruksi

PILIH id, city_title FROM table_name WHERE country = "Rusia" DAN minyak = 1

Kami mendapatkan daftar catatan: kota-kota dari Rusia DAN memiliki akses ke minyak. Saat operator digunakan DAN, maka kedua kondisi harus cocok.

Kueri SQL: ATAU konstruksi

PILIH id, city_title FROM table_name WHERE country = "Rusia" OR country = "USA"

Kami mendapatkan daftar catatan: semua kota dari Rusia ATAU AMERIKA SERIKAT. Saat operator digunakan ATAU, maka setidaknya satu kondisi harus cocok.

Kueri SQL: DAN BUKAN konstruksi

PILIH id, user_login FROM table_name WHERE country = "Rusia" DAN BUKAN count_comments<7

Kami mendapatkan daftar catatan: semua pengguna dari Rusia DAN siapa yang membuat TIDAK KURANG 7 komentar.

Kueri SQL: konstruksi IN (B)

PILIH id, user_login FROM table_name WHERE country IN ("Rusia", "Bulgaria", "Cina")

Kami mendapatkan daftar catatan: semua pengguna yang tinggal di ( DI) (Rusia, atau Bulgaria, atau Cina)

Permintaan SQL: TIDAK DALAM konstruksi

PILIH id, user_login FROM table_name WHERE country NOT IN ("Rusia", "Cina")

Kami mendapatkan daftar catatan: semua pengguna yang tidak tinggal di ( TIDAK MASUK) (Rusia atau Cina).

Kueri SQL: konstruksi IS NULL (nilai kosong atau TIDAK kosong)

PILIH id, user_login FROM table_name WHERE status IS NULL

Kami mendapatkan daftar entri: semua pengguna yang statusnya tidak ditentukan. NULL adalah topik yang terpisah dan karena itu diperiksa secara terpisah.

PILIH id, user_login FROM table_name WHERE state IS NOT NULL

Kami mendapatkan daftar catatan: semua pengguna di mana status ditentukan (BUKAN NOL).

Kueri SQL: SEPERTI konstruksi

PILIH id, user_login FROM table_name WHERE nama belakang SEPERTI "Ivan%"

Kami mendapatkan daftar catatan: pengguna yang nama belakangnya dimulai dengan kombinasi "Ivan". Tanda% berarti APAPUN jumlah karakter APAPUN. Untuk menemukan tanda%, Anda perlu menggunakan tanda "Ivan \%".

Kueri SQL: ANTARA konstruk

PILIH id, user_login FROM table_name MANA gaji ANTARA 25000 DAN 50000

Kami mendapatkan daftar catatan: pengguna yang menerima gaji dari 25.000 hingga 50.000 inklusif.

Ada BANYAK operator logika, jadi pelajari dokumentasi SQL server secara mendetail.

Kueri SQL yang kompleks

Kueri SQL: menggabungkan beberapa kueri

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Kami mendapatkan daftar catatan: pengguna yang terdaftar di sistem, serta pengguna yang terdaftar di forum secara terpisah. Beberapa kueri dapat digabungkan dengan operator UNION. UNION bertindak seperti SELECT DISTINCT, yaitu membuang nilai duplikat. Untuk benar-benar mendapatkan semua catatan, Anda perlu menggunakan operator UNION ALL.

Kueri SQL: menghitung nilai bidang MAX, MIN, SUM, AVG, COUNT

Output satu, nilai maksimum penghitung dalam tabel:

PILIH MAX (penghitung) DARI nama_tabel

Output satu, nilai minimum penghitung dalam tabel:

PILIH MIN (penghitung) DARI table_name

Menampilkan jumlah semua nilai penghitung dalam tabel:

PILIH SUM (penghitung) DARI table_name

Menampilkan nilai rata-rata penghitung dalam tabel:

PILIH AVG (penghitung) DARI nama_tabel

Menampilkan jumlah penghitung dalam tabel:

PILIH JUMLAH (penghitung) DARI table_name

Tampilan jumlah loket di bengkel No. 1, pada tabel:

SELECT COUNT (counter) FROM table_name WHERE office = "Toko #1"

Ini adalah perintah yang paling populer. Disarankan, jika memungkinkan, untuk menggunakan kueri SQL jenis ini untuk menghitung, karena tidak ada lingkungan pemrograman yang dapat membandingkan kecepatan pemrosesan data selain SQL server itu sendiri saat memproses datanya sendiri.

Kueri SQL: mengelompokkan catatan

PILIH benua, SUM (country_area) DARI negara GROUP BY continent

Kami mendapatkan daftar catatan: dengan nama benua dan dengan jumlah luas semua negara mereka. Artinya, jika ada direktori negara tempat masing-masing negara tercatat wilayahnya, maka dengan menggunakan klausa GROUP BY, Anda dapat mengetahui ukuran setiap benua (berdasarkan pengelompokan berdasarkan benua).

Kueri SQL: menggunakan beberapa tabel melalui alias

PILIH o.order_no, o.amount_paid, c.company FROM orders AS o, customer AS with WHERE o.custno = c.custno AND c.city = "Tyumen"

Kami mendapatkan daftar catatan: pesanan dari pelanggan yang hanya tinggal di Tyumen.

Faktanya, dengan database yang dirancang dengan baik dari jenis ini, kueri adalah yang paling sering, oleh karena itu operator khusus diperkenalkan di MySQL, yang bekerja berkali-kali lebih cepat daripada kode yang ditulis di atas.

PILIH o.order_no, o.amount_paid, z.company FROM orders AS o LEFT JOIN customer AS z ON (z.custno = o.custno)

Subkueri bersarang

SELECT * FROM table_name WHERE salary = (SELECT MAX (gaji) FROM employee)

Kami mendapatkan satu catatan: informasi tentang pengguna dengan gaji maksimum.

Perhatian! Subquery bersarang adalah salah satu hambatan di server SQL. Bersama dengan fleksibilitas dan kekuatannya, mereka juga secara signifikan meningkatkan beban di server. Yang menyebabkan pelambatan bencana dalam pekerjaan pengguna lain. Kasus panggilan rekursif dengan kueri bersarang sangat umum. Oleh karena itu, saya sangat menyarankan untuk TIDAK menggunakan kueri bersarang, tetapi memecahnya menjadi yang lebih kecil. Atau gunakan kombinasi LEFT JOIN di atas. Selain jenis permintaan ini, permintaan merupakan sarang pelanggaran keamanan yang meningkat. Jika Anda memutuskan untuk menggunakan subkueri bersarang, maka Anda perlu mendesainnya dengan sangat hati-hati dan menjalankan awal pada salinan basis data (basis data uji).

Kueri SQL mengubah data

Kueri SQL: INSERT

instruksi MENYISIPKAN memungkinkan Anda untuk memasukkan catatan ke dalam tabel. Dengan kata sederhana, buat garis dengan data dalam tabel.

Opsi nomor 1. Instruksi yang sering digunakan:

INSERT INTO table_name (id, user_login) NILAI (1, "ivanov"), (2, "petrov")

Di meja " nama_tabel“2 (dua) user akan disisipkan sekaligus.

Opsi nomor 2. Lebih nyaman menggunakan gaya:

INSERT table_name SET id = 1, user_login = "ivanov"; INSERT table_name SET id = 2, user_login = "petrov";

Ini memiliki kelebihan dan kekurangannya.

Kerugian utama:

  • Banyak kueri SQL kecil berjalan sedikit lebih lambat daripada satu kueri SQL besar, tetapi kueri lain akan diantrekan untuk layanan. Artinya, jika kueri SQL besar dijalankan selama 30 menit, maka selama ini kueri lainnya akan mengasapi bambu dan menunggu giliran.
  • Permintaan tersebut ternyata lebih masif dari versi sebelumnya.

Keuntungan utama:

  • Selama kueri SQL kecil, kueri SQL lainnya tidak diblokir.
  • Kemudahan membaca.
  • Fleksibilitas. Dalam opsi ini, Anda tidak dapat mengikuti struktur, tetapi hanya menambahkan data yang diperlukan.
  • Saat membentuk arsip dengan cara ini, Anda dapat dengan mudah menyalin satu baris dan menjalankannya melalui baris perintah (konsol), sehingga tidak memulihkan seluruh ARSIP.
  • Gaya penulisannya mirip dengan pernyataan UPDATE, yang membuatnya lebih mudah diingat.

Kueri SQL: UPDATE

UPDATE table_name SET user_login = "ivanov", nama_pengguna = "Ivanov" WHERE id = 1

Di meja " nama_tabel"Dalam catatan dengan id = 1, nilai bidang user_login dan user_surname akan diubah ke nilai yang ditentukan.

Kueri SQL: HAPUS

HAPUS DARI table_name WHERE id = 3

Catatan dengan id nomor 3 akan dihapus di tabel table_name.

  1. Disarankan untuk menulis semua nama bidang dalam huruf kecil dan, jika perlu, pisahkan dengan spasi paksa "_" untuk kompatibilitas dengan bahasa pemrograman yang berbeda seperti Delphi, Perl, Python dan Ruby.
  2. Tulis perintah SQL dalam huruf CAPITAL agar mudah dibaca. Selalu ingat bahwa orang lain dapat membaca kode setelah Anda, dan kemungkinan besar Anda sendiri setelah N jumlah waktu.
  3. Beri nama bidang dari awal kata benda, lalu tindakan. Misalnya: status_kota, login_pengguna, nama_pengguna.
  4. Cobalah untuk menghindari kata-kata fallback dalam bahasa yang berbeda yang dapat menyebabkan masalah di SQL, PHP atau Perl, seperti (nama, jumlah, tautan). Misalnya: tautan dapat digunakan di MS SQL, tetapi dicadangkan di MySQL.

Materi ini adalah referensi singkat untuk pekerjaan sehari-hari dan tidak mengklaim sebagai sumber otoritatif super mega, yang merupakan sumber utama kueri SQL untuk database tertentu.

Masing-masing dari kita secara teratur menemukan dan menggunakan berbagai database. Ketika kami memilih alamat email, kami bekerja dengan database. Database menggunakan mesin pencari, bank untuk menyimpan data pelanggan, dll.

Namun, terlepas dari penggunaan basis data yang konstan, bahkan bagi banyak pengembang sistem perangkat lunak ada banyak "titik kosong" karena interpretasi yang berbeda dari istilah yang sama. Kami akan memberikan definisi singkat tentang istilah basis data dasar sebelum melihat bahasa SQL. Jadi.

Basis Data - file atau kumpulan file untuk menyimpan struktur data yang dipesan dan hubungannya. Sangat sering sistem kontrol disebut database - itu hanya penyimpanan informasi dalam format tertentu dan dapat bekerja dengan berbagai DBMS.

meja - Bayangkan sebuah folder yang menyimpan dokumen yang dikelompokkan berdasarkan kriteria tertentu, misalnya, daftar pesanan untuk bulan lalu. Ini adalah tabel di komputer. Tabel terpisah memiliki nama uniknya sendiri.

Tipe data - jenis informasi yang diizinkan untuk disimpan dalam kolom atau baris terpisah. Ini bisa berupa angka atau teks dalam format tertentu.

Kolom dan baris- kita semua bekerja dengan spreadsheet, yang juga memiliki baris dan kolom. Setiap database relasional bekerja dengan tabel dengan cara yang sama. Garis kadang-kadang disebut catatan.

Kunci utama- setiap baris tabel dapat memiliki satu atau lebih kolom untuk identifikasi uniknya. Tanpa kunci utama, sangat sulit untuk memperbarui, memodifikasi, dan menghapus baris yang diperlukan.

Apa itu SQL?

SQL(Bahasa Inggris - bahasa query terstruktur) dikembangkan hanya untuk bekerja dengan database dan saat ini menjadi standar untuk semua DBMS populer. Sintaks bahasa terdiri dari sejumlah kecil operator dan mudah dipelajari. Namun, terlepas dari kesederhanaan eksternal, ini memungkinkan pembuatan kueri sql untuk operasi kompleks dengan database dalam berbagai ukuran.

Sejak tahun 1992, telah ada standar yang diterima secara umum yang disebut ANSI SQL. Ini mendefinisikan sintaks dasar dan fungsi operator dan didukung oleh semua pemimpin pasar DBMS, seperti ORACLE. Tidak mungkin untuk mempertimbangkan semua fitur bahasa dalam satu artikel kecil, jadi kami akan mempertimbangkan secara singkat hanya SQL dasar pertanyaan. Contoh dengan jelas menunjukkan kesederhanaan dan kemampuan bahasa:

  • pembuatan database dan tabel;
  • mengambil data;
  • menambahkan catatan;
  • modifikasi dan penghapusan informasi.

tipe data SQL

Semua kolom dalam tabel database menyimpan tipe data yang sama. Tipe data dalam SQL sama dengan bahasa pemrograman lainnya.

Buat tabel dan database

Ada dua cara untuk membuat database, tabel, dan kueri baru lainnya di SQL:

  • melalui konsol DBMS
  • Menggunakan alat administrasi online yang disertakan dengan server database.

Database baru dibuat oleh operator BUAT DATABASE<наименование базы данных>; ... Seperti yang Anda lihat, sintaksnya sederhana dan ringkas.

Kami membuat tabel di dalam database dengan pernyataan CREATE TABLE dengan parameter berikut:

  • nama meja
  • nama kolom dan tipe data

Sebagai contoh, mari kita buat tabel Komoditas dengan kolom berikut:

Kami membuat tabel:

BUAT TABEL Komoditi

(commodity_id CHAR (15) BUKAN NULL,

vendor_id CHAR (15) BUKAN NULL,

nama_komoditas CHAR (254) NULL,

komoditi_harga DECIMAL (8,2) NULL,

komoditi_desc VARCHAR (1000) NULL);

Tabel memiliki lima kolom. Nama diikuti dengan tipe data, kolom dipisahkan dengan koma. Nilai kolom bisa null (NULL) atau harus diisi (NOT NULL), dan ini ditentukan saat tabel dibuat.

Mengambil data dari tabel

Operator pemilihan data adalah query SQL yang paling sering digunakan. Untuk mendapatkan informasi, perlu untuk menunjukkan apa yang ingin kita pilih dari tabel tersebut. Mari kita mulai dengan contoh sederhana:

PILIH nama_komoditi DARI Komoditi

Setelah pernyataan SELECT, kami menentukan nama kolom untuk mendapatkan informasi, dan FROM mendefinisikan tabel.

Hasil dari menjalankan kueri adalah semua baris tabel dengan nilai Commodity_name sesuai urutan dimasukkan ke dalam database, mis. tanpa pengurutan apapun. Klausa ORDER BY tambahan digunakan untuk mengurutkan hasil.

Untuk kueri di beberapa bidang, kami mencantumkannya dipisahkan dengan koma, seperti dalam contoh berikut:

PILIH id_komoditi, nama_komoditi, harga_komoditi DARI Komoditi

Dimungkinkan untuk mendapatkan nilai semua kolom dari suatu baris sebagai hasil dari kueri. Untuk melakukan ini, gunakan tanda "*":

PILIH * DARI Komoditas

  • Selain itu SELECT mendukung:
  • Menyortir data (ORDER BY operator)
  • Seleksi sesuai kondisi (WHERE)
  • Istilah pengelompokan (GROUP BY)

Tambahkan baris

Untuk menambahkan baris ke tabel, kueri SQL dengan pernyataan INSERT digunakan. Penambahan dapat dilakukan dengan tiga cara:

  • tambahkan seluruh baris baru;
  • bagian dari string;
  • hasil kueri.

Untuk menambahkan baris lengkap, Anda harus menentukan nama tabel dan nilai kolom (bidang) dari baris baru. Mari kita beri contoh:

MASUKKAN KE NILAI Komoditas ("106", "50", "Coca-Cola", "1,68", "Tanpa Alcogol,)

Contoh menambahkan produk baru ke tabel. Nilai ditentukan setelah VALUES untuk setiap kolom. Jika tidak ada nilai yang sesuai untuk kolom, maka NULL harus ditentukan. Kolom diisi dengan nilai dalam urutan yang ditentukan saat tabel dibuat.

Jika Anda hanya menambahkan sebagian dari baris, Anda harus secara eksplisit menentukan nama kolom, seperti pada contoh:

INSERT INTO Commodity (commodity_id, vendor_id,commodity_name)

NILAI ("106", '50 "," Coca-Cola ",)

Kami hanya memasukkan pengidentifikasi produk, pemasok dan namanya, dan membiarkan sisa bidang kosong.

Menambahkan Hasil Kueri

INSERT terutama digunakan untuk menambahkan baris, tetapi juga dapat digunakan untuk menambahkan hasil dari pernyataan SELECT.

Perubahan data

Untuk mengubah informasi di bidang tabel database, Anda harus menggunakan pernyataan UPDATE. Operator dapat digunakan dengan dua cara:

  • Semua baris dalam tabel diperbarui.
  • Untuk jalur tertentu saja.

UPDATE memiliki tiga elemen utama:

  • tabel di mana Anda perlu melakukan perubahan;
  • nama bidang dan nilai barunya;
  • kondisi untuk memilih baris yang akan diubah.

Mari kita lihat sebuah contoh. Katakanlah biaya item dengan ID = 106 telah berubah, jadi baris ini perlu diperbarui. Kami menulis operator berikut:

UPDATE SET komoditi komoditi_price = "3.2" WHERE komoditi_id = "106"

Kami menunjukkan nama tabel, dalam kasus kami Komoditas, di mana pembaruan akan dilakukan, kemudian setelah SET - nilai baru kolom dan menemukan catatan yang diperlukan dengan menentukan nilai ID yang diperlukan di WHERE.

Untuk memodifikasi beberapa kolom, beberapa pasangan kolom-nilai ditentukan setelah pernyataan SET, dipisahkan dengan koma. Mari kita lihat contoh yang memperbarui nama dan harga suatu produk:

UPDATE SET Komoditas komoditi_name = 'Fanta', komoditi_price = "3.2" WHERE komoditi_id = "106"

Untuk menghapus informasi dalam kolom, Anda dapat mengaturnya ke NULL jika struktur tabel mengizinkannya. Perlu diingat bahwa NULL sebenarnya adalah nilai "tidak", dan bukan nol dalam bentuk teks atau angka. Mari kita hapus deskripsi produk:

UPDATE SET Komoditas komoditi_desc = NULL WHERE komoditi_id = "106"

Menghapus Baris

Kueri SQL untuk menghapus baris dalam tabel dieksekusi oleh pernyataan DELETE. Ada dua kasus penggunaan:

  • baris tertentu dihapus dalam tabel;
  • semua baris dalam tabel dihapus.

Contoh menghapus satu baris dari tabel:

HAPUS DARI Komoditi WHERE komoditi_id = "106"

Setelah DELETE FROM kita tentukan nama tabel yang barisnya akan dihapus. Klausa WHERE berisi kondisi di mana baris untuk dihapus akan dipilih. Dalam contoh, kami menghapus baris untuk produk dengan ID = 106. Sangat penting untuk menentukan WHERE. menghilangkan pernyataan ini akan menghapus semua baris dalam tabel. Ini juga berlaku untuk mengubah nilai bidang.

Pernyataan DELETE tidak menyertakan nama kolom atau metakarakter. Ini menghapus baris seluruhnya, tetapi tidak dapat menghapus satu kolom.

Menggunakan SQL di Microsoft Access

Biasanya digunakan secara interaktif untuk membuat tabel, database, untuk mengelola, memodifikasi, menganalisis data dalam database dan untuk menyematkan kueri SQL Access melalui perancang kueri interaktif yang nyaman (Perancang Kueri), yang dengannya Anda dapat membangun dan segera menjalankan pernyataan SQL dari setiap kerumitan...

Mode akses ke server juga didukung, di mana Access DBMS dapat digunakan sebagai generator kueri SQL ke sumber data ODBC apa pun. Kemampuan ini memungkinkan aplikasi Access berinteraksi dengan format apa pun.

ekstensi SQL

Karena kueri SQL tidak memiliki semua kemampuan bahasa pemrograman prosedural seperti loop, cabang, dll., vendor database mengembangkan versi SQL mereka sendiri dengan kemampuan tingkat lanjut. Pertama-tama, ini adalah dukungan untuk prosedur tersimpan dan operator standar bahasa prosedural.

Dialek bahasa yang paling umum:

  • Database Oracle - PL / SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL / pgSQL.

SQL di Internet

MySQL didistribusikan di bawah GNU General Public License. Ada lisensi komersial dengan kemampuan untuk mengembangkan modul khusus. Sebagai bagian integral, ini termasuk dalam rakitan server Internet paling populer, seperti XAMPP, WAMP dan LAMP, dan merupakan DBMS paling populer untuk mengembangkan aplikasi di Internet.

Ini dikembangkan oleh Sun Microsystems dan saat ini didukung oleh Oracle Corporation. Basis data hingga 64 terabyte, standar sintaks SQL: 2003, replikasi basis data, dan layanan cloud didukung.

Ekspresi tabel subquery diberi nama dan digunakan di mana tabel diharapkan ada. Ada dua jenis ekspresi tabel:

    tabel turunan;

    ekspresi tabel umum.

Kedua bentuk ekspresi tabel ini dibahas dalam subbagian berikut.

Tabel turunan

Tabel turunan adalah ekspresi tabel yang termasuk dalam klausa FROM dari kueri. Tabel turunan dapat digunakan ketika alias kolom tidak layak karena penerjemah SQL memproses pernyataan lain sebelum alias diketahui. Contoh di bawah ini mencoba menggunakan alias kolom dalam situasi di mana klausa lain diproses sebelum alias diketahui:

GUNAKAN SampleDb; PILIH BULAN (EnterDate) sebagai enter_month FROM Works_on GROUP BY enter_month;

Mencoba menjalankan kueri ini akan menghasilkan pesan kesalahan berikut:

Msg 207, Level 16, State 1, Line 5 Nama kolom "enter_month" tidak valid. (Msg 207: Level 16, State 1, Line 5 Nama kolom tidak valid enter_month)

Penyebab kesalahan adalah bahwa klausa GROUP BY diproses sebelum daftar SELECT terkait diproses, dan alias kolom enter_month tidak diketahui saat memproses grup ini.

Masalah ini dapat diselesaikan dengan menggunakan tabel turunan yang berisi kueri sebelumnya (tanpa klausa GROUP BY), karena klausa FROM dieksekusi sebelum klausa GROUP BY:

GUNAKAN SampleDb; PILIH enter_month FROM (SELECT MONTH (EnterDate) sebagai enter_month FROM Works_on) AS m GROUP BY enter_month;

Hasil eksekusi query ini akan seperti ini:

Biasanya, ekspresi tabel dapat ditempatkan di mana saja dalam pernyataan SELECT di mana nama tabel mungkin muncul. (Hasil dari ekspresi tabel selalu berupa tabel atau, dalam kasus khusus, ekspresi.) Contoh berikut menunjukkan penggunaan ekspresi tabel dalam daftar pilih pernyataan SELECT:

Hasil dari kueri ini:

Ekspresi tabel umum

Ekspresi Tabel Umum (CTE) adalah ekspresi tabel bernama yang didukung oleh bahasa Transact-SQL. Ekspresi tabel umum digunakan dalam dua jenis kueri berikut:

    non-rekursif;

    rekursif.

Kedua jenis permintaan ini dibahas di bagian berikut.

OTB dan kueri non-rekursif

Anda dapat menggunakan formulir OTB non-rekursif sebagai alternatif untuk tabel dan tampilan turunan. Biasanya OTB didefinisikan dengan DENGAN klausa dan kueri opsional yang mereferensikan nama yang digunakan dalam klausa WITH. Kata kunci WITH ambigu dalam Transact-SQL. Untuk menghindari ambiguitas, akhiri pernyataan sebelum klausa WITH dengan titik koma.

GUNAKAN AdventureWorks2012; PILIH SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (PILIH AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") AND Freight> (PILIH AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate 2005 ") /OrderDate 2.5;

Kueri dalam contoh ini memilih pesanan yang total pajaknya (TotalDue) lebih besar dari rata-rata untuk semua pajak, dan yang biaya pengirimannya (Freight) lebih besar dari 40% dari rata-rata untuk pajak. Properti utama kueri ini adalah volumenya, karena subkueri perlu ditulis dua kali. Salah satu cara yang mungkin untuk mengurangi ukuran konstruksi kueri adalah dengan membuat tampilan yang berisi subkueri. Tetapi solusi ini agak sulit, karena memerlukan pembuatan tampilan, lalu menghapusnya setelah akhir eksekusi kueri. Pendekatan terbaik adalah membuat OTB. Contoh di bawah ini menunjukkan penggunaan OTB non-rekursif, yang menyingkat definisi kueri di atas:

GUNAKAN AdventureWorks2012; DENGAN price_calc (year_2005) AS (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (SELECT year_2005 FROM price_calc) AND Fre2005) /2.5;

Sintaks untuk klausa WITH dalam kueri non-rekursif adalah:

Parameter cte_name mewakili nama OTB yang mengidentifikasi tabel yang dihasilkan, dan parameter column_list mewakili daftar kolom dalam ekspresi tabel. (Pada contoh di atas, OTB diberi nama price_calc dan memiliki satu kolom, year_2005.) Parameter inner_query mewakili pernyataan SELECT yang mendefinisikan kumpulan hasil dari ekspresi tabel yang sesuai. Ekspresi tabel yang ditentukan kemudian dapat digunakan dalam kueri luar_kueri luar. (Kueri luar dalam contoh di atas menggunakan OTB price_calc dan kolomnya year_2005 untuk menyederhanakan kueri bersarang ganda.)

OTB dan kueri rekursif

Bagian ini menyajikan materi dengan kompleksitas yang meningkat. Oleh karena itu, ketika membacanya untuk pertama kali, disarankan untuk melewatkannya dan kembali lagi nanti. OTB dapat mengimplementasikan rekursi karena OTB dapat berisi referensi untuk dirinya sendiri. Sintaks OTB dasar untuk kueri rekursif terlihat seperti ini:

Parameter cte_name dan column_list memiliki arti yang sama seperti di OTB untuk kueri non-rekursif. Badan klausa WITH terdiri dari dua kueri yang digabungkan oleh operator UNI ALL... Kueri pertama dipanggil hanya sekali dan mulai mengumpulkan hasil rekursi. Operand pertama dari operator UNION ALL tidak mengacu pada OTB. Kueri ini disebut kueri referensi atau sumber.

Permintaan kedua berisi tautan ke OTB dan mewakili bagian rekursifnya. Karena itu, ini disebut anggota rekursif. Dalam panggilan pertama ke bagian rekursif, referensi OTB mewakili hasil kueri referensi. Anggota rekursif menggunakan hasil panggilan pertama ke kueri. Setelah itu, sistem akan memanggil kembali bagian rekursif tersebut. Panggilan ke anggota rekursif dihentikan ketika panggilan sebelumnya mengembalikan kumpulan hasil kosong.

Operator UNION ALL menggabungkan string yang saat ini terakumulasi, serta string tambahan yang ditambahkan oleh panggilan saat ini ke anggota rekursif. (Kehadiran operator UNION ALL berarti bahwa baris duplikat tidak akan dihapus dari hasil.)

Terakhir, parameter outer_query mendefinisikan kueri luar yang menggunakan OTB untuk mendapatkan semua panggilan ke gabungan kedua anggota.

Untuk mendemonstrasikan formulir OTB rekursif, kami menggunakan tabel Airplane yang ditentukan dan diisi dengan kode yang ditunjukkan pada contoh di bawah ini:

GUNAKAN SampleDb; CREATE TABLE Airplane (ContainingAssembly VARCHAR (10), ContainedAssembly VARCHAR (10), QuantityContained INT, UnitCost DECIMAL (6,2)); MASUKKAN KE NILAI Pesawat ("Pesawat", "Fuselage", 1, 10); MASUKKAN KE NILAI Pesawat ("Pesawat", "Sayap", 1, 11); MASUKKAN KE DALAM NILAI Pesawat ("Pesawat", "Ekor", 1, 12); MASUKKAN KE DALAM NILAI Pesawat ("Fuselage", "Salon", 1, 13); MASUKKAN KE NILAI Pesawat ("Fuselage", "Cabin", 1, 14); MASUKKAN KE DALAM NILAI Pesawat ("Fuselage", "Nose", 1, 15); MASUKKAN KE NILAI Pesawat ("Salon", NULL, 1.13); MASUKKAN KE NILAI Pesawat ("Kabin", NULL, 1, 14); MASUKKAN KE DALAM NILAI Pesawat ("Hidung", NULL, 1, 15); MASUKKAN KE NILAI Pesawat ("Sayap", NULL, 2, 11); MASUKKAN KE NILAI Pesawat ("Ekor", NULL, 1, 12);

Tabel Pesawat memiliki empat kolom. Kolom ContainingAssembly mengidentifikasi rakitan, dan kolom ContainedAssembly mengidentifikasi bagian-bagian (satu demi satu) yang membentuk rakitan yang sesuai. Gambar di bawah ini memberikan ilustrasi grafis dari kemungkinan jenis pesawat dan bagian-bagian penyusunnya:

Tabel Pesawat terdiri dari 11 baris berikut:

Contoh di bawah ini menunjukkan klausa WITH yang digunakan untuk mendefinisikan kueri yang menghitung total biaya setiap perakitan:

GUNAKAN SampleDb; WITH list_of_parts (assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST (l.quantity * l.cost AS DECIM) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part", quantity "Qty", cost "Price" FROM list_of_parts;

Klausa WITH mendefinisikan daftar OTB bernama list_of_parts dengan tiga kolom: assembly1, kuantitas, dan biaya. Pernyataan SELECT pertama dalam contoh dipanggil hanya sekali untuk mempertahankan hasil dari langkah pertama dari proses rekursi. Pernyataan SELECT pada baris terakhir dari contoh menampilkan hasil berikut.

Pembaruan terakhir: 07/05/2017

Pada topik sebelumnya, database sederhana dengan satu tabel telah dibuat di SQL Management Studio. Sekarang mari kita definisikan dan jalankan query SQL pertama. Untuk melakukan ini, buka SQL Management Studio, klik kanan pada elemen tingkat atas di Object Explorer (nama server) dan pilih item Kueri Baru di menu konteks yang muncul:

Setelah itu, jendela untuk memasukkan perintah SQL akan terbuka di bagian tengah program.

Mari kita jalankan kueri ke tabel yang dibuat di topik sebelumnya, khususnya, kita akan mendapatkan semua data darinya. Database kami bernama university, dan tabelnya adalah dbo.Students, jadi untuk mendapatkan data dari tabel tersebut, kita akan memasukkan query berikut:

PILIH * DARI university.dbo.Students

Pernyataan SELECT memungkinkan Anda untuk memilih data. FROM menunjukkan sumber dari mana mendapatkan data. Sebenarnya, dengan kueri ini, kami mengatakan "PILIH semua FROM tabel university.dbo.Students". Perlu dicatat bahwa untuk nama tabel, jalur lengkapnya digunakan, yang menunjukkan database dan skema.

Setelah memasukkan kueri, klik tombol Jalankan pada bilah alat, atau Anda dapat menekan tombol F5.

Sebagai hasil dari eksekusi kueri, sebuah tabel kecil muncul di bagian bawah program yang menampilkan hasil kueri - yaitu, semua data dari tabel Siswa.

Jika kita perlu membuat beberapa kueri ke database yang sama, maka kita dapat menggunakan perintah USE untuk mengkomit database. Dalam hal ini, saat membuat kueri ke tabel, cukup tentukan namanya tanpa nama database dan skema:

GUNAKAN universitas PILIH * DARI Siswa

Dalam hal ini, kami melakukan permintaan untuk server secara keseluruhan; kami dapat mengakses database apa pun di server. Tapi kita juga bisa mengeksekusi query hanya dalam database tertentu. Untuk melakukan ini, klik kanan pada database yang diperlukan dan pilih item Kueri Baru di menu konteks:

Jika dalam kasus ini kita ingin mengeksekusi query ke tabel yang digunakan Siswa di atas, maka kita tidak perlu menunjukkan nama database dan skema dalam query, karena nilai-nilai ini sudah jelas.