Un identificator (denumirea obiectului) este un cuvânt format din litere, numere și subliniere (_), începând cu o literă sau un semn (_). INFORMIX-4GL nu distinge între litere mici și mari. Prin urmare, i_Un1023Tt și I_UN1023TT au același nume.
Numele bazei de date nu depășește 10 ani.
Numele altor obiecte SQL - tabele, coloane, vizualizare (pseudo-tabele). sinonime - nu mai mult de 18 ani.
Operatorii descrierii de date sunt proiectați să descrie (crea), să schimbe descrierea și să distrugă obiectele bazei de date.
Următoarele tipuri de obiecte se disting în SQL:
Fiecare obiect are propriul său nume - un identificator. Fiecare obiect are un proprietar - adică utilizatorul care la creat. Numele obiectului poate fi specificat folosind numele său de proprietar în următoarea formă: moshkow.table1
Următoarele sunt exemple de utilizare a tuturor operatorilor de descriere a datelor. Sintaxa completă poate fi găsită în "Referința rapidă 4GL" sau în "Ghidul de referință INFORMIX-4GL".
Crearea unei baze de date.
În orice moment, puteți accesa obiecte cu o singură bază de date - CURRENT -. Instrucțiunea DATABASE face ca noua bază de date să fie curentă, în timp ce închid accesul la obiectele din baza de date anterioară. Declarația CLOSE DATABASE închide pur și simplu baza de date curentă.
Sunt create tabelele kadry și ceh, care conțin coloane de diferite tipuri.
Într-un tabel existent, putem schimba tipul coloanei, adăugăm unul nou și distrugem cel vechi.
Schimbarea structurii tabelului duce la o transformare fizică a datelor din ea. Dacă tipul de coloană este modificat, datele din acesta sunt convertite într-un tip nou și, dacă acest lucru nu este posibil, instrucțiunea ALTER "se încadrează" cu codul de eroare, iar tabela rămâne neschimbată.
Vizualizați - tabelul "pseudo", se bazează pe tabelele existente.
Conține doar o masă reală, doar spațiul de pe disc nu este alocat pentru aceasta, deoarece datele care se află în ea sunt de fapt stocate în tabelul pe care se bazează această vizualizare.
Index - o structură suplimentară a coloanelor din tabel este necesară pentru a accelera căutarea valorilor din coloană.
Putem organiza fizic masa conform indicelui. Într-o masă în grup, SELECT funcționează mai repede.
Numele de coloane din diferite tabele pot fi identice. Dacă două coloane cu aceleași nume sunt menționate într-o instrucțiune SQL, ele ar trebui să fie specificate cu numele tabelelor care le conțin. Înainte de numele oricărui obiect, este posibil (și uneori necesar) să se precizeze numele proprietarului său (proprietar-nume) - numele de intrare al utilizatorului care a creat (CREATE) acest obiect.
Sinonimul pentru numele tabelului este utilizat pentru a scurta înregistrarea.
Acum, oriunde poți (dar nu neapărat), în loc de numele petrow.sostoqnie_postow, folosește numele t1.
Baza de date poate avea un jurnal de sistem al tranzacțiilor (logfile).
Dacă nu există niciun jurnal de tranzacții pentru întreaga bază de date, puteți crea o pistă de audit pentru tabelele individuale din baza de date pentru același scop.
Firește, orice obiect creat în baza de date poate fi distrus. Trebuie doar să vă amintiți că operatorii de descriere a datelor nu se răzgândesc, deci dacă ați distrus masa sau baza de date, atunci știți că este pentru totdeauna.
Dacă operatorul dvs. încearcă să scrie într-un rând blocat de un alt utilizator, atunci operatorul "scade". Puteți seta pentru programul dvs. modul "Așteptați deblocarea rândurilor".
Într-o bază de date care nu are un jurnal de sistem, nu puteți efectua tranzacții și nu puteți restabili la punctul de control curent.
Deoarece totul trebuie plătit pentru tot ceea ce este bun, prezența unui jurnal de sistem pentru baza de date provoacă o creștere notabilă a costurilor generale și o încetinire a activității de interogare. În plus, atunci când lucrați cu jurnalul sistemului de baze de date rapid "umfla". Urmați-l și curățați-l periodic.
Specificați un nou jurnal de sistem pentru baza de date.
Recuperarea bazei de date distruse (de exemplu, din cauza unei defecțiuni hardware):
Într-un mediu UNIX
Dacă în timpul tranzacției programul "a căzut", atunci INFORMIX va reveni automat.
Ca urmare a listelor vor fi șterse angajații patrulea atelier de lucru „Smith“, „Smith“, „Sidorov“, etc După cum puteți vedea, Informix oferă liderilor naționaliști preocupați de instrumente puternice pentru realizarea ideilor lor.
Și acest operator va distruge TOATE rândurile din tabela kadry, deținută de moshkow, dar nu și de masa în sine
Cea mai simplă formă a instrucțiunii SELECT.
Cel de-al treilea exemplu selectează numele angajaților din tabelele de masă și numele magazinelor în care lucrează, din tabelul ceh.
Dacă vrem să prin inserarea unei linii în coloana de tip SERIAL a intrat automat următoarea contor valoarea trebuie introdusă în această coloană este constantă 0. Dacă nu toate coloanele Rând inserat este valoarea introdusă (așa cum se face în a treia comunicare), coloanele goale sunt umplute cu NULL .
În tabelul ceh din magazinele numărul 3,4,5 și, de asemenea, în strung și turnătorie, primele patru caractere din codul magazinului vor fi înlocuite cu un substring al câmpului de nume de pe aceeași linie.
Clauza WHERE poate fi prezentă în oricare din instrucțiunile DELETE, UPDATE, SELECT atunci când trebuie să specificați condițiile pentru rândurile pe care doriți să le procesați (respectiv distrugeți, modificați sau selectați). Luați în considerare structura și exemplele de utilizare a clauzelor WHERE.
În clauza WHERE este scrisă o condiție logică, care se obține prin conectarea cu operatorii logici AND, OR și NU pentru comparații elementare de tipul:
precum și comparații elementare de un fel special:
Puteți afla dacă șirul de caractere este potrivit pentru un anumit șablon sau nu. Pentru aceasta, două operații de comparare sunt folosite pentru modelul - LIKE și MATCHES.
LIKE are un șablon mai simplu. Utilizează numai două caractere speciale: (%) înlocuiește un număr arbitrar de caractere, (_) înlocuiește exact un caracter. Toate celelalte simboluri din șablon se desemnează. Dacă doriți să includeți o semnificație specială în șablonul% sau _, atunci trebuie să introduceți un caracter ESC înaintea acestora (în mod implicit acesta este (\)).
Să presupunem că trebuie să selectăm din tabela 8 toate liniile în care șirul de caractere al caracterelor 1 conține caracterul "+" și penultima literă din ea - "Y". Operatorul de eșantionare va arăta astfel:
MATCHES utilizează astfel de caractere speciale ale șablonului: *. [,], ^, -.
Dacă doriți să utilizați caractere speciale ca de obicei, utilizați caracterul escape-char. Dacă escape-char = "", atunci \? înseamnă pur și simplu un simbol. \ * înseamnă un caracter simplu *, \\ reprezintă doar simbolul \. Dar citația (") din interiorul șablonului ar trebui să fie notată cu două ghilimele (" ").
Selectați toate datele despre clienții din numele companiei, a căror a doua literă nu se află în intervalul de la G la L și a treia literă c. (Apropo, codurile literelor rusești de la BEST sunt în ordine, dar spre deosebire de literele latine, rușii nu sunt sortate alfabetic.)
Selectați toate datele despre clienții din numele companiei în care există un semn de întrebare.
În acest exemplu, caracterul ESC "I" a fost folosit pentru a anula semnificația specială a simbolului "?".
apoi aplicați condițiile cu subcheierea.
Aici subcheierea returnează o singură valoare - valoarea maximă a salariului. Și operatorul extern SELECT găsește numele proprietarilor.
Aici, interogarea afișează date despre managerii care au primit finanțare și au lucrat în Ural.
Această interogare (folosind subcotarea asociată) afișează o listă a tuturor produselor pentru care prețul total este cel puțin dublu față de prețul minim al produselor enumerate în același mandat.
Puteți conecta oricare dintre numeroasele condiții de mai sus, folosind operatorii logici NOT, AND, OR.
Instrucțiunea UNLOAD resetează datele din tabel într-un fișier din vizualizarea tipărită. Fiecare linie este convertită într-o înregistrare separată, valorile din coloane sunt separate de simbolul "|".
După operator
în fișierul kadry19.unl puteți găsi următoarele:
Oferă INTO, ÎN TEMP, DIN.
Puteți alege din mai multe mese. În acest caz, toate combinațiile posibile de rânduri de la primul tabel cu al doilea sunt luate. Să presupunem că tabul tab1 are 6 rânduri iar tab2 are 7 rânduri. Rezultatul exemplului de mai jos este un tabel care conține trei coloane și 7 * 6 = 42 de linii.
Nu vom specifica exact unde se află tabela rezultată. Dar poate fi folosit în diferite moduri: poate fi distilat (ÎN TEMP), într-un tabel temporar, acesta poate fi administrat la prelucrarea unui alt agent (în cazul în care prelevarea de probe efectuate sub-interogare), puteți crea un cursor ( „tampon“, cu un pointer la rândul curent) pentru ea, și puteți puneți-l (INTO) într-o variabilă simplă de program (dacă nu este selectată mai mult de o linie).
Rândurile selectate pot fi sortate în funcție de valori ascendente (descendente) într-o coloană (coloane)
În clauza ORDER BY, în loc de numele coloanei, puteți specifica numărul secvenței sale în lista de selecție. Operatorii de mai sus sunt echivalenți.
Introduceți valorile din coloane în variabile: (Deoarece lname este folosit atât ca nume de variabilă, cât și ca nume de coloană, numele coloanei este precedat de un (@)
La un rând selectat poate aplica funcții agregate COUNT (*) - numărul, MAX (coloana) și MIN (coloana) - valoarea maximă și minimă în coloana, USM (coloana) - suma tuturor valorilor dintr-o coloană, AVG (coloana) - valoarea medie coloană.
Introduceți în num variabila numărul de rânduri din tabelul de comenzi în care coloana client_num este 101:
Un exemplu folosind o masă de îmbinare. Salariul mediu este mai mare de 300 (coloana zarplata aparține unuia dintre tabele), cu condiția ca coloanele de la dolvnost să se potrivească în cele două tabele.
Obțineți numărul angajaților și salariul mediu pentru fiecare post de la masa personalului.
O înregistrare echivalentă.
Clauza HAVING impune condiții suplimentare grupului.
Această interogare returnează numerele comenzilor și valoarea medie a sumelor totale din comenzile pentru toate comenzile care au cel puțin două sume licitate.
Adunarea externă a meselor.
Interogarea găsește numele companiilor și numerele de ordine pe care le-au trimis. Dacă compania nu a trimis comenzi, numele său va fi încă selectat, iar numărul de ordine din această linie va fi NULL. (Și dacă am inițiat interogarea fără parametrul OUTER, atunci numele acestor companii nu ar fi incluse deloc în eșantion.)
Operatorii de manipulare a datelor sunt cea mai puternică componentă a SQL.
Următorul exemplu elimină aceleași rânduri din tabelul kadry.
Următorul exemplu schimbă informațiile din rânduri cu valoarea cheii:
Aceeași operație poate fi efectuată utilizând o singură instrucțiune UPDATE care folosește o subchetare:
Exemplul modifică informațiile din rânduri cu valoarea cheii când sunt îndeplinite condițiile. impuse liniilor modificate: