Tutorial bergambar tentang sql untuk pemula. Arsip Kategori: Buku tentang SQL

  • 26.07.2023

Saat ini, kursus SQL “untuk boneka” menjadi semakin populer. Hal ini dapat dijelaskan dengan sangat sederhana, karena di dunia modern Anda semakin dapat menemukan apa yang disebut layanan web “dinamis”. Mereka dibedakan oleh shell yang cukup fleksibel dan didasarkan pada Semua programmer pemula yang memutuskan untuk mendedikasikan situs web, pertama-tama mendaftar di kursus SQL "untuk boneka".

Mengapa mempelajari bahasa ini?

Pertama-tama, SQL diajarkan untuk selanjutnya menciptakan berbagai macam aplikasi untuk salah satu mesin blog paling populer saat ini - WordPress. Setelah menyelesaikan beberapa pelajaran sederhana, Anda akan dapat membuat kueri dengan kompleksitas apa pun, yang menegaskan kesederhanaan bahasa ini.

Apa itu SQL?

Atau bahasa kueri terstruktur, dibuat untuk satu tujuan: untuk menentukan, menyediakan akses, dan memprosesnya dalam jangka waktu yang cukup singkat. Jika Anda mengetahui arti SQL, maka Anda akan memahami bahwa server ini diklasifikasikan sebagai bahasa yang disebut “non-prosedural”. Artinya, kemampuannya hanya mencakup deskripsi komponen atau hasil apa pun yang ingin Anda lihat di masa mendatang di situs. Namun kapan tidak menunjukkan secara pasti hasil apa yang akan diperoleh. Setiap permintaan baru dalam bahasa ini seperti “superstruktur” tambahan. Sesuai dengan urutan pemasukannya ke dalam database, maka query akan dieksekusi.

Prosedur apa yang dapat dilakukan dengan menggunakan bahasa ini?

Meskipun sederhana, database SQL memungkinkan Anda membuat berbagai macam kueri. Jadi apa yang dapat Anda lakukan jika Anda mempelajari bahasa pemrograman penting ini?

  • membuat berbagai macam tabel;
  • menerima, menyimpan dan mengubah data yang diterima;
  • ubah struktur tabel sesuai kebijaksanaan Anda;
  • menggabungkan informasi yang diterima menjadi satu blok;
  • menghitung data yang diterima;
  • memastikan perlindungan informasi yang lengkap.

Perintah apa yang paling populer dalam bahasa ini?

Jika Anda memutuskan untuk mengambil kursus SQL for Dummies, maka Anda akan menerima informasi rinci tentang perintah yang digunakan dalam membuat kueri yang menggunakannya. Yang paling umum saat ini adalah:

  1. DDL adalah perintah yang mendefinisikan data. Ini digunakan untuk membuat, memodifikasi, dan menghapus berbagai macam objek dalam database.
  2. DCL adalah perintah yang memanipulasi data. Ini digunakan untuk memberikan pengguna yang berbeda akses ke informasi dalam database, serta untuk menggunakan tabel atau tampilan.
  3. TCL adalah tim yang mengelola berbagai transaksi. Tujuan utamanya adalah untuk mengetahui kemajuan suatu transaksi.
  4. DML - memanipulasi data yang diterima. Tugasnya adalah memungkinkan pengguna untuk memindahkan berbagai informasi dari database atau memasukkannya ke sana.

Jenis hak istimewa yang ada di server ini

Hak istimewa mengacu pada tindakan yang dapat dilakukan pengguna tertentu sesuai dengan statusnya. Yang paling minim tentunya adalah login biasa. Tentu saja, hak istimewa dapat berubah seiring waktu. Yang lama akan dihapus dan yang baru akan ditambahkan. Saat ini, semua orang yang mengikuti kursus SQL Server "for dummies" tahu bahwa ada beberapa jenis tindakan yang diizinkan:

  1. Jenis objek - pengguna diperbolehkan menjalankan perintah apa pun hanya dalam kaitannya dengan objek tertentu yang terletak di database. Pada saat yang sama, hak istimewa berbeda untuk objek yang berbeda. Mereka juga terikat tidak hanya pada pengguna tertentu, tetapi juga pada tabel. Jika seseorang, dengan menggunakan kemampuannya, membuat tabel, maka dia dianggap sebagai pemiliknya. Oleh karena itu, ia berhak memberikan hak istimewa baru kepada pengguna lain terkait informasi di dalamnya.
  2. Tipe sistem inilah yang disebut hak cipta data. Pengguna yang telah menerima hak istimewa tersebut dapat membuat berbagai objek di database.

Sejarah SQL

Bahasa ini diciptakan oleh IBM Research Laboratory pada tahun 1970. Saat itu namanya sedikit berbeda (SEQUEL), namun setelah beberapa tahun digunakan diubah, disingkat sedikit. Meskipun demikian, bahkan saat ini banyak pakar pemrograman terkenal di dunia yang masih menyebut nama tersebut dengan cara kuno. SQL diciptakan dengan satu tujuan - untuk menciptakan bahasa yang sangat sederhana sehingga bahkan pengguna Internet biasa pun dapat mempelajarinya tanpa masalah. Fakta menariknya adalah pada saat itu SQL bukanlah satu-satunya bahasa tersebut. Di California, kelompok spesialis lain mengembangkan Ingres serupa, tetapi tidak pernah tersebar luas. Sebelum tahun 1980, terdapat beberapa variasi SQL yang hanya sedikit berbeda satu sama lain. Untuk mencegah kebingungan, versi standar dibuat pada tahun 1983, yang masih populer hingga saat ini. Kursus SQL "untuk boneka" memungkinkan Anda mempelajari lebih banyak tentang layanan ini dan mempelajarinya sepenuhnya dalam beberapa minggu.

Tutorial ini seperti “cap memori saya” dalam bahasa SQL (DDL, DML), mis. Ini adalah informasi yang terakumulasi selama aktivitas profesional saya dan terus-menerus tersimpan di kepala saya. Bagi saya, ini adalah jumlah minimum yang cukup, yang paling sering digunakan saat bekerja dengan database. Jika ada kebutuhan untuk menggunakan konstruksi SQL yang lebih lengkap, saya biasanya mencari bantuan dari perpustakaan MSDN yang terletak di Internet. Menurut pendapat saya, sangat sulit untuk mengingat semuanya, dan ini tidak terlalu diperlukan. Namun mengetahui struktur dasarnya sangatlah berguna, karena... mereka dapat diterapkan dalam bentuk yang hampir sama di banyak database relasional, seperti Oracle, MySQL, Firebird. Perbedaannya terutama terletak pada tipe datanya, yang mungkin berbeda secara detail. Tidak banyak konstruksi dasar SQL, dan dengan latihan terus-menerus, konstruksi tersebut akan cepat dihafal. Misalnya, untuk membuat objek (tabel, batasan, indeks, dll.), cukup memiliki lingkungan editor teks (IDE) untuk bekerja dengan database, dan tidak perlu mempelajari alat visual yang dirancang untuk bekerja dengan jenis database tertentu (MS SQL, Oracle, MySQL, Firebird, ...). Ini juga nyaman karena semua teks ada di depan mata Anda, dan Anda tidak perlu membuka banyak tab untuk membuat, misalnya, indeks atau batasan. Saat terus-menerus bekerja dengan database, membuat, mengubah, dan terutama membuat ulang objek menggunakan skrip jauh lebih cepat dibandingkan jika Anda melakukannya dalam mode visual. Juga dalam mode skrip (dan, karenanya, dengan hati-hati), lebih mudah untuk menetapkan dan mengontrol aturan penamaan objek (pendapat subjektif saya). Selain itu, skrip mudah digunakan ketika perubahan yang dilakukan dalam satu database (misalnya, pengujian) perlu ditransfer dalam bentuk yang sama ke database lain (produktif).

Bahasa SQL dibagi menjadi beberapa bagian, disini saya akan melihat 2 bagian terpenting:
  • DML – Bahasa Manipulasi Data, yang berisi konstruksi berikut:
    • PILIH – pemilihan data
    • INSERT – memasukkan data baru
    • PEMBARUAN – pembaruan data
    • HAPUS – menghapus data
    • MERGE – penggabungan data
Karena Saya seorang praktisi; hanya ada sedikit teori dalam buku teks ini, dan semua konstruksi akan dijelaskan menggunakan contoh-contoh praktis. Selain itu, saya percaya bahwa bahasa pemrograman, dan khususnya SQL, hanya dapat dikuasai melalui latihan, dengan mengalaminya sendiri dan memahami apa yang terjadi ketika Anda menjalankan konstruksi ini atau itu.

Buku teks ini dibuat berdasarkan prinsip Langkah demi Langkah, yaitu. Anda perlu membacanya secara berurutan dan sebaiknya segera mengikuti contohnya. Namun jika dalam prosesnya Anda perlu mempelajari suatu perintah tertentu secara lebih detail, maka gunakan pencarian khusus di Internet, misalnya di perpustakaan MSDN.

Saat menulis tutorial ini, saya menggunakan database MS SQL Server versi 2014, dan saya menggunakan MS SQL Server Management Studio (SSMS) untuk menjalankan skrip.

Secara singkat tentang MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) adalah utilitas untuk Microsoft SQL Server untuk mengonfigurasi, mengelola, dan mengelola komponen database. Utilitas ini berisi editor skrip (yang sebagian besar akan kita gunakan) dan program grafis yang bekerja dengan objek dan pengaturan server. Alat utama SQL Server Management Studio adalah Object Explorer, yang memungkinkan pengguna untuk melihat, mengambil, dan mengelola objek server. Teks ini sebagian dipinjam dari Wikipedia.

Untuk membuat editor skrip baru, gunakan tombol “Kueri Baru”:

Untuk mengubah database saat ini Anda dapat menggunakan daftar drop-down:

Untuk menjalankan perintah tertentu (atau sekelompok perintah), pilih perintah tersebut dan tekan tombol "Jalankan" atau tombol "F5". Jika saat ini hanya ada satu perintah di editor, atau Anda perlu menjalankan semua perintah, maka Anda tidak perlu memilih apa pun.

Setelah menjalankan skrip, terutama yang membuat objek (tabel, kolom, indeks), untuk melihat perubahannya, gunakan penyegaran dari menu konteks dengan menyorot grup yang sesuai (misalnya, Tabel), tabel itu sendiri, atau grup Kolom di dalamnya.

Sebenarnya hanya itu saja yang perlu kita ketahui untuk melengkapi contoh yang diberikan di sini. Utilitas SSMS lainnya mudah dipelajari sendiri.

Sedikit teori

Basis data relasional (RDB, atau selanjutnya dalam konteks hanya DB) adalah kumpulan tabel yang saling berhubungan. Secara kasar, database adalah suatu file yang didalamnya data disimpan dalam bentuk yang terstruktur.

DBMS – Sistem Manajemen Basis Data, yaitu. ini adalah seperangkat alat untuk bekerja dengan jenis database tertentu (MS SQL, Oracle, MySQL, Firebird, ...).

Catatan
Karena dalam kehidupan, dalam percakapan sehari-hari, kita kebanyakan mengatakan: “Oracle DB”, atau bahkan hanya “Oracle”, sebenarnya berarti “Oracle DBMS”, maka dalam konteks buku teks ini istilah DB kadang-kadang digunakan. Dari konteksnya, saya pikir akan jelas apa sebenarnya yang kita bicarakan.

Tabel adalah kumpulan kolom. Kolom juga bisa disebut bidang atau kolom; semua kata ini akan digunakan sebagai sinonim yang menyatakan hal yang sama.

Tabel adalah objek utama RDB; semua data RDB disimpan baris demi baris di kolom tabel. Garis dan catatan juga merupakan sinonim.

Untuk setiap tabel, serta kolomnya, nama ditentukan yang selanjutnya dapat diakses.
Nama objek (nama tabel, nama kolom, nama indeks, dll) di MS SQL dapat memiliki panjang maksimal 128 karakter.

Sebagai referensi– pada database ORACLE, nama objek boleh memiliki panjang maksimal 30 karakter. Oleh karena itu, untuk database tertentu, Anda perlu mengembangkan aturan sendiri untuk memberi nama objek agar memenuhi batasan jumlah karakter.

SQL adalah bahasa yang memungkinkan Anda melakukan query database menggunakan DBMS. Dalam DBMS tertentu, bahasa SQL mungkin memiliki implementasi tertentu (dialeknya sendiri).

DDL dan DML adalah bagian dari bahasa SQL:

  • Bahasa DDL digunakan untuk membuat dan memodifikasi struktur database, mis. untuk membuat/memodifikasi/menghapus tabel dan hubungan.
  • Bahasa DML memungkinkan Anda memanipulasi data tabel, mis. dengan dialognya. Ini memungkinkan Anda memilih data dari tabel, menambahkan data baru ke tabel, serta memperbarui dan menghapus data yang sudah ada.

Di SQL, Anda dapat menggunakan 2 jenis komentar (baris tunggal dan multibaris):

Komentar satu baris
Dan

/* komentar multibaris */

Sebenarnya ini sudah cukup untuk teorinya.

DDL – Bahasa Definisi Data

Misalnya, perhatikan sebuah tabel dengan data tentang karyawan, dalam bentuk yang familiar bagi orang yang bukan seorang programmer:

Dalam hal ini, kolom-kolom tabel mempunyai nama-nama berikut: Nomor personel, Nama lengkap, Tanggal lahir, Email, Jabatan, Departemen.

Masing-masing kolom ini dapat dicirikan berdasarkan tipe data yang dikandungnya:

  • Nomor personel – bilangan bulat
  • Nama lengkap – string
  • Tanggal lahir - tanggal
  • Surel – rangkaian
  • Posisi - tali
  • Departemen - jalur
Tipe kolom adalah karakteristik yang menunjukkan tipe data apa yang dapat disimpan oleh kolom tertentu.

Untuk memulainya, cukup mengingat tipe data dasar berikut yang digunakan dalam MS SQL saja:

Arti Notasi dalam MS SQL Keterangan
String dengan panjang variabel varchar(N)
Dan
nvarchar(N)
Dengan menggunakan angka N, kita dapat menentukan panjang string maksimum yang mungkin untuk kolom terkait. Misalnya, jika kita ingin mengatakan bahwa nilai kolom “Nama” dapat berisi maksimal 30 karakter, maka kita perlu menyetel tipenya ke nvarchar(30).
Perbedaan antara varchar dan nvarchar adalah varchar memungkinkan Anda menyimpan string dalam format ASCII, di mana satu karakter menempati 1 byte, dan nvarchar menyimpan string dalam format Unicode, di mana setiap karakter menempati 2 byte.
Jenis varchar hanya boleh digunakan jika Anda 100% yakin bahwa bidang tersebut tidak perlu menyimpan karakter Unicode. Misalnya, varchar dapat digunakan untuk menyimpan alamat Surel, Karena biasanya hanya berisi karakter ASCII.
Tali dengan panjang tetap karakter(N)
Dan
tidak ada(N)
Tipe ini berbeda dengan string dengan panjang variabel karena jika panjang string kurang dari N karakter, maka string tersebut selalu diisi di sebelah kanan sepanjang N dengan spasi dan disimpan dalam database dalam bentuk ini, yaitu. dalam database dibutuhkan tepat N karakter (di mana satu karakter membutuhkan 1 byte untuk char dan 2 byte untuk nchar). Dalam praktek saya, tipe ini sangat jarang digunakan, dan jika digunakan, terutama digunakan dalam format char(1), yaitu. ketika suatu bidang ditentukan oleh satu karakter.
Bilangan bulat ke dalam Tipe ini memperbolehkan kita hanya menggunakan bilangan bulat pada kolomnya, baik positif maupun negatif. Sebagai referensi (sekarang ini tidak begitu relevan bagi kami), rentang angka yang diperbolehkan oleh tipe int adalah dari -2,147,483,648 hingga 2,147,483,647. Biasanya ini adalah tipe utama yang digunakan untuk menentukan pengidentifikasi.
Bilangan nyata atau real mengambang Secara sederhana, ini adalah angka yang mungkin mengandung titik desimal (koma).
tanggal tanggal Jika kolom yang perlu disimpan hanya Tanggal yang terdiri dari tiga komponen: Hari, Bulan dan Tahun. Misalnya, 15/02/2014 (15 Februari 2014). Tipe ini dapat digunakan untuk kolom “Tanggal masuk”, “Tanggal lahir”, dll, mis. dalam kasus di mana penting bagi kami untuk mencatat hanya tanggalnya, atau ketika komponen waktu tidak penting bagi kami dan dapat dibuang atau jika tidak diketahui.
Waktu waktu Tipe ini dapat digunakan jika kolom hanya perlu menyimpan data waktu, mis. Jam, Menit, Detik dan Milidetik. Misalnya, 17:38:31.3231603
Misalnya, “Waktu keberangkatan penerbangan” harian.
tanggal dan waktu tanggal Waktu Tipe ini memungkinkan Anda menyimpan Tanggal dan Waktu secara bersamaan. Misalnya, 15/02/2014 17:38:31.323
Misalnya saja tanggal dan waktu suatu acara.
Bendera sedikit Tipe ini nyaman digunakan untuk menyimpan nilai dalam bentuk "Ya"/"Tidak", di mana "Ya" akan disimpan sebagai 1, dan "Tidak" akan disimpan sebagai 0.

Selain itu, nilai bidang, jika tidak dilarang, tidak boleh ditentukan, kata kunci NULL digunakan untuk tujuan ini.

Untuk menjalankan contoh, mari buat database pengujian bernama Test.

Database sederhana (tanpa menentukan parameter tambahan) dapat dibuat dengan menjalankan perintah berikut:

BUAT Tes DATABASE
Anda dapat menghapus database dengan perintah (Anda harus sangat berhati-hati dengan perintah ini):

JATUHKAN Tes DATABASE
Untuk beralih ke database kami, Anda dapat menjalankan perintah:

Tes PENGGUNAAN
Alternatifnya, pilih Test database dari daftar drop-down di area menu SSMS. Saat bekerja, saya sering menggunakan metode peralihan antar database ini.

Sekarang di database kita, kita bisa membuat tabel menggunakan deskripsi apa adanya, menggunakan spasi dan karakter Cyrillic:

BUAT TABEL [Karyawan]([Nomor personel] int, [Nama] nvarchar(30), [Tanggal lahir] tanggal, nvarchar(30), [Posisi] nvarchar(30), [Departemen] nvarchar(30))
Dalam hal ini, kita harus mengapit nama dalam tanda kurung siku […].

Namun dalam database, untuk kenyamanan lebih, lebih baik menentukan semua nama objek dalam bahasa Latin dan tidak menggunakan spasi pada nama. Pada MS SQL biasanya dalam hal ini setiap kata diawali dengan huruf kapital, misalnya pada kolom “Nomor Personil” kita bisa memberi nama PersonnelNumber. Anda juga dapat menggunakan nomor pada nama, misalnya Nomor Telepon1.

Pada sebuah catatan
Dalam beberapa DBMS, format penamaan berikut “PHONE_NUMBER” mungkin lebih disukai; misalnya, format ini sering digunakan dalam database ORACLE. Biasanya, saat menentukan nama field, sebaiknya tidak sesuai dengan kata kunci yang digunakan dalam DBMS.

Karena alasan ini, Anda dapat melupakan sintaks tanda kurung siku dan menghapus tabel [Karyawan]:

DROP TABLE [Karyawan]
Misalnya, sebuah tabel dengan karyawan dapat diberi nama “Karyawan”, dan bidangnya dapat diberi nama berikut:

  • ID – Nomor personel (ID Karyawan)
  • Nama - nama lengkap
  • Ulang Tahun – Tanggal lahir
  • Surel – Surel
  • Posisi - Posisi
  • Departemen - Departemen
Sangat sering kata ID digunakan untuk memberi nama bidang pengenal.

Sekarang mari kita buat tabel kita:

BUAT TABEL Karyawan(ID int, Nama nvarchar(30), Tanggal ulang tahun, Email nvarchar(30), Jabatan nvarchar(30), Departemen nvarchar(30))
Untuk menentukan kolom yang diperlukan, Anda dapat menggunakan opsi NOT NULL.

Untuk tabel yang sudah ada, bidang dapat didefinisikan ulang menggunakan perintah berikut:

Perbarui kolom ID ALTER TABLE Karyawan ALTER COLUMN ID int NOT NULL -- perbarui kolom Nama ALTER TABLE Karyawan ALTER COLUMN Nama nvarchar(30) NOT NULL

Pada sebuah catatan
Konsep umum bahasa SQL tetap sama untuk sebagian besar DBMS (setidaknya, inilah yang dapat saya nilai dari DBMS yang pernah saya gunakan). Perbedaan antara DDL dalam DBMS yang berbeda terutama terletak pada tipe datanya (tidak hanya namanya yang mungkin berbeda di sini, tetapi juga detail implementasinya), dan implementasi bahasa SQL yang sangat spesifik mungkin juga sedikit berbeda (yaitu, inti dari perintahnya sama, tetapi mungkin ada sedikit perbedaan dalam dialek, sayangnya, tetapi tidak ada standar yang baku). Setelah menguasai dasar-dasar SQL, Anda dapat dengan mudah berpindah dari satu DBMS ke DBMS lainnya, karena... Dalam hal ini, Anda hanya perlu memahami detail implementasi perintah di DBMS baru, yaitu. dalam kebanyakan kasus, menggambar analogi saja sudah cukup.

Membuat tabel CREATE TABLE Employees(ID int, -- di ORACLE tipe int setara (wrapper) untuk nomor(38) Nama nvarchar2(30), -- nvarchar2 di ORACLE setara dengan nvarchar di MS SQL Tanggal ulang tahun, Email nvarchar2(30) , Posisi nvarchar2(30), Departemen nvarchar2(30)); -- memperbarui kolom ID dan Nama (di sini MODIFY(...) digunakan sebagai ganti ALTER COLUMN) ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- menambahkan PK (dalam hal ini konstruksinya terlihat sama seperti di MS SQL, akan ditampilkan di bawah) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Untuk ORACLE ada perbedaan dalam hal implementasi tipe varchar2; pengkodeannya tergantung pada pengaturan database dan teks dapat disimpan, misalnya dalam pengkodean UTF-8. Selain itu, panjang bidang di ORACLE dapat ditentukan dalam byte dan karakter; untuk ini, opsi tambahan BYTE dan CHAR digunakan, yang ditentukan setelah panjang bidang, misalnya:

NAMA varchar2(30 BYTE) -- kapasitas kolom adalah 30 byte NAMA varchar2(30 CHAR) -- kapasitas kolom adalah 30 karakter
Opsi mana yang akan digunakan secara default BYTE atau CHAR, jika hanya menentukan tipe varchar2(30) di ORACLE, bergantung pada pengaturan database, dan terkadang dapat diatur dalam pengaturan IDE. Secara umum, terkadang Anda mudah bingung, jadi dalam kasus ORACLE, jika tipe varchar2 digunakan (dan ini terkadang dibenarkan di sini, misalnya, saat menggunakan pengkodean UTF-8), saya lebih suka menulis CHAR secara eksplisit (karena biasanya lebih mudah untuk menghitung panjang string dalam karakter).

Namun dalam hal ini, jika sudah ada beberapa data di dalam tabel, maka agar eksekusi perintah berhasil, kolom ID dan Nama harus diisi di semua baris tabel. Mari kita tunjukkan dengan contoh: masukkan data ke dalam tabel di bidang ID, Jabatan dan Departemen; ini dapat dilakukan dengan skrip berikut:

MASUKKAN NILAI Karyawan(ID,Posisi,Departemen) (1000,N"Direktur",N"Administrasi"), (1001,N"Programmer",N"IT"), (1002,N"Akuntan",N"Akuntansi" ), (1003,N"Programmer Senior",N"IT")
Dalam hal ini, perintah INSERT juga akan menghasilkan kesalahan, karena Saat memasukkan, kami tidak menentukan nilai bidang Nama yang diperlukan.
Jika kita sudah memiliki data ini pada tabel asli, maka perintah “ALTER TABLE Employees ALTER COLUMN ID int NOT NULL” akan berhasil dijalankan, dan perintah “ALTER TABLE Employees ALTER COLUMN Name int NOT NULL” akan menghasilkan pesan error, bahwa bidang Nama berisi nilai NULL (tidak ditentukan).

Mari tambahkan nilai pada kolom Nama dan isi kembali datanya:


Opsi NOT NULL juga dapat digunakan secara langsung saat membuat tabel baru, mis. dalam konteks perintah CREATE TABLE.

Pertama, hapus tabel menggunakan perintah:

DROP TABLE Karyawan
Sekarang mari buat tabel dengan kolom ID dan Nama yang diperlukan:

BUAT TABEL Karyawan(ID int NOT NULL, Nama nvarchar(30) NOT NULL, Tanggal ulang tahun, Email nvarchar(30), Jabatan nvarchar(30), Departemen nvarchar(30))
Anda juga dapat menulis NULL setelah nama kolom, yang berarti nilai NULL (tidak ditentukan) akan diperbolehkan di dalamnya, tetapi ini tidak perlu, karena karakteristik ini tersirat secara default.

Sebaliknya, jika Anda ingin menjadikan kolom yang sudah ada sebagai opsional, gunakan sintaks perintah berikut:

ALTER TABLE Karyawan ALTER COLUMN Nama nvarchar(30) NULL
Atau sederhananya:

ALTER TABLE Karyawan ALTER COLUMN Nama nvarchar(30)
Dengan perintah ini kita juga dapat mengubah tipe field ke tipe lain yang kompatibel, atau mengubah panjangnya. Misalnya, mari perluas bidang Nama menjadi 50 karakter:

ALTER TABLE Karyawan ALTER COLUMN Nama nvarchar(50)

Kunci utama

Saat membuat tabel, diinginkan bahwa tabel tersebut memiliki kolom unik atau kumpulan kolom unik untuk setiap barisnya - catatan dapat diidentifikasi secara unik berdasarkan nilai unik ini. Nilai ini disebut kunci utama tabel. Untuk tabel Karyawan kita, nilai unik tersebut dapat berupa kolom ID (yang berisi “Nomor Personil Karyawan” - meskipun dalam kasus kita nilai ini unik untuk setiap karyawan dan tidak dapat diulang).

Anda dapat membuat kunci utama ke tabel yang sudah ada menggunakan perintah:

ALTER TABLE Employees TAMBAHKAN CONSTRAINT PK_Employees PRIMARY KEY(ID)
Dimana "PK_Employees" adalah nama batasan yang bertanggung jawab atas kunci utama. Biasanya, kunci utama diberi nama menggunakan awalan “PK_” diikuti dengan nama tabel.

Jika kunci utama terdiri dari beberapa kolom, maka kolom tersebut harus dicantumkan dalam tanda kurung, dipisahkan dengan koma:

ALTER TABLE nama_tabel TAMBAHKAN CONSTRAINT nama_kendala KUNCI UTAMA(bidang1,bidang2,…)
Perlu dicatat bahwa di MS SQL, semua bidang yang disertakan dalam kunci utama harus memiliki karakteristik NOT NULL.

Kunci utama juga dapat ditentukan secara langsung saat membuat tabel, yaitu. dalam konteks perintah CREATE TABLE. Mari kita hapus tabelnya:

DROP TABLE Karyawan
Dan kemudian kita akan membuatnya menggunakan sintaks berikut:

BUAT TABEL Karyawan(ID int NOT NULL, Nama nvarchar(30) NOT NULL, Tanggal ulang tahun, Email nvarchar(30), Posisi nvarchar(30), Departemen nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY(ID) -- jelaskan PK setelahnya semua bidang sebagai batasan)
Setelah pembuatan, isi tabel dengan data:

MASUKKAN Karyawan(ID,Posisi,Departemen,Nama) NILAI (1000,N"Direktur",N"Administrasi",N"Ivanov I.I."), (1001,N"Programmer",N"IT",N" Petrov P.P." ), (1002,N"Akuntan",N"Akuntansi",N"Sidorov S.S."), (1003,N"Programmer Senior",N"IT",N"Andreev A.A.")
Jika kunci utama dalam sebuah tabel hanya terdiri dari nilai satu kolom, maka Anda dapat menggunakan sintaks berikut:

BUAT TABEL Karyawan(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- tentukan sebagai karakteristik bidang Nama nvarchar(30) BUKAN NULL, Tanggal ulang tahun, Email nvarchar(30), Posisi nvarchar(30), Departemen nvarchar(30) )
Faktanya, Anda tidak perlu menentukan nama batasannya, dalam hal ini batasan tersebut akan diberi nama sistem (seperti “PK__Employee__3214EC278DA42077”):

BUAT TABEL Karyawan(ID int NOT NULL, Nama nvarchar(30) NOT NULL, Tanggal ulang tahun, Email nvarchar(30), Jabatan nvarchar(30), Departemen nvarchar(30), PRIMARY KEY(ID))
Atau:

BUAT TABEL Karyawan(ID int BUKAN NULL KUNCI UTAMA, Nama nvarchar(30) BUKAN NULL, Tanggal ulang tahun, Email nvarchar(30), Jabatan nvarchar(30), Departemen nvarchar(30))
Tapi saya akan merekomendasikan bahwa untuk tabel permanen Anda selalu secara eksplisit menetapkan nama batasannya, karena Dengan nama yang ditentukan secara eksplisit dan mudah dipahami, akan lebih mudah untuk memanipulasinya nanti; misalnya, Anda dapat menghapusnya:

ALTER TABLE Karyawan DROP CONSTRAINT PK_Employees
Namun sintaksis singkat seperti itu, tanpa menentukan nama batasan, mudah digunakan saat membuat tabel database sementara (nama tabel sementara dimulai dengan # atau ##), yang akan dihapus setelah digunakan.

Mari kita rangkum

Sejauh ini kita telah melihat perintah berikut:
  • BUAT TABEL table_name (daftar bidang dan tipenya, batasannya) – digunakan untuk membuat tabel baru di database saat ini;
  • JATUHKAN MEJA nama_tabel – digunakan untuk menghapus tabel dari database saat ini;
  • MENGUBAH TABEL nama_tabel MENGUBAH KOLOM nama_kolom... – digunakan untuk memperbarui jenis kolom atau mengubah pengaturannya (misalnya, untuk mengatur karakteristik NULL atau NOT NULL);
  • MENGUBAH TABEL nama_tabel TAMBAHKAN KENDALA kendala_nama KUNCI UTAMA(field1, field2,...) – menambahkan kunci utama ke tabel yang ada;
  • MENGUBAH TABEL nama_tabel JATUHKAN KENDALA constraint_name – menghapus batasan dari tabel.

Sedikit tentang tabel sementara

Ekstrak dari MSDN. Ada dua jenis tabel sementara di MS SQL Server: lokal (#) dan global (##). Tabel sementara lokal hanya dapat dilihat oleh pembuatnya hingga sesi koneksi ke instans SQL Server berakhir saat tabel tersebut pertama kali dibuat. Tabel sementara lokal secara otomatis dihapus setelah pengguna terputus dari contoh SQL Server. Tabel sementara global terlihat oleh semua pengguna selama sesi koneksi apa pun setelah tabel tersebut dibuat, dan dihapus ketika semua pengguna yang mereferensikan tabel tersebut terputus dari contoh SQL Server.

Tabel sementara dibuat di database sistem tempdb, mis. Dengan membuatnya, kita tidak menyumbat database utama; jika tidak, tabel sementara benar-benar identik dengan tabel biasa; tabel tersebut juga dapat dihapus menggunakan perintah DROP TABLE. Tabel sementara lokal (#) lebih umum digunakan.

Untuk membuat tabel sementara, Anda dapat menggunakan perintah CREATE TABLE:

BUAT TABEL #Temp(ID int, Nama nvarchar(30))
Karena tabel sementara di MS SQL mirip dengan tabel biasa, tabel tersebut juga dapat dihapus menggunakan perintah DROP TABLE:

DROP TABLE #Temp

Anda juga dapat membuat tabel sementara (seperti tabel biasa) dan segera mengisinya dengan data yang dikembalikan oleh kueri menggunakan sintaks SELECT ... INTO:

PILIH ID,Nama KE #Temp DARI Karyawan

Pada sebuah catatan
Implementasi tabel sementara mungkin berbeda di DBMS yang berbeda. Misalnya, dalam DBMS ORACLE dan Firebird, struktur tabel sementara harus ditentukan terlebih dahulu dengan perintah CREATE GLOBAL Temporary TABLE, yang menunjukkan secara spesifik penyimpanan data di dalamnya, kemudian pengguna melihatnya di antara tabel utama dan bekerja dengannya seperti pada meja biasa.

Normalisasi basis data – membagi menjadi subtabel (direktori) dan mengidentifikasi koneksi

Tabel Karyawan kami saat ini memiliki kelemahan yaitu di bidang Posisi dan Departemen, pengguna dapat memasukkan teks apa pun, yang terutama penuh dengan kesalahan, karena untuk satu karyawan ia cukup menunjukkan "TI" sebagai departemen, dan untuk karyawan kedua, untuk contoh, masukkan “IT department”, yang ketiga ada “IT”. Akibatnya, tidak jelas apa yang dimaksud pengguna, mis. Apakah karyawan ini adalah karyawan dari departemen yang sama, atau apakah pengguna mendeskripsikan dirinya dan ini adalah 3 departemen yang berbeda? Selain itu, dalam kasus ini, kami tidak akan dapat mengelompokkan data dengan benar untuk beberapa laporan, yang mungkin perlu menunjukkan jumlah karyawan menurut setiap departemen.

Kerugian kedua adalah jumlah penyimpanan informasi ini dan duplikasinya, yaitu. Untuk setiap karyawan, nama lengkap departemen ditunjukkan, yang membutuhkan ruang di database untuk menyimpan setiap karakter dari nama departemen.

Kelemahan ketiga adalah sulitnya memperbarui kolom ini jika nama suatu posisi berubah, misalnya jika Anda perlu mengganti nama posisi “Programmer” menjadi “Junior Programmer”. Dalam hal ini, kita harus melakukan perubahan pada setiap baris tabel yang Posisinya sama dengan “Programmer”.

Untuk menghindari kekurangan ini, digunakan apa yang disebut normalisasi basis data - membaginya menjadi subtabel dan tabel referensi. Tidak perlu masuk ke dalam belantara teori dan mempelajari apa itu bentuk normal, cukup memahami esensi normalisasi.

Mari kita buat 2 tabel direktori “Posisi” dan “Departemen”, sebut saja Posisi pertama, dan yang kedua, masing-masing, Departemen:

CREATE TABLE Positions(ID int IDENTITY(1,1) BUKAN NULL CONSTRAINT PK_Positions PRIMARY KEY, Nama nvarchar(30) BUKAN NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) BUKAN NULL CONSTRAINT PK_Departments PRIMARY KEY, Nama nvarchar(30 ) BUKAN BATAL)
Perhatikan bahwa di sini kami menggunakan opsi IDENTITY baru, yang mengatakan bahwa data di kolom ID akan diberi nomor secara otomatis, mulai dari 1, dengan kelipatan 1, yaitu. Saat menambahkan catatan baru, mereka akan diberi nilai secara berurutan 1, 2, 3, dll. Bidang seperti ini biasanya disebut penambahan otomatis. Sebuah tabel hanya dapat memiliki satu bidang yang ditentukan dengan properti IDENTITY, dan biasanya, namun tidak harus, bidang tersebut adalah kunci utama untuk tabel tersebut.

Pada sebuah catatan
Dalam DBMS yang berbeda, implementasi bidang dengan penghitung dapat dilakukan secara berbeda. Di MySQL, misalnya, bidang seperti itu ditentukan menggunakan opsi AUTO_INCREMENT. Di ORACLE dan Firebird, fungsi ini sebelumnya dapat ditiru menggunakan SEQUENCE. Namun sejauh yang saya tahu, ORACLE kini telah menambahkan opsi GENERATED AS IDENTITY.

Mari kita isi tabel-tabel ini secara otomatis, berdasarkan data terkini yang tercatat di kolom Jabatan dan Departemen pada tabel Karyawan:

Kita isi field Nama pada tabel Jabatan dengan nilai unik dari field Jabatan pada tabel Karyawan MASUKKAN Posisi(Nama) PILIH BEDA Jabatan DARI Karyawan DIMANA Jabatan BUKAN NULL -- membuang catatan yang posisinya tidak ditentukan
Mari kita lakukan hal yang sama untuk tabel Departemen:

MASUKKAN Departemen(Nama) PILIH Departemen YANG BERBEDA DARI Karyawan DIMANA Departemen BUKAN NULL
Jika sekarang kita membuka tabel Jabatan dan Departemen, kita akan melihat serangkaian nilai bernomor untuk bidang ID:

PILIH * DARI Posisi

PILIH * DARI Departemen

Tabel-tabel ini sekarang akan berperan sebagai buku referensi untuk menentukan posisi dan departemen. Kami sekarang akan mengacu pada ID pekerjaan dan departemen. Pertama-tama, mari buat field baru di tabel Karyawan untuk menyimpan data pengenal:

Tambahkan field untuk ID posisi ALTER TABLE Employees ADD PositionID int -- tambahkan field untuk department ID ALTER TABLE Employees ADD DepartmentID int
Jenis field referensi harus sama dengan direktori, dalam hal ini int.

Anda juga dapat menambahkan beberapa bidang ke tabel sekaligus dengan satu perintah, mencantumkan bidang yang dipisahkan dengan koma:

ALTER TABLE Karyawan TAMBAHKAN PositionID int, DepartmentID int
Sekarang mari kita tulis tautan (batasan referensi - KUNCI ASING) untuk bidang ini sehingga pengguna tidak memiliki kesempatan untuk menulis ke dalam bidang ini nilai yang tidak termasuk dalam nilai ID yang ditemukan di direktori.

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENSI Posisi(ID)
Dan kami akan melakukan hal yang sama untuk bidang kedua:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENSI Departments(ID)
Sekarang pengguna hanya dapat memasukkan nilai ID dari direktori terkait di bidang ini. Oleh karena itu, untuk menggunakan departemen atau posisi baru, pertama-tama dia harus menambahkan entri baru ke direktori terkait. Karena Jabatan dan departemen kini disimpan dalam direktori dalam satu salinan, sehingga untuk mengganti nama cukup dengan menggantinya di direktori saja.

Nama batasan referensi biasanya berupa nama gabungan, terdiri dari awalan "FK_", diikuti dengan nama tabel, dan diikuti dengan garis bawah, diikuti dengan nama field yang mengacu pada pengidentifikasi tabel referensi.

Pengidentifikasi (ID) biasanya merupakan nilai internal yang digunakan hanya untuk hubungan dan nilai apa yang disimpan di sana sama sekali tidak berbeda dalam banyak kasus, jadi tidak perlu mencoba menghilangkan lubang pada urutan angka yang muncul saat bekerja. dengan tabel, misalnya setelah menghapus record dari direktori.

ALTER TABLE tabel TAMBAHKAN CONSTRAINT nama_kendala ASING KUNCI(bidang1,bidang2,…) REFERENSI tabel_referensi(bidang1,bidang2,…)
Dalam hal ini, dalam tabel “reference_table”, kunci utama diwakili oleh kombinasi beberapa bidang (bidang1, bidang2,...).

Sebenarnya sekarang mari kita perbarui field PositionID dan DepartmentID dengan nilai ID dari direktori. Mari gunakan perintah DML UPDATE untuk tujuan ini:

UPDATE e SET PositionID=(PILIH ID DARI Jabatan WHERE Nama=e.Jabatan), DepartmentID=(PILIH ID DARI Departemen WHERE Nama=e.Departemen) DARI Karyawan e
Mari kita lihat apa yang terjadi dengan menjalankan permintaan:

PILIH * DARI Karyawan

Selesai, kolom PositionID dan DepartmentID diisi dengan pengidentifikasi yang sesuai dengan posisi dan departemen; kolom Posisi dan Departemen tidak lagi diperlukan di tabel Karyawan, Anda dapat menghapus kolom berikut:

ALTER TABLE Karyawan DROP COLUMN Jabatan, Departemen
Sekarang tabel kita terlihat seperti ini:

PILIH * DARI Karyawan

PENGENAL Nama Hari ulang tahun Surel ID Posisi ID Departemen
1000 Ivanov I.I. BATAL BATAL 2 1
1001 Petrov P.P. BATAL BATAL 3 3
1002 Sidorov S.S. BATAL BATAL 1 2
1003 Andreev A.A. BATAL BATAL 4 3

Itu. Kami akhirnya menyingkirkan penyimpanan informasi yang berlebihan. Sekarang, berdasarkan nomor pekerjaan dan departemen, kita dapat dengan jelas menentukan namanya menggunakan nilai dalam tabel referensi:

PILIH e.ID,e.Name,p.Name PositionName,d.Name DepartmentName DARI Karyawan e LEFT JOIN Departments d ON d.ID=e.DepartmentID LEFT JOIN Positions p ON p.ID=e.PositionID

Di inspektur objek kita bisa melihat semua objek yang dibuat untuk tabel tertentu. Dari sini Anda dapat melakukan berbagai manipulasi dengan objek tersebut - misalnya, mengganti nama atau menghapus objek.

Perlu juga dicatat bahwa tabel dapat merujuk ke dirinya sendiri, mis. Anda dapat membuat tautan rekursif. Misalnya, mari tambahkan bidang lain ID Manajer ke tabel kita dengan karyawan, yang akan menunjukkan karyawan yang melapor kepada karyawan tersebut. Mari buat bidang:

ALTER TABLE Karyawan TAMBAHKAN ManagerID int
Bidang ini memungkinkan nilai NULL; bidang ini akan kosong jika, misalnya, tidak ada atasan di atas karyawan tersebut.

Sekarang mari kita buat FOREIGN KEY untuk tabel Karyawan:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENSI Employees(ID)
Sekarang mari kita membuat diagram dan melihat bagaimana hubungan antara tabel kita terlihat di diagram tersebut:

Hasilnya, kita akan melihat gambar berikut (tabel Karyawan terhubung ke tabel Jabatan dan Departemen, dan juga mengacu pada tabel itu sendiri):

Terakhir, perlu dikatakan bahwa kunci referensi dapat menyertakan opsi tambahan ON DELETE CASCADE dan ON UPDATE CASCADE, yang menunjukkan bagaimana berperilaku saat menghapus atau memperbarui catatan yang direferensikan dalam tabel referensi. Jika opsi ini tidak ditentukan, maka kami tidak dapat mengubah ID di tabel direktori untuk record yang direferensikan dari tabel lain, dan kami juga tidak akan dapat menghapus record tersebut dari direktori sampai kami menghapus semua baris yang mereferensikan record ini. atau, Mari perbarui referensi di baris ini ke nilai yang berbeda.

Sebagai contoh, mari kita buat ulang tabel yang menentukan opsi ON DELETE CASCADE untuk FK_Employees_DepartmentID:

DROP TABLE Employees CREATE TABLE Employees(ID int NOT NULL, Nama nvarchar(30), Tanggal ulang tahun, Email nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID ) REFERENSI Departemen(ID) PADA HAPUS CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENSI Posisi(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENSI Employees(ID)) INSERT Employees (ID,Nama,Ulang Tahun,PositionID,DepartmentID, ID Manajer )NILAI (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P.","19831203",3,3,1003), (1002 ,N"Sidorov S.S." ,"19760607",1,2,1000), (1003,N"Andreev A.A.","19820417",4,3,1000)
Mari kita hapus departemen dengan ID 3 dari tabel Departemen:

HAPUS Departemen DIMANA ID=3
Mari kita lihat data pada tabel Karyawan:

PILIH * DARI Karyawan

PENGENAL Nama Hari ulang tahun Surel ID Posisi ID Departemen ID Manajer
1000 Ivanov I.I. 1955-02-19 BATAL 2 1 BATAL
1002 Sidorov S.S. 1976-06-07 BATAL 1 2 1000

Seperti yang Anda lihat, data departemen 3 dari tabel Karyawan juga telah dihapus.

Opsi ON UPDATE CASCADE berperilaku serupa, namun efektif saat memperbarui nilai ID di direktori. Misalnya kita mengubah ID suatu posisi pada direktori posisi, maka dalam hal ini DepartmentID pada tabel Employees akan terupdate dengan nilai ID baru yang kita atur pada direktori tersebut. Namun dalam kasus ini, hal ini tidak mungkin ditunjukkan, karena kolom ID di tabel Departemen memiliki opsi IDENTITY, yang tidak memungkinkan kita menjalankan query berikut (ubah ID departemen 3 menjadi 30):

UPDATE Departemen SET ID=30 WHERE ID=3
Hal utama adalah memahami esensi dari 2 opsi ON DELETE CASCADE dan ON UPDATE CASCADE. Saya sangat jarang menggunakan opsi ini dan menyarankan agar Anda berpikir dengan hati-hati sebelum menentukannya dalam batasan referensi, karena jika Anda secara tidak sengaja menghapus entri dari tabel direktori, hal ini dapat menyebabkan masalah besar dan menimbulkan reaksi berantai.

Mari pulihkan departemen 3:

Kami memberikan izin untuk menambah/mengubah nilai IDENTITY SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- kami melarang menambah/mengubah nilai IDENTITY SET IDENTITY_INSERT Departments OFF
Mari kita hapus tabel Karyawan sepenuhnya menggunakan perintah TRUNCATE TABLE:

TRUNCATE TABLE Karyawan
Dan sekali lagi kita akan memuat ulang data ke dalamnya menggunakan perintah INSERT sebelumnya:

MASUKKAN Karyawan (ID,Nama,Ulang Tahun,ID Posisi,ID Departemen,ID Manajer)NILAI (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidorov S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

Mari kita rangkum

Saat ini, beberapa perintah DDL lainnya telah ditambahkan ke pengetahuan kami:
  • Menambahkan properti IDENTITY ke bidang – memungkinkan Anda menjadikan bidang ini sebagai bidang yang diisi secara otomatis (bidang penghitung) untuk tabel;
  • MENGUBAH TABEL nama_tabel MENAMBAHKAN list_of_fields_with_characteristics – memungkinkan Anda menambahkan kolom baru ke tabel;
  • MENGUBAH TABEL nama_tabel JATUHKAN KOLOM list_fields – memungkinkan Anda menghapus kolom dari tabel;
  • MENGUBAH TABEL nama_tabel TAMBAHKAN KENDALA kendala_nama KUNCI ASING(bidang) REFERENSI table_reference (bidang) – memungkinkan Anda menentukan hubungan antara tabel dan tabel referensi.

Pembatasan lainnya – UNIK, DEFAULT, CHECK

Dengan menggunakan batasan UNIK, Anda dapat mengatakan bahwa nilai untuk setiap baris dalam bidang atau kumpulan bidang tertentu harus unik. Dalam kasus tabel Karyawan, kita dapat menerapkan batasan seperti itu pada bidang Email. Cukup isi terlebih dahulu Email dengan nilai jika belum ditentukan:

UPDATE Karyawan SET Email=" [dilindungi email]" WHERE ID=1000 UPDATE Karyawan SET Email=" [dilindungi email]" WHERE ID=1001 UPDATE Karyawan SET Email=" [dilindungi email]" WHERE ID=1002 UPDATE Karyawan SET Email=" [dilindungi email]"ID DIMANA=1003
Sekarang Anda dapat menerapkan batasan keunikan pada bidang ini:

ALTER TABLE Karyawan TAMBAHKAN KONSTRAINT UQ_Employees_Email UNIK(Email)
Kini pengguna tidak akan bisa memasukkan E-Mail yang sama untuk beberapa karyawan.

Batasan unik biasanya diberi nama sebagai berikut - pertama muncul awalan “UQ_”, lalu nama tabel dan setelah garis bawah muncul nama bidang tempat batasan ini diterapkan.

Oleh karena itu, jika kombinasi bidang harus unik dalam konteks baris tabel, maka kami mencantumkannya dengan dipisahkan koma:

ALTER TABLE nama_tabel TAMBAHKAN CONSTRAINT nama_kendala UNIK(bidang1,bidang2,…)
Dengan menambahkan batasan DEFAULT ke suatu bidang, kita dapat menentukan nilai default yang akan diganti jika, ketika memasukkan catatan baru, bidang ini tidak tercantum dalam daftar bidang perintah INSERT. Batasan ini dapat diatur langsung saat membuat tabel.

Mari tambahkan field Tanggal Perekrutan baru ke tabel Karyawan dan beri nama HireDate dan katakan bahwa nilai default untuk bidang ini adalah tanggal saat ini:

ALTER TABLE Karyawan TAMBAHKAN tanggal HireDate BUKAN NULL DEFAULT SYSDATETIME()
Atau jika kolom HireDate sudah ada, maka dapat digunakan sintaks berikut:

ALTER TABLE Karyawan TAMBAHKAN DEFAULT SYSDATETIME() UNTUK HireDate
Disini saya tidak menentukan nama kendalanya, karena... dalam kasus DEFAULT, menurut saya ini tidak terlalu penting. Namun jika dilakukan dengan cara yang baik, maka menurut saya tidak perlu bermalas-malasan dan sebaiknya tetapkan nama yang normal. Ini dilakukan sebagai berikut:

ALTER TABLE Karyawan TAMBAHKAN KONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() UNTUK HireDate
Karena kolom ini tidak ada sebelumnya, ketika ditambahkan ke setiap catatan, nilai tanggal saat ini akan dimasukkan ke dalam bidang HireDate.

Saat menambahkan entri baru, tanggal saat ini juga akan dimasukkan secara otomatis, tentu saja, kecuali kita mengaturnya secara eksplisit, yaitu. Kami tidak akan menunjukkannya dalam daftar kolom. Mari kita tunjukkan ini dengan sebuah contoh tanpa menentukan bidang HireDate dalam daftar nilai tambah:

MASUKKAN NILAI Karyawan(ID,Nama,Email)(1004,N"Sergeev S.S."," [dilindungi email]")
Mari kita lihat apa yang terjadi:

PILIH * DARI Karyawan

PENGENAL Nama Hari ulang tahun Surel ID Posisi ID Departemen ID Manajer Tanggal perekrutan
1000 Ivanov I.I. 1955-02-19 [dilindungi email] 2 1 BATAL 2015-04-08
1001 Petrov P.P. 1983-12-03 [dilindungi email] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [dilindungi email] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [dilindungi email] 4 3 1000 2015-04-08
1004 Sergeev S.S. BATAL [dilindungi email] BATAL BATAL BATAL 2015-04-08

Batasan pemeriksaan CHECK digunakan ketika diperlukan untuk memeriksa nilai yang dimasukkan ke dalam kolom. Sebagai contoh, mari kita terapkan pembatasan ini pada kolom nomor personel, yang bagi kita merupakan pengenal (ID) karyawan. Dengan menggunakan batasan ini, kita katakan bahwa jumlah personel harus mempunyai nilai dari 1000 hingga 1999:

ALTER TABLE Employees ADD CONSTRAINT CK_Employees_ID CHECK (ID ANTARA 1000 DAN 1999)
Batasan biasanya diberi nama dengan cara yang sama, pertama dengan awalan “CK_”, kemudian nama tabel dan nama field di mana batasan ini diterapkan.

Mari kita coba memasukkan catatan yang tidak valid untuk memeriksa apakah batasannya berfungsi (kita akan mendapatkan kesalahan yang sesuai):

MASUKKAN NILAI Karyawan (ID, Email) (2000," [dilindungi email]")
Sekarang mari kita ubah nilai yang dimasukkan menjadi 1500 dan pastikan bahwa catatan telah dimasukkan:

MASUKKAN NILAI Karyawan (ID, Email) (1500," [dilindungi email]")
Anda juga dapat membuat batasan UNIK dan CHECK tanpa menentukan nama:

ALTER TABLE Karyawan ADD UNIK(Email) ALTER TABLE Karyawan ADD CHECK(ID ANTARA 1000 DAN 1999)
Namun ini bukan praktik yang baik dan lebih baik menentukan nama batasan secara eksplisit, karena Untuk mengetahui nanti, mana yang lebih sulit, Anda perlu membuka objek dan melihat apa yang menjadi tanggung jawabnya.

Dengan nama yang bagus, banyak informasi tentang kendala yang bisa dipelajari langsung dari namanya.

Dan karenanya, semua batasan ini dapat segera dibuat saat membuat tabel, jika belum ada. Mari kita hapus tabelnya:

DROP TABLE Karyawan
Dan kami akan membuatnya kembali dengan semua batasan yang dibuat dengan satu perintah CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME(), -- untuk DEFAULT saya akan membuat pengecualian CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY (DepartmentID) REFERENSI Departemen (ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY (PositionID) REFERENSI Posisi (ID), CONSTRAINT UQ_Employees_Email UNIK (Email), CONSTRAINT CK_Employees_ID CHECK (ID) ANTARA 1000 DAN 1999) )

MASUKKAN Karyawan (ID,Nama,Ulang Tahun,Email,ID Posisi,ID Departemen)NILAI (1000,N"Ivanov I.I.","19550219"," [dilindungi email]",2,1), (1001,N"Petrov P.P.","19831203"," [dilindungi email]",3,3), (1002,N"Sidorov S.S.","19760607"," [dilindungi email]",1,2), (1003,N"Andreev A.A.","19820417"," [dilindungi email]",4,3)

Sedikit tentang indeks yang dibuat saat membuat batasan PRIMARY KEY dan UNIQUE

Seperti yang Anda lihat pada gambar di atas, saat membuat batasan PRIMARY KEY dan UNIQUE, indeks dengan nama yang sama (PK_Employees dan UQ_Employees_Email) dibuat secara otomatis. Secara default, indeks untuk kunci utama dibuat sebagai CLUSTERED, dan untuk semua indeks lainnya sebagai NONCLUSTERED. Perlu dikatakan bahwa konsep indeks cluster tidak tersedia di semua DBMS. Sebuah tabel hanya dapat memiliki satu indeks CLUSTERED. CLUSTERED – artinya record tabel akan diurutkan berdasarkan indeks ini, bisa juga dikatakan bahwa indeks ini memiliki akses langsung ke semua data dalam tabel. Bisa dikatakan, ini adalah indeks utama tabel. Sederhananya, ini adalah indeks yang dilampirkan pada tabel. Indeks berkerumun adalah alat yang sangat ampuh yang dapat membantu pengoptimalan kueri, namun mari kita ingat hal ini untuk saat ini. Jika kita ingin memberitahukan indeks cluster untuk digunakan bukan pada kunci utama, tetapi pada indeks lain, maka saat membuat kunci utama kita harus menentukan opsi NONCLUSTERED:

ALTER TABLE nama_tabel TAMBAHKAN CONSTRAINT nama_kendala PRIMARY KEY NONCLUSTERED(field1,field2,…)
Misalnya, mari kita buat indeks batasan PK_Employees menjadi non-cluster, dan indeks batasan UQ_Employees_Email menjadi cluster. Pertama-tama, mari kita hilangkan batasan berikut:

ALTER TABLE Karyawan DROP CONSTRAINT PK_Employees ALTER TABLE Karyawan DROP CONSTRAINT UQ_Employees_Email
Sekarang mari kita buat dengan opsi CLUSTERED dan NONCLUSTERED:

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Employee ADD CONSTRAINT UQ_Employees_Email UNIK CLUSTERED (Email)
Sekarang, dengan memilih dari tabel Employees, kita akan melihat bahwa record diurutkan berdasarkan indeks cluster UQ_Employees_Email:

PILIH * DARI Karyawan

PENGENAL Nama Hari ulang tahun Surel ID Posisi ID Departemen Tanggal perekrutan
1003 Andreev A.A. 1982-04-17 [dilindungi email] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [dilindungi email] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [dilindungi email] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [dilindungi email] 1 2 2015-04-08

Sebelumnya, ketika indeks berkerumun adalah indeks PK_Employees, catatan diurutkan berdasarkan bidang ID secara default.

Namun dalam kasus ini, ini hanyalah contoh yang menunjukkan esensi dari indeks berkerumun, karena Kemungkinan besar, kueri akan dibuat ke tabel Karyawan menggunakan bidang ID dan dalam beberapa kasus, mungkin, tabel itu sendiri akan bertindak sebagai direktori.

Untuk direktori, biasanya disarankan untuk membuat indeks berkerumun pada kunci utama, karena dalam permintaan kita sering merujuk pada pengenal direktori untuk mendapatkan, misalnya nama (Jabatan, Departemen). Mari kita ingat di sini apa yang saya tulis di atas, bahwa indeks berkerumun memiliki akses langsung ke baris tabel, dan oleh karena itu kita bisa mendapatkan nilai kolom mana pun tanpa biaya tambahan.

Menguntungkan jika menerapkan indeks klaster pada bidang yang paling sering dijadikan sampel.

Terkadang tabel dibuat dengan kunci berdasarkan bidang pengganti; dalam hal ini, akan berguna untuk menyimpan opsi indeks CLUSTERED untuk indeks yang lebih sesuai dan menentukan opsi NONCLUSTERED saat membuat kunci utama pengganti.

Mari kita rangkum

Pada tahap ini, kita telah mengenal semua jenis batasan, dalam bentuknya yang paling sederhana, yang dibuat dengan perintah seperti “ALTER TABLE table_name ADD CONSTRAINT constraint_name…”:
  • KUNCI UTAMA- kunci utama;
  • KUNCI ASING– menyiapkan koneksi dan memantau integritas referensial data;
  • UNIK– memungkinkan Anda menciptakan keunikan;
  • MEMERIKSA– memungkinkan Anda memastikan kebenaran data yang dimasukkan;
  • BAWAAN– memungkinkan Anda menetapkan nilai default;
  • Perlu juga dicatat bahwa semua batasan dapat dihapus menggunakan perintah “ MENGUBAH TABEL nama_tabel JATUHKAN KENDALA kendala_nama".
Kami juga menyentuh sebagian topik indeks dan mengkaji konsep cluster ( BERKUMPULAN) dan tidak berkerumun ( TIDAK TERMASUK) indeks.

Membuat indeks mandiri

Yang kami maksud dengan independen di sini adalah indeks yang tidak dibuat di bawah batasan PRIMARY KEY atau UNIQUE.

Indeks pada suatu bidang atau field dapat dibuat dengan perintah berikut:

BUAT INDEKS IDX_Nama_Karyawan PADA Karyawan(Nama)
Di sini juga Anda dapat menentukan opsi CLUSTERED, NONCLUSTERED, UNIQUE, dan Anda juga dapat menentukan arah penyortiran setiap bidang ASC (default) atau DESC:

BUAT INDEKS NONCLUSTERED UNIK UQ_Employees_EmailDesc PADA Karyawan (Email DESC)
Saat membuat indeks non-clustered, opsi NONCLUSTERED dapat dihilangkan, karena ini tersirat secara default dan ditampilkan di sini hanya untuk menunjukkan posisi opsi CLUSTERED atau NONCLUSTERED dalam perintah.

Anda dapat menghapus indeks dengan perintah berikut:

DROP INDEX IDX_Employees_Name PADA Karyawan
Indeks sederhana, serta batasan, dapat dibuat dalam konteks perintah CREATE TABLE.

Misalnya, mari kita hapus tabelnya lagi:

DROP TABLE Karyawan
Dan kami akan membuatnya kembali dengan semua batasan dan indeks yang dibuat dengan satu perintah CREATE TABLE:

BUAT TABEL Karyawan(ID int NOT NULL, Nama nvarchar(30), Tanggal ulang tahun, Email nvarchar(30), PositionID int, DepartmentID int, Tanggal HireDate NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID ), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENSI Departemen(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENSI Posisi(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENSI Karyawan(ID), CONSTRAINT UQ _Emp loyees_Email UNIK(Email), KENDALA CK_Employees_ID CHECK(ID ANTARA 1000 DAN 1999), INDEX IDX_Employees_Name(Nama))
Terakhir, mari masukkan karyawan kita ke dalam tabel:

MASUKKAN Karyawan (ID,Nama,Ulang Tahun,Email,ID Posisi,ID Departemen,ID Manajer)NILAI (1000,N"Ivanov I.I.","19550219"," [dilindungi email]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [dilindungi email]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [dilindungi email]",1,2,1000), (1003,N"Andreev AA.","19820417"," [dilindungi email]",4,3,1000)
Selain itu, perlu diperhatikan bahwa Anda dapat memasukkan nilai dalam indeks non-cluster dengan menentukannya di INCLUDE. Itu. dalam hal ini, indeks INCLUDE akan agak mengingatkan pada indeks berkerumun, hanya saja sekarang indeks tidak dilampirkan ke tabel, tetapi nilai yang diperlukan dilampirkan ke indeks. Oleh karena itu, indeks tersebut dapat sangat meningkatkan kinerja kueri pemilihan (SELECT), jika semua bidang yang terdaftar ada dalam indeks, maka akses ke tabel mungkin tidak diperlukan sama sekali. Namun hal ini secara alami meningkatkan ukuran indeks, karena nilai bidang yang terdaftar diduplikasi dalam indeks.

Ekstrak dari MSDN. Sintaks perintah umum untuk membuat indeks

BUAT [UNIK] [BERKUMPULAN | NONCLUSTERED ] INDEX nama_indeks AKTIF (kolom [ ASC | DESC ] [ ,...n ]) [ TERMASUK (nama_kolom [ ,...n ]) ]

Mari kita rangkum

Indeks dapat meningkatkan kecepatan pengambilan data (SELECT), namun indeks mengurangi kecepatan modifikasi data tabel, karena Setelah setiap modifikasi, sistem perlu membangun kembali semua indeks untuk tabel tertentu.

Dalam setiap kasus, disarankan untuk menemukan solusi optimal, yaitu mean emas, sehingga kinerja pengambilan sampel dan modifikasi data berada pada tingkat yang tepat. Strategi pembuatan indeks dan jumlah indeks dapat bergantung pada banyak faktor, seperti seberapa sering data dalam tabel berubah.

Kesimpulan tentang DDL

Seperti yang Anda lihat, DDL tidak serumit kelihatannya pada pandangan pertama. Di sini saya dapat menunjukkan hampir semua struktur utamanya hanya dengan menggunakan tiga tabel.

Yang utama adalah memahami esensinya, dan selebihnya adalah soal latihan.

Semoga berhasil menguasai bahasa luar biasa yang disebut SQL ini.

Dalam materi ini saya mencoba menggabungkan semua poin utama Transaksi-SQL, yang akan membantu pemrogram basis data pemula menguasai bahasa ini dan menulis kueri dan aplikasi dalam bahasa Transact-SQL.

Pemrograman basis data, dan lebih khusus lagi, basis data yang menjalankan Microsoft SQL Server, telah menjadi sangat populer, itulah sebabnya saya memutuskan untuk membuat semacam buku referensi mini di mana Anda dapat menemukan semua poin utama dengan penjelasan dan, tentu saja, contoh.

Untuk berlatih menulis query SQL atau membuat objek database, Anda dapat menggunakan SQL Server Express edisi gratis, pada saat kompilasi referensi versi terbaru adalah Microsoft SQL Server 2014 Ekspres.

Referensi Transact-SQL untuk pemula - deskripsi referensi

Buku referensi ini akan terlihat seperti ini, pertama saya akan memberikan daftar isi kecil dengan navigasi, kemudian buku referensi itu sendiri akan dimulai, akan ada komentar, penjelasan dan contoh untuk setiap item. Selain itu, jika kami telah memeriksa secara detail atau menggunakan objek atau tindakan ini atau itu di suatu tempat dalam materi di situs kami, tentu saja saya akan memberikan tautan sehingga Anda dapat melihat contoh detail atau cara menggunakan tindakan ini atau itu dalam praktiknya. .

Karena tidak mungkin mencakup semuanya secara mutlak, jadi jangan heran jika Anda tidak menemukan sesuatu di sini. Saya ulangi sekali lagi bahwa buku referensi ini dibuat untuk pemrogram Transact-SQL pemula, serta untuk administrator sederhana yang secara berkala perlu mengunduh beberapa data dari server SQL.

Untuk mempelajari bahasa T-SQL secara mendetail, saya sarankan membaca buku saya “The T-SQL Programmer’s Way. Tutorial bahasa Transact-SQL”, dimana saya membahas bahasa T-SQL sedetail mungkin, dengan banyak contoh.

Basis data

Bahkan seorang programmer Transact-SQL pemula pun harus mengetahui cara membuat database atau mengubah propertinya, jadi sebelum melihat tabel, tampilan, fungsi, dan lainnya, mari kita lihat proses membuat, memodifikasi, dan menghapus database Transact-SQL.

Penciptaan

Untuk membuat database, Anda perlu menjalankan query berikut:

BUAT tes DATABASE

di mana tes adalah nama database.

Kami berbicara lebih banyak tentang membuat database di SQL server pada materi Cara membuat database di MS Sql 2008

Pemindahan

Jika Anda perlu menghapus database, Anda bisa menggunakan kueri:

Tes JATUH DATABASE

Mengubah

Untuk mengubah parameter database, Anda dapat menggunakan antarmuka grafis Management Studio, yang menjelaskan semua parameter secara rinci, atau Anda dapat mengirim kueri ALTER DATABASE, misalnya, untuk mengaktifkan kompresi otomatis database pengujian, gunakan kueri berikut

Tes ALTER DATABASE SET AUTO_SHRINK AKTIF; --Dan untuk mematikan tes ALTER DATABASE SET AUTO_SHRINK OFF;

Mudah-mudahan jelas, ALTER DATABASE adalah perintah untuk mengubah, test adalah nama database yang diubah, SET adalah perintah yang menandakan kita akan mengubah parameter database, AUTO_SHRINK adalah parameter itu sendiri, ON/OFF adalah nilai parameternya.

Tipe data

Yang paling umum dan sering digunakan

Angka pasti

  • kecilint - 1 byte
  • kecil - 2 byte
  • int - 4 byte
  • bigint - 8 byte
  • numerik dan desimal ( mengetik dengan presisi dan skala tetap)
  • uang - 8 byte
  • uang kecil - 4 byte

Perkiraan angka

  • float [ (n) ] – ukuran bergantung pada n (n bisa dari 1 hingga 53, default 53)
  • nyata - 4 byte

tanggal dan waktu

  • tanggal – tanggal
  • waktu - waktu
  • datetime - tanggal termasuk waktu dalam sepersekian detik dalam format 24 jam.

String karakter

  • char [ (n) ] – string dengan panjang tetap, di mana n adalah panjang string (dari 1 hingga 8000). Ukuran penyimpanannya adalah n byte.
  • varchar [ (n | max) ] adalah string dengan panjang tetap, di mana n adalah panjang string (dari 1 hingga 8000). Jika Anda menentukan maks, maka ukuran penyimpanan maksimum adalah 2^31-1 byte (2 GB), dan jika Anda menentukan n, maka panjang sebenarnya dari data yang dimasukkan ditambah 2 byte.
  • teks – data string dengan panjang variabel, ukuran maksimum 2.147.483.647 byte (2 GB).
  • nchar[(n)] adalah string Unicode dengan panjang tetap, di mana n adalah panjang string (dari 1 hingga 4000). Ukuran penyimpanan adalah dua kali nilai n dalam byte
  • nvarchar [ (n | max) ] adalah string Unicode dengan panjang tetap, di mana n adalah panjang string (dari 1 hingga 4000). Jika Anda menentukan maks, ukuran penyimpanan maksimum adalah 2^31-1 byte (2 GB), dan jika n, maka dua kali panjang sebenarnya data yang dimasukkan ditambah 2 byte.
  • ntext adalah data string dengan panjang variabel, dengan panjang string maksimum 1.073.741.823 byte.

Data biner

  • biner [ (n) ] - data biner dengan panjang tetap, ukuran n byte, di mana n adalah nilai dari 1 hingga 8000. Ukuran penyimpanan adalah n byte.
  • varbinary [ (n | max) ] - data biner dengan panjang variabel, di mana n dapat memiliki nilai dari 1 hingga 8000. Jika Anda menentukan maks, ukuran penyimpanan maksimum adalah 2^31-1 byte (2 GB). Ketika n ditentukan, ukuran penyimpanan adalah panjang sebenarnya dari data masukan ditambah 2 byte.
  • image - data biner dengan panjang variabel, dengan ukuran mulai dari 0 hingga 2^31 - 1 (2.147.483.647) byte.

Lainnya

  • xml – penyimpanan data xml. Kami membahasnya secara detail di materi Transact-sql - bekerja dengan xml, dan jika Anda belum tahu apa itu XML, maka kami membicarakannya di artikel Dasar-Dasar XML untuk Pemula.
  • tabel – penyimpanan kumpulan baris yang dihasilkan.

Tabel

Contoh pembuatan tabel di situs ini cukup banyak, karena hampir di setiap artikel yang berhubungan dengan SQL saya memberikan contoh pembuatan tabel uji, namun untuk mengkonsolidasikan pengetahuan, mari kita membuat, memodifikasi, dan menghapus tabel uji. Mari kita lihat bagaimana tipe data bidang diatur dalam tabel Transact-SQL.

Penciptaan

CREATE TABLE test_table( IDENTITY(1,1) BUKAN NULL, --identifier, int integer, nilai NULL tidak diperbolehkan (50) NULL, --nama lengkap, string 50 karakter, nilai NULL diperbolehkan NULL, -- jumlah, perkiraan nilai numerik, nilai NULL diperbolehkan NULL, --tanggal dan waktu, nilai NULL diperbolehkan (100) NULL --string sepanjang 100 karakter, nilai NULL diperbolehkan) ON GO

Menambahkan Kolom

ALTER TABLE test_table TAMBAHKAN prosto_pole numerik(18, 0) NULL
  • test_table adalah nama tabel;
  • tambahkan — perintah untuk menambahkan;
  • prosto_pole – nama kolom;
  • pole numerik (18, 0) – tipe data kolom baru;
  • NULL – parameter yang berarti nilai NULL dapat disimpan di kolom ini.

Mengubah tipe data

Mari kita ubah tipe data kolom baru yang baru kita buat (prosto_pole) dari numerik (18, 0) menjadi bigint dan tambah panjang kolom komentar menjadi 300 karakter.

ALTER TABLE test_table ALTER KOLOM prosto_pole bigint; ALTER TABLE test_table ALTER KOLOM komentar varchar(300);

Catatan! Server SQL tidak akan dapat mengubah tipe data jika nilai dalam bidang ini tidak dapat dikonversi, dalam hal ini Anda harus menghapus kolom dengan semua data dan menambahkan lagi atau menghapus semua data di bidang ini.

Menghapus kolom

Untuk menghapus kolom tertentu, gunakan perintah drop, misalnya untuk menghapus bidang prosto_pole, gunakan kueri berikut

ALTER TABLE test_table DROP COLUMN prosto_pole

Menghapus tabel

Untuk menghapus tabel, mari tulis query sederhana ini, di mana test_table adalah tabel yang akan dihapus

DROP TABLE test_table

Perwakilan

Objek yang sangat berguna dalam database adalah tampilan (VIEW) atau, menurut kami, sekadar tampilan. Kalau ada yang belum tahu, view adalah sejenis query tersimpan yang bisa diakses dengan cara yang sama seperti tabel. Mari kita buat tampilan berdasarkan tabel pengujian test_table, dan asumsikan bahwa sangat sering kita perlu menulis query, misalnya sesuai dengan kondisi, jumlahnya lebih besar dari 1000, jadi agar tidak menulis query ini setiap saat, kami akan menulis tampilannya satu kali, dan selanjutnya kami akan merujuknya.

Penciptaan

BUAT LIHAT test_view SEBAGAI PILIH id, fio, komentar DARI test_table WHERE summa > 1000 GO

Contoh mengakses tampilan:

PILIH * DARI test_view

Mengubah

ALTER LIHAT test_view SEBAGAI PILIH id, fio, komentar DARI test_table WHERE summa > 1500 GO

Pemindahan

JATUH LIHAT test_view

Tampilan Sistem

DBMS MS SQL Server memang memiliki objek sistem yang terkadang dapat memberikan informasi yang cukup berguna, misalnya tampilan sistem. Sekarang kita akan menganalisis beberapa representasi tersebut. Anda dapat mengaksesnya dengan cara yang sama seperti tampilan biasa ( misalnya pilih * dari tampilan judul)

  • sys.all_objects – berisi semua objek database, termasuk parameter seperti: nama, tipe, tanggal pembuatan dan lain-lain.
  • sys.all_columns – mengembalikan semua kolom tabel dengan karakteristik detailnya.
  • sys.all_views – Mengembalikan semua tampilan dalam database.
  • sys.tables – semua tabel database.
  • sys.triggers – semua pemicu basis data.
  • sys.databases – semua database di server.
  • sys.sysprocesses – proses aktif, sesi dalam database.

Sebenarnya jumlahnya banyak, jadi tidak mungkin memilah semuanya. Jika Anda ingin melihat bagaimana penerapannya dalam praktik, kami telah melakukannya, misalnya pada materi

Fungsi

Server MS SQL memungkinkan Anda membuat fungsi yang akan mengembalikan data tertentu, dengan kata lain, pengguna sendiri dapat menulis fungsi dan menggunakannya di masa mendatang, misalnya ketika diperlukan untuk mendapatkan nilai yang memerlukan perhitungan rumit atau rumit pemilihan data. Terkadang hanya untuk mengurangi kode, ketika pemanggilan fungsi akan menggantikan nilai yang sering dibutuhkan dalam permintaan dan aplikasi yang berbeda.

Penciptaan

BUAT FUNGSI test_function (@par1 bigint, @par2 float) RETURNS varchar(300) SEBAGAI MULAI DECLARE @rezult varchar(300) SELECT @rezult=comment FROM test_table WHERE id = @par1 AND summa > @par2 RETURN @rezult END
  • CREATE FUNCTION – perintah untuk membuat objek fungsi;
  • test_function – nama fungsi baru;
  • @par1 dan @par2 – parameter masuk;
  • KEMBALI varchar(300) – tipe pengembalian;
  • DECLARE @rezult varchar(300) – deklarasi variabel dengan tipe varchar(300);
  • Pernyataan pilih dalam kasus kita adalah tindakan fungsi;
  • KEMBALI @rezult – mengembalikan hasilnya;
  • BEGIN dan END masing-masing merupakan awal dan akhir dari kode fungsi.

Contoh penggunaannya dalam permintaan:

PILIH fungsi_tes(1, 20)

Mengubah

ALTER FUNGSI test_function (@par1 bigint, @par2 float) RETURNS varchar(300) SEBAGAI MULAI DECLARE @rezult varchar(300) SELECT @rezult=comment FROM test_table_new WHERE id = @par1 AND summa >= @par2 RETURN @rezult END

Pemindahan

DROP FUNGSI test_function

Fungsi bawaan

Selain fakta bahwa server SQL memungkinkan Anda membuat fungsi khusus, server ini juga menyediakan kemampuan untuk menggunakan fungsi bawaan yang telah ditulis oleh pengembang DBMS untuk Anda. Ada banyak sekali, jadi saya membagi yang paling umum menjadi beberapa kelompok dan mencoba menjelaskannya secara singkat.

Fungsi sistem

Disini saya akan memberikan beberapa contoh fungsi yang mengembalikan berbagai data sistem

  • @@VERSION – mengembalikan versi server SQL;
  • @@SERVERNAME – mengembalikan nama server;
  • SUSER_NAME() – nama login pengguna di server, dengan kata lain, di bawah login apa pengguna ini atau itu bekerja;
  • nama_pengguna() – nama pengguna basis data;
  • @@SERVICENAME – nama layanan DBMS;
  • @@IDENTITY - pengidentifikasi terakhir dimasukkan ke dalam tabel;
  • db_name() - nama database saat ini;
  • db_id() – pengidentifikasi basis data.

Fungsi agregat

Fungsi yang menghitung nilai berdasarkan sekumpulan (kelompok) nilai. Jika, saat memanggil fungsi-fungsi ini, Anda perlu menentukan kolom untuk menampilkan hasilnya, maka Anda harus mengelompokkan data (dikelompokkan berdasarkan) berdasarkan bidang ini. Kami membahas konstruksi ini secara rinci dalam artikel pengelompokan data Transact-SQL berdasarkan

  • rata-rata – mengembalikan nilai rata-rata;
  • count – jumlah nilai;
  • maks – nilai maksimum;
  • min – nilai minimum;
  • jumlah – jumlah nilai.

Contoh penggunaan:

SELECT COUNT(*) sebagai hitungan, SUM(summa) sebagai jumlah, MAX(id) sebagai maks, MIN(id) sebagai min, AVG(summa) sebagai rata-rata FROM test_table

Fungsi string

Jenis fungsi ini bekerja dengan string yang sesuai.

Kiri (ekspresi string, Karakter) – mengembalikan jumlah karakter tertentu dalam string yang dimulai dari kiri.

Contoh

SELECT LEFT("Contoh fungsi kiri", 10) --Hasil dari "Contoh"

Benar (ekspresi string, Karakter) – mengembalikan jumlah karakter tertentu dalam string yang dimulai dari kanan

Contoh

SELECT Right("Contoh fungsi yang Benar", 10) -- Hasil dari "Fungsi yang Benar"

Len (garis) – mengembalikan panjang string.

Contoh

SELECT len("Contoh cara kerja fungsi len") --Hasil 28

Lebih rendah (garis) – mengembalikan string yang semua karakternya diubah menjadi huruf kecil.

Contoh

SELECT lower("Contoh fungsi yang lebih rendah") --Hasil dari "contoh fungsi yang lebih rendah"

Atas (garis) - mengembalikan string yang semua karakternya diubah menjadi huruf besar.

Contoh

SELECT Upper("Contoh fungsi Atas") --Hasil dari "CONTOH FUNGSI ATAS"

Potong (garis) – mengembalikan string dengan semua spasi di depannya dihapus.

Contoh

SELECT ltrim("Contoh pengoperasian fungsi ltrim") --Hasil dari "Contoh pengoperasian fungsi ltrim"

Potong (garis) – mengembalikan string dengan semua spasi di sisi kanan dihilangkan

Contoh

SELECT Rtrim ("Contoh pengoperasian fungsi Rtrim") -- Hasil dari "Contoh pengoperasian fungsi Rtrim"

Mengganti (garis, apa yang kita cari, dengan apa kita menggantinya?) – menggantikan dalam ekspresi string semua kemunculan yang ditentukan dalam parameter kedua dengan karakter yang ditentukan dalam parameter ketiga.

Contoh

SELECT Ganti ("Contoh fungsi Ganti", "bekerja", "REPLACEMENT") -- Hasil dari "Contoh fungsi REPLACE"

Mengulangi (garis, jumlah pengulangan) – mengulangi baris (parameter pertama) sebanyak yang ditentukan pada parameter kedua.

Contoh

SELECT Replikasi ("Replikasi Contoh", 3) -- Hasil "Contoh Replikasi Contoh Replikasi Contoh Replikasi"

Balik (garis) – mengembalikan semuanya dalam urutan terbalik.

Contoh

SELECT Reverse ("Contoh fungsi Reverse") -- Hasil dari "esreveR iitsknuf etobar op remirP"

Ruang angkasa (jumlah spasi) – mengembalikan string sebagai jumlah spasi tertentu.

Contoh

PILIH Spasi(10) -- Hasil " "

Substring (garis, posisi awal, berapa banyak karakter) – mengembalikan string dengan panjang yang sama dengan angka yang ditentukan pada parameter ketiga, dimulai dari karakter yang ditentukan pada parameter kedua.

Contoh

SELECT Substring("Contoh pengoperasian fungsi Substring", 11, 14) -- Hasil dari "operasi fungsi"

Fungsi matematika

Bulat (nomor, akurasi pembulatan) – membulatkan ekspresi numerik ke jumlah digit yang ditentukan dalam parameter kedua

Contoh

PILIH Putaran (10.4569, 2) -- Hasil "10.4600"

Lantai (nomor) – mengembalikan bilangan bulat yang dibulatkan ke bawah.

Contoh

PILIH Lantai (10.4569) -- Hasil "10"

Langit-langit (nomor) – mengembalikan bilangan bulat yang dibulatkan ke atas.

Contoh

SELECT Plafon (10.4569) -- Hasil "11"

Kekuatan (nomor, derajat) — mengembalikan angka yang dipangkatkan pada parameter kedua.

Contoh

PILIH Daya(5,2) -- Hasil "25"

Persegi (nomor) – mengembalikan nilai numerik kuadrat

Contoh

PILIH Kotak(5) -- Hasil "25"

Abs (nomor) – mengembalikan nilai positif absolut

Contoh

PILIH Abs(-5) -- Hasil "5"

Catatan(nomor) – logaritma natural dengan floating point.

Contoh

PILIH Log(5) -- Hasil "1.6094379124341"

pi- Pi.

Contoh

PILIH Pi() -- Hasil "3.14159265358979"

acak– mengembalikan angka floating point acak antara 0 dan 1

Contoh

PILIH rand() -- Hasil "0.713273187517105"

Fungsi tanggal dan waktu

Tanggal Dapatkan()– mengembalikan tanggal dan waktu saat ini

Contoh

PILIH Getdate() -- Hasil "24-10-2014 16:36:23.683"

Hari(tanggal) – mengembalikan hari dari suatu tanggal.

Contoh

PILIH Hari(Getdate()) -- Hasil "24"

Bulan(tanggal) – mengembalikan nomor bulan dari suatu tanggal.

Contoh

PILIH Bulan(Getdate()) -- Hasil "10"

Tahun (tanggal) – mengembalikan tahun dari suatu tanggal

Contoh

PILIH tahun(Getdate()) -- Hasil "2014"

TANGGAL(bagian tanggal, tanggal) – mengembalikan bagian tertentu dari tanggal (DD,MM,YYYY, dll.)

Contoh

PILIH DATEPART(MM,GETDATE()) -- Hasil "10"

Tanggal (tanggal) – memeriksa ekspresi yang dimasukkan untuk melihat apakah itu tanggal

Contoh

PILIH Tanggal(GETDATE()) -- Hasil "1"

Fungsi konversi

Pemeran (ekspresi sebagai tipe data) – fungsi untuk mengubah satu tipe ke tipe lainnya. Dalam contoh ini kita mengubah tipe float menjadi int

Contoh

PILIH CAST(10,54 sebagai int) --hasil 10

Mengubah – (tipe data, ekspresi, format tanggal) adalah fungsi untuk mengubah satu tipe data ke tipe data lainnya. Sangat sering digunakan untuk mengonversi tanggal, menggunakan parameter opsional ketiga - format tanggal.

Contoh

SELECT GETDATE(), CONVERT(DATE, GETDATE(), 104) --Hasil --24-10-2014 15:20:45.270 – tanpa konversi; --24-10-2014 setelah konversi.

Fungsi tabel

Mereka dibuat untuk mendapatkan data darinya seperti dari tabel, tetapi setelah berbagai jenis perhitungan. Kami berbicara secara rinci tentang fungsi tabel dalam materi Transact-sql - Fungsi tabel dan tabel sementara

Penciptaan

--nama fungsi kita CREATE FUNCTION fun_test_tabl (--parameter masuk dan tipenya @id INT) --nilai kembalian, mis. table RETURNS TABLE AS --segera mengembalikan hasilnya RETURN (--query itu sendiri atau beberapa perhitungan SELECT * FROM test_table dimana id = @id) GO

Mengubah

--nama fungsi kami ALTER FUNCTION fun_test_tabl (--parameter masuk dan tipenya @id INT) --nilai kembalian, mis. table RETURNS TABLE AS --segera mengembalikan hasilnya RETURN (--query itu sendiri atau beberapa perhitungan SELECT * FROM test_table dimana id = @id dan summa > 100) GO

Pemindahan

JATUHKAN FUNGSI fun_test_tabl

Seperti yang Anda lihat, untuk membuat, mengubah, atau menghapus fungsi tersebut, operator yang sama digunakan seperti pada fungsi biasa, satu-satunya perbedaan adalah jenis fungsi yang dikembalikan.

Contoh pemanggilan fungsi ini

PILIH * DARI fun_test_tabl(1)

Prosedur

Prosedur adalah sekumpulan instruksi SQL yang dikompilasi satu kali dan, seperti fungsi, dapat mengambil berbagai parameter. Digunakan untuk menyederhanakan perhitungan dan melakukan tindakan kelompok.

Penciptaan

BUAT PROSEDUR sp_test_procedure (@id INT) AS --deklarasikan variabel DECLARE @sum FLOAT --SQL statement SET @sum = 100 UPDATE test_table SET summa = summa + @sum WHERE id = @id GO

Mengubah

ALTER PROCEDURE sp_test_procedure (@id int) AS --deklarasikan variabel DECLARE @sum float --SQL statement SET @sum = 500 UPDATE test_table SET summa = summa + @sum WHERE id = @id GO

Pemindahan

JATUHKAN PROSEDUR sp_test_procedure

Memanggil suatu prosedur

Anda dapat menyebutnya dengan berbagai cara, misalnya:

JALANKAN sp_test_procedure 1 --atau EXEC sp_test_procedure 1

Dimana, EXECUTE dan EXEC adalah pemanggilan prosedur, sp_test_procedure, masing-masing, nama prosedur kita, 1 nilai parameter

Prosedur sistem

Prosedur sistem– ini adalah prosedur untuk melakukan berbagai tindakan administratif baik pada objek di server maupun pada konfigurasi server itu sendiri. Mereka dipanggil dengan cara yang sama seperti prosedur biasa, tetapi dalam konteks database apa pun.

Jumlahnya sangat banyak, jadi saya akan memberikan beberapa contoh saja.

sp_configure– prosedur untuk menampilkan dan membuat perubahan pada konfigurasi kernel DBMS. Parameter pertama adalah nama parameter konfigurasi, parameter kedua adalah nilainya.

Contoh

Ubah nilai parameter EXEC sp_configure "Ad Hoc Distributed Queries",1 konfigurasi ulang --apply EXEC sp_configure --lihat saja nilai semua parameter

dimana, 'Kueri Terdistribusi Ad Hoc' adalah nama parameter, 1 sesuai dengan nilai yang ingin kita ubah, konfigurasi ulang akan menerapkan nilai yang dimasukkan.

Dalam praktiknya, kami menggunakan prosedur ini dalam materi Interdatabase Query di Transact-SQL

sp_executesql– mengeksekusi pernyataan Transact-SQL atau serangkaian pernyataan yang dapat dihasilkan secara dinamis. Kami menggunakan prosedur ini dalam perubahan data pencatatan material dalam tabel menggunakan Transact-SQL

Contoh

JALANKAN sp_executesql N"PILIH * DARI test_table WHERE id = @id", N"@id int", @id = 1

Dimana, parameter pertama adalah instruksi sql (string dalam Unicode), yang kedua adalah definisi semua parameter yang dibangun ke dalam instruksi sql, yang ketiga adalah nilai parameter.

sp_help– mengembalikan informasi rinci tentang objek database apa pun.

Contoh

JALANKAN sp_help "test_table"

sp_ganti nama– mengganti nama objek dalam database. Dapat digunakan untuk mengganti nama tabel, indeks, nama kolom dalam tabel. Tidak disarankan menggunakan prosedur ini untuk mengganti nama prosedur pengguna, pemicu, fungsi.

Contoh penggantian nama tabel

EXEC sp_rename "test_table", "test_table_new"

dimana parameter pertama adalah objek dengan nama lama, dan parameter kedua adalah nama objek baru.

Contoh penggantian nama kolom pada tabel

EXEC sp_rename "test_table.summa", "summa_new", "COLUMN"

Parameter ketiga menunjukkan bahwa kolom sedang diganti namanya.

Pemicu

Pemicu adalah prosedur normal, tetapi dipanggil oleh suatu peristiwa, bukan oleh pengguna. Suatu kejadian, misalnya, dapat berupa menyisipkan baris baru ke dalam tabel (insert), memperbarui data dalam tabel (update), atau menghapus data dari tabel (delete).

Penciptaan

BUAT TRIGGER trg_test_table_update ON test_table untuk UPDATE --Anda juga dapat menghapus, masukkan AS BEGIN --sql instruksi jika UPDATE END GO

Mengubah

ALTER TRIGGER trg_test_table_update ON test_table untuk menyisipkan --Anda juga dapat menghapus, memperbarui SEBAGAI BEGIN --petunjuk sql jika memasukkan END GO

Pemindahan

JATUHKAN PEMICU trg_test_table_update

Aktifkan/Nonaktifkan

--disable DISABLE TRIGGER trg_test_table_update PADA test_table; -- aktifkan ENABLE TRIGGER trg_test_table_update PADA test_table;

Kami berbicara tentang pemicu di artikel - Cara membuat pemicu di Transact-SQL.

Indeks

Ini adalah objek database yang meningkatkan kinerja pengambilan data dengan mengurutkan data berdasarkan bidang tertentu. Jika kita analogikan misalnya, pencarian informasi tertentu dalam sebuah buku jauh lebih mudah dan cepat berdasarkan daftar isinya dibandingkan jika daftar isi tersebut tidak ada. Jenis indeks berikut ini ada di DBMS MS SQL Server:

Indeks berkerumun— dengan indeks seperti itu, baris-baris dalam tabel diurutkan dengan kunci tertentu, mis. bidang yang ditentukan. Jenis indeks per tabel di server MS SQL ini hanya boleh ada satu dan, mulai dari MS SQL 2000, secara otomatis dibuat ketika kunci utama (PRIMARY KEY) ditentukan dalam tabel.

Indeks non-cluster– saat menggunakan indeks jenis ini, indeks berisi penunjuk baris yang diurutkan berdasarkan bidang yang ditentukan, dan bukan baris itu sendiri, sehingga terjadi pencarian cepat untuk baris yang diperlukan. Sebuah tabel dapat memiliki beberapa indeks seperti itu.

Indeks penyimpan kolom– jenis indeks ini didasarkan pada teknologi penyimpanan data tabel bukan sebagai baris, tetapi sebagai kolom (sesuai dengan namanya); sebuah tabel dapat memiliki satu indeks penyimpan kolom.

Saat menggunakan indeks jenis ini, tabel segera menjadi hanya-baca, dengan kata lain, tidak mungkin lagi menambah atau mengubah data dalam tabel; untuk melakukan ini, Anda harus menonaktifkan indeks, menambah/mengubah data , lalu aktifkan kembali indeks.

Indeks seperti ini cocok untuk kumpulan data berukuran sangat besar yang digunakan di gudang.

Operasi yang menggunakan fungsi agregat menggunakan pengelompokan dilakukan lebih cepat (beberapa kali!) dengan indeks seperti itu.

Indeks Columnstore tersedia mulai dari SQL Server versi 2012 di edisi Enterprise, Developer, dan Evaluation.

Penciptaan

Indeks berkerumun

BUAT INDEKS CLUSTERED idx_clus_one PADA test_table(id) GO

Dimana, CREATE CLUSTERED INDEX adalah instruksi untuk membuat indeks berkerumun, idx_clus_one adalah nama indeks, test_table(id) masing-masing adalah tabel dan kolom kunci untuk pengurutan.

Indeks non-cluster

BUAT INDEKS idx_no_clus PADA test_table(summa) GO

Indeks penyimpan kolom

BUAT INDEKS penyimpan kolom idx_columnstore PADA test_table(date_create) GO

Matikan

--nonaktifkan ALTER INDEX idx_no_clus ON test_table DISABLE --aktifkan, bangun kembali ALTER INDEX idx_no_clus ON test_table REBUILD

Pemindahan

JATUHKAN INDEKS idx_no_clus PADA test_table GO

Kursor

Kursor - ini adalah jenis tipe data yang digunakan terutama dalam prosedur dan pemicu. Ini mewakili kumpulan data reguler, mis. hasil permintaan tersebut.

Contoh (semua ini dalam kode prosedur)

Deklarasikan variabel DECLARE @id BIGINT DECLARE @fio VARCHAR(100) DECLARE @summa FLOAT --deklarasikan kursor DECLARE test_cur CURSOR FOR SELECT id, fio, summa FROM test_table --buka kursor OPEN test_cur --baca data baris pertama di kursor --dan tuliskan ke variabel FETCH NEXT FROM test_cur INTO @id, @fio, @summa --jalankan loop sampai baris di kursor habis WHILE @@FETCH_STATUS = 0 BEGIN --kita bisa mengeksekusi sql instruksi untuk setiap iterasi loop -- ...............Instruksi SQL................... - -baca baris berikutnya dari kursor FETCH NEXT FROM test_cur INTO @id , @fio, @summa END --tutup kursor TUTUP test_cur DEALLOCATE test_cur

Kami membahas secara detail tentang kursor di materi Menggunakan Kursor dan Loop di Transact-SQL.

Kueri DML

DML (Bahasa Manipulasi Data) adalah pernyataan SQL yang memanipulasi data. Ini termasuk memilih, memperbarui, menyisipkan, menghapus.

PILIH

Contoh

PILIH * DARI tabel_tes

MEMPERBARUI

Digunakan untuk memperbarui data

Contoh

Semua baris dalam tabel akan diperbarui UPDATE test_table SET summa=500 -- hanya baris dengan id lebih besar dari 10 yang akan diperbarui UPDATE test_table SET summa=100 WHERE id > 10

MENYISIPKAN

Operator untuk menambahkan data

Menambahkan satu baris INSERT INTO test_table (fio, summa, date_create, comment) VALUES ("Full name",100, "10/26/2014", "test record") --penambahan massal berdasarkan kueri INSERT INTO test_table SELECT fio , summa, date_create , komentar DARI test_table

MENGHAPUS

Anda dapat menggunakan operator ini untuk menghapus data.

Contoh

Menghapus seluruh tabel DELETE test_table -- hanya menghapus baris yang memenuhi kondisi DELETE test_table WHERE summa > 100

Itu saja, panduannya sudah selesai! Saya harap ini membantu Anda dalam beberapa hal. Semoga beruntung!

Saya mempersembahkan kepada Anda terjemahan gratis artikel SQL untuk Pemula

Semakin banyak aplikasi web modern berinteraksi dengan database, biasanya menggunakan bahasa tersebut SQL. Beruntungnya bagi kami, bahasa ini cukup mudah dipelajari. Pada artikel ini, kita akan mulai mempelajari dasar-dasar query SQL dan bagaimana mereka berinteraksi dengan database. MySQL.

Apa yang kau butuhkan

SQL (Structured Query Language) adalah bahasa yang dirancang untuk berinteraksi dengan sistem manajemen basis data relasional (DBMS), seperti MySQL, Oracle, Sqlite dan lain-lain. Untuk menjalankan kueri SQL di artikel ini, saya berasumsi Anda sudah melakukannya MySQL. Saya juga merekomendasikan menggunakan phpMyAdmin sebagai alat tampilan visual untuk MySQL.

Aplikasi berikut akan memudahkan instalasinya MySQL Dan phpMyAdmin ke komputermu:

  • WAMP untuk Windows
  • MAMP untuk Mac

Mari mulai menjalankan kueri pada baris perintah. WAMP sudah memuatnya di konsol MySQL. Untuk MAMP, Anda mungkin perlu membaca ini.

BUAT DATABASE: Membuat database

Permintaan pertama kami. Kami akan membuat database yang akan kami gunakan.

Pertama-tama, buka konsol MySQL dan masuk. Untuk WAMP Secara default, kata sandi kosong digunakan. Untuk MAMP Kata sandinya harus "root".

Setelah masuk, ketik permintaan ini dan klik Memasuki:

BUAT DATABASE my_first_db;

Perhatikan bahwa titik koma (;) ditambahkan di akhir kueri, sama seperti di akhir baris kode.

Juga, kata kunci BUAT DATABASE tidak peka huruf besar-kecil, seperti semua kata kunci di dalamnya SQL. Namun kami akan menulisnya dalam huruf besar untuk meningkatkan keterbacaan.

Catatan: kumpulan karakter dan urutan susunan

Jika Anda ingin menyetel kumpulan karakter default dan urutan susunan, gunakan kueri seperti ini:

BUAT DATABASE my_first_db SET KARAKTER DEFAULT utf8 COLLATE utf8_general_ci;

Anda akan menemukan daftar kumpulan karakter dan kumpulan karakter yang didukung MySQL.

TAMPILKAN DATABASE: Daftar semua database

Kueri ini digunakan untuk menampilkan semua database.

DROP DATABASE: Jatuhkan database

Dengan query ini Anda dapat menghapus database yang ada.

Hati-hati dengan permintaan ini karena tidak menghasilkan peringatan apa pun. Jika Anda memiliki tabel dan data di database, kueri akan menghapus semuanya dalam sekejap.

Dari segi teknis, ini bukanlah permintaan. Ini adalah "operator" dan tidak memerlukan titik koma di akhir.

Dia melaporkan MySQL bahwa Anda perlu memilih database default dan mengerjakannya hingga akhir sesi. Sekarang kita siap untuk membuat tabel dan segala sesuatu yang lain dalam database ini.

Apa itu tabel database?

Anda dapat menganggap tabel dalam database sebagai tabel biasa atau sebagai file csv yang memiliki data terstruktur.

Seperti dalam contoh ini, tabel memiliki nama baris dan kolom data. Menggunakan kueri SQL kita dapat membuat tabel ini. Kita juga dapat menambah, membaca, mengubah dan menghapus data.

BUAT TABEL: Membuat tabel

Dengan query ini kita bisa membuat tabel di database. Sayangnya, dokumentasi untuk MySQL tidak terlalu ramah terhadap pengguna baru. Struktur kueri ini bisa sangat rumit, tetapi kita akan memulainya dengan sederhana.

Kueri berikut membuat tabel dengan dua kolom.

CREATE TABLE pengguna (nama pengguna VARCHAR(20), tanggal_buat TANGGAL);

Perhatikan bahwa kita dapat menulis kueri pada beberapa baris dan menggunakannya tab untuk lekukan.

Baris pertama sederhana. Kami membuat tabel bernama pengguna. Selanjutnya, kolom tabel dicantumkan dalam tanda kurung, dipisahkan dengan koma. Setiap nama kolom diikuti oleh tipe data, mis. VARCHAR atau TANGGAL.

VARCHAR(20) berarti kolom tersebut bertipe string dan panjangnya tidak boleh lebih dari 20 karakter. TANGGAL- tipe data yang dimaksudkan untuk menyimpan tanggal dalam format: "YYYY-MM-DD".

Kunci utama

Sebelum kita menjalankan query ini, kita harus menyisipkan kolom identitas pengguna, yang akan menjadi kunci utama (PRIMARY KEY). Tanpa membahas terlalu banyak detail, Anda dapat menganggap kunci utama sebagai cara untuk mengidentifikasi setiap baris data dalam tabel.

Permintaannya menjadi seperti ini:

CREATE TABLE pengguna (user_id INT AUTO_INCREMENT PRIMARY KEY, nama pengguna VARCHAR(20), create_date DATE);

INTI- Tipe integer 32-bit (numerik). AUTO_INCREMENT secara otomatis membuat nomor id baru setiap kali baris data ditambahkan. Ini tidak perlu, tapi lebih nyaman.

Kolom ini mungkin bukan bilangan bulat, meskipun ini adalah tipe data yang paling umum. Kolom kunci utama bersifat opsional, namun disarankan untuk meningkatkan performa dan arsitektur database.

Mari kita jalankan kueri:

TAMPILKAN TABEL: Daftar semua tabel

Kueri memungkinkan Anda mendapatkan daftar semua tabel di database saat ini.

JELASKAN: Tampilkan struktur tabel

Gunakan kueri ini untuk melihat struktur tabel yang ada.

Hasilnya menunjukkan bidang (kolom) dan propertinya.

DROP TABLE: Jatuhkan meja

Menyukai JATUHKAN DATABASE, kueri ini menghapus tabel dan isinya tanpa peringatan apa pun.

ALTER TABLE: Ubah tabel

Kueri seperti itu bisa memiliki struktur yang kompleks karena bisa membuat banyak perubahan pada tabel. Mari kita lihat contoh sederhana.

Berkat keterbacaannya SQL, pertanyaan ini tidak memerlukan penjelasan.

Menghapusnya juga sama mudahnya. Gunakan permintaan dengan hati-hati; data dihapus tanpa peringatan.

Mari tambahkan kembali bidang tersebut surel, Anda akan membutuhkannya nanti:

ALTER TABLE pengguna TAMBAHKAN email VARCHAR(100) SETELAH nama pengguna;

Terkadang Anda mungkin perlu mengubah properti kolom; untuk melakukan ini, Anda tidak perlu menghapusnya dan membuatnya lagi.

Permintaan ini mengganti nama bidang tersebut nama belakang V nama belakang dan mengubah jenisnya dari VARCHAR(20) pada VARCHAR(30). Perubahan tersebut tidak mempengaruhi data dalam tabel.

INSERT: Menambahkan data ke tabel

Mari tambahkan catatan ke tabel menggunakan kueri.

Seperti yang Anda lihat, NILAI() berisi daftar nilai yang dipisahkan koma. Nilai string diapit tanda kutip tunggal. Nilainya harus mengikuti urutan yang ditentukan saat tabel dibuat.

Perhatikan bahwa nilai pertama adalah BATAL untuk kunci utama yang bidangnya kami beri nama identitas pengguna. Ini karena bidang tersebut ditandai sebagai AUTO_INCREMENT dan id dihasilkan secara otomatis. Baris pertama data akan memiliki id 1. Baris berikutnya yang ditambahkan akan menjadi 2, dst.

Sintaks alternatif

Berikut sintaks lain untuk menyisipkan baris.

Kali ini kami menggunakan kata kunci MENGATUR alih-alih NILAI. Mari kita perhatikan beberapa hal:

  • Kolom tersebut dapat dihilangkan. Misalnya, kami tidak memberikan nilai pada bidang tersebut identitas pengguna, karena ditandai sebagai AUTO_INCREMENT. Jika Anda tidak menetapkan nilai ke bidang dengan tipe VARCHAR, maka secara default akan mengambil nilai string kosong (jika nilai default lain tidak ditentukan saat membuat tabel).
  • Setiap kolom dapat diakses berdasarkan nama. Oleh karena itu, kolom dapat berada dalam urutan apa pun, tidak seperti sintaks sebelumnya.

Sintaks alternatif nomor 2

Berikut contoh lainnya.

Seperti sebelumnya, kolom dapat diakses berdasarkan nama dan dapat diatur dalam urutan apa pun.

Gunakan kueri ini untuk memasukkan id baris terakhir.

SEKARANG()

Saatnya menunjukkan kepada Anda cara menggunakan fungsi-fungsi tersebut MySQL dalam permintaan.

Fungsi SEKARANG() mengembalikan tanggal saat ini. Gunakan untuk secara otomatis menambahkan tanggal saat ini ke bidang dengan tipe TANGGAL.

Harap dicatat bahwa kami telah menerima peringatan dari MySQL, tapi itu tidak terlalu penting. Alasannya adalah karena fungsinya SEKARANG() sebenarnya mengembalikan informasi waktu.

Kami telah membuat lapangan tanggal_buat, yang hanya boleh berisi tanggal tetapi tidak boleh memuat waktu, sehingga datanya terpotong. Alih-alih SEKARANG() bisa kita gunakan TANGGAL KURD(), yang hanya mengembalikan tanggal saat ini, namun pada akhirnya hasilnya akan sama.

SELECT: Mengambil data dari tabel

Jelas sekali, data yang kita tulis tidak ada gunanya sampai kita bisa membacanya. Sebuah permintaan datang untuk menyelamatkan PILIH.

Contoh paling sederhana dalam menggunakan permintaan PILIH untuk membaca data dari tabel:

Tanda bintang (*) berarti kita ingin mendapatkan semua kolom tabel. Jika Anda hanya perlu mendapatkan kolom tertentu, gunakan sesuatu seperti ini:

Seringkali, kita hanya ingin mengambil baris tertentu, tidak semuanya. Misalnya, dapatkan alamat email pengguna nettuts.

Hal ini mirip dengan kondisi IF. WHERE memungkinkan Anda menyetel kondisi dalam kueri dan mendapatkan hasil yang diinginkan.

Kondisi persamaan menggunakan tanda tunggal (=) dan bukan tanda ganda (==) yang mungkin Anda gunakan dalam pemrograman.

Anda juga dapat menggunakan ketentuan lain:

DAN Dan ATAU digunakan untuk menggabungkan kondisi:

Perlu diperhatikan bahwa nilai numerik tidak perlu diapit tanda kutip.

DI DALAM()

Digunakan untuk perbandingan dengan beberapa nilai.

MENYUKAI

Memungkinkan Anda menentukan pola pencarian.

Tanda persen (%) digunakan untuk menentukan suatu pola.

klausa ORDER BY

Gunakan kondisi ini jika Anda ingin hasil yang dikembalikan diurutkan:

Urutan defaultnya adalah A.S.C.(Naik). Menambahkan DESK untuk mengurutkan dalam urutan terbalik.

BATAS... OFFSET...

Anda dapat membatasi jumlah baris yang dikembalikan.

BATAS 2 mengambil dua baris pertama. BATAS 1 OFFSET 2 mengambil satu baris setelah dua baris pertama. BATAS 2, 1 artinya sama, hanya angka pertama yang menjadi offset, dan angka kedua membatasi jumlah garis.

UPDATE: Memperbarui data dalam tabel

Kueri ini digunakan untuk memperbarui data dalam tabel.

Umumnya digunakan bersama dengan DI MANA, untuk memperbarui baris tertentu. Jika kondisinya DI MANA tidak ditentukan, perubahan akan diterapkan ke semua baris.

Untuk membatasi baris yang dapat diubah, Anda dapat menggunakan MEMBATASI.

DELETE: Menghapus data dari tabel

Menyukai , kueri ini sering digunakan bersamaan dengan kondisi DI MANA.

MEMOTONG TABEL

Untuk menghapus konten dari tabel, gunakan kueri ini:

HAPUS DARI pengguna;

Untuk meningkatkan kinerja, gunakan .

Penghitung lapangan juga akan diatur ulang. AUTO_INCREMENT, jadi baris yang baru ditambahkan akan memiliki id sama dengan 1. Saat menggunakan ini tidak akan terjadi dan penghitungnya akan terus bertambah.

Melarikan diri dari nilai string dan kata-kata khusus

Nilai string

Beberapa karakter perlu di-escape, jika tidak, mungkin akan ada masalah.

Garis miring terbalik (\) digunakan untuk escape.

Ini sangat penting untuk alasan keamanan. Setiap data pengguna harus di-escape sebelum ditulis ke database. DI DALAM PHP gunakan fungsi mysql_real_escape_string() atau kueri yang telah disiapkan.

Kata-kata khusus

Sejak di MySQL banyak kata khusus seperti PILIH atau Untuk menghindari konflik, sertakan nama kolom dan tabel dalam tanda kutip. Selain itu, Anda perlu menggunakan backtick (`) daripada tanda kutip biasa.

Katakanlah, karena alasan tertentu, Anda ingin menambahkan kolom bernama :

Kesimpulan

Terima kasih telah membaca artikelnya. Saya harap saya bisa menunjukkan kepada Anda bahasa itu SQL sangat fungsional dan mudah dipelajari.

Bahasa Kueri Terstruktur atau SQL adalah bahasa pemrograman deklaratif untuk digunakan dalam database kuasi-relasional. Banyak fitur asli SQL diambil dari kalkulus tuple, namun perluasan terbaru ke SQL mencakup lebih banyak aljabar relasional.
SQL awalnya dibuat oleh IBM, namun banyak vendor telah mengembangkan dialek mereka sendiri. Ini diadopsi sebagai standar oleh American National Standards Institute (ANSI) pada tahun 1986 dan ISO pada tahun 1987. Dalam standar bahasa pemrograman SQL, ANSI menyatakan bahwa pengucapan resmi SQL adalah “es q el”. Namun, banyak spesialis basis data menggunakan pengucapan "gaul" "Sekuel", yang mencerminkan nama asli bahasa tersebut, Sekuel, yang kemudian diubah karena konflik merek dagang dan nama dengan IBM. Pemrograman untuk pemula.
Bahasa pemrograman SQL direvisi pada tahun 1992 dan versi ini dikenal sebagai SQL-92. 1999 kemudian direvisi lagi menjadi SQL:1999 (AKA SQL3). Pemrograman untuk boneka. SQL 1999 mendukung objek yang sebelumnya tidak didukung di versi lain, namun pada akhir tahun 2001, hanya beberapa sistem manajemen database yang mendukung implementasi SQL: SQL 1999.
SQL, meskipun didefinisikan sebagai ANSI dan ISO, memiliki banyak variasi dan ekstensi, yang sebagian besar memiliki karakteristiknya sendiri, seperti implementasi "PL/SQL" Oracle Corporation atau Sybase dan implementasi Microsoft yang disebut "Transact-SQL", yang dapat membingungkan untuk mereka yang akrab dengan dasar-dasar pemrograman. Hal ini juga tidak biasa bagi implementasi komersial untuk menghilangkan dukungan untuk fitur utama standar, seperti tipe data seperti tanggal dan waktu, dan lebih memilih beberapa variannya sendiri. Akibatnya, tidak seperti ANSI C atau ANSI Fortran yang biasanya dapat di-porting dari platform ke platform tanpa perubahan struktural yang besar, kueri bahasa pemrograman SQL jarang dapat di-porting antara sistem database yang berbeda tanpa modifikasi yang signifikan. Kebanyakan orang di industri basis data percaya bahwa kurangnya kompatibilitas ini disengaja, untuk menyediakan sistem manajemen basis data mereka sendiri kepada setiap pengembang dan mengikat pembeli ke basis data tertentu.
Seperti namanya, bahasa pemrograman SQL dirancang untuk tujuan tertentu dan terbatas - menanyakan data yang terdapat dalam database relasional. Dengan demikian, ini adalah seperangkat instruksi bahasa pemrograman untuk membuat sampel data, bukan bahasa prosedural seperti C atau BASIC, yang dirancang untuk memecahkan masalah yang lebih luas. Ekstensi bahasa seperti "PL/SQL" dirancang untuk mengatasi keterbatasan ini dengan menambahkan elemen prosedural ke SQL sambil mempertahankan manfaat SQL. Pendekatan lain adalah dengan menanamkan perintah bahasa pemrograman prosedural ke dalam query SQL dan berinteraksi dengan database. Misalnya, Oracle dan lainnya mendukung Java dalam database, sedangkan PostgreSQL mengizinkan fungsi ditulis dalam Perl, Tcl, atau C.
Salah satu lelucon tentang SQL: "SQL tidak terstruktur atau bahasa." Inti dari leluconnya adalah bahwa SQL bukanlah bahasa Turing. .

Pilih * dari T
C1 C2
1 A
2 B
C1 C2
1 A
2 B
Pilih C1 dari T
C1
1
2
C1 C2
1 A
2 B
Pilih * dari T di mana C1=1
C1 C2
1 A

Diberikan tabel T, kueri Pilih * dari T akan menampilkan semua elemen dari semua baris dalam tabel.
Dari tabel yang sama, query Pilih C1 dari T akan menampilkan elemen dari kolom C1 dari semua baris dalam tabel.
Dari tabel yang sama, query Select * from T dimana C1=1 akan menampilkan semua elemen dari semua baris yang nilai kolom C1 adalah "1".

Kata kunci SQL

Kata-kata SQL dibagi menjadi beberapa kelompok.

Yang pertama adalah Bahasa Manipulasi Data atau DML(bahasa manajemen data). DML adalah bagian dari bahasa yang digunakan untuk menanyakan database dan menambah, memperbarui, dan menghapus data.

  • SELECT adalah salah satu perintah DML yang paling umum digunakan dan memungkinkan pengguna untuk menentukan kueri sebagai deskripsi kumpulan hasil yang diinginkan. Kueri tidak menentukan bagaimana hasil harus diatur - menerjemahkan kueri ke dalam bentuk yang dapat dieksekusi dalam database adalah tugas sistem database, lebih khusus lagi pengoptimal kueri.
  • INSERT digunakan untuk menambahkan baris (set formal) ke tabel yang sudah ada.
  • UPDATE digunakan untuk mengubah nilai data pada baris tabel yang sudah ada.
  • DELETE menentukan baris yang ada yang akan dihapus dari tabel.

Tiga kata kunci lainnya dapat dikatakan termasuk dalam grup DML:

  • BEGIN WORK (atau MULAI TRANSAKSI, bergantung pada dialek SQL) dapat digunakan untuk menandai dimulainya transaksi database yang akan menyelesaikan semuanya atau tidak mengeksekusi sama sekali.
  • COMMIT menyatakan bahwa semua perubahan data yang dilakukan setelah operasi dilakukan disimpan.
  • ROLLBACK menetapkan bahwa semua perubahan data setelah komit atau rollback terakhir harus dimusnahkan, hingga titik yang dicatat dalam database sebagai "rollback".

COMMIT dan ROLLBACK digunakan di berbagai bidang seperti kontrol transaksi dan penguncian. Kedua instruksi menyelesaikan semua transaksi saat ini (kumpulan operasi pada database) dan menghapus semua kunci perubahan data dalam tabel. Ada atau tidaknya BEGIN WORK atau pernyataan serupa bergantung pada implementasi SQL tertentu.

Kelompok kata kunci kedua termasuk dalam grup Bahasa Definisi Data atau DDL (Bahasa Definisi Data). HAL-HAL memungkinkan pengguna untuk menentukan tabel baru dan elemen terkaitnya. Sebagian besar database SQL komersial memiliki ekstensi DDL sendiri yang memungkinkan kontrol atas elemen non-standar, tetapi biasanya penting, dari sistem tertentu.
Poin utama dari DDL adalah perintah buat dan hapus.

  • CREATE menentukan objek (seperti tabel) yang akan dibuat dalam database.
  • DROP menentukan objek mana yang ada di database yang akan dihapus, biasanya secara permanen.
  • Beberapa sistem database juga mendukung perintah ALTER, yang memungkinkan pengguna untuk memodifikasi objek yang ada dengan berbagai cara, seperti menambahkan kolom ke tabel yang sudah ada.

Kelompok ketiga dari kata kunci SQL adalah Bahasa Kontrol Data atau DCL (Bahasa Kontrol Data). DCL bertanggung jawab atas hak akses data dan memungkinkan pengguna untuk mengontrol siapa yang memiliki akses untuk melihat atau memanipulasi data dalam database. Ada dua kata kunci utama di sini.


Peramban.  Keamanan.  Keperluan.  Program perkantoran.  Pemrograman

© Hak Cipta 2023,
client-cs.ru -Browser. Keamanan. Keperluan. Program perkantoran. Pemrograman

  • Kategori
  • Apa yang harus dilakukan
  • Pemrograman
  • Multimedia
  • Keamanan
  • Apa yang harus dilakukan
  • Pemrograman
  • Multimedia
  • Keamanan
  • Lainnya
  • Tentang situs
  • Peta Situs
  • Kontak
  • Periklanan