Fungsi ciri asas bahasa sql. Kefungsian bahasa SQL. Mendapatkan Data Menggunakan Klausa Pilih

2. percuma dan ingatan yang digunakan dalam halaman perhubungan. Maklumat ini diperlukan untuk mencari ruang kosong apabila memasuki tupel

3. memautkan halaman satu komponen. Jika satu fail mengandungi beberapa halaman perhubungan, maka halaman ini perlu dipautkan entah bagaimana. Penggunaan pautan dan penunjuk adalah bermasalah, jadi struktur kawalan diperkenalkan - memautkan halaman. Menggunakan pengindeksan tidak langsung halaman bagi satu perhubungan berdasarkan B-pokok.

bahasa SQL. Fungsi dan ciri utama

1. Keupayaan dalam pertanyaan untuk mengumpulkan tupel perhubungan hasil mengikut medan tertentu mengikut syarat pemilihan untuk keseluruhan kumpulan.

2. Dalam SQL ia tidak perlu untuk memadam pendua tupel kedua-dua dalam hasil dan dalam tupel perantaraan. Hasil daripada pertanyaan SQL ialah tuple berbilang set. Semua operator set-teoretik telah dilaksanakan dalam Sistem R DBMS.

DALAM Sistem R melaksanakan 4 operator manipulasi data dan 2 operator penciptaan paparan.

Pengendali tambahan juga membenarkan anda membuat perubahan pada struktur jadual.

Mentakrifkan Kekangan dan Pencetus Integriti

Dalam Sistem R, cara untuk mengekalkan integriti pangkalan data ialah assertHon (pengecualian) - ungkapan logik yang dikeluarkan ke atas seluruh pangkalan data, yang kepalsuannya menunjukkan ketidakintegrasian pangkalan data. Kekangan integriti dibahagikan kepada 2 kelas:

1. diperiksa selepas pelaksanaan operator manipulasi (transaksi)

2. atas permintaan pengendali khas INFORCE INTEGRITY

Jenis predikat berbeza untuk kumpulan ini. Sistem R adalah yang pertama melaksanakan mekanisme pencetus yang berfungsi untuk mengekalkan integriti pangkalan data secara automatik. Apabila mentakrifkan pencetus, syarat untuk penggunaannya telah ditentukan dan jika benar, pencetus telah dicetuskan.

paparan DB

Untuk mentakrifkan perwakilan, radas pengendali pemilihan digunakan.

Mentakrifkan Struktur Kawalan

Mentakrifkan struktur kawalan mewakili indeks dan perhubungan. SQL kini mempunyai pemahaman yang jelas tentang cara mewakili indeks dan perhubungan.

Pengendali utama:

GERAN – “Izinkan

BATALKAN - "kumpul" hak

Simpanan transaksi dan mata tarik balik. SQL terbenam

SQL terbenam ialah pengendali khas yang menyokong keupayaan untuk melaksanakan pernyataan SQL dalam bahasa pengaturcaraan tradisional.

ESQL/C – Bahasa C dengan keupayaan untuk menulis pertanyaan.

Masalah utama dengan embedding ialah masalah konjugasi antara bahasa pengaturcaraan yang diisytiharkan dan prosedural.

Masalah mengakses tupel dalam bahasa prosedural telah diselesaikan dengan menggunakan mekanisme "kursor", yang merupakan penunjuk kepada tupel.

Pengendali asas pada kursor: KURsor TERBUKA

SQL Dinamik

Mekanisme yang membolehkan pernyataan SQL dilaksanakan pada masa penyusunan.

1. Kekangan keunikan(tidak lebih daripada satu kunci utama)

3. Semak kekangan(menentukan syarat yang mesti dipenuhi oleh setiap baris dalam jadual)

Definisi pandangan.

Mekanisme paparan ialah alat SQL yang berkuasa yang membolehkan anda menyembunyikan struktur sebenar pangkalan data daripada pengguna dengan pada dasarnya menyimpan pertanyaan dengan lajur bernama dalam pangkalan data.

Untuk kegunaan, paparan (atau pembentangan) tidak berbeza daripada jadual asas. Pandangan sebenarnya ditindih di atas meja setiap kali ia dilaksanakan.

Enjin paparan standard SQL-89 ditakrifkan seperti berikut:

::=

CIPTA PANDANGAN

[()] AS

< view column list>::= [{}]

Jadual tertentu dibentangkan yang boleh berubah, i.e. PADAM atau KEMASKINI kenyataan digunakan padanya hanya jika operasi pertanyaan berikut dilakukan:

1. Kata kunci DISTINCT tidak dinyatakan

2. setiap satu ungkapan aritmetik dalam senarai pilih mewakili spesifikasi lajur tunggal

3. klausa FROM mengandungi satu jadual

4. tiada subkueri dalam klausa WHERE

5. tiada KUMPULAN DENGAN MEMPUNYAI bahagian

Keperluan WITH CHECK OPTION masuk akal dalam kes pandangan boleh ubah dengan klausa WHERE. Keperluan ini menghalang baris daripada muncul dalam jadual asas yang tidak kelihatan dalam paparan (iaitu, baris yang tidak memenuhi keadaan MANA dalam permintaan).

Definisi keistimewaan.

Dalam standard SQL-89, pemberian keistimewaan hanya boleh dilakukan apabila menentukan jadual. Pengguna yang telah menerima keistimewaan daripada pengguna lain boleh memindahkan mereka lebih jauh hanya apabila mentakrifkan skema.

Keistimewaan ditakrifkan seperti berikut:

< privilege definition >::=

HEBAT HIDUP

KEPADA

[g, hibah 3…] ::= SEMUA KEISTIMEWAAN | [{,}..]

::= PILIH | KEMASKINI | INSERT | PADAM | RUJUKAN [ ]

::= AWAM |

Alat manipulasi data.

Struktur permintaan.

::= []

::= | KESATUAN

::= | ()

::=(PILIH

)

KE DALAM

::= PILIH

::= [] [] [] []

Bahasa SQL membayangkan 3 jenis binaan SELECT:

1. spesifikasi kursor

2. pilih pernyataan

3.subquery

ungkapan jadual adalah asas kepada semua struktur sintaksis.

1. Spesifikasi kursor – Kursor pembina SQL, membolehkan anda mendapatkan akses baris demi baris kepada hasil pertanyaan dalam pangkalan data. Tiada keperluan khas untuk ungkapan jadual yang terlibat dalam spesifikasi kursor.

Hantar kerja baik anda di pangkalan pengetahuan adalah mudah. Gunakan borang di bawah

Pelajar, pelajar siswazah, saintis muda yang menggunakan pangkalan pengetahuan dalam pengajian dan kerja mereka akan sangat berterima kasih kepada anda.

Rancang

Pengenalan……………………………………………………………………………………………………3

Bab I. Maklumat teori tentang bahasa pertanyaan SQL…………………………………..4

1.1. Konsep pangkalan data hubungan…………………………………………………………4

1.2. Konsep bahasa SQL………………………………………………………………10

1.3. SQL interaktif dan bersarang………………………………………………….12

1.4. Subbahagian SQL……………………………………………………13

1.5. Jenis data………………………………………………………………….13

1.6. Ketidakkonsistenan SQL……………………………………………………………………………………16

Bab II. Menggunakan SQL untuk mendapatkan maklumat………………18

2.1. Membuat permintaan………………………………………………………………18

2.2. Perintah PILIH……………………………………………………………….19

2.3. Perintah DISTINCT..……………………………………………………………………22

2.4. Cadangan pasukan…………………………………………………….24

Kesimpulan…………………………………………………………………..27

Senarai rujukan………………………………………………………………..28

pengenalan

Kebanyakan DBMS moden dibina pada model data hubungan. Untuk mendapatkan maklumat daripada hubungan pangkalan data (jadual), tiga bahasa abstrak secara teorinya digunakan sebagai bahasa manipulasi data: bahasa algebra hubungan; bahasa kalkulus hubungan pada tupel; bahasa kalkulus hubungan berasaskan domain.

Sebagai bahasa praktikal untuk bekerja dengan data, pada pertengahan 70-an, IBM membangunkan bahasa pertanyaan berstruktur SQL, yang kemudiannya menjadi standard de-facto apabila bekerja dengan pangkalan data. Peralihan semasa kepada DBMS korporat besar seperti Oracle, Informix, Sybase, DB2, Progress menjadikan kajian bahasa SQL relevan dari segi praktikal dan secara teori semata-mata, kerana unsur-unsur bahasa SQL adalah berdasarkan peruntukan teori hubungan, teori set dan logik.

Tujuan kerja kursus adalah untuk menganalisis keupayaan bahasa SQL.

Untuk mencapai matlamat ini, perlu menyelesaikan tugas berikut:

· Kajian literatur mengenai topik tersebut;

· Semak struktur SQL;

· Tentukan spesifikasi dan piawaian bahasa;

· Pelajari penggunaan SQL untuk mendapatkan maklumat.

Babsaya. Teori bahasa pertanyaanSQL

1.1. Konsep pangkalan data hubungan

SQL (biasa disebut "Sekuel") bermaksud Bahasa Pertanyaan Berstruktur. Ia adalah bahasa yang memungkinkan untuk bekerja dalam pangkalan data hubungan, yang merupakan koleksi maklumat berkaitan yang disimpan dalam jadual.

Dunia pangkalan data menjadi semakin bersatu, yang membawa kepada keperluan untuk mencipta bahasa standard yang boleh digunakan untuk berfungsi dalam sejumlah besar jenis persekitaran komputer yang berbeza. Bahasa standard akan membenarkan pengguna yang mengetahui satu set perintah untuk menggunakannya untuk mencipta, mencari, mengubah suai dan menyampaikan maklumat sama ada mereka bekerja pada komputer peribadi, stesen kerja rangkaian atau kerangka utama.

Dalam dunia komputer kita yang semakin saling berkaitan, pengguna yang dilengkapi dengan bahasa sedemikian mempunyai kelebihan yang luar biasa dalam menggunakan dan meringkaskan maklumat daripada pelbagai sumber dalam banyak cara.

Keanggunan dan kebebasannya daripada teknologi komputer, serta sokongannya daripada peneraju industri dalam teknologi pangkalan data hubungan, telah menjadikan SQL, dan berkemungkinan akan kekal untuk masa hadapan, bahasa standard yang dominan. Atas sebab ini, sesiapa yang ingin bekerja dengan pangkalan data 90-an mesti tahu SQL.

Piawaian SQL ditakrifkan oleh ANSI (Institut Piawaian Kebangsaan Amerika) dan pada masa ini juga diterima pakai oleh ISO (Pertubuhan Standardisasi Antarabangsa). Walau bagaimanapun, kebanyakan program pangkalan data komersial memanjangkan SQL tanpa notis ANSI, menambah pelbagai ciri lain pada bahasa yang mereka percaya akan sangat berguna. Kadang-kadang mereka agak melanggar standard bahasa, walaupun idea yang baik cenderung untuk berkembang dan tidak lama lagi menjadi standard "pasaran" dalam hak mereka sendiri kerana kegunaannya.

Pangkalan data hubungan ialah badan maklumat berkaitan yang disimpan dalam jadual dua dimensi. Mengingatkan saya tentang alamat atau buku telefon. Buku ini mempunyai sejumlah besar entri, setiap satunya sepadan dengan ciri tertentu. Untuk setiap ciri sedemikian, mungkin terdapat beberapa keping data bebas, seperti nama, nombor telefon dan alamat. Katakan anda akan memformat buku alamat ini sebagai jadual dengan baris dan lajur. Setiap baris (juga dipanggil rekod) akan sepadan dengan ciri tertentu; setiap lajur akan mengandungi nilai untuk setiap jenis data - nama, nombor telefon dan alamat yang diwakili dalam setiap baris. Buku alamat mungkin kelihatan seperti ini:

Hasilnya ialah asas pangkalan data hubungan - iaitu, jadual maklumat dua dimensi (baris dan lajur). Walau bagaimanapun, pangkalan data hubungan jarang terdiri daripada satu jadual. Jadual sedemikian adalah lebih kecil daripada sistem fail. Dengan mencipta berbilang jadual maklumat berkaitan, anda boleh melakukan operasi yang lebih kompleks dan berkuasa pada data. Kuasa pangkalan data bergantung pada hubungan yang boleh dibuat antara cebisan maklumat, bukan pada sekeping maklumat itu sendiri.

Menggunakan buku alamat sebagai contoh, kita boleh mula membincangkan pangkalan data yang sebenarnya boleh digunakan dalam situasi perniagaan. Andaikan watak dalam jadual pertama (buku alamat) adalah pesakit hospital. Dalam jadual lain, kita boleh mengingati maklumat tambahan tentang pesakit ini. Lajur jadual kedua boleh dilabelkan sebagai Pesakit, Doktor, Insurans dan Baki.

Banyak fungsi berkuasa boleh dilakukan dengan mengekstrak maklumat daripada jadual ini mengikut parameter yang ditentukan, terutamanya apabila parameter ini termasuk cebisan maklumat yang berkaitan antara satu sama lain dalam jadual yang berbeza. Sebagai contoh, mari kita ambil doktor. Katakan Dr. Halben ingin mendapatkan nombor telefon semua pesakitnya. Untuk mengekstrak maklumat ini, dia boleh memautkan jadual nombor telefon pesakit (dari buku alamat) ke jadual yang akan menunjukkan pesakit itu miliknya. Walaupun, dalam contoh mudah ini, dia boleh mengingatinya dan segera mendapatkan nombor telefon pesakit Grillet dan Brock, jadual ini mungkin terlalu besar dan terlalu kompleks. Program pangkalan data perhubungan telah dibangunkan untuk mengendalikan koleksi besar dan kompleks jenis data ini, yang jelas merupakan kaedah yang lebih universal dalam dunia perniagaan. Walaupun pangkalan data hospital mengandungi ratusan atau ribuan nama - seperti yang mungkin berlaku dalam amalan - satu arahan SQL boleh memberi Dr. Halben maklumat yang diperlukannya dengan segera.

Untuk mengekalkan fleksibiliti maksimum, baris jadual, mengikut definisi, tidak seharusnya dalam sebarang susunan tertentu. Dari sudut pandangan ini, di sinilah struktur pangkalan data berbeza daripada buku alamat kami. Entri buku alamat biasanya disusun mengikut abjad. Dalam sistem pangkalan data hubungan, satu ciri yang berkuasa untuk pengguna ialah keupayaan untuk menyusun maklumat supaya mereka boleh mendapatkannya.

Mari lihat jadual kedua. Kadangkala anda ingin melihat maklumat ini disusun mengikut abjad mengikut nama, kadangkala dalam susunan menaik atau menurun, dan kadangkala dikumpulkan berhubung dengan doktor tertentu. Mengenakan susunan yang ditetapkan pada baris akan mengganggu keupayaan pelanggan untuk mengubahnya, jadi baris sentiasa dianggap sebagai tidak tertib. Atas sebab ini, anda tidak boleh hanya berkata, "Kami mahu melihat baris kelima jadual." Mengabaikan susunan data dimasukkan atau mana-mana kriteria lain, kami akan menentukan baris yang salah, walaupun ia akan menjadi yang kelima. Baris jadual yang diperiksa tidak akan berada dalam sebarang susunan tertentu.

Atas sebab ini dan sebab lain, anda mesti mempunyai lajur dalam jadual anda yang mengenal pasti setiap baris secara unik. Lazimnya, lajur ini mengandungi nombor - contohnya, nombor pesakit yang diberikan kepada setiap pesakit. Sudah tentu, anda boleh menggunakan nama pesakit, tetapi ada kemungkinan terdapat beberapa Mary Smith; dan dalam kes ini, anda tidak akan mempunyai cara lain untuk membezakan pesakit ini antara satu sama lain.

Inilah sebabnya mengapa nombor sangat diperlukan. Lajur unik sedemikian (atau kumpulan lajur unik) yang digunakan untuk mengenal pasti setiap baris dan menyimpan semua baris secara berasingan dipanggil kunci utama jadual.

Kekunci utama jadual adalah elemen penting dalam struktur pangkalan data. Ia adalah asas sistem rakaman fail anda; dan apabila anda ingin mencari baris tertentu dalam jadual, anda merujuk kepada kunci utama itu. Selain itu, kunci utama memastikan data anda mempunyai integriti tertentu. Jika kunci utama digunakan dan diselenggara dengan betul, anda akan tahu bahawa tiada baris kosong dalam jadual dan setiap baris adalah berbeza daripada setiap baris lain.

Tidak seperti baris, lajur jadual (juga dipanggil medan) disusun dan dinamakan. Oleh itu, dalam jadual buku alamat kami, adalah mungkin untuk menunjuk ke "alamat lajur" atau ke "lajur 3". Sudah tentu, ini bermakna setiap lajur dalam jadual tertentu mesti mempunyai nama yang unik untuk mengelakkan kekaburan. Adalah lebih baik jika nama ini menunjukkan kandungan medan.

Jadual 1.1, 1.2 dan 1.3 membentuk pangkalan data hubungan yang cukup minimum untuk dikesan dengan mudah dan cukup komprehensif untuk menggambarkan konsep dan amalan SQL utama.

Lajur pertama setiap jadual mengandungi nombor yang nilainya berbeza untuk setiap baris. Ini adalah kunci utama jadual. Beberapa nombor ini juga ditunjukkan dalam lajur jadual lain. Tidak ada yang salah dengan ini. Ia menunjukkan hubungan antara baris yang menggunakan nilai daripada kunci utama dan baris yang nilai itu digunakan dalam kunci primer itu sendiri.

Jadual 1.1 - Penjual

Jadual 1.2 - Pelanggan

Jadual 1.3 - Pesanan

Sebagai contoh, medan snum dalam jadual Pelanggan menunjukkan jurujual yang ditugaskan kepada pelanggan ini. Nombor medan snum dikaitkan dengan jadual Vendor, yang menyediakan maklumat tentang vendor ini. Jelas sekali, vendor kepada siapa pelanggan ditugaskan mesti sudah wujud - iaitu, nilai snum daripada jadual Pelanggan juga mesti ada dalam jadual Vendor. Jika ini berlaku, maka sistem itu dikatakan "dalam keadaan integriti rujukan"

Mari kita lihat ketiga-tiga jadual ini dan nilai medannya.

Lajur Jadual 1.1 ditunjukkan di sini

Jadual 1.2 mengandungi lajur berikut:

Dan terdapat lajur dalam Jadual 1.3:

1.2. KonsepSQL-bahasa

SQL ialah bahasa yang direka khusus untuk pangkalan data hubungan. Ia menghapuskan banyak kerja yang perlu anda lakukan jika anda menggunakan bahasa pengaturcaraan tujuan umum seperti C. Untuk membentuk pangkalan data hubungan dalam C, anda perlu bermula dari awal. Anda perlu menentukan objek - dipanggil jadual - yang boleh berkembang untuk mempunyai sebarang bilangan baris, dan kemudian mencipta prosedur tambahan untuk meletakkan nilai dan mendapatkan nilai daripadanya. Jika anda ingin mencari beberapa rentetan tertentu, anda perlu mengikuti prosedur langkah demi langkah seperti berikut:

Pertimbangkan barisan meja.

Semak untuk melihat sama ada rentetan ini adalah salah satu rentetan yang anda perlukan.

Jika ya, simpan di suatu tempat sehingga seluruh jadual telah diperiksa.

Semak sama ada terdapat baris lain dalam jadual.

Jika ya, kembali ke langkah 1.

Jika tiada lagi baris, cetak semua nilai yang disimpan dalam langkah 3.

(Sudah tentu, ini bukan set sebenar arahan C, tetapi hanya logik langkah-langkah yang akan dimasukkan dalam program sebenar). SQL akan menyelamatkan semua ini. Perintah dalam SQL boleh berfungsi dengan semua kumpulan jadual sebagai objek tunggal dan boleh memproses sebarang jumlah maklumat yang diekstrak atau diperoleh daripadanya, sebagai satu modul.

Piawaian SQL ditakrifkan menggunakan kod ANSI (American National Standards Institute). SQL tidak dicipta oleh ANSI. Ia pada asasnya adalah ciptaan IBM. Selepas beberapa program SQL yang bersaing muncul di pasaran, ANSI mentakrifkan piawaian yang harus dipatuhi (mendefinisikan piawaian tersebut ialah fungsi ANSI).

Namun, selepas ini, beberapa masalah muncul. Mereka timbul akibat penyeragaman ANSI dalam bentuk sekatan tertentu. Memandangkan ANSI tidak selalu menentukan perkara yang paling berguna, program cuba mematuhi piawaian ANSI tanpa membenarkannya mengehadkannya terlalu banyak. Ini, seterusnya, membawa kepada ketidakkonsistenan rawak. Program pangkalan data biasanya memberikan ciri tambahan ANSI SQL dan sering melonggarkan banyak sekatan kebanyakannya.

SQL mempunyai istilah khas tertentu yang digunakan untuk menerangkannya. Antaranya ialah perkataan seperti pertanyaan, klausa, dan predikat, yang paling penting dalam penerangan dan pemahaman bahasa tetapi tidak bermakna sesuatu yang bebas untuk SQL.

Perintah, atau pernyataan, ialah arahan yang kami gunakan untuk mengakses pangkalan data SQL. Perintah terdiri daripada satu atau lebih bahagian logik yang berasingan yang dipanggil klausa. Ayat bermula dengan kata kunci yang mana ia dinamakan, dan terdiri daripada kata kunci dan hujah. Contoh klausa yang mungkin kami temui ialah "DARI Jurujual" dan "WHERE city = "London".

Hujah melengkapkan atau mengubah maksud ayat. Dalam contoh di atas, Jurujual ialah hujah dan FROM ialah kata kunci klausa FROM.

Begitu juga, "city = "London"" ialah hujah bagi klausa WHERE. Objek ialah struktur dalam pangkalan data yang diberi nama dan disimpan dalam ingatan.

Ini termasuk jadual asas, pandangan (dua jenis jadual) dan indeks.

1.3. Interaktif dan bersarangSQL

Terdapat dua SQL: Interaktif dan Bersarang. Untuk sebahagian besar, kedua-dua borang berfungsi sama, tetapi digunakan secara berbeza. SQL Interaktif digunakan untuk berjalan terus pada pangkalan data untuk menghasilkan output untuk digunakan oleh pelanggan. Dalam bentuk SQL ini, apabila anda memasukkan arahan, ia akan dilaksanakan serta-merta dan anda akan dapat melihat output (jika ada) - serta-merta.

SQL bersarang terdiri daripada arahan SQL yang diletakkan di dalam atur cara yang biasanya ditulis dalam beberapa bahasa lain (seperti COBOL atau Pascal).

Ini menjadikan program ini lebih berkuasa dan berkesan. Walau bagaimanapun, membenarkan bahasa ini disertakan dengan struktur SQL dan gaya pengurusan data yang memerlukan beberapa sambungan kepada SQL interaktif. Menghantar arahan SQL ke dalam SQL bersarang "diluluskan" untuk pembolehubah atau parameter yang digunakan oleh program di mana ia bersarang.

1.4. SubbahagianSQL

Dalam kedua-dua bentuk SQL interaktif dan bersarang, terdapat banyak bahagian atau subbahagian.

Malangnya, istilah ini tidak digunakan secara universal merentas semua pelaksanaan. Ia ditekankan oleh ANSI dan berguna pada peringkat konsep, tetapi kebanyakan program SQL tidak banyak membantu untuk merawatnya secara berasingan, jadi ia pada asasnya menjadi kategori berfungsi bagi arahan SQL.

DDL (Bahasa Definisi Data) - dipanggil Bahasa Penerangan Skema dalam ANSI, terdiri daripada arahan yang mencipta objek (jadual, indeks, pandangan, dan sebagainya) dalam pangkalan data.

DML (Bahasa Manipulasi Data) ialah satu set arahan yang menentukan nilai yang diwakili dalam jadual pada bila-bila masa.

DCD (Bahasa Kawalan Data) terdiri daripada alat yang menentukan sama ada membenarkan pengguna melakukan tindakan tertentu atau tidak. Mereka adalah sebahagian daripada ANSI DDL. Ini bukan bahasa yang berbeza, tetapi bahagian perintah SQL dikumpulkan mengikut fungsinya.

1.5. Jenis data

Tidak semua jenis nilai yang boleh menduduki medan jadual secara logiknya sama. Perbezaan yang paling jelas adalah antara nombor dan teks. Anda tidak boleh meletakkan nombor dalam susunan abjad atau menolak satu nama daripada nama lain. Oleh kerana sistem pangkalan data relasi adalah berdasarkan perhubungan antara cebisan maklumat, jenis data yang berbeza mesti dapat dibezakan dengan jelas antara satu sama lain supaya proses dan perbandingan yang sesuai boleh dibuat merentas mereka.

Dalam SQL, ini dilakukan dengan memberikan setiap medan jenis data yang menunjukkan jenis nilai yang boleh terkandung dalam medan itu.

Semua nilai dalam medan ini mestilah daripada jenis yang sama. Dalam jadual Pelanggan, sebagai contoh, cname dan bandar mengandungi baris teks untuk penilaian, snum dan cnum sudah pun nombor. Atas sebab ini, anda tidak boleh memasukkan nilai Tertinggi atau Nilai Tiada dalam medan penilaian, yang mempunyai jenis data berangka. Kekangan ini bagus kerana ia mengenakan beberapa struktur pada data anda. Anda selalunya akan membandingkan beberapa atau semua nilai dalam medan tertentu, jadi anda mungkin hanya mahu melakukan tindakan pada baris tertentu berbanding kesemuanya. Anda tidak boleh melakukan ini jika nilai medan adalah daripada jenis data bercampur.

Malangnya, mentakrifkan jenis data ini adalah bidang utama di mana kebanyakan program pangkalan data komersial dan standard SQL rasmi tidak selalu bersetuju. Standard ANSI SQL hanya mengiktiraf jenis teks dan nombor, manakala kebanyakan program komersial menggunakan jenis khas lain. Seperti DATA dan MASA sebenarnya adalah jenis yang hampir standard (walaupun format tepatnya berbeza-beza). Sesetengah pakej juga menyokong jenis seperti WANG dan BINARI. (WANG ialah sistem nombor khas yang digunakan oleh komputer. Semua maklumat dalam komputer dihantar dalam nombor binari dan kemudian ditukar kepada sistem lain supaya kita boleh menggunakannya dan memahaminya dengan mudah).

ANSI mentakrifkan beberapa jenis nilai nombor yang berbeza, perbezaan antara yang agak halus dan kadangkala mengelirukan.

Kerumitan jenis angka ANSI boleh dikaitkan, sekurang-kurangnya sebahagiannya, kepada usaha untuk menjadikan SQL bersarang serasi dengan beberapa bahasa lain.

Kedua-dua jenis nombor ANSI, INTEGER dan DECIMAL (yang boleh disingkatkan sebagai INT dan DEC, masing-masing), akan mencukupi untuk tujuan kami, serta untuk tujuan kebanyakan aplikasi perniagaan praktikal. Sememangnya, jenis INTEGER boleh diwakili sebagai NOMBOR PERPULUHAN, yang tidak mengandungi sebarang digit di sebelah kanan titik perpuluhan.

Jenis untuk teks ialah CHAR (atau CHAR), yang merujuk kepada rentetan teks. Medan CHAR mempunyai panjang tertentu, yang ditentukan oleh bilangan maksimum aksara yang boleh dimasukkan dalam medan.

Kebanyakan pelaksanaan juga mempunyai jenis bukan standard yang dipanggil VARCHAR, iaitu rentetan teks yang boleh mempunyai sebarang panjang sehingga maksimum yang ditentukan pelaksanaan (biasanya 254 aksara). Nilai CHARACTER dan VARCHAR disertakan dalam petikan tunggal sebagai "teks". Perbezaan antara CHAR dan VARCHAR ialah CHAR mesti menyimpan memori yang mencukupi untuk panjang maksimum rentetan, manakala VARCHAR memperuntukkan memori mengikut keperluan.

Jenis aksara terdiri daripada semua aksara yang boleh dicetak, termasuk nombor.

Walau bagaimanapun, nombor 1 tidak sama dengan watak "1". Aksara "1" hanyalah sekeping teks bercetak lain yang tidak dikesan oleh sistem sebagai mempunyai nilai angka 1.

Contohnya, 1 + 1 = 2, tetapi "1" + "1" tidak sama dengan "2".

Nilai aksara disimpan dalam komputer sebagai nilai binari, tetapi dipaparkan kepada pengguna sebagai teks bercetak. Penukaran mengikut format yang ditentukan oleh sistem yang anda gunakan. Format penukaran ini akan menjadi salah satu daripada dua jenis standard (mungkin dengan sambungan) yang digunakan dalam sistem komputer: Kod ASCII (digunakan dalam semua komputer peribadi dan kecil) dan kod EBCDIC (digunakan dalam komputer besar). Operasi tertentu, seperti abjad nilai medan, akan berubah mengikut format.

1.6. SQLketidakselarasan

Terdapat ketidakkonsistenan bebas dalam produk dunia SQL. SQL muncul daripada dunia pangkalan data komersial sebagai alat, dan kemudiannya dibangunkan menjadi piawaian ANSI. Malangnya, ANSI tidak selalu menentukan manfaat terbesar, jadi program cuba mematuhi piawaian ANSI tanpa membenarkannya mengehadkannya terlalu banyak. ANSI ialah sejenis standard minimum - anda boleh melakukan lebih daripada apa yang dibenarkan, tetapi anda mesti boleh mendapatkan hasil yang sama seperti melakukan tugas yang sama.

SQL biasanya ditemui pada sistem komputer yang mempunyai lebih daripada satu pengguna, dan oleh itu mesti membezakan antara mereka. Biasanya, dalam sistem sedemikian, setiap pengguna mempunyai beberapa jenis kod pengesahan hak yang mengenal pasti dirinya (istilah berbeza-beza). Pada permulaan sesi dengan komputer, pengguna log masuk (mendaftar) dengan memberitahu komputer siapa pengguna itu, dikenal pasti oleh ID tertentu. Sebarang bilangan orang yang menggunakan ID akses yang sama adalah pengguna berasingan; dan begitu juga, seorang boleh mewakili sejumlah besar pengguna (pada masa yang berbeza) menggunakan Pengecam tersedia yang berbeza.

SQL mengikutinya. Tindakan dalam kebanyakan persekitaran SQL dihantar ke Pengecam boleh diakses khas yang betul-betul sepadan dengan pengguna tertentu. Jadual atau objek lain dimiliki oleh pengguna yang mempunyai kawalan penuh ke atasnya. Pengguna mungkin mempunyai keistimewaan atau mungkin tidak untuk melakukan tindakan pada objek.

Nilai khas USER boleh digunakan sebagai hujah dalam arahan. Ia menunjukkan ID yang tersedia bagi pengguna yang mengeluarkan arahan.

Kesimpulan Bab saya:

Bab pertama memperkenalkan konsep pangkalan data hubungan. Beberapa prinsip asas juga dipelajari tentang cara jadual dibuat - cara baris dan lajur berfungsi, cara kunci utama membezakan baris antara satu sama lain dan cara lajur boleh merujuk nilai dalam lajur lain. Kami telah mentakrifkan bahawa rekod ialah sinonim untuk baris dan medan ialah sinonim untuk lajur. Kami melihat jadual contoh. Pendek dan ringkas, mereka dapat menunjukkan kebanyakan ciri bahasa.

Konsep bahasa SQL, beberapa konvensyen dan istilahnya juga diberikan, strukturnya, penggunaan bahasa SQL, penyediaan data dan definisinya (dan beberapa ketidakkonsistenan yang muncul dalam kes ini) telah dipertimbangkan.

BabII. Penggunaan bahasaSQLuntuk mengekstrak maklumat daripada jadual

2.1. Buat permintaan

SQL adalah singkatan dari Structured Query Language. Pertanyaan mungkin merupakan aspek SQL yang paling biasa digunakan. Malah, untuk kategori pengguna SQL, tidak mungkin sesiapa akan menggunakan bahasa itu untuk perkara lain. Atas sebab ini, kami akan memulakan perbincangan kami tentang SQL dengan membincangkan pertanyaan dan cara ia dilaksanakan dalam bahasa ini.

Pertanyaan ialah arahan yang diberikan kepada program pangkalan data anda yang memberitahunya untuk memaparkan maklumat tertentu daripada jadual ke dalam ingatan. Maklumat ini biasanya dihantar terus ke skrin atau terminal komputer, walaupun dalam kebanyakan kes ia juga boleh dihantar ke pencetak, disimpan dalam fail (sebagai objek dalam memori komputer), atau disediakan sebagai input kepada arahan atau proses lain.

Pertanyaan biasanya dianggap sebagai sebahagian daripada bahasa DML. Walau bagaimanapun, oleh kerana pertanyaan itu tidak mengubah maklumat dalam jadual, tetapi hanya memaparkannya kepada pengguna, kami akan menganggap pertanyaan sebagai kategori berasingan antara arahan DML yang melakukan tindakan dan bukannya hanya memaparkan kandungan pangkalan data.

Semua pertanyaan SQL terdiri daripada satu arahan. Struktur perintah ini sangat mudah kerana anda mesti melanjutkannya untuk melaksanakan penilaian yang sangat kompleks dan manipulasi data. Perintah ini dipanggil SELECT.

2.2. KEPADApasukanPILIH

Dalam bentuk yang paling mudah, arahan SELECT hanya mengarahkan pangkalan data untuk mendapatkan maklumat daripada jadual. Sebagai contoh, anda boleh memaparkan jadual Vendor dengan menaip yang berikut:

PILIH snum, sname, sity, comm

DARIPADA Jurujual;

Output untuk pertanyaan ini ditunjukkan dalam Jadual 2.1.

Jadual 2.1 - arahan SELECT

Log Pelaksanaan SQL

PILIH snum, sname, sity, comm DARIPADA Jurujual;

Dalam erti kata lain, arahan ini hanya memaparkan semua data dari jadual. Kebanyakan program juga akan memberikan pengepala lajur seperti di atas, dan sesetengahnya membenarkan pemformatan terperinci output, tetapi ini di luar spesifikasi standard.

Terdapat penjelasan untuk setiap bahagian perintah ini:

SELECT ialah kata kunci yang memberitahu pangkalan data bahawa arahan ini ialah pertanyaan. Semua pertanyaan bermula dengan perkataan ini diikuti dengan ruang.

Snum, sname ialah senarai lajur daripada jadual yang dipilih oleh pertanyaan. Mana-mana lajur yang tidak disenaraikan di sini tidak akan disertakan dalam output arahan. Ini, sudah tentu, tidak bermakna bahawa mereka akan dipadamkan atau maklumat mereka akan dipadamkan daripada jadual, kerana pertanyaan tidak menjejaskan maklumat dalam jadual; ia hanya menunjukkan data.

FROM FROM ialah kata kunci, seperti SELECT, yang mesti dibentangkan oleh Jurujual dalam setiap pertanyaan. Ia diikuti dengan ruang dan kemudian nama jadual yang digunakan sebagai sumber maklumat. Dalam kes ini, ia ialah jadual Jurujual.

Titik koma digunakan dalam semua arahan SQL interaktif untuk memberitahu pangkalan data bahawa arahan itu lengkap dan sedia untuk dilaksanakan.

Pada sesetengah sistem, garis miring ke belakang (\) pada baris menunjukkan penghujung perintah.

Sememangnya, pertanyaan seperti ini tidak semestinya akan memerintahkan output dalam apa-apa cara yang ditentukan. Perintah yang sama dilaksanakan dengan data yang sama tetapi pada masa yang berbeza tidak akan menghasilkan susunan yang sama. Biasanya, baris ditemui dalam susunan di mana ia ditemui dalam jadual, kerana, seperti yang kami tetapkan dalam bab sebelumnya, susunan ini adalah sewenang-wenangnya. Ini tidak semestinya tertib di mana data dimasukkan atau disimpan. Anda boleh menyusun output arahan SQL secara langsung: menggunakan klausa khas.

Penggunaan pulangan (kunci ENTER) adalah pilihan. Anda perlu menentukan dengan tepat bagaimana ia lebih mudah untuk mengarang pertanyaan, dalam beberapa baris atau dalam satu baris, seperti berikut:

PILIH snum, sname, bandar, kom DARIPADA Jurujual;

Memandangkan SQL menggunakan koma bertitik untuk menunjukkan penghujung perintah, kebanyakan program SQL menganggap pulangan (melalui menekan Return atau kekunci ENTER) sebagai ruang. Adalah idea yang baik untuk menggunakan penjejakan ke belakang dan penjajaran untuk menjadikan arahan anda lebih mudah dibaca dan lebih betul.

Asterisk (*) boleh digunakan untuk memaparkan senarai lengkap lajur seperti berikut:

DARIPADA Jurujual;

Ini akan menghasilkan hasil yang sama seperti arahan sebelumnya.

Secara umum, arahan SELECT bermula dengan kata kunci SELECT diikuti dengan ruang. Ini harus diikuti dengan senarai nama lajur yang anda mahu lihat, dipisahkan dengan koma. Untuk melihat semua lajur dalam jadual, anda boleh menggantikan senarai ini dengan asterisk (*). Kata kunci FROM menyusuli, diikuti dengan ruang dan nama jadual yang pertanyaan sedang dibuat. Akhir sekali, koma bertitik (;) hendaklah digunakan untuk menamatkan pernyataan dan menunjukkan bahawa arahan itu sedia untuk dilaksanakan.

Perintah SELECT mampu mengekstrak maklumat yang ditakrifkan dengan ketat dari jadual. Pada mulanya, anda hanya boleh melihat lajur tertentu jadual. Ini boleh dilakukan dengan mudah dengan hanya mengecualikan lajur yang tidak diperlukan daripada bahagian SELECT arahan. Contohnya, permintaan

PILIH nama, kom

DARIPADA Jurujual;

akan menghasilkan output yang ditunjukkan dalam Jadual 2.2:

Jadual 2.2 - Memilih lajur tertentu

Log Pelaksanaan SQL

PILIH snum, comm DARIPADA Jurujual;

Anda mungkin mempunyai jadual yang mempunyai sejumlah besar lajur yang mengandungi data, tidak semuanya berkaitan dengan tugasan yang sedang dijalankan. Oleh itu, cara boleh didapati untuk memilih dan memilih lajur yang berguna sahaja.

Walaupun lajur jadual, mengikut takrifan, tersusun, ini tidak bermakna ia akan dipulihkan dalam susunan yang sama. Sudah tentu, asterisk (*) akan menunjukkan semua lajur dalam susunan semula jadinya, tetapi jika ia disenaraikan secara berasingan, kita boleh mendapatkannya dalam susunan yang kita mahu. Pertimbangkan jadual Pesanan yang mengandungi tarikh pembelian (odate), nombor penjual (snum), nombor pesanan (onum) dan jumlah pembelian (amt):

PILIH odate, snum, onum, amt

Output pertanyaan ini ditunjukkan dalam Jadual 2.3.

Jadual 2.3 - Pembinaan semula lajur

Log Pelaksanaan SQL

PILIH odate, snum, onum, amt DARI Pesanan;

Struktur maklumat dalam jadual hanyalah asas untuk penstrukturan semula aktif dalam SQL.

2.3. PasukanBERBEZA

Perintah DISTINCT ialah hujah yang boleh menghapuskan nilai pendua daripada klausa SELECT. Mari kita anggap bahawa kita perlu mengetahui penjual mana yang pada masa ini mempunyai pesanan mereka dalam jadual Pesanan. Pesanan difahami sebagai catatan dalam jadual Pesanan yang mendaftarkan pembelian yang dibuat pada hari tertentu oleh pelanggan tertentu daripada penjual tertentu untuk jumlah tertentu. Kita tidak perlu tahu berapa banyak pesanan setiap satu; kami hanya memerlukan senarai nombor penjual (snum). Oleh itu anda boleh memasukkan:

untuk mendapatkan output yang ditunjukkan dalam Jadual 2.4.

Jadual 2.4 - PILIH dengan nombor penjual pendua

Log Pelaksanaan SQL

PILIH snum DARI Pesanan;

Untuk mendapatkan senarai tanpa pendua, untuk kebolehbacaan, anda boleh memasukkan yang berikut:

SELECT DISTINCT snum

Output untuk pertanyaan ini ditunjukkan dalam Jadual 2.5.

Dalam erti kata lain, DISTINCT menjejaki nilai yang ada sebelum ini supaya ia tidak diduplikasi dalam senarai. Ini adalah cara yang berguna untuk mengelakkan lebihan data. Untuk mengelakkan kehilangan beberapa data, anda tidak seharusnya menggunakan DISTINCT secara melulu, kerana ia mungkin menyembunyikan beberapa masalah atau beberapa data penting.

DISTINCT hanya boleh muncul sekali dalam klausa SELECT tertentu. Jika cadangan memilih banyak bidang,

Jadual 2.5 - PILIH tanpa pendua

Log Pelaksanaan SQL

PILIH snum DISTINCT DARI Pesanan;

DISTINCT meninggalkan baris yang semua medan yang dipilih adalah sama. Baris di mana beberapa nilai adalah sama dan ada yang berbeza akan disimpan. DISTINCT sebenarnya menyebabkan keseluruhan baris output ditunjukkan tanpa menyatakan sebarang medan (kecuali apabila digunakan di dalam fungsi agregat), jadi tidak ada gunanya mengulanginya.

Daripada DISTINCT, anda boleh tentukan - SEMUA. Ini akan mempunyai kesan sebaliknya; baris keluaran pendua akan kekal. Memandangkan ini adalah kes yang sama di mana DISTINCT atau ALL tidak dinyatakan, ALL pada dasarnya adalah hujah penjelasan dan bukannya operatif.

2.4. Cadangan pasukan

Jadual cenderung menjadi sangat besar apabila semakin banyak baris ditambahkan padanya dari semasa ke semasa. Oleh kerana lazimnya hanya baris tertentu yang diminati, SQL membenarkan anda menetapkan kriteria untuk menentukan baris mana yang dipilih untuk output.

WHERE ialah klausa SELECT yang membolehkan anda menetapkan predikat yang keadaannya boleh sama ada benar atau palsu untuk mana-mana baris dalam jadual. Perintah mengambil hanya baris tersebut daripada jadual yang pernyataan ini adalah benar. Sebagai contoh, kita perlu melihat nama dan komisen semua jurujual di London. Anda boleh memasukkan arahan berikut:

PILIH nama, bandar

DARIPADA Jurujual;

WHERE bandar = "LONDON";

Apabila klausa WHERE dibentangkan, program pangkalan data mengimbas keseluruhan jadual satu baris pada satu masa dan memeriksa setiap baris untuk menentukan sama ada pernyataan itu benar. Oleh itu, untuk entri Peel, program akan melihat nilai semasa lajur bandar, menentukan ia sama dengan "London", dan memasukkan rentetan itu dalam output. Entri untuk Serres tidak akan disertakan, dan sebagainya.

Output untuk pertanyaan di atas ditunjukkan dalam Jadual 2.6.

Jadual 2.6 - PILIH dengan klausa WHERE

Log Pelaksanaan SQL

PILIH nama, bandar DARI Jurujual WHERE bandar = "London"

Mari cuba contoh dengan medan nombor dalam klausa WHERE. Medan penarafan jadual Pelanggan bertujuan untuk membahagikan pelanggan kepada kumpulan berdasarkan kriteria tertentu yang akhirnya boleh diperoleh melalui nombor ini. Mungkin ini adalah satu bentuk penilaian kredit atau penilaian berdasarkan jumlah pemerolehan sebelumnya. Kod berangka sedemikian boleh berguna dalam pangkalan data hubungan sebagai cara untuk meringkaskan maklumat yang kompleks. Anda boleh memilih semua pelanggan dengan rating 100, seperti berikut:

WHERE rating = 100;

Petikan tunggal tidak digunakan di sini kerana skor adalah medan angka. Keputusan pertanyaan ditunjukkan dalam Jadual 2.7.

Anda boleh menggunakan nombor lajur, menghapuskan pendua atau menyusun semula lajur dalam pernyataan SELECT yang menggunakan WHERE. Walau bagaimanapun, anda boleh menukar susunan lajur untuk nama sahaja dalam klausa SELECT, dan bukan dalam klausa WHERE.

Jadual 2.7 - PILIH dengan medan angka dalam predikat

Log Pelaksanaan SQL

PILIH * DARI Pelanggan WHERE rating = 100;

DALAMkesimpulan bab II:

Sekarang kita tahu beberapa cara untuk membuat jadual memberikan maklumat yang diperlukan, dan bukan hanya membuang semua kandungannya. Adalah mungkin untuk menyusun semula lajur jadual atau menghapuskan mana-mana daripada mereka, dan juga memutuskan sama ada untuk melihat nilai pendua atau tidak.

Paling penting, anda boleh menetapkan syarat yang dipanggil predikat, yang menentukan sama ada baris jadual tertentu daripada beribu-ribu baris serupa akan dipilih untuk output atau tidak.

Kesimpulan

Menyelesaikan kerja, kita boleh membuat kesimpulan bahawa SQL ialah bahasa pengaturcaraan peringkat tinggi yang direka untuk bekerja dengan pangkalan data. Membolehkan anda mengubah suai data, mengarang dan melaksanakan pertanyaan serta memaparkan hasil dalam bentuk laporan. Pada masa ini, ia adalah piawaian yang diterima umum untuk sistem pengurusan pangkalan data hubungan.

Bahasa SQL biasanya digunakan bersama-sama dengan bahasa pengaturcaraan universal C, Pascal, dsb., atau bahasa pengurusan pangkalan data Fox, dBASE IV, dsb.

Senaraikandigunakansastera

1. F. Andon, V. Reznichenko Bahasa Pertanyaan SQL: Kursus Latihan. - St. Petersburg: Peter, 2006.

2. K. Panduan Tarikh kepada DBMS DB2 hubungan. - M.: Kewangan dan Perangkaan, 1988. - 320 hlm.

3. V.V. Kirillov Asas mereka bentuk pangkalan data hubungan. Tutorial. - St. Petersburg: ITMO, 1994. - 90 p.

4. M. Meyer Teori pangkalan data hubungan. - M.: Mir, 1987. - 608 hlm.

5. DBMS teragih. Informix. Bahagian 1. Asas bekerja dengan pangkalan data. - Garis panduan untuk melaksanakan kerja makmal / V.M. Stasyshin - Novosibirsk: NSTU, 1995.

6. Pangkalan Data J. Ullman dalam Pascal. - M.: Kejuruteraan Mekanikal, 1990. - 386 p.

Dokumen yang serupa

    Maklumat am tentang pengendali utama bahasa SQL. Mod operasi interaktif. Gunakan bahasa SQL untuk memilih maklumat daripada jadual, memasukkan, mengedit dan memadam data di dalamnya. Hubungan antara operasi algebra hubungan dan pernyataan SQL.

    abstrak, ditambah 02/06/2015

    Konsep dan ciri umum bahasa pengaturcaraan PHP, prinsip dan peringkat kerjanya, sintaks dan tatasusunan yang berkaitan. Pengendalian pengecualian di Jawa. Bekerja dengan pangkalan data menggunakan JDBC. Kaji prosedur untuk membangunkan antara muka grafik.

    pembentangan, ditambah 06/13/2014

    Konsep model data hubungan, integriti intipati dan pautannya. Peringkat utama mencipta pangkalan data, menghubungkan jadual dalam rajah data. Mereka bentuk pangkalan data untuk katalog buku "Buku" menggunakan DBMS Microsoft Access dan bahasa pertanyaan SQL.

    kerja kursus, ditambah 25/11/2010

    Maklumat am tentang sejarah penciptaan dan piawaian SQL: piawaian antarabangsa 1989, 1992 (SQL2), piawaian SQL: 1999 (SQL3). SQL interaktif dan bersarang. Subbahagian SQL. Bahasa pertanyaan berstruktur untuk membuat dan mengubah suai jadual.

    abstrak, ditambah 10/14/2011

    Bahasa Pertanyaan Berstruktur (SQL) dan tempatnya dalam bidang akses kepada maklumat dalam pangkalan data hubungan. Struktur dan jenis data asas bahasa. Sintaks dan semantik pernyataan SQL utama, piawaian bahasa terkini.

    abstrak, ditambah 29/03/2012

    Maklumat teori dan konsep asas pangkalan data. Sistem pengurusan pangkalan data: komposisi, struktur, keselamatan, mod operasi, objek. Bekerja dengan pangkalan data dalam OpenOffice.Org BASE: mencipta jadual, perhubungan, pertanyaan menggunakan Wizard Pertanyaan.

    kerja kursus, ditambah 04/28/2011

    Perbezaan antara dialek SQL sedia ada. Penyeragaman bahasa SQL. Konsep pangkalan data. Kecekapan organisasi data. Struktur bahasa SQL. Anggaran jenis angka. Jenis data selang. Memproses maklumat berstruktur yang kompleks.

    kerja kursus, ditambah 29/05/2014

    Maklumat am tentang sistem pengurusan pangkalan data MS Access. Menggunakan bahasa QBE untuk membuat pertanyaan untuk memilih data. Parametrik dan pertanyaan silang. Pertanyaan dengan penggantian automatik untuk memilih pendua dan rekod yang tidak mempunyai padanan.

    kerja kursus, ditambah 06/03/2015

    Mereka bentuk pangkalan data hubungan menggunakan perisian aplikasi MS ACCESS. Penerangan tentang ciri menggunakan pertanyaan untuk mendapatkan, menukar dan memadam maklumat daripada pangkalan data. Ciri-ciri struktur antara muka pengguna.

    kerja kursus, ditambah 19/11/2012

    Analisis kawasan subjek menggunakan model metodologi ARIS dan pembangunan gambar rajah ER. Penerangan mengenai maklumat input dan output untuk mereka bentuk pangkalan data hubungan. Pembangunan pertanyaan kawalan dan sambungan antara mereka menggunakan bahasa SQL.

  • Terjemahan
  • Tutorial
Adakah anda memerlukan “SELECT * WHERE a=b FROM c” atau “SELECT WHERE a=b FROM c ON *”?

Jika anda seperti saya, anda akan bersetuju: SQL ialah salah satu perkara yang kelihatan mudah pada mulanya (baca seperti bahasa Inggeris!), tetapi entah bagaimana anda perlu Google setiap pertanyaan mudah untuk mencari sintaks yang betul.


Dan kemudian bergabung, pengagregatan, subkueri bermula, dan ia ternyata benar-benar sampah. Sesuatu seperti ini:


PILIH ahli.nama pertama || " " || ahli.nama keluarga SEBAGAI "Nama Penuh" DARI peminjaman INNER JOIN ahli PADA ahli.memberid=borrowings.memberid DALAM JOIN buku PADA buku.bookid=borrowings.bookid WHERE peminjaman.bookid IN (PILIH bookid DARI buku WHERE stok>(PILIH purata(stok) ) DARI buku)) KUMPULAN OLEH ahli.nama pertama, ahli.nama keluarga;

Bue! Ini akan menakutkan mana-mana pemula, atau bahkan pembangun peringkat pertengahan jika dia melihat SQL buat kali pertama. Tetapi ia tidak begitu buruk.


Sangat mudah untuk mengingati apa yang intuitif, dan dengan panduan ini saya berharap dapat mengurangkan halangan untuk masuk ke dalam SQL untuk pemula dan menawarkan mereka yang sudah berpengalaman cara baharu untuk melihat SQL.


Walaupun sintaks SQL hampir sama antara pangkalan data yang berbeza, artikel ini menggunakan PostgreSQL untuk pertanyaan. Beberapa contoh akan berfungsi dalam MySQL dan pangkalan data lain.

1. Tiga perkataan ajaib

Terdapat banyak kata kunci dalam SQL, tetapi SELECT, FROM, dan WHERE terdapat dalam hampir setiap pertanyaan. Tidak lama kemudian anda akan faham bahawa ketiga-tiga perkataan ini mewakili aspek paling asas dalam membina pertanyaan pangkalan data, dan pertanyaan lain yang lebih kompleks hanyalah tambahan di atasnya.

2. Pangkalan kami

Mari kita lihat pangkalan data yang akan kami gunakan sebagai contoh dalam artikel ini:







Kami mempunyai perpustakaan buku dan orang. Terdapat juga meja khas untuk merekod buku yang dikeluarkan.

  • Jadual "buku" menyimpan maklumat tentang tajuk, pengarang, tarikh penerbitan dan ketersediaan buku. Mudah sahaja.
  • Dalam jadual "ahli" - nama pertama dan nama keluarga semua orang yang mendaftar untuk perpustakaan.
  • Jadual "pinjaman" menyimpan maklumat tentang buku yang diambil dari perpustakaan. Lajur bookid merujuk kepada ID buku yang diambil dalam jadual "buku", dan lajur memberid merujuk kepada orang yang sepadan daripada jadual "ahli". Kami juga mempunyai tarikh terbitan dan tarikh buku itu mesti dipulangkan.

3. Permintaan mudah

Mari kita mulakan dengan permintaan mudah: kita perlukan nama Dan pengecam(id) semua buku yang ditulis oleh pengarang "Dan Brown"


Permintaan akan menjadi seperti ini:


PILIH bookid SEBAGAI "id", tajuk DARI buku WHERE author="Dan Brown";

Dan hasilnya adalah seperti ini:


ID tajuk
2 Simbol yang Hilang
4 Inferno

Senang sahaja. Mari lihat permintaan untuk memahami apa yang berlaku.

3.1 DARI - dari mana kami mendapat data

Ini mungkin kelihatan jelas sekarang, tetapi FROM akan menjadi sangat penting kemudian apabila kita dapat menyertai dan membuat pertanyaan.


DARI titik ke jadual untuk pertanyaan. Ini boleh menjadi jadual sedia ada (seperti dalam contoh di atas), atau jadual yang dibuat dengan cepat melalui gabungan atau subkueri.

3.2 DI MANA - apakah data yang ditunjukkan

WHERE hanya berkelakuan seperti penapis garisan, yang ingin kami keluarkan. Dalam kes kami, kami hanya mahu melihat baris dengan nilai dalam lajur pengarang ialah "Dan Brown".

3.3 PILIH - cara memaparkan data

Memandangkan kita mempunyai semua lajur yang kita perlukan daripada jadual yang kita perlukan, kita perlu memutuskan cara tepat untuk memaparkan data ini. Dalam kes kami, kami hanya memerlukan tajuk buku dan ID, jadi itulah yang kami lakukan. jom pilih menggunakan SELECT. Pada masa yang sama, anda boleh menamakan semula lajur menggunakan AS.


Keseluruhan pertanyaan boleh digambarkan menggunakan gambar rajah mudah:


4. Sambungan (bergabung)

Sekarang kami ingin melihat tajuk (tidak semestinya unik) semua buku Dan Brown yang telah didaftar keluar dari perpustakaan, dan apabila buku tersebut perlu dipulangkan:


PILIH buku.tajuk SEBAGAI "Tajuk", peminjaman.tarikh pemulangan SEBAGAI "Tarikh Pemulangan" DARIPADA peminjaman SERTAI buku ON borrowings.bookid=books.bookid WHERE books.author="Dan Brown";

Keputusan:


Tajuk Tarikh Kembali
Simbol yang Hilang 2016-03-23 00:00:00
Inferno 2016-04-13 00:00:00
Simbol yang Hilang 2016-04-19 00:00:00

Untuk sebahagian besar permintaan adalah serupa dengan yang sebelumnya dengan pengecualian DARI bahagian. Maksudnya begitu kami sedang menanyakan data dari jadual lain. Kami tidak mengakses sama ada jadual "buku" atau jadual "pinjaman". Sebaliknya kita beralih kepada meja baru, yang dibuat dengan menyertai kedua-dua jadual ini.


borrowings JOIN books ON borrowings.bookid=books.bookid - pertimbangkan ini sebagai jadual baharu yang telah dibentuk dengan menggabungkan semua rekod daripada jadual "buku" dan "pinjaman" di mana nilai bookid adalah sama. Hasil daripada penggabungan sedemikian akan menjadi:



Dan kemudian kami menanyakan jadual ini dengan cara yang sama seperti dalam contoh di atas. Ini bermakna apabila menyertai jadual, anda hanya perlu risau tentang cara membuat gabungan. Dan kemudian permintaan menjadi jelas seperti dalam kes "permintaan mudah" dari titik 3.


Mari cuba gabungan yang lebih kompleks dengan dua jadual.


Sekarang kami ingin mendapatkan nama pertama dan nama keluarga yang mengambil buku dari perpustakaan oleh pengarang "Dan Brown".


Kali ini mari kita pergi dari bawah ke atas:


Langkah Langkah 1- di manakah kita boleh mendapatkan data? Untuk mendapatkan hasil yang kami perlukan, kami perlu menyertai jadual "ahli" dan "buku" dengan jadual "pinjaman". Bahagian JOIN akan kelihatan seperti ini:


peminjaman SERTAI buku PADA peminjaman.bookid=books.bookid SERTAI ahli PADA ahli.memberid=peminjaman.memberid

Hasil sambungan boleh dilihat pada pautan.


Langkah 2- data apa yang kami tunjukkan? Kami hanya berminat dengan data di mana pengarang buku itu ialah "Dan Brown"


WHERE books.author="Dan Brown"

Langkah 3- bagaimana kami menunjukkan data? Memandangkan data telah diterima, anda hanya perlu memaparkan nama pertama dan nama akhir mereka yang mengambil buku:


PILIH ahli.nama pertama SEBAGAI "Nama Pertama", ahli.nama keluarga SEBAGAI "Nama Akhir"

Super! Apa yang tinggal ialah menggabungkan tiga komponen dan membuat permintaan yang kami perlukan:


PILIH ahli.nama pertama SEBAGAI "Nama Pertama", ahli.nama keluarga SEBAGAI "Nama Akhir" DARIPADA peminjaman SERTAI buku PADA peminjaman.bookid=books.bookid SERTAI ahli PADA ahli.memberid=pinjaman.memberid WHERE books.author="Dan Brown";

Apa yang akan memberi kita:


Nama pertama Nama terakhir
Mike Willis
Ellen Horton
Ellen Horton

Hebat! Tetapi nama itu diulang (mereka tidak unik). Kami akan membetulkannya tidak lama lagi.

5. Pengagregatan

Secara kasarnya, Pengagregatan diperlukan untuk menukar berbilang baris menjadi satu. Pada masa yang sama, semasa pengagregatan, logik yang berbeza digunakan untuk lajur yang berbeza.


Mari kita teruskan dengan contoh kami di mana nama pendua muncul. Jelas sekali bahawa Ellen Horton mengambil lebih daripada satu buku, tetapi ini bukan yang paling banyak Cara yang paling baik tunjukkan maklumat ini. Anda boleh membuat permintaan lain:


PILIH ahli.nama pertama SEBAGAI "Nama Pertama", ahli.nama keluarga SEBAGAI "Nama Akhir", kira(*) SEBAGAI "Bilangan buku yang dipinjam" DARIPADA peminjaman SERTAI buku PADA peminjaman.bookid=books.bookid SERTAI ahli PADA ahli.memberid=pinjaman .memberid WHERE books.author="Dan Brown" GROUP BY members.firstname, members.lastname;

Yang akan memberi kita hasil yang diingini:


Nama pertama Nama terakhir Bilangan buku yang dipinjam
Mike Willis 1
Ellen Horton 2

Hampir semua pengagregatan disertakan dengan klausa GROUP BY. Perkara ini menukar jadual yang boleh diambil melalui pertanyaan kepada kumpulan jadual. Setiap kumpulan sepadan dengan nilai unik (atau kumpulan nilai) lajur yang kami tentukan dalam GROUP BY . Dalam contoh kami, kami menukar hasil daripada latihan sebelumnya kepada sekumpulan baris. Kami juga melakukan pengagregatan dengan count , yang menukarkan berbilang baris kepada nilai integer (dalam kes kami, bilangan baris). Makna ini kemudiannya diberikan kepada setiap kumpulan.


Setiap baris dalam hasil mewakili hasil pengagregatan setiap kumpulan.



Seseorang boleh membuat kesimpulan logik bahawa semua medan dalam hasil harus dinyatakan dalam GROUP BY , atau pengagregatan harus dilakukan padanya. Kerana semua medan lain boleh berbeza antara satu sama lain dalam baris yang berbeza, dan jika anda memilihnya dengan SELECT, tidak jelas yang mana nilai yang mungkin perlu diambil.


Dalam contoh di atas, fungsi kiraan memproses semua baris (memandangkan kami mengira bilangan baris). Fungsi lain seperti jumlah atau proses maks hanya baris yang ditentukan. Sebagai contoh, jika kita ingin mengetahui bilangan buku yang ditulis oleh setiap pengarang, maka kita memerlukan pertanyaan berikut:


PILIH pengarang, jumlah(stok) DARI buku KUMPULAN OLEH pengarang;

Keputusan:


pengarang jumlah
Robin Sharma 4
Dan Brown 6
John Green 3
Amish Tripathi 2

Di sini fungsi jumlah hanya memproses lajur stok dan mengira jumlah semua nilai dalam setiap kumpulan.

6. Subkueri


Subkueri ialah pertanyaan SQL biasa yang dibenamkan dalam pertanyaan yang lebih besar. Mereka dibahagikan kepada tiga jenis berdasarkan jenis hasil yang dikembalikan.

6.1 Jadual dua dimensi

Terdapat pertanyaan yang mengembalikan berbilang lajur. Contoh yang baik ialah pertanyaan daripada latihan pengagregatan sebelumnya. Sebagai subkueri, ia hanya akan mengembalikan jadual lain yang mana pertanyaan baharu boleh dibuat. Bersambung dari latihan sebelumnya, jika kita ingin mengetahui jumlah buku yang ditulis oleh penulis "Robin Sharma", maka salah satu cara yang mungkin- gunakan subqueries:


PILIH * DARI (PILIH pengarang, jumlah(stok) DARI buku KUMPULAN OLEH pengarang) SEBAGAI hasil WHERE pengarang="Robin Sharma";

Keputusan:



Boleh ditulis sebagai: ["Robin Sharma", "Dan Brown"]


2. Sekarang kita menggunakan hasil ini dalam pertanyaan baharu:


PILIH tajuk, tempah DARI buku DI MANA pengarang DALAM (PILIH pengarang DARI (PILIH pengarang, jumlah(saham) DARI buku KUMPULAN OLEH pengarang) SEBAGAI keputusan WHERE jumlah > 3);

Keputusan:


tajuk tempah
Simbol yang Hilang 2
Siapa yang Akan Menangis Apabila Anda Mati? 3
Inferno 4

Ini adalah sama seperti:


PILIH tajuk, ditempah DARI buku WHERE pengarang IN ("Robin Sharma", "Dan Brown");

6.3 Nilai individu

Terdapat pertanyaan yang menghasilkan hanya satu baris dan satu lajur. Ia boleh dianggap sebagai nilai malar dan boleh digunakan di mana-mana sahaja nilai digunakan, seperti dalam operator perbandingan. Ia juga boleh digunakan sebagai jadual dua dimensi atau tatasusunan elemen tunggal.


Mari, sebagai contoh, dapatkan maklumat tentang semua buku yang bilangannya dalam perpustakaan melebihi purata semasa.


Purata boleh diperolehi dengan cara ini:


pilih purata(stok) daripada buku;

Apa yang memberi kita:


7. Operasi tulis

Kebanyakan operasi tulis pangkalan data agak mudah berbanding dengan operasi baca yang lebih kompleks.

7.1 Kemas kini

Sintaks permintaan KEMASKINI secara semantik sama dengan permintaan baca. Satu-satunya perbezaan ialah daripada memilih lajur dengan SELECT, kami menetapkan pengetahuan dengan SET.


Jika semua buku Dan Brown hilang, maka anda perlu menetapkan semula nilai kuantiti. Pertanyaan untuk ini ialah:


KEMASKINI buku SET stok=0 WHERE author="Dan Brown";

WHERE melakukan perkara yang sama seperti sebelumnya: memilih baris. Daripada SELECT yang kami gunakan semasa membaca, kami kini menggunakan SET. Walau bagaimanapun, kini anda perlu menentukan bukan sahaja nama lajur, tetapi juga nilai baharu untuk lajur ini dalam baris yang dipilih.


7.2 Padam

PADAM permintaan dipermudahkan PILIH pertanyaan atau KEMASKINI tanpa nama lajur. Serius. Seperti SELECT dan UPDATE , blok WHERE kekal sama: ia memilih baris untuk dipadamkan. Operasi pemadaman memusnahkan keseluruhan baris, jadi tidak masuk akal untuk menentukan lajur individu. Jadi, jika kami memutuskan untuk tidak menetapkan semula bilangan buku Dan Brown, tetapi untuk memadamkan semua rekod sama sekali, maka kami boleh membuat permintaan berikut:


PADAM DARI buku WHERE author="Dan Brown";

7.3 Masukkan

Mungkin satu-satunya perkara yang berbeza daripada jenis pertanyaan lain ialah INSERT. Formatnya ialah:


MASUKKAN KE DALAM x (a,b,c) NILAI (x, y, z);

Di mana a , b , c ialah nama lajur, dan x , y dan z ialah nilai yang akan dimasukkan ke dalam lajur tersebut, dalam susunan yang sama. Itu pada asasnya.


Mari lihat contoh khusus. Berikut ialah pertanyaan INSERT yang mengisi keseluruhan jadual "buku":


MASUKKAN KE DALAM buku (penerbit buku, tajuk, pengarang, diterbitkan, stok) NILAI (1,"Scion of Ikshvaku","Amish Tripathi","06-22-2015",2), (2,"The Lost Symbol"," Dan Brown","07-22-2010",3), (3,"Siapa yang Akan Menangis Apabila Anda Mati?","Robin Sharma","06-15-2006",4), (4,"Inferno" ,"Dan Brown","05-05-2014",3), (5,"The Fault in our Stars", "John Green", "01-03-2015",3);

8. Semak

Kami telah sampai ke penghujungnya, saya mencadangkan ujian kecil. Lihat permintaan itu di awal artikel. Bolehkah anda memikirkannya? Cuba pecahkannya kepada bahagian SELECT , FROM , WHERE , GROUP BY, dan lihat komponen individu subquery.


Ini adalah dalam bentuk yang lebih mudah dibaca:


PILIH ahli.nama pertama || " " || ahli.nama keluarga SEBAGAI "Nama Penuh" DARI peminjaman INNER JOIN ahli PADA ahli.memberid=borrowings.memberid DALAM JOIN buku PADA buku.bookid=borrowings.bookid WHERE peminjaman.bookid IN (PILIH bookid DARI buku WHERE stok> (PILIH purata(stok) ) DARI buku)) KUMPULAN OLEH ahli.nama pertama, ahli.nama keluarga;

Pertanyaan ini mengembalikan senarai orang yang telah menyemak buku dari perpustakaan yang jumlah bilangannya melebihi purata.


Keputusan:


Nama penuh
Lida Tyler

Saya harap anda dapat memikirkannya tanpa sebarang masalah. Tetapi jika tidak, saya mengalu-alukan komen dan maklum balas anda supaya saya boleh menambah baik siaran ini.

Tag: Tambah tag

Bahasa SQL dianggap deklaratif, tidak seperti bahasa di mana program ditulis - ini bermakna bahasa SQL menerangkan apa yang perlu dilakukan, dan bukan bagaimana. Terdapat dua bentuk bahasa SQL:

· Mod interaktif (digunakan untuk membuat soalan pengguna dan mendapatkan hasil secara interaktif).

· Mod terbenam (terdiri daripada arahan SQL yang dibenamkan di dalam program yang ditulis dalam bahasa pengaturcaraan lain.)

Asas bahasa SQL terdiri daripada operator yang diedarkan antara 3 komponen bahasa ini:

1. Bahasa manipulasi data - direka bentuk untuk menyokong pangkalan data dan termasuk operator untuk menambah, menukar, memadam dan mendapatkan semula data.

2. Bahasa definisi data - direka untuk membuat perubahan, memadam jadual dan keseluruhan pangkalan data secara keseluruhan.

3. Bahasa pengurusan data – direka untuk memberikan perlindungan terhadap pelbagai jenis kerosakan (DBMS menjamin beberapa perlindungan secara automatik).

SQL ialah bahasa pengaturcaraan bukan prosedur. Tidak seperti bahasa prosedur, SQL tidak tertumpu pada rekod, tetapi pada banyak tupel, i.e. Maklumat input untuk melaksanakan pertanyaan ialah satu set tupel satu atau lebih hubungan. Juga, semasa pelaksanaan pertanyaan, satu set tupel yang memenuhi syarat tertentu terbentuk, i.e. SQL menentukan bukan urutan tindakan yang diperlukan untuk mendapatkan hasil, dan syarat yang mesti dipenuhi oleh tupel.

Kata kunci dalam ungkapan SQL boleh ditulis dalam kedua-dua huruf kecil dan huruf besar, dan huruf dalam satu atau lebih baris. Setiap permintaan mesti berakhir dengan ";". Perkataan terpelihara tidak boleh digunakan sebagai nama untuk objek pangkalan data.

Memilih data menggunakan klausa Pilih.

Pilih senarai_lajur daripada nama_jadual.

Pilih * daripada produk dengan harga< 50000;

Pengendali berikut boleh digunakan dalam klausa where:

2. IsNULL – semua baris yang tidak mempunyai nilai dalam medan yang ditentukan akan dipilih. pilih * dariTovarwheresrok_godisnull.

3. Antara – membolehkan anda menyemak sama ada nilai berada dalam julat yang ditentukan oleh nilai sempadan. pilih * daripadaTovardi mana harga antara 100000 dan 1000000.

4. In – menyemak sama ada nilai dimasukkan dalam senarai nilai. Senarai nilai ditunjukkan dalam kurungan, nilai disenaraikan dipisahkan dengan koma.select * fromTovarwhereprice in(20000, 30000, 50000).

5. Suka – padan – melihat nilai rentetan untuk menentukan sama ada rentetan yang dinyatakan dalam pengendali serupa dimasukkan dalam rentetan aksara medan yang sedang diperiksa. pilih * dariTovarwherenamelike'iris'; Pengendali Suka boleh menggunakan aksara berikut untuk menentukan corak rentetan yang dicari:

A) ? – menggantikan mana-mana SATU aksara

B) * - membenarkan kehadiran sebarang jujukan aksara di lokasi yang ditentukan.

Mengisih data dalam jadual

Pilih spisokdaripada_tabl orderbycolumn_name . Jika pengisihan dilakukan oleh beberapa lajur, maka kami menunjukkannya dipisahkan dengan koma. Tanya – menaik, desc – menurun. Pilih * daripadaTovarorderbyprice

Klausa groupby (kumpulan mengikut) membolehkan anda mengumpulkan rekod ke dalam subset yang ditentukan oleh nilai medan dan menggunakan fungsi pengagregatan bukan pada semua rekod fungsi, tetapi pada rekod kumpulan yang dibentuk.

Pilih column_listfromtable_namegroupbygroup_column.

Pilih purata (harga) daripada kumpulan Produk mengikut kod_proiz;

Selectcolumn_listfromtable_namegroupbycolumn_grouphavingcondition; (kumpulan mengikut syarat).

Klausa mempunyai menentukan kriteria yang mana data harus dimasukkan dalam kumpulan. Dalam keadaan yang dinyatakan dalam klausa yang mempunyai, hanya medan atau ungkapan yang mempunyai nilai keluaran tunggal untuk setiap kumpulan keluaran ditentukan.

Pilih purata (harga) daripada kumpulan Tovar mengikut kod_proizv yang mempunyai kod_proizv=1 atau kod_proizv=2;

Ahli sukan
ID
Fio
Pol
vozrASt
Kelab
sukan

Pilih fio, sukan, kelab daripada ahli sukan;

Pilih * daripada ahli sukan di mana vozrast<18;

Pilih * daripada ahli sukan di mana pol seperti 'w*';

Pilih * daripada ahli sukan di mana kelab seperti 'Spartak';

Pilih * daripada ahli sukan yang berumur antara 18 dan 25;

Pilih purata(vozrast) daripada ahli sukan di mana sukan seperti 'bola tampar';

Pilih kiraan(fio) daripada kumpulan ahli sukan mengikut kelab;

Pilih * daripada ahli sukan di mana vozrast>25;

Pilih kiraan(fio) daripada kumpulan ahli sukan mengikut kelab yang mempunyai vozrast>25;

Pertanyaan bersarang

Pilih * daripada Produk tempat kod_proiz masuk (pilih id daripada proizv di mana nama seperti'A%');

Pilih purata(harga) daripada Produk tempat kod_proiz masuk (pilih id daripada proizv negara seperti 'Perancis');

Pelaksanaan pertanyaan dalam pertanyaan bersarang bermula dengan pertanyaan yang paling bersarang, i.e. pertama permintaan mudah akan dilaksanakan terakhir. Selain pertanyaan bersarang, terdapat cara lain untuk menggabungkan pertanyaan menggunakan pengendali kesatuan. Tidak seperti pertanyaan bersarang, kesatuan menggabungkan pertanyaan bebas, i.e. mereka dilaksanakan secara bebas antara satu sama lain, dan output mereka digabungkan. Apabila dua atau lebih pertanyaan menjalani gabungan, lajur keluarannya mestilah serasi untuk gabungan, i.e. setiap pertanyaan mesti menyatakan bilangan lajur yang sama, mereka mesti disenaraikan dalam urutan yang sama, dan setiap satu mesti daripada jenis yang serasi dengan setiap satu. Anda tidak boleh menggunakan kesatuan dalam pertanyaan bersarang dan anda tidak boleh menggunakan fungsi pengagregatan dalam pertanyaan dalam kesatuan.

Pilih nama, harga, nilai daripada Produk dengan harga > 50000

pilih nama, harga, kol daripada Produk tempat kod_proizv masuk (pilih id daripada proizv di mana negara seperti 'Perancis');

Manipulasi data

Pengendali manipulasi data termasuk sisipan, kemas kini dan padam.

Memasukkan rekod.

Masukkan ke dalam table_name[(field1, ... , fieldn)] values ​​​​(value1, ... , value n);

Medan tidak perlu disenaraikan dalam permintaan. Menghitung medan hanya diperlukan jika nilai tidak ditambahkan pada semua medan dalam jadual.

Masukkan ke dalam nilai Produk (1,'coklat', 100, 10500, '1 tahun', 2);

Masukkan ke dalam Tovar (id, nama, harga, nilai kod_proizv (2,”bhbc”,500,1));

Kemas kini table_name set column_values ​​​​= value ;

kemas kini digunakan untuk semua rekod dan jika tiada di mana, jika di mana terdapat maka kemas kini digunakan untuk rekod yang memenuhi syarat.

Kemas kini set Produk kol=kol+100;

Kemas kini harga set produk=harga*2 di mana kod_proizin(pilih id dari negara proizvwhere seperti 'Perancis');

Padam daripada table_name;

Jika syarat tidak ada, maka semua rekod dipadamkan daripada jadual.

Padam daripada Produk di mana srok_god adalah NULL;

Padamkan daripada proiz di mana lesen seperti '%2012';

Menyusun data dalam InterBase. Bekerja dengan domain dan jadual.

Jenis data SQL:

Jenis data aksara:

1. char – satu watak

2. char(n) – rentetan aksara dengan panjang tetap, dengan n ialah panjang rentetan. Untuk menyimpan data sedemikian, n bait sentiasa diperuntukkan, tanpa mengira panjang sebenar.

3. varchar(n) – rentetan aksara panjang berubah-ubah, untuk menyimpan data jenis ini, bilangan bait yang sepadan dengan panjang sebenar rentetan diperuntukkan.

Data integer:

1.integer/int – (-2147483647 - +2147483648) sebagai peraturan, 4 bait diperuntukkan untuk menyimpan data integer julat yang ditentukan nilai.

2. smallint – (-32767 - +32768) integer pendek yang mana 2 bait diperuntukkan untuk penyimpanan.

Jenis data sebenar:

1. float ialah jenis data sebenar yang mana 8 bait diperuntukkan untuk storan.

2. smallfloat – 4 bait diperuntukkan untuk penyimpanan data.

4. perpuluhan(p,n) – serupa dengan floatр – kuantiti angka penting, n – bilangan digit selepas titik perpuluhan.

Jenis data kewangan:

1.wang(p,n) – serupa dengan jenis data perpuluhan(p,n). Ia dimasukkan hanya kerana dalam sesetengah DBMS mereka menggunakan kaedah pemformatan khas untuknya.

Tarikh dan masa:

1. tarikh – untuk menyimpan tarikh.

2. masa – untuk menyimpan masa.

3. selang – untuk menyimpan selang masa.

4. datetime – untuk menyimpan detik dalam masa (tahun, bulan, tarikh, jam, minit, saat, pecahan saat).

Jenis data binari – membolehkan anda menyimpan data dari sebarang saiz dalam kod binari:

Untuk semua jenis data terdapat satu nilai sepunya NULL, i.e. nilai tidak ditentukan. Setiap elemen lajur mempunyai nilai ini sehingga data ditambahkan padanya.

Mewujudkan pangkalan data apabila Bantuan SQL permintaan.

Cipta pangkalan data_nama;

Contoh: buat kedai pangkalan data;

Gugurkan pangkalan data db_name;

Contoh: Drop kedai pangkalan data;

Bekerja dengan meja

Createtable table_name (field_name field_type , ...);

Cipta jadual proizvod (id int primary key, nama varchar (20) not null, address varchar (30) not null, telvarchar (15) not null, country varchar (20) not null, license datetime);

Cipta produk jadual (id int primary key, name varchar (20) not null, kolsmallint not null, price int not null, srok_godvarchar(40) not null, kod_proizvint references proizvod (id));

Notnull - jika binaan ini ditentukan, maka elemen lajur mesti sentiasa mempunyai nilai tertentu (bukan null)

Unik – nilai setiap elemen lajur mestilah unik

Primarykey – lajur ialah kunci utama

Parameter Unique dan Primarykey adalah saling eksklusif.

Nama_jadual rujukan (nama_lajur) – lajur ini ialah kunci asing, menunjukkan nama jadual dan lajur yang dirujuk.

Memadamkan jadual

Droptable<имя_таблицы>;

Contoh: droptableTovar – memadam jadual "produk".

Pengubahsuaian jadual

Menambah lajur pada jadual:

boleh diubah<имя_таблицы>

TAMBAH (<имя_столбца>jenis data , ...);

Ubah jadual produk

Add(sostavvarchar(100) not null, opt_priceint not null);

Mengalih keluar lajur daripada jadual:

boleh diubah<имя_таблицы>

Jatuhkan (nama_baris1b nama_baris2, ...);

Ubah jadual Produk

Jatuhkan(sostav, opt_price);

Menukar lajur dalam jadual

boleh diubah<имя_таблицы>

Ubah suai (nama_lajur_jenis data, ...);

Ubah suai(srok_goddatetime bukan null);

Fungsi bahasa SQL

Fungsi utama bahasa SQL diberikan di bawah.

Definisi data. Fungsi SQL ini ialah penerangan tentang struktur data yang disokong dan organisasi perhubungan hubungan (jadual). Operator untuk mencipta pangkalan data, mencipta jadual, dan mengakses data bertujuan untuk melaksanakannya.

Penciptaan pangkalan data. Untuk mencipta pangkalan baru data, operator CREATE DATABASE digunakan. Struktur pernyataan menentukan nama pangkalan data yang akan dibuat.

Mencipta jadual. Jadual asas dibuat menggunakan pernyataan CREATE TABLE. Pernyataan ini menentukan nama medan, jenis data untuknya dan panjang (untuk sesetengah jenis data). SQL menggunakan jenis data berikut:

INTEGER – integer;

CHAR – nilai aksara;

VARCHAR – nilai aksara, hanya aksara bukan kosong disimpan;

PERPULUHAN – nombor perpuluhan;

FLOAT – nombor titik terapung;

KETEPATAN BERGANDA – titik terapung berketepatan berganda;

DATETIME – tarikh dan masa;

BOOL – Nilai Boolean.

Pernyataan penciptaan jadual menentukan sekatan pada nilai lajur dan pada jadual. Sekatan yang mungkin ditunjukkan dalam jadual. 4.8

Jadual 4.8 Had ke atas data yang ditentukan

Untuk model data hubungan, menentukan kunci asing (FOREIGKEY) adalah penting. Apabila mengisytiharkan kunci asing, anda mesti mengenakan sekatan yang sesuai pada lajur, sebagai contoh, BUKAN NULL.

Dalam pernyataan SQL, CHECK menandakan kekangan semantik yang memastikan integriti data, seperti mengehadkan set nilai yang sah untuk lajur tertentu.

Anda tidak boleh menggunakan kenyataan buat jadual lebih daripada sekali pada jadual yang sama. Jika, selepas penciptaannya, ketidaktepatan ditemui dalam definisinya, maka perubahan boleh dibuat menggunakan pernyataan ALTER TABLE. Pernyataan ini direka bentuk untuk menukar struktur jadual sedia ada: anda boleh mengalih keluar atau menambah medan pada jadual sedia ada.

Manipulasi data. SQL membenarkan pengguna atau program aplikasi menukar kandungan pangkalan data dengan memasukkan data baharu, memadam atau mengubah suai data sedia ada.

Memasukkan data baharu ialah prosedur untuk menambah baris pada pangkalan data dan dilakukan menggunakan pernyataan INSERT.

Pengubahsuaian data melibatkan perubahan kepada nilai dalam satu atau lebih lajur jadual dan dilakukan menggunakan pernyataan KEMASKINI. Contoh:

SET jumlah=jumlah+1000.00

WHERE jumlah>0

Mengalih keluar baris daripada jadual menggunakan pernyataan DELETE. Sintaks operator ialah:

DARI jadual

Klausa WHERE adalah pilihan, tetapi jika ia tidak disertakan, semua entri dalam jadual akan dipadamkan. Ia berguna untuk menggunakan pernyataan SELECT dengan sintaks yang sama seperti PADAM pengendali untuk melihat entri yang akan dipadamkan.

Memastikan integriti data. Bahasa SQL membolehkan anda mentakrifkan kekangan integriti yang agak kompleks, yang kepuasannya akan diperiksa untuk semua pengubahsuaian pangkalan data. Memantau hasil transaksi, memproses ralat yang berlaku, dan menyelaraskan kerja selari dengan pangkalan data beberapa aplikasi atau pengguna disediakan oleh COMMIT (merekodkan kejayaan menyelesaikan transaksi semasa dan permulaan yang baru) dan ROLLBACK (keperluan untuk kembalikan - pemulihan automatik keadaan pangkalan data pada permulaan transaksi)

Persampelan data- satu daripada fungsi penting pangkalan data yang sepadan dengan pernyataan SELECT. Contoh penggunaan operator telah dibincangkan dalam bahagian sebelumnya.

Dalam SQL, anda boleh membuat urutan pertanyaan bersarang (subkueri). Terdapat jenis pertanyaan tertentu yang paling baik dilaksanakan menggunakan subkueri. Pertanyaan ini termasuk apa yang dipanggil semakan kewujudan. Katakan anda ingin mendapatkan data tentang pelajar yang tidak mempunyai gred tujuh mata. Jika set kosong dikembalikan, ini bermakna hanya satu perkara - setiap pelajar mempunyai sekurang-kurangnya satu gred sedemikian.

Menghubungkan jadual. Pernyataan SQL membolehkan anda mendapatkan semula data daripada lebih daripada satu jadual. Salah satu cara untuk melakukannya ialah dengan memautkan jadual menggunakan satu medan biasa.

Pernyataan SELECT mesti mengandungi kekangan untuk memadankan nilai lajur (medan) tertentu. Kemudian hanya baris di mana nilai padanan lajur yang ditentukan akan diambil daripada jadual yang berkaitan. Nama lajur ditunjukkan hanya bersama-sama dengan nama jadual; jika tidak kenyataan itu akan menjadi samar-samar.

Anda boleh menggunakan jenis pemautan jadual lain: pengendali INTER JOIN (gabungan dalam) memastikan set rekod yang terhasil mengandungi nilai yang sepadan dalam medan yang berkaitan. Sambungan luar (Outer JOIN) membolehkan anda memasukkan dalam hasil pertanyaan semua baris dari satu jadual dan baris yang sepadan dari yang lain

Kawalan capaian. SQL memastikan penyegerakan pemprosesan pangkalan data oleh pelbagai program aplikasi, melindungi data daripada capaian yang tidak dibenarkan.

Akses data dalam persekitaran berbilang pengguna dikawal menggunakan pernyataan GRANT dan REVOKE. Dalam setiap pernyataan adalah perlu untuk menentukan pengguna, objek (jadual, pandangan) yang berkaitan dengan kebenaran ditetapkan, dan kebenaran itu sendiri. Sebagai contoh, pernyataan GRANT memberikan pengguna X keupayaan untuk mendapatkan semula data daripada jadual PRODUCT:

GERAN PILIHAN PADA PRODUK KEPADA X

Kenyataan REVOKE membatalkan semua kebenaran yang diberikan sebelum ini.

Membenamkan SQL dalam Program Aplikasi. Aplikasi Sebenar biasanya ditulis dalam bahasa lain yang menghasilkan kod SQL dan menghantarnya ke DBMS sebagai teks ASCII.

Piawaian IBM untuk produk SQL mengawal penggunaan bahasa SQL terbina dalam. Semasa menulis atur cara aplikasi, teksnya ialah gabungan arahan daripada bahasa pengaturcaraan utama (contohnya, C, Pascal, Cobol, Fortran, Assembler) dan perintah SQL dengan awalan khas, contohnya. ExecSQL. Struktur pernyataan SQL telah diperluaskan untuk menampung pembolehubah bahasa hos dalam binaan SQL.



Pemproses SQL mengubah suai jenis atur cara mengikut keperluan penyusun bahasa pengaturcaraan utama. Fungsi pengkompil adalah untuk menterjemah (menterjemah) atur cara daripada bahasa pengaturcaraan sumber kepada bahasa yang hampir dengan bahasa mesin. Selepas penyusunan, program aplikasi (aplikasi) adalah modul bebas.

dialek SQL

DBMS perhubungan moden menggunakan dialek bahasa SQL untuk menerangkan dan memanipulasi data. Subset bahasa SQL yang membolehkan anda mencipta dan menerangkan pangkalan data dipanggil DDL (Bahasa Definisi Data).

Pada mulanya, bahasa SQL dipanggil SEQUEL (Bahasa Pertanyaan Bahasa Inggeris Berstruktur), kemudian SEQUEL/2, dan kemudian hanya SQL. Hari ini, SQL ialah standard de facto untuk DBMS hubungan.

Standard bahasa pertama muncul pada tahun 1989 - SQL-89 dan disokong oleh hampir semua komersil DBMS hubungan. Dia ada watak umum dan terbuka kepada tafsiran yang luas. Kelebihan SQL-89 boleh dianggap sebagai penyeragaman sintaks dan semantik operator untuk pensampelan dan manipulasi data, serta penetapan cara untuk mengehadkan integriti pangkalan data. Walau bagaimanapun, ia kehilangan bahagian penting seperti manipulasi skema pangkalan data. Ketidaklengkapan standard SQL-89 membawa kepada kemunculan pada tahun 1992. versi seterusnya bahasa SQL.

SQL2 (atau SQL-92) merangkumi hampir semua isu yang diperlukan: manipulasi skema pangkalan data, pengurusan urus niaga dan sesi, sokongan untuk seni bina pelayan pelanggan atau alat pembangunan aplikasi.

Langkah seterusnya dalam pembangunan bahasa ialah versi SQL 3. Versi bahasa ini dilengkapi dengan mekanisme pencetus, definisi jenis data arbitrari dan sambungan objek.

Pada masa ini terdapat tiga peringkat bahasa: pemula, pertengahan dan lengkap. Banyak pengeluar DBMS mereka menggunakan pelaksanaan sendiri SQL, berdasarkan sekurang-kurangnya pada tahap awal standard ANSI yang sepadan, dan mengandungi beberapa sambungan khusus untuk DBMS tertentu. Dalam jadual 4.9 menyediakan contoh dialek SQL.

Jadual 4.9 Dialek SQL

DBMS Bahasa pertanyaan
Sistem R DBMS SQL
DB2 SQL
Akses SQL
SYBASE SQL Di Mana-mana Watcom-SQL
Pelayan SQL SYBASE Transact_SQL
SQL saya SQL
Oracle PL/SQL

Pangkalan data berorientasikan objek menggunakan bahasa pertanyaan objek OQL (Bahasa Pertanyaan Objek). Bahasa OQL adalah berdasarkan arahan SELECT bagi bahasa SQL2 dan menambahkan keupayaan untuk mengarahkan pertanyaan kepada objek atau koleksi objek, serta keupayaan untuk memanggil kaedah dalam satu pertanyaan.

Keserasian banyak dialek SQL yang digunakan menentukan keserasian DBMS. Oleh itu, DBMS SYBASE SQL Anywhere adalah serasi yang mungkin untuk DBMS kelas ini dengan DBMS SYBASE SQL Server. Salah satu aspek keserasian ini ialah sokongan dalam SYBASE SQL Anywhere seperti dialek bahasa SQL seperti Transact-SQL. Dialek ini digunakan dalam SYBASE SQL Server dan boleh digunakan dalam SYBASE SQL Anywhere bersama-sama dengan dialek SQL asli - Watcom-SQL.

Soalan kawalan

1. Bagaimanakah DBMS boleh dikelaskan?

2. Apakah model pangkalan data yang wujud?

3. Apakah elemen utama model maklumat?

4. Apakah jenis hubungan antara entiti yang wujud?

5. Apakah gambar rajah ER dan untuk apa ia digunakan?

6. Apakah prosedur normalisasi jadual yang anda boleh lakukan?

7. Apakah bahasa dan alatan perisian DBMS?

8. Apakah jenis MS Access DBMS itu?

9. Apakah objek utama DBMS MS Access?

10. Apakah pengendali SQL utama digunakan?