ANEXA E
  
   
   
   Crearea Obiectelor unei Baze de Date 
   
   
   Instructiunea CREATE este utilizata pentru crearea tabelelor si a
   altor obiecte ca de exemplu INDEX-uri, DOMAIN, VIEWS. Restrictiile pot
   fi specificate de asemeni le createa tabelelor ( restricttile sunt
   implementate la nivelul bazei de date).



        CREATE TABLE EMP
        ( EMPNO INTEGER (A) NOT NULL,
        ENAME CHAR (10),
        JOB CHAR (10),
        MGR INTEGER (4),
        HIREDATE DATE,
        SAL INTEGER (7,2),
        COMM INTEGER (7,2),
        DEPTNO INTEGER (2) NOT NULL );



   
   
   Cand se creaza tabela se poate specifica optional domeniul pentru
   coloana respectiva. In plus, constrangerile pot fi specificate ca
   aplicandu-se asupra valorilor unei coloane sau saupra intregii tabele.
   Restrictiile pot specifica faptul ca coloanele contin numai anumite
   valori, valori unice sau nu pot fi nule. Restrictiile sunt
   implementate in cadrul bazei de date.
   
   
   Comanda pentru tabela ALTER permite eliminarea unor coloane
   individuale.



        ALTER TABLE EMP
        DROP MGR;



   
   
   Comanda DROP este utilizata pentu a elimina alte obiecte din baza de
   date.
   
   
   De exemplu :

        DROP TABLE DEPT;
        DROP VIEW SALARY;


   
   
   INGRES/SQL
   
   
   INGRES/SQL este un produs al Relational Technology Inc. (RTI). SQL
   utilizat de INGRES este acelasi din punct de vedere sintactic ca cel
   utili zat de alti producatori. Majoritatea exemplelor de comenzi date
   pana acum se pot rula si sub INGRES.Oricum, INGRES/SQL nu are
   operatorul LIKE.
   
   INGRES suporta caractere speciale pentru utilizarea in comparatii ( in
   special operatorii de egalitate ) pentru a indica potrivirile partiale
   intr-un sir de caractere. Caractere care permit identificari pestiale
   sunt :


        *    identifica orice sir de 0 sau mai multe caractere
        ?    identifica orice caracter
        [..] identifica oricare din caracterele dintre parantezele patrate



   
   
   INGRES permite ca oricare din aceste caractere speciale sa poata fi
   folosite singular sau in combinatie pentru a specifica criteriul de
   identi ficare partiala:
   
   ename='*'
          identifica orice valoare in "ename"
          
   ename='E*'
          identifica orice valoare care incepe cu "E"
          
   ename='*ein'
          identifica orice valoare care se termina cu "ein"
          
   ename='*[aeiou]*'
          identifica orice valoare care are cel putin o vocala
          
   ename='Br??'
          identifica orice sir de 5 caractere care incepe cu "Br"
          
   
   
   Semnificatia speciala a acestor caractere poate fi eliminata in
   comparatii de predicate prin caracterul "backslash" (\). Astfel "\*"
   se refera la caracterul asterisc. Oricum, atunci cand se fac atribuiri
   cu caractere speciale nu trebiue tratate cu specificatiile pentru
   ndetificarea partiala:


        jtitle='**accountant**'

   
   
   Deoarece fragmentul de mai sus asigneaza "**accountant**" coloanei
   "jtitle", stelutele nu necesita o tratare speciala cu backslash. Dar
   pentru a extrage o valoare asignata astfel este necesara sintaxa
   urmatoare :


        job.title='\*\*accountant\*\*'

   
   
   Specificatiile de identificare patriala pot fi utilizate impreuna cu
   predicatele "between" si "in".
   
   
   INGRES nu accepta valori NULL. Daca nu se completeaza cu o valoare la
   inserarea unei coloane atunci INGRES va depozita o valoare implicita
   in acel camp. In functie de tipul datei dintr-o coloana valoarea
   impicita poate fi 0 sau spatii.
   
   Tipurile de date disponibile in INGRES/SQL par a fi cea mai mare di
   ferenta fata de majoritatea variantelor de SQL.
   
   Tipurile de date sunt :


  c1 - c255               character         Un sir de 1..255 caractere
  vchar(1) - vchar(2000)  vchar             Un sir de 1..2000 caractere
  integer1                intreg de 1 byte  -128 .. 127
  integer2 (smallint)     intreg pe 2 bytes -32,768 .. 32,767
  integer4(integer)       intreg pe 4 bytes -2,147,483,648 .. 2,147,483,647
  float4                  real pe 4 bytes   -10**78 .. 10**75 precizie
                                            7 zecimale
  float8(float)           real pe 8 bytes   -10**78 .. 10**75 precizie
                                            15 zecimale
  date                    data (12 byte)    1-ian-1582 .. 31-dec-2382 (pentru
                                            date absolute si -800 ani la 800
                                            ani (ptr. intervale de timp)
  money                   money8(byte)      #-99999999999999.99 ..
                                            #99999999999999.99



   
   
   Destinatiile smallint, float, integer pot fi utilizate in locul
   notatiei integer2, float8, integer4 respectiv.
   
   
   Astfel pentru a crea tabela EMP:


        CREATE TABLE EMP
        ( EMPNO INTEGER2,
        ENAME VCHAR(10),
        JOB VCHAR (20),
        MGR INTEGER2,
        SAL MONEY,
        COMM MONEY,
        DEPTNO INTEGER1);

        Tabelele SALGRADE si DEPT por fi create dupa cum urmeaza :

        CREATE TABLE SALGRADE           CREATE TABLE DEPT
        ( GRADE INTEGER1,               ( DEPTNO INTEGER1,
        LOSAL MONEY,                    DNAME VCHAR(10),
        HISAL MONEY);                   LOC VCHAR(10));


   
   
   Comanda pentru utilizarea tabelelor este aceeasi ca cea a altor
   producatori (instructiunea INSERT). Instructiunea DROP poate fi
   utilizata pentru a elimina obiecte din baza de date.
   
                              VEDERE DE ANSAMBLU
                                       
   
   
    O scurta vedere de ansamblu asupra SQL implementat in 3 RDBMS-uri
   -DB2, Rdbs si Ingres.
   
   SQL este limbajul standard pentru RDBMS-uri si toate RDBMS-urile
   majore suporta cateva forme ale SQL.
   
   Acest apendice furnizeaza o scurta vedere de ansamblu a SQL-ului
   imple- mentat in RDBMS de catre trei furnizori proeminenti de RDBMS
   -DB2 al lui IBM, Rdb al DEC si Ingres al lui Relational Technology .
   Informatia prezentata nu intentioneaza sa fie o comparatie
   cuprinzatoare a acestor produse . Intentia mea este sa arat ca , de
   cand toate RDBS-urile majore suporta SQL va puteti transfera
   priceperea pe care ati capatat-o in SQL de la un RDBMS la altul.
   
                                      DB2
                                       
   
   
    Database 2 ( DB2 ) este RDBMS-ul IBM-ului pentru mediul MVS.
   
   Implementarea DB2 a SQL-ului este identica cu SQL-ul ORACLE-ului .
   Intr-adevar SQL-ul folosit pentru DB2 (si SQL/DS-RDBMS-ul IBM-ului
   pentru DOS/USE si mediul de operare VM/SP) a format modelul pentru
   limbajul SQL . Reamintiti-va ca limbajul SQL a fost dezvoltat de IBM
   pentru prototipul lor RDBMS-System R , dar ORACLE a intodus prima
   implementare comerciala posibila a SQL-ului. 
   
                          SINTAXA DECLARATIEI SELECT
                                       
   
   
   Clauzele de baza ale declaratiei SELECT sunt listate mai jos:

 SELECT  [ALL/DISTINCT] { [Tabela articol(e)/expr [alias] }

 FROM tabela(e) [alias]

 [WHERE predicat]

 [AND predicat]

 [OR predicat]

 GROUP BY coloana(e) ]

 [HAVING predicat]

 [ORDER BY coloana(e)]


   
   
   Cateva exemple simple de comenzi SQL urmeaza:
   
   EXEMPLE:
    1.
  SELECT *
               FROM EMP;
 
    2.
  SELECT DISTINCT DEPTNO
               FROM DEPT;
 
    3.
  SELECT DEPTNO, ENAME
               FROM  EMP
               WHERE JOB =  'CLERK'
               ORDER BY JOB DESC;
 
    4.
  SELECT EMPNO, ENAME, JOB, SAL
               FROM EMP
               WHERE ENAME LIKE 'S%';
 
    5.
  SELECT ENAME, JOB, COMM
               FROM EMP
               WHERE COMM IS NULL;
 
    6.
  SELECT E.EMPNO, E.ENAME, D.DNAME
               FROM EMP E, DEPT D
               WHERE E.DEPTNO = D.DEPTNO;
 
    7.
  SELECT DEPTNO, DNAME
               FROM EMP
               WHERE NOT EXISTS
               (SELECT DEPTNO
               FROM EMP);
 
    8.
  SELECT SUM(SAL), DEPTNO
               FROM EMP
               GROUP BY DEPTNO
               HAVING SUM(SAL) 3500;
 

   
   
   Ceea ce este mai sus , este doar un specimen simplu al comenzilor SQL
   care pot fi scrise folosind SQL-ul lui DB2. Un rand intins ,de alti
   operatori este suportat de DB2; operatori de comparatie, operatori
   booleeni (AND, OR, NOT) , operatori speciali (EXISTS, IN, BETWEEN,
   LIKE, IS), operatorul pe multime UNION, etc...
   
   DB2 nu suporta direct JOIN-ul extern. Deasemenea, operatorii
   INTERSECTION si DIFFERENCE nu sunt suportati direct (operatorul UNINO
   ALL poate fi folosit pentru a construi aceste trasaturi).
   
   DB2 furnizeaza un numar de operatori si functii care pot fi folositi
   in constructia expresiilor. Unele dintre aceste functii si operatori
   sunt rezu- mate mai jos.

 Operator/functie                     Descriere
 ----------------                     ---------

 +,-,*,/                              Adunare, scadere, inmultire, impartire.
                                      Pot fi folositi cu date, timpi si
                                      timestamp-uri.

 ||                                   Concatenare-folosit pentru a alatura 2
                                      siruri de caractere sau 2 siruri grafi-
                                      ce.

 CHAR                                 Converteste o data, timp sau timestamp
                                      in reprezentarea sirului sau de carac-
                                      tere.

 DATE                                 Converteste o valoare scalara intr-o
                                      data.

 DAY/MONTH/YEAR                       Extrage portiunea de zi, luna sau an
                                      dintr-o data sau timestamp.

 DAYS                                 Converteste o data sau un timestamp
                                      intr-un numar de zile.

 DIGITS                               Converteste un numar intr-un sir de
                                      caractere.

 HOUR/MINUTE/SECOND                   Extrage portiunea de ore, minute,se-
                                      cunde din timp sau timestamp.

 LENGTH                               Calculeaza lungimea unei valori in oc-
                                      teti.

 SUBSTR                               Extrage un subsir dintr-un sir.

 VALUE                                Converteste un null intr-o valoare ne-
                                      nula.

 COUNT/AVG/                           Functii combinate
 MAX/MIN/SUM

   
   
   DB2 nu suporta bogatul set de functii care sunt posibile cu ORACLE.
   Vezi capitolele 4, 5 si 6.
   
   Intentia de aici, nu este de a furniza o comparatie de unu la unu a
   diferen- telor si asemanarilor intre si SQL-ul ORACLE-ului. Mai
   degraba, telul este de a arata ca, cunostintele dumneavoastra de SQL
   pot fi transferate de la un RDBMS la altul. 
   
                       CREAREA OBIECTELOR BAZEI DE DATE
                                       
   
   
   Comanda CREATE TABLE are in esenta aceeasi sintaxa ca si SQL-ul
   ORACLE-ului, oricum DB2 are ceva tipuri de date suplimentare:
   
          Integer
          
   Cuvant intreg binar, 31 biti si semn
          Smallint
          
   Jumatate de cuvant intreg binar, 15 biti si semn
          Decimal (n,m)
          
   Numar zecimal impachetat, n cifre si semn (0Float(n)
          Character(n)
          
   Sir de caractere de 8 biti de lungime fixa (0 Varchar(n)
          
   Lungimea variabila a celui de mai sus
          Graphic(n)
          
   Sir de caractere de 16 biti de lungime fixa (0 Vargraphic(n)
          
   Lungimea variabila a celui de mai sus
          Date
          
   Data reprezentata ca o secventa de 8 cifre zecimale fara semn
          impachetate (yyyymmdd), ocupand 4 octeti, valorile permise sunt
          in domeniul 1 Ianuarie AD pana la 31 Decembrie 9999 AD.
          Time
          
   Timpul, reprezentat ca o secventa de 6 cifre zecimale fara semn
          impachetate (hhmmss), o- cupand 3 octeti, valorile permise
          fiind in domeniul miezul noptii pana la miezul noptii. De
          exemplu : 000000 pana la 240000
          Timestap
          
   Combinatie de data si timp, reprezentata ca o secventa de 20 de cifre
          fara semn impache- tate(yyyymmddhhmmssnnnnnn),ocupand 10
          octeti, valorile permise fiind in domeniul 00010101000000000000
          pana la 99991231240000000000
          
   
   
   Aceste tipuri pot fi abreviate dupa cum urmeaza :
   
          Int
          
   pentru Integer
          Decimal(n)
          
   pentru Decimal(n,0)
          Decimal
          
   pentru Decimal(5)
          Dec
          
   pentru Decimal
          Float
          
   pentru Float(53)
          Real
          
   pentru Float(21)
          Double Precision
          
   pentru Float(53)
          Character
          
   pentru Character(1)
          Char
          
   pentru Character
          Long Varchar
          
   pentru Varchar(n)
          Graphic
          
   pentru Graphic(1)
          Long Vargraphic
          
   pentru Vargraphic(n)
          
   
   
   Cand creati tabele, puteti specifica daca Null-urile sunt permise sau
   nu in acelasi mod ca si ORACLE SQL cu o exceptie. DB2 permite
   declaratia NOT NULL WITH DEFAULT. Aceasta inseamna ca o valoare nu
   este ceruta pentru aceasta coloana si va fi inlocuita cu o valoare
   nula.
   
     Zero pentru campuri numarice
     Blank-uri pentru campuri cu siruri de lungime fixa
     Gol (siruri de lungime zero) pentru campuri cu siruri de lungime
     variabila.Valoarea lui CURRENT DATE sau CURRENT TIME sau CURRENT
     TIMESTAMP ,cat mai potrivit.
     
   
   
   Deci, pentru a crea o tabela EMP:

     CREATE TABLE EMP
     ( EMPNO  INTEGER NOT NULL,
     ENAME CHAR(10),
     JOB CHAR(10),
     MGR INTEGER,
     HIREDATE DATE,
     SAL DECIMAL(7,2),
     COMM DECIMAL(7,2),
     DEPTNO INTEGER NOT NULL);


   
   
   Tabela DEPT si tabela SALGRADE pot fi create astfel:

  CREATE TABLE DEPT              CREATE TABLE SALGRADE
  ( DEPTNO INTEGER NOT NULL,     ( GRADE INTEGER NOT NULL,
  DNAME CHAR(15),                LOSAL INTEGER,
  LOC CHAR(15));                 HISAL INTEGER);


   
   
   Comanda ALTER TABLE si comenzile DROP TABLE sunt la fel ca ale lui
   ORACLE. Comanda CREATE INDEX este aceeasi deasemenea.
   
                                     NOTA:
                                       
   
   
    Declaratia Crate Table SQL a lui ORACLE va accepta tipuri de date din
   DB2 si SQL/DS, si le converteste intern in tipuri de date ORACLE, dupa
   cum urmeaza:
   
          DB2 SQL/DS
          
   ORACLE
          SMALLINT
          
   NUMBER(38)
          INTEGER
          
   NUMBER(38)
          DECIMAL(M,N)
          
   NUMBER(M,N)
          FLOAT
          
   NUMBER
          VARCHAR(N)
          
   CHAR(N)
          LONG VARCHAR
          
   LONG
          
   
   
   Nu exista tipuri de date ORACLE care sa corespunda pentru GRAPHIC,
   VARGRAPHIC si LONG VARGRAPHIC. 
   
                                 VAX RDB/VMS
                                       
   
   
   Rdb este RDBMS al lui DEC, care lucreaza in mediul VMS.
   
   Urmeaza sintaxa pentru VAX SQL :

      SELECT [DISTINCT]/[Tabela.] coloana/expr [alias]
      FROM tabela(e) [alias]
      [WHERE conditie]
      [AND conditie]
      [OR conditie]
      [GROUP BY coloana(e)]
      [HAVING conditie]
      [ORDER BY coloana(e)]


   
   Exemple:
    1.
  SELECT ENAME, SAL*1.1 FROM EMP 
    2.
  SELECT EMPNO, ENAME, JOB FROM EMP
                WHERE EMPNO = 7369;
  
    3.
  SELECT ENAME, HIREDATE, DEPTNO FROM EMP
                WHERE JOB = "MANAGER"
                ORDER  BY ENAME;
  
    4.
  SELECT DEPTNO, JOB FROM EMP
                WHERE ENAME LIKE "% S%";
  
   
       
       Dupa cum puteti vedea, sintaxa lui VAX SQL este foarte similara cu
       DB2 si ORACLE SQL. Operatorul EXISTS ca si [NOT] NULL, [NOT]
       BETWEEN, ALL, opera- tori booleeni, JOIN-uri, subcereri, etc sunt
       toate suportate.Functiile COUNT, SUM, AVG, MIN, MAX, sunt
       deasemenea furnizate.

Inapoi la cuprins.

BogSoft 1999