Sintaks Create Table (SQL)



Kerangka:
CREATE TABLE nama_tabel (
 nama_atribut1 tipe_data,
 nama_atribut2 tipe_data,
 .
 .
 nama_atributN tipe_data
)

Example:
CREATE TABLE mahasiswa (
 nim INT PRIMARY KEY,
 nama VARCHAR(30) 
)


Primary key:  nilai yang bersifat unique dan merepresentasikan sebuah entitas. Misalnya dalam sebuah tabel kebetulan ada 2 orang yang mempunyai nama “Azhary”, maka primary key(dalam hal ini nim) dapat membedakan kedua orang tersebut karena nim(nomor induk mahasiswa) setiap mahasiswa berbeda

Unique: nilai yang berbeda antara nilai yang satu dan nilai yang lain. Misalnya kita tidak dapat mendaftarkan dua akun facebook dengan email yang sama.

Foreign key: nilai yang menjembatani tabel yang memiliki primary key

Sintaks yang memiliki foreign key:
CREATE TABLE mahasiswa (
 nim INT PRIMARY KEY,
 nama VARCHAR(30) 
);

CREATE TABLE daftar_nilai (
 m_nim INT,
 algoritma_dan_pemrograman FLOAT,
 kalkulus FLOAT,
 matematika_diskrit FLOAT,
 FOREIGN KEY (m_nim ) REFERENCES mahasiswa (nim)
  ON DELETE CASCADE
);

Beberapa jenis tipe data:
INT
CHAR
VARCHAR(panjang_string)
FLOAT
TEXT
.
.
etc

Contoh database university yang memiliki beberapa tabel (sumber:  Database System Concepts karya Silberschatz, Korth, & Sudarshan).
CREATE TABLE classroom
 (building  VARCHAR(15),
  room_number  VARCHAR(7),
  capacity  NUMERIC(4,0),
  PRIMARY KEY (building, room_number)
 );

CREATE TABLE department
 (dept_name  VARCHAR (20), 
  building  VARCHAR (15), 
  budget          NUMERIC (12,2) CHECK (budget > 0),
  PRIMARY KEY (dept_name)
 );

CREATE TABLE course
 (course_id  VARCHAR (8), 
  title   VARCHAR (50), 
  dept_name  VARCHAR (20),
  credits  NUMERIC (2,0) CHECK (credits > 0),
  PRIMARY KEY (course_id),
  FOREIGN KEY (dept_name) REFERENCES department
  ON DELETE SET NULL
 ) ENGINE = MyISAM;

CREATE TABLE instructor
 (ID   VARCHAR (5), 
  name   VARCHAR (20) NOT NULL, 
  dept_name  VARCHAR (20), 
  salary   NUMERIC (8,2) CHECK (salary > 29000),
  PRIMARY KEY (ID),
  FOREIGN KEY (dept_name) REFERENCES department
  ON DELETE SET NULL
 ) ENGINE = MyISAM;

CREATE TABLE section
 (course_id  VARCHAR (8), 
           sec_id   VARCHAR (8),
  semester  VARCHAR (6)
  CHECK (semester in ('Fall', 'Winter', 'Spring', 'Summer')), 
  year   NUMERIC (4,0) check (year > 1701 and year < 2100), 
  building  VARCHAR (15),
  room_number  VARCHAR (7),
  time_slot_id  VARCHAR (4),
  PRIMARY KEY (course_id, sec_id, semester, year),
  FOREIGN KEY (course_id) REFERENCES course
  ON DELETE CASCADE,
  FOREIGN KEY (building, room_number) REFERENCES classroom
  ON DELETE SET NULL
 ) ENGINE = MyISAM;

CREATE TABLE teaches
 (ID   VARCHAR (5), 
  course_id  VARCHAR (8),
  sec_id   VARCHAR (8), 
  semester  VARCHAR (6),
  year   NUMERIC (4,0),
  PRIMARY KEY (ID, course_id, sec_id, semester, year),
  FOREIGN KEY (course_id,sec_id, semester, year) REFERENCES section
  ON DELETE CASCADE,
  FOREIGN KEY (ID) REFERENCES instructor
  ON DELETE CASCADE
 ) ENGINE = MyISAM;

CREATE TABLE student
 (ID   VARCHAR (5), 
  name   VARCHAR (20) NOT NULL, 
  dept_name  VARCHAR (20), 
  tot_cred  NUMERIC (3,0) CHECK (tot_cred >= 0),
  PRIMARY KEY (ID),
  FOREIGN KEY (dept_name) REFERENCES department
  ON DELETE SET NULL
 ) ENGINE = MyISAM;

CREATE TABLE takes
 (ID   VARCHAR (5), 
  course_id  VARCHAR (8),
  sec_id   VARCHAR (8), 
  semester  VARCHAR (6),
  year   NUMERIC (4,0),
  grade          VARCHAR (2),
  PRIMARY KEY (ID, course_id, sec_id, semester, year),
  FOREIGN KEY (course_id,sec_id, semester, year) REFERENCES section
  ON DELETE CASCADE,
  FOREIGN KEY (ID) REFERENCES student
  ON DELETE CASCADE
 ) ENGINE = MyISAM;

CREATE TABLE advisor
 (s_ID   VARCHAR (5),
  i_ID   VARCHAR (5),
  PRIMARY KEY (s_ID),
  FOREIGN KEY (i_ID) REFERENCES instructor (ID)
  ON DELETE SET NULL,
  FOREIGN KEY (s_ID) REFERENCES student (ID)
  ON DELETE CASCADE
 ) ENGINE = MyISAM;

CREATE TABLE time_slot
 (time_slot_id  VARCHAR (4),
  day   VARCHAR (1),
  start_hr  NUMERIC (2) CHECK (start_hr >= 0 and start_hr < 24),
  start_min  NUMERIC (2) CHECK (start_min >= 0 and start_min < 60),
  end_hr   NUMERIC (2) CHECK (end_hr >= 0 and end_hr < 24),
  end_min  NUMERIC(2) CHECK (end_min >= 0 and end_min < 60),
  PRIMARY KEY (time_slot_id, day, start_hr, start_min)
 );

CREATE TABLE prereq
 (course_id  VARCHAR (8), 
  prereq_id  VARCHAR (8),
 PRIMARY KEY (course_id, prereq_id),
  FOREIGN KEY (course_id) REFERENCES course
  ON DELETE CASCADE,
 FOREIGN KEY (prereq_id) REFERENCES course
 ) ENGINE = MyISAM;


Catatan: Engine InnoDB tidak mensupport foreign key sehingga di setiap tabel yang memiliki foreign key ditambah sintaks ENGINE = MyISAM.

Program Penjumlahan dan Pengurangan Matriks 3x3 dalam Bahasa C


Sebelum mempelajari program ini, kamu harus memahami:
1. Input/Output Penjumlahan Dua Variabel
2. Pengulangan dengan For Loop
3. Konsep Array atau Larik

Algoritma program:
// inisialisasi variabel array of integer dua dimensi(jumlah baris dan jumlah kolom)

// input elemen-elemen matriks A

// input elemen-elemen matriks B

// jumlahkan nilai pada elemen matriks A dan B yang mempunyai baris dan kolom yang sama

// kurangkan nilai pada elemen matriks A dan B yang mempunyai baris dan kolom yang sama


Menerjemahkan algoritma tersebut ke dalam bahasa pemrograman C:
// inisialisasi variabel array of integer dua dimensi(jumlah baris dan jumlah kolom)
int matriksA[3][3];
int matriksB[3][3];
int hasil[3][3];

// input elemen-elemen matriks A
printf("Matriks A\n");
for (int i = 0; i < 3; i++)
{
   for (int j = 0; j < 3; j++)
   {
      printf("elemen[%d][%d]: ", i, j);
      scanf("%d", &matriksA[i][j]);
   }
}

// input elemen-elemen matriks B
printf("Matriks B\n");
for (int i = 0; i < 3; i++)
{
   for (int j = 0; j < 3; j++)
   {
      printf("elemen[%d][%d]: ", i, j);
      scanf("%d", &matriksB[i][j]);
   }
}

// jumlahkan nilai pada elemen matriks A dan B yang mempunyai baris dan kolom yang sama
for (int i = 0; i < 3; i++)
{
   for (int j = 0; j < 3; j++)
   {
      hasil[i][j] = matriksA[i][j] + matriksB[i][j];
   }
}

// kurangkan nilai pada elemen matriks A dan B yang mempunyai baris dan kolom yang sama
for (int i = 0; i < 3; i++)
{
   for (int j = 0; j < 3; j++)
   {
      hasil[i][j] = matriksA[i][j] - matriksB[i][j];
   }
}

Program jadi:
#include <stdio.h>

int main()
{
    // inisialisasi variabel array of integer dua dimensi(jumlah baris dan jumlah kolom)
    int matriksA[3][3];
    int matriksB[3][3];
    int hasil[3][3];

    // input elemen-elemen matriks A
    printf("Matriks A\n");
    for (int i = 0; i < 3; i++)
    {
       for (int j = 0; j < 3; j++)
       {
          printf("elemen[%d][%d]: ", i, j);
          scanf("%d", &matriksA[i][j]);
       }
    }

    // input elemen-elemen matriks B
    printf("Matriks B\n");
    for (int i = 0; i < 3; i++)
    {
       for (int j = 0; j < 3; j++)
       {
          printf("elemen[%d][%d]: ", i, j);
          scanf("%d", &matriksB[i][j]);
       }
    }

    // jumlahkan nilai pada elemen matriks A dan B yang mempunyai baris dan kolom yang sama
    for (int i = 0; i < 3; i++)
    {
       for (int j = 0; j < 3; j++)
       {
          hasil[i][j] = matriksA[i][j] + matriksB[i][j];
       }
    }

    printf("Hasil penjumlahan:\n");
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", hasil[i][j]);
        }
        printf("\n\n");
    }

    // kurangkan nilai pada elemen matriks A dan B yang mempunyai baris dan kolom yang sama
    for (int i = 0; i < 3; i++)
    {
       for (int j = 0; j < 3; j++)
       {
          hasil[i][j] = matriksA[i][j] - matriksB[i][j];
       }
    }

    printf("Hasil pengurangan:\n");
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%d ", hasil[i][j]);
        }
        printf("\n\n");
    }

    return 0;
}

Basic SQL Statement



SQL terbagi menjadi 2, yaitu DDL(Data Definition Language) dan DML(Data Manipulation Language)


1. Data Definition Language.

Create:
CREATE TABLE nama_tabel (
   nama_atribut1 tipe_data,
   nama_atribut2 tipe_data,
   .
   .
   .
   nama_atributN tipe_data
)

Create example:
CREATE TABLE mahasiswa (
   nim INT PRIMARY KEY,
   nama VARCHAR(35)
)

Drop:
DROP TABLE nama_tabel

Alter(menambah/menghapus atribut baru pada tabel yang sudah ada):
ALTER TABLE nama_tabel ADD nama_atribut tipe_data
ALTER TABLE nama_tabel DROP COLUMN nama_atribut


2. Data Manipulation Language

Select:
SELECT A1, A2, .., An
FROM R1, R2, .., Rn
WHERE condition

Insert:
INSERT INTO nama_tabel 
VALUES(value1, value2, .., valueN)

Update:
UPDATE nama_tabel 
SET nama_atribut=value
WHERE condition

Delete:
DELETE FROM nama_tabel
WHERE condition

SQL tidak bersifat case-sensitive, artinya tidak masalah jika menggunakan huruf kapital atau huruf kecil.

Coding Styles and Obfuscated Programming

Hai readers,
pernah kedapetan kode program yang ditulis kayak gini gak ?

#include <stdio.h> /*Program penukaran dua variabel*/
void tukar(int* x, int* y){
int temp=*x;
*x=*y;
*y=temp;
}
int main(){
int a=5;
int b=7;
printf("a=%d\n",a);
printf("b=%d\n",b);
tukar(&a,&b); //terjadi penukaran
printf("..Setelah penukaran..\n");
printf("a=%d\n",a);
printf("b=%d\n",b);
}

