Sabtu

Statement IF/Script Input Output

Statement IF

Penggunaan statemen IF dapat diklasifikasikan ke dalam tiga bagian, yaitu struktur untuk satu kondisi, dua kondisi, dan tiga kondisi atau lebih.

Satu Kondisi (IF-THEN)

IF kondisi THEN
statemen-statemen;
END IF;
Pada struktur ini, PL/SQL hanya akan mengecek sebuah kondisi. Apabila kondisi tersebut terpenuhi (bernilai TRUE) maka statemen-statemen dalam blok pemilihan tersebut akan dieksekusi terlebih dulu sebelum dilanjutkan ke statemen di bawah blok pemilihan. Akan tetapi bila kondisi tidak terpenuhi (bernilai FALSE) maka eksekusi akan langsung berpindah ke statemen di bawah blok pemilihan.

Dua Kondisi (IF-THEN-ELSE)



IF kondisi THEN
statemen-statemen A;
ELSE
statemen-statemen B;
END IF;

Pada struktur ini, perlu didefinikan kondisi khusus untuk mengatasi apabila kondisi yang didefinisikan pada blok IF tidak terpenuhi. Kondisi khusus tersebut diletakkan pada bagian ELSE.
Apabila kondisi IF terpenuhi (bernilai TRUE) maka statemen-statemen A akan dieksekusi terlebih dulu sebelum dilanjutkan ke statemen yang berada di bawah blok pemilihan. Bila kondisi IF tidak terpenuhi (bernilai FALSE) maka statemen-statemen B yang akan dieksekusi terlebih dulu sebelum dilanjutkan ke statemen yang berada di bawah blok pemilihan.

Tiga Kondisi atau Lebih Kondisi (IF-THEN-ELSIF)

IF kondisi_1 THEN
statemen-statemen A;
ELSIF kondisi_2 THEN
statemen-statemen B;
...
ELSIF kondisi_n THEN
statemen-statemen N;
[ELSE
statemen-statemen lain;]
END IF;

Pada struktur ini, minimal terdapat dua kondisi yang harus diperiksa dan satu tambahan kondisi khusus yang akan mengatasi kejadian dimana semua kondisi yang didefinisikan tidak terpenuhi (bernilai FALSE).
Mula-mula dilakukan pengecekan terhadap kondisi_1, jika TRUE maka statemen-statemen A akan dieksekusi dan kemudian mengeksekusi statemen yang berada di bawah blok pemilihan. Tapi bila FALSE maka akan dilakukan pengecekan selanjutnya untuk kondisi_2. Jika kondisi_2 TRUE maka statemen-statemen B akan dieksekusi sebelum statemen di bawah blok pemilihan dieksekusi, dan seterusnya. Apabila seluruh kondisi ELSIF tidak terpenuhi, maka statemen pada blok ELSE yang akan dieksekusi.

Contoh Penggunaan Statement IF

declare
nama varchar(50) := '&Nama';
harga_buku number(10) := '&HargaBuku' ;
diskon number(5) := '&Diskon';
total number(5);

begin
total := harga_buku - ((harga_buku*diskon)/100);
dbms_output.put_line('Selamat Datang');
dbms_output.put_line('Harga yang harus dibayar = Rp. '||total);

if (diskon < 20) then
dbms_output.put_line('Pelit amat sih');
elsif (diskon >= 20) or (diskon < 50) then dbms_output.put_line('Biasa aja ah');
else dbms_output.put_line('wah baik banget');
end if;
end;
/

declare
nama varchar(50) := '&Nama';
jenis_kelamin varchar(3) := '&JenisKelamin';
umur number(5) := '&Umur';
begin
      if (jenis_kelamin ='p') and (umur < 20) then
     dbms_output.put_line('mba '||nama||' Belajar yang bener'); 
       elsif (jenis_kelamin ='p') and (umur > 60) then
     dbms_output.put_line('mba '||nama||' Inget mati');
        elsif (jenis_kelamin ='p') and (umur >= 20) and (umur <= 60) then
     dbms_output.put_line('mba '||nama||' Buruan nikah bisi expired!');
        elsif (jenis_kelamin ='l') and (umur < 25) then
     dbms_output.put_line('mas '||nama||' Belajar yang bener'); 
        elsif (jenis_kelamin ='l') and (umur > 60) then
     dbms_output.put_line('mas '||nama||' inget mati');
       elsif (jenis_kelamin ='l') and (umur >= 25) and (umur <= 60) then
     dbms_output.put_line('mas '||nama||' Buruan nikah bisi expired!');
    end if;
end;


Script Input Output 

 Blok PL/SQL secara umum terdiri atas tiga bagian :

DECLARE
-- berisi deklarasi variable, konstanta,
-- prosedur, ataupun fungsi
BEGIN
-- berisi statemen-statemen yang akan dieksekusi
EXCEPTION
-- berisi perintah untuk mengatasi kesalahan
-- yang mungkin muncul
END;
Blok DECLARE dan EXCEPTION bersifat opsional, hanya dituliskan saat dibutuhkan. Bagian yang wajib adalah BEGIN dan END.


1. Script menghitung keliling & luas lingkaran
declare
jari2 number(5,2);
keliling number(7,2);
luas number(7,2);



begin
jari2 := &jari2;
keliling := 2*3.14*jari2;
luas := 3.14*power(jari2,2);
dbms_output.put_line('Jari-jari lingkaran = '||jari2);
dbms_output.put_line('keliling lingkaran = '||keliling);
dbms_output.put_line('luas lingkaran = '||luas);

end;

/
Hasil output:






 




2.  Script untuk mengubah format tanggal sysdate(tanggal yang di set di komputer)
declare

begin
dbms_output.put_line('Sekarang tanggal: '||sysdate);
dbms_output.put_line('Sekarang hari '||to_char(sysdate,'DAY')||' tanggal '||to_char(sysdate,'DD')||' bulan '||to_char(sysdate,'MM')||' tahun'||to_char(sysdate,'YY'));

end;
/




 
3.    Script untuk menghitung umur seseorang 5 tahun yang akan datang
declare
a varchar(20);
b number(2);
c number(2);

begin
a:='&nama';
b:=&umur;
c:=b+5;
dbms_output.put_line('Hai, nama saya '||a);
dbms_output.put_line('5 tahun lagi umur saya:' ||c||'tahun');

end;
/




IMPLISIT dan EKSPLISIT

PL/SQL menggunakan dua tipe cursor: implisit dan eksplisit. PL/SQL mendeklarasikan cursor secara implisit untuk seluruh perintah-perintah manipulasi data SQL, termasuk query-query yang hanya menghasilkan satu baris data. Namun, untuk query-query yang menghasilkan lebih dari satu baris data, kita harus mendeklarasikan cursor eksplisit, menggunakan cursor FOR loop, atau menggunakan klausa BULK COLLECT.
Explicit Cursors 
Kumpulan baris-baris data yang dihasilkan oleh query dapat terdiri dari nol, satu, atau banyak baris data, bergantung pada berapa banyak baris-baris data yang sesuai dengan kriteria pencarian yang kita inginkan. Ketika query menghasilkan banyak baris data, kita dapat secara eksplisit mendeklarasikan cursor untuk memproses baris-baris data tersebut. Lebih luas lagi, kita dapat mendeklarasikan cursor di dalam bagian deklaratif dari suatu blok PL/SQL, subprogram, atau package.
Kita menggunakan tiga perintah untuk mengontrol cursor: OPEN, FETCH, dan CLOSE. Pertama, kita menginisialisasi cursor dengan perintah OPEN, yang mana mengidentifikasi result set. Kemudian, kita dapat mengeksekusi FETCH secara berulang-ulang sampai seluruh baris-baris data ditampilkan, atau kita dapat menggunakan klausa BULK COLLECT untuk menampilkan seluruh baris-baris data sekali saja. Ketika baris data terakhir selesai diproses, kita membebaskan cursor dengan perintah CLOSE. Kita dapat memproses beberapa query di secara paralel dengan mendeklarasikan dan membuka beberapa cursor.

Cursor merupakan suatu variabel yang digunakan untuk menampung hasil query yang terdiri atas lebih dari satu row atau record. Cursor dapat diilustrasikan sebagai penampung sekaligus pointer atas hasil eksekusi query.
Cursor dibagi menjadi dua macam, yaitu :
· Cursor Implisit
· Cursor Eksplisit
1. Cursor Implisit
Cursor Implisit merupakan cursor yang tidak memerlukan deklarasi terlebih dahulu (tidak bernama). Cursor ini harus menghasilkan satu baris record.
Cursor implisit merupakan cursor yang tidak perlu dideklarasikan sebelumnya. Cursor ini berasosiasi dengan perintah SELECT, INSERT, DELETE, dan UPDATE.
Contoh cursor Implisit :
select first_name, last_name, department_name
from employees e join departments d
on e.department_id=d.department_id
where d.department_id=50;
2. Cursor Eksplisit
Statement declare
àMerupakan deklarasi nama cursor dan definisi struktur query yang akan dilakukan di dalamnya.
CURSOR nama_cursor IS query
Contoh:
DECLARE
CURSOR CUR1 IS SELECT nim, nama, alamat FROM mahasiswa
Statement open
à Sebelum suatu cursor dapat digunakan, cursor harus dibuka terlebih dahulu.
OPEN nama_cursor;
Contoh:
OPEN CUR1;
Statement fetch
à Fetch merupakan perintah untuk mengambil isi cursor, dimana isi dari cursor tersebut adalah hasil query yang telah dideklarasikan pada statement deklarasi cursor.
FETCH nama_cursor INTO ;
Contoh:
FETCH CUR1 INTO v_nim, v_nama, v_alamat;
Statement close
à Setelah pemrosesan query selesai, cursor harus ditutup dengan statemen CLOSE .
CLOSE nama_cursor;
Contoh:
Close CUR1;
Contoh Cursor Eksplisit :
Tampilkan first name , last name dari tabel employees dan nama department yang id department diinputkan oleh user.
jawab :
declare
rata number;
total number;
jum number;
cursor cursor1 is
select first_name, last_name, salary, department_name
from employees e join departments d
on e.department_id=d.department_id
where d.department_id=&input_kode_department;
vrec cursor1%rowtype;
begin
open cursor1;
dbms_output.put_line('=======================================================');
dbms_output.put_line('NO NAME DEPARTMENT NAME SALARY');
dbms_output.put_line('=======================================================');
total:=0;
loop
fetch cursor1 into vrec;
exit when cursor1%notfound;
dbms_output.put_line(rpad(cursor1%rowcount,5,' ')||
rpad(vrec.first_name||' '||vrec.last_name,19,' ')||
rpad(vrec.department_name,25,' ')||
lpad(vrec.salary,6,' '));
total:=total+vrec.salary;
end loop;
rata:=total/cursor1%rowcount;
jum:=cursor1%rowcount;
dbms_output.put_line('=======================================================');
dbms_output.put_line('Jumlah record : '||jum);
dbms_output.put_line('Total salary : '||total);
dbms_output.put_line('Rata - rata salary : '||rata);
close cursor1;
end;
/

Lanjutan Prosedural LOOP

PERNYATAAN LOOP



Pernyataan LOOP berguna untuk melakukan pengulangan. Bentuknya:
[ awal_label : ] LOOP
Statement_list
END LOOP [ akhir_label ]
Daftar pernyataan yang berada antara LOOP dan END LOOP akan terus dieksekusi sampai ada suatu pernyataan untuk keluar pengulangan dieksekusi. Dalam hal ini, pernyataan yang digunakan untuk keluar pengulangan berupa pernyataan LEAVE. Contoh berikut menunjukkan penggunaan LOOP dan LEAVE. 
DELIMITER//
CREATE PROSEDUR tes_loop( )
BEGIN
DECLARE pencacah INT;
SET pencacah = 0;

SELECT CONCAT (‘Nilai awal pencacah : ’ , pencacah);
Ulang : LOOP
SET pencacah = pencacah + 1;
IF pencacah > 10 THEN LEAVE ulang; END IF;
END LOOP ulang;
SELECT CONCAT (‘Nilai akhir pencacah : ’ , pencacah);
END
/

Contoh 1 lain dari loop:
Declare
a number;
i number;

begin
i:=0;
a:=&masukkan_angka;
loop
 i:=i+1;
if(i>=a) then
 exit;
 else if mod(i,2)=0 then
dbms_output.put_line(i);
end if;
end if;
end loop;
end;
/
Contoh2;
declare
a number;
i number;
begin
a:=&masukkan _anggak;
i:=1 ;
while i<a loop
            if mod(i,2)=0 then
            dbms_output.put_line(i);

            end if;
            i:=i+1;
end loop;
end;

/i:=i+1;
Contoh 3:
Declare
a number;
i number;

begin
i:=0;
a:=&masukkan_angka;

loop
 i:=i+1;
if(i>=a) then
 exit;
 else if mod(i,2)=0 then
dbms_output.put_line(i);
end if;
end if;
end loop;
end;
/

DELIMITER;
Pada prosedur tes_loop, variable pecahan dideklarasikan sebagai variable local yang bertipe INT. Mula-mula variable tersebut diiisi dengan 0. Selanjutnya, pernyataan
SELECT CONCAT ( ‘Nilai awal pecahan : ‘, pecahan ) ;
Digunakan untuk menampilkan tulisan ‘Nilai awal pecahan : ‘diikuti dengan isi variable pecahan.
Pernyataan LOOP digunakan untuk mengeksekusi pernyataan-pernyataan yang ada didalamnya secara terus-menerus, sampai ada perintah untuk keluar dari pernyetaan tersebut.
Pernyataan yang ada dalam LOOP yang pertama adalah
SET pecahan = pecahan + 1 ;
Pernyataan tersebut untuk menaikkan isi variable pecahan sebesar 1.
Pernyataan kedua
IF pecahan > 10 THEN LEAVE ulang ; END IF ;
Digunakan untuk LEAVE saat variable pecahan bernilai 11 (yakin ketika kondisi pecahan > 10 bernilai benar). Ketika LEAVE dijalankan, Pengulangan menjadi berakhir. Dengan demikian, pernyataan selanjutnya yang dieksekusi adalah
SELECT CONCAT ( ‘ Nilai akhir pecahan : ‘, pecahan ) ;
Pernyataan REPEAT
Seperti halnya LOOP, pernyataan REAPET juga berguna untuk melakukan pengulangan. Bentuknya:
[awal_label :] REAPET
Daftar pernyataan
UNTIL kondisi_pengulangan
END REAPET [ akhir_label ]
Pada pernyataan ini, bagian daftar_pernyataan akan dieksekusi terus-menerus sampai kondisi_pengulangan benilai benar (TRUE). 
DECLARE pecahan INT DEFAULT 0 ;
Digunakan untuk mendeklarasikan variable local pertama pecahan yang bertipe INT dan diberi nilai awal sebesar 0.
Pernytaan REAPET digunakan untuk menjalankan pernyataan 
SET pecahan = pecahan + 1 ;
Sampai kondisi pecahan > 10 bernilai benar. Kondisi ini tercapai saat pecahan bernilai 11.
Pernyataan WHILE
Pernyataan WHILE juga digunakan untuk melakukan pengulangan terhadap sejumlah pernyataan. Bentuknya adalah:
[ awal_label : ] WHILE kondisi_pengulangan DO
daftar_pernyataan
END WHILE [ akhir_label ]
Berada dengan LOOP atau REAPET, WHILE akan menguji kondisi_pengulangan terlebih dulu.Selama kondisi tersebut bernilai benar, bagian daftar_pernyataan akan dieksekusi secara terus-menerus. Berikut contoh penggunaan pernyataan WHILE.
DELIMITER//
CREATE PROSEDUR tes_while( )
BEGIN
DECLARE pencacah INT;
SET pencacah = 0;
SELECT CONCAT (‘Nilai awal pencacah : ’ , pencacah);
WHILE pencacah < 11 DO
SET pencacah = pencacah + 1;
END WHILE;
SELECT CONCAT (‘Nilai akhir pencacah : ’ , pencacah);
END
/

Rabu

REDAKSI CIMOL



Terdiri dari :
> Novia Liestarini ( Jakarta )
> Rani Maisa Noviana ( Riau)
> Irfan Hardiansyah ( Makassar)
> Nindy Ayu Valentina ( Madura)
> Ahmad Ikhsan Ramadhan ( Bogor)
> Dian Lupita Herman ( Makassar)
> Putri seroja ( Medan)

Editing : by Irfan Hardiansyah

FILM TERBARU 1 Cinta 2 Hati


Model : Putri Seroja,Dian Lupita Herman,Novia Liestarini
Fotograper : by Irwanda Saputra
Editing : by Irfan Hardiansyah

Kamis

Hanya Bertiga ! ! !

neh fto pas WEBPRO,hahaha
kurang kerjaan bgt yah ! ! !
tp,never mind lah. .yg penting Narsis..hahahha

apa lagii sii Franki. . .Jamal ma cman Figuran doank. .h h i :p

SIMPLE ANONYMOUS PL/SQL

Panduan:
1. Bagian declare diisi dengan daftar variabel dan tipe datanya masing-masing
2. Bagian inti program selalu diawali dengan BEGIN dan diakhiri dengan END; serta /
3. PL/SQL dapat disimpan sebagai file *.sql dan di-run sebagai script dengan perintah @ fullpath, dimana fullpath tidak boleh mengandung spasi
contoh: @ D:\BelajarOracle\Pertemuan3\anu.sql;
4. Jika blok PL/SQL menmapilkan output ke layar maka setelah login kita harus mengaktifkan screen output dengan cara menjalankan perintah SET SERVEROUTPUT ON setelah login (cukup satu kali tiap login)
5. Aturan nama variabel: tidak boleh pakai spasi, diawali selain huruf atau mengandung simbol tanda baca

Format Deklarasi Variabel:
Nama_Var Tipe_data;
atau
Nama_Var Nama_Tabel.Nama_Kolom%Type;

Format Pembacaan Single Row Data:
SELECT daftar_kolom
INTO daftar_variabel
FROM daftar_tabel
WHERE syarat;

(*) Format di atas tidak bisa digunakan jika hasil query lebih dari 1 baris, kecuali jika dilengkapi dengan exception

Format Penerimaan Input Dari User:
Nama_Var := &prompt;
atau
Nama_Var := ‘&prompt’;

Note: Prompt bebas namun tidak boleh menggunakan spasi dan simbol selain alfanumerik. Jika Input bertipe selain tipe data number maka &prompt harus diapit petik tunggal (‘)

Contoh1: Menerima input jari-jari dan menampilkan luas serta keliling lingkaran
Declare
jari2 number(5,2);
keliling number(7,2);
luas number(7,2);

begin
jari2 := &jari2;
keliling := 2 * 3.14 * jari2;
luas := 3.14 * power(jari2,2);
dbms_output.put_line('Jari-jari lingkaran = '||jari2);
dbms_output.put_line('keliling lingkaran = '||keliling);
dbms_output.put_line('luas lingkaran = '||luas);
end;
/
Contoh2: Menerima input nama anggota dan menampilkan alamatnya
Declare
cari varchar(30);
nama anggota.nama_anggota%type;
alamat anggota.alamat_anggota%type;

begin
cari := '&nama_yang_dicari';
select nama_anggota, alamat_anggota
into nama, alamat
from anggota
where nama_anggota = cari;
dbms_output.put_line(nama||' tinggal di '||alamat);
end;
/

PL/SQL WITH CONDITIONAL

IF... THEN...
IF... THEN... ELSE...
IF... THEN... ELSIF... ELSE...

PL/SQL WITH LOOPING

FOR... LOOP
WHILE... LOOP
LOOP... EXIT WHEN...

Latihan SQL (DDL & DML)

SQL (Structured Query Language) adalah sebuah bahasa yang dipergunakan untuk mengakses data dalam basis data relasional. Bahasa ini secara de facto merupakan bahasa standar yang digunakan dalam manajemen basis data relasional
Secara umum SQL terdiri dari dua bahasa
1. DDL (Data Definition Language)
    DDL digunakan untuk mendefinisikan, mengubah, serta menghapus basis data dan
    objek-objek yang diperlukan dalam basis data, misalnya tabel, view, user, dan 
    sebagainya. Secara umum, DDL yang digunakan adalah 
  •     CREATE untuk membuat objek  baru, 
  •     USE untuk menggunakan objek, 
  •     ALTER  untuk mengubah objek yang sudah ada, dan 
  •     DROP untuk menghapus objek. 
DDL biasanya digunakan oleh administrator  basis data dalam pembuatan sebuah aplikasi basis data.

2. DML (Data Manipulation Language)
    DML digunakan untuk memanipulasi data yang ada dalam suatu tabel. Perintah yang 
    umum dilakukan adalah:
  • SELECT untuk menampilkan data
  • INSERT untuk menambahkan data baru
  • UPDATE untuk mengubah data yang sudah ada
  • DELETE untuk menghapus data

Contoh Latihan

DDL (Data Definition Language)
1.  Masuk ke MySQL
     C:\Documents and setting\Mahasiswa BSI> mysql
2.  Buat database “NIM_Perpus” dan lihat database tersebut
     Mysql>> CREATE DATABASE 12054377_perpus;
3. Buat table “anggota” dengan struktur:
   
                                                                                                                       
Field    Name
Type
Size
Ket
Id_anggota Varchar 4
Primary    key
Nama Varchar 15
ALamat Varchar 20
Notelp Varchar 12
Tgl_lahit Varchar


Mysql>> CREATE TABLE anggota(id_anggota varchar(4),
    Nama varchar(15),
    Alamat varchar(20),
    Notelp varchar(12),
    Tgl_lahir date, primary key(id_anggota));

a. Hapus primary key
    Mysql>> ALTER  TABLE anggota DROP Primary Key;

b. Tambahkan kembali primary key pada "id_anggota"
    Mysql>> ALTER TABLE anggota ADD Primary     Key(id_anggota);

4. Lihat field table "anggota"
    Mysql>> CREATE DATABASE 12054377_perpus;


5. Ganti nama table "anggota" menjadi "anggota_baru". Lalu lihat perubahan tersebut
    Mysql> RENAME TABLE anggota TO anggota_baru;

6. Ganti field "nama" dengan "nama_anggota" lalu lihat perubahannya
    Mysql>> ALTER TABLE anggota_baru CHANGE nama nama_anggota VARCHAR(15);

7. Tambahkan field "tgl_anggota" dengan type varchar(15)
    Mysql>> ALTER TABLE anggota_baru ADD tgl_anggota  varchar(15);

8. Ubahlah type "tgl-anggota" menjadi Date
    Mysql>> ALTER TABLE anggota_baru CHANGE tgl_anggota  tgl_anggota Date;

9. Hapus field "tgl_anggota"
    Mysql>> ALTER TABLE anggota_baru drop tgl_anggota;

10. Lihat field-field anggota_baru
      Mysql>> DESCRIBE anggota_baru;

DML (Data Manipulation Language)

11. Isi record pada table tersebut dengan data anda
      Contoh : 001, Razbie, Jakarta, 0218000063, 04/05/2010
      Mysql>> INSERT INTO VALUES(‘001’,’Razbie’, ’Jakarta’,’0218000063’,’2010-05-04’);

12. Lihat semua isi record
      Mysql>> SELECT *FROM anggota_baru;

13. Tambahkan record untuk field "id_anggota" dan  "nama_anggota"
      Contoh : A002, Intan
      Mysql>> INSERT INTO  anggota_baru(id_anggota,nama_anggota)
      VALUES(‘A002’,’Intan’);

14. Lihat record dari table "anggota" dimana "id_anggota"  001
      Mysql>> SELECT *FROM anggota_baru WHERE  id_anggota=’001’;

15. Lakukan perubahan untuk "id_anggota" 001 menjadi "A001"
      Mysql>> UPDATE anggota_baru SET id_anggota=’A001’ WHERE id_anggota=’001’;

16. Hapus record dimana “id_anggota” A002
      Mysql>> DELETE anggota_baru WHERE id_anggota=’A002’;


Basic SQL statements: DDL and DML

In the first part of this tutorial, you’ve seen some of the SQL statements that you need to start building a database. This page gives you a review of those and adds several more that you haven’t seen yet.
• SQL statements are divided into two major categories: data definition language (DDL) and data manipulation language (DML). Both of these categories contain far more statements than we can present here, and each of the statements is far more complex than we show in this introduction. If you want to master this material, we strongly recommend that you find a SQL reference for your own database software as a supplement to these pages.

Data definition language

DDL statements are used to build and modify the structure of your tables and other objects in the database. When you execute a DDL statement, it takes effect immediately.
• The create table statement does exactly that:
        CREATE TABLE <table name> ( 
        <attribute name 1> <data type 1>,
        ...
        <attribute name n> <data type n>);
The data types that you will use most frequently are character strings, which might be called VARCHAR or CHAR for variable or fixed length strings; numeric types such as NUMBER or INTEGER, which will usually specify a precision; and DATE or related types. Data type syntax is variable from system to system; the only way to be sure is to consult the documentation for your own software.
• The alter table statement may be used as you have seen to specify primary and foreign key constraints, as well as to make other modifications to the table structure. Key constraints may also be specified in the CREATE TABLE statement.
        ALTER TABLE <table name>
        ADD CONSTRAINT <constraint name> PRIMARY KEY (<attribute list>);
You get to specify the constraint name. Get used to following a convention of tablename_pk (for example, Customers_pk), so you can remember what you did later. The attribute list contains the one or more attributes that form this PK; if more than one, the names are separated by commas.
• The foreign key constraint is a bit more complicated, since we have to specify both the FK attributes in this (child) table, and the PK attributes that they link to in the parent table.
        ALTER TABLE <table name>
        ADD CONSTRAINT <constraint name> FOREIGN KEY (<attribute list>)
        REFERENCES <parent table name> (<attribute list>);
Name the constraint in the form childtable_parenttable_fk (for example, Orders_Customers_fk). If there is more than one attribute in the FK, all of them must be included (with commas between) in both the FK attribute list and the REFERENCES (parent table) attribute list.
You need a separate foreign key definition for each relationship in which this table is the child.
• If you totally mess things up and want to start over, you can always get rid of any object you’ve created with a drop statement. The syntax is different for tables and constraints.
        DROP TABLE <table name>;

        ALTER TABLE <table name>
        DROP CONSTRAINT <constraint name>;
This is where consistent constraint naming comes in handy, so you can just remember the PK or FK name rather than remembering the syntax for looking up the names in another table. The DROP TABLE statement gets rid of its own PK constraint, but won’t work until you separately drop any FK constraints (or child tables) that refer to this one. It also gets rid of all data that was contained in the table—and it doesn't even ask you if you really want to do this!
• All of the information about objects in your schema is contained, not surprisingly, in a set of tables that is called the data dictionary. There are hundreds of these tables most database systems, but all of them will allow you to see information about your own tables, in many cases with a graphical interface. How you do this is entirely system-dependent.

Data manipulation language

DML statements are used to work with the data in tables. When you are connected to most multi-user databases (whether in a client program or by a connection from a Web page script), you are in effect working with a private copy of your tables that can’t be seen by anyone else until you are finished (or tell the system that you are finished). You have already seen the SELECT statement; it is considered to be part of DML even though it just retreives data rather than modifying it.
• The insert statement is used, obviously, to add new rows to a table.
        INSERT INTO <table name>
        VALUES (<value 1>, ... <value n>);
The comma-delimited list of values must match the table structure exactly in the number of attributes and the data type of each attribute. Character type values are always enclosed in single quotes; number values are never in quotes; date values are often (but not always) in the format 'yyyy-mm-dd' (for example, '2006-11-30').
Yes, you will need a separate INSERT statement for every row.
• The update statement is used to change values that are already in a table.
        UPDATE <table name>
        SET <attribute> = <expression>
        WHERE <condition>;
The update expression can be a constant, any computed value, or even the result of a SELECT statement that returns a single row and a single column. If the WHERE clause is omitted, then the specified attribute is set to the same value in every row of the table (which is usually not what you want to do). You can also set multiple attribute values at the same time with a comma-delimited list of attribute=expression pairs.
• The delete statement does just that, for rows in a table.
        DELETE FROM <table name>
        WHERE <condition>;
If the WHERE clause is omitted, then every row of the table is deleted (which again is usually not what you want to do)—and again, you will not get a “do you really want to do this?” message.
• If you are using a large multi-user system, you may need to make your DML changes visible to the rest of the users of the database. Although this might be done automatically when you log out, you could also just type:
        COMMIT;
• If you’ve messed up your changes in this type of system, and want to restore your private copy of the database to the way it was before you started (this only works if you haven’t already typed COMMIT), just type:
        ROLLBACK;
Although single-user systems don’t support commit and rollback statements, they are used in large systems to control transactions, which are sequences of changes to the database. Transactions are frequently covered in more advanced courses.

Privileges

If you want anyone else to be able to view or manipulate the data in your tables, and if your system permits this, you will have to explicitly grant the appropriate privilege or privileges (select, insert, update, or delete) to them. This has to be done for each table. The most common case where you would use grants is for tables that you want to make available to scripts running on a Web server, for example:
        GRANT select, insert ON customers TO webuser;