Waktu pertama kali diliat, mungkin ada beberapa orang yang mengerti maksud kode di atas, tapi tidaklah banyak. Kita sebagai programmer yang baik harus membuat kode kita readable atau dapat dibaca dan dipahami. Coba bandingkan kode di atas dengan kode di bawah ini.

/**
 *
 * Program penukaran dua variabel
 * dengan menggunakan sub-program.
 */

#include <stdio.h>

void tukar(int* x, int* y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main()
{
    // deklarasi dan inisialisasi variabel
    int a = 5;
    int b = 7;

    // variabel sebelum tertukar
    printf("a = %d\n", a);
    printf("b = %d\n", b);

    tukar(&a, &b); //terjadi penukaran

    printf("..Setelah penukaran..\n");

    // variabel setelah tertukar
    printf("a = %d\n", a);
    printf("b = %d\n", b);
}

A lot more readable, right ?
Ini ada beberapa perbandingan gaya penulisan kode yang disarankan

Variabel:
// Disarankan

int x = 5;

// Tidak disarankan

int x=5;

Function call:
// Disarankan

printf("x = %d", x);

// Tidak disarankan

printf("x=%d\n",x);

Operator dan operand:
// Disarankan

z = x + (y * 2);

// Tidak disarankan

z=x+y*2;

Scope spacing:
// Disarankan

void sub1()
{
   //TODO
}

void sub2()
{
   //TODO
}

// Tidak disarankan

void sub1()
{
   //TODO
}
void sub2()
{
   //TODO
}

Scope indentation:
// Disarankan

int main()
{
   int x = 5;
   printf("x = %d\n", x);
}

// Tidak disarankan

int main()
{
int x=5;
printf("x=%d\n",x);
}


Tapi dari semua perbandingan kode di atas, ada loh orang yang menulis kode program dengan gaya yang unik. Contohnya seperti ini.

#include                                     <math.h>
#include                                   <sys/time.h>
#include                                   <X11/Xlib.h>
#include                                  <X11/keysym.h>
                                          double L ,o ,P
                                         ,_=dt,T,Z,D=1,d,
                                         s[999],E,h= 8,I,
                                         J,K,w[999],M,m,O
                                        ,n[999],j=33e-3,i=
                                        1E3,r,t, u,v ,W,S=
                                        74.5,l=221,X=7.26,
                                        a,B,A=32.2,c, F,H;
                                        int N,q, C, y,p,U;
                                       Window z; char f[52]
                                    ; GC k; main(){ Display*e=
 XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
 *D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
  XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
                                   XEvent z; XNextEvent(e ,&z);
                                       ++*((N=XLookupKeysym
                                         (&z.xkey,0))-IT?
                                         N-LT? UP-N?& E:&
                                         J:& u: &h); --*(
                                         DN -N? N-DT ?N==
                                         RT?&u: & W:&h:&J
                                          ); } m=15*F/l;
                                          c+=(I=M/ l,l*H
                                          +I*M+a*X)*_; H
                                          =A*r+v*X-F*l+(
                                          E=.1+X*4.9/l,t
                                          =T*m/32-I*T/24
                                           )/S; K=F*M+(
                                           h* 1e4/l-(T+
                                           E*5*T*E)/3e2
                                           )/S-X*d-B*A;
                                           a=2.63 /l*d;
                                           X+=( d*l-T/S
                                            *(.19*E +a
                                            *.64+J/1e3
                                            )-M* v +A*
                                            Z)*_; l +=
                                            K *_; W=d;
                                            sprintf(f,
                                            "%5d  %3d"
                                            "%7d",p =l
                                           /1.7,(C=9E3+
                              O*57.3)%0550,(int)i); d+=T*(.45-14/l*
                             X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
                             *I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
                             179*v)/2312; select(p=0,0,0,0,&G); v-=(
                              W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
                               )/107e2)*_; D=cos(o); E=sin(o); } }


#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

Gaya penulisan kode seperti itu dinamakan Obfuscated Programming. Yaitu penulisan kode agar maksud dari kode tersebut susah untuk ditebak.



Sekian dulu, semoga kita dapat menulis kode yang lebih indah dan readable.