· În câmpul din stânga al ferestrei principale, selectați elementul "Solicitări"
· În câmpul "Sarcini", selectați elementul "Creați o interogare în modul de proiectare"
· În fereastra care se deschide, selectați tabelul "Student", din care vom selecta datele
· Faceți clic pe butoanele "Adăugați", "Închideți".
Se deschide designerul mesei. Câmpul de sus afișează tabelele din care vor fi prelevate datele și legăturile dintre acestea. Coloanele de ieșire ale tabelelor sunt configurate în câmpul inferior.
· Faceți dublu clic pe câmpurile obligatorii pentru a adăuga coloane în câmpul de jos.
· Pentru a executa interogarea, faceți clic pe butonul "Executare interogare" din bara de instrumente. În partea de sus a proiectantului de interogare, este afișată zona de ieșire a rezultatelor, în care sunt afișate toate intrările din tabelul Student
Pentru a sorta numele elevilor în ordine alfabetică, trebuie să mutați indicatorul mouse-ului în câmpul "Sortare" din coloana "Nume", faceți dublu clic pe butonul stâng al mouse-ului și selectați "Ascendent" din lista derulantă. Desigur, trebuie să re-executăm interogarea.
Dacă adăugați sortarea după grupuri, veți obține o listă sortată după grupuri, iar în cadrul grupului studenții sunt sortați după nume. Întotdeauna, coloana din stânga are prioritate la sortare.
Pentru a schimba ordinea coloanelor, trebuie să faceți clic pe butonul stâng al mouse-ului în antet (linia gri) a tabelului de coloane, fără al elibera, să mutați indicatorul mouse-ului în zona antetului celeilalte coloane și să eliberați butonul mouse-ului.
Dacă suntem interesați de studenții unui singur grup în câmpul "Criterion" din coloana "Grup", introduceți codul grupului dorit. Rulați interogarea. Rețineți că designerul interogării a înfășurat automat șirul specificat în apostrofurile "AK1-11".
Pentru a selecta elevii din grupuri începând cu substringul "AK", trebuie să specificați în câmpul criteriului pentru coloana "grup" linia ca "АК *"
Locul simbolului "*" poate fi de 0 sau mai multe caractere.
Pentru a găsi studenți cu numele "Ivan", folosim următoarea expresie
ca '* Ivan *' Observați spațiile dintre "*" și numele. Dacă acest lucru nu se face cu condiția, toți "Ivan Ovah" și "Ivan Ovichi" vor cădea.
Eliminați toate condițiile.
Am stabilit condiția pentru data nașterii> = 11.11.1981. Rulați interogarea. Rețineți că designerul interogării a adăugat automat simbolul "#" la dreapta și la stânga datei.
Adăugați această condiție în câmpul "OR". Rulați interogarea.
Primiți studenți din grupul "AK1-11" cu data nașterii> = # 11.11.1981 # precum și toți elevii din grupul "AK3-11". Cum să înțelegeți ce va rezulta din interogare?
Faceți clic pe butonul din bara de instrumente "activați / dezactivați vizualizarea de proiectare".
Cele două zone inferioare sunt înlocuite cu un câmp text cu o interogare în SQL.
SELECT "Grup", "Număr de etichete", "Nume", "Data nașterii" DIN "Student" AS "Student" WHERE (" AK3-11 ') ORDINEA DE "Grup" ASC, "Nume" ASC
Când apăsați butonul "executați", designerul de interogare generează o astfel de linie și o transmite către driverul DBMS. Conducătorul îl transferă la serverul DBMS (dacă este necesar, prin rețea). Rezultatele interogării sunt transmise prin driverul DBMS către designer, care le afișează. SQL este limba standard pentru toate bazele de date. Astfel, puteți trece cu ușurință la un alt DBMS al unui alt producător. Din păcate, unele construcții sunt scrise indistinct în standard, rezultând dialecte ale limbajului SQL. Deci, atunci când schimbați un DBMS, de obicei aveți nevoie de testare și de a face unele modificări.
Dar înapoi la întrebarea noastră. În primul rând, puteți observa că pentru criteriile de selecție care nu au o relație de operare, este utilizată relația "egală". În al doilea rând, condițiile de selecție specificate în diferite coloane sunt legate prin operația logică "ȘI". În al treilea rând, condițiile în diferite linii de condiții sunt legate de operația logică "SAU". Sunt selectate numai înregistrările pentru care este îndeplinită condiția specificată în secțiunea "WHERE".
Dacă este necesar, selectați elevii din grupurile "AK1-11" și "AK3-11" cu data nașterii mai mare decât cea dată, corectați condiția
SELECT "grup", "număr de etichete", "nume", "data nașterii" DE LA "student" AS "student" WHERE (" 'AK3-11')) ORDERE DE "grup" ASC, "Nume" ASC
Dacă faceți clic din nou pe butonul "porniți / opriți proiectarea". Constructorul va încerca să traducă condiția dată într-o formă tabelară. Dar există cazuri de conversie incorectă.
Ștergeți toate condițiile din grup.
Acum vom selecta toți elevii cu o dată de naștere în intervalul dat. Trebuie să obținem condiție
"Data nașterii"> = ȘI "Data nașterii"<
Pentru a crea această condiție în constructor, adăugați încă un câmp "Data nașterii" și specificați a doua condiție din acesta.
Pentru a împiedica apariția celei de-a doua coloane a coloanei "Data nașterii" în rezultatele interogării, debifați "Visible" în coloana duplicat.
Eliminați toate condițiile.
Puteți aplica diferite valori ale câmpurilor, de exemplu, dacă vrem să obținem anul nașterii fiecărui elev, trebuie să introducem expresia în locul denumirii câmpului:
ANUL ("Data nașterii"). Rețineți că numele câmpului este inclus în ghilimele. Nu uitați să puneți marca "Vizibilă"
Deci, în rezultatele interogării din rubrica noii noastre coloane, trimitem o expresie nespecificată și un șir semnificativ, introduceți textul dorit în câmpul "alias" din coloana noastră. Apropo, atunci când se utilizează rezultatele unei interogări în alta, trebuie specificate pseudonime pentru coloanele calculate.
Luna poate fi calculată utilizând funcția MONTH ("Data nașterii")
De asemenea, puteți specifica expresii mai complexe. Vom dedica vârsta studenților noștri la un moment dat. Acest lucru se poate face în două moduri:
ANUL (ANUL ()) - ANUL ("Data nașterii") - luați anul de la data curentă și scadeți anul din anul de naștere.
DATEDIFF ('an', 'Data nașterii', ACUM ()) - Folosim o funcție specială. Aceeași funcție vă permite să calculați durata unui interval în zile: DATEDIFF ('zi', 'Data nașterii', ACUM ())
O listă completă a funcțiilor este furnizată în aplicația "Funcții încorporate și proceduri memorate Hsqldb".
Când creați o listă derulantă, adesea trebuie să lipiți împreună valori din mai multe coloane ale tabelului. De exemplu, în cazul în care există nume de omologi, va trebui să adăugați un număr la numele cărții de evidență a elevului folosind "||"
Deci, amintiți-vă regulile:
· Constantele de coarde sunt închise în apostrofele "Ivanov"
· Numele tabelelor și coloanelor sunt cuprinse în citate "Nume". Urmăriți cu atenție spațiile și registrul simbolurilor.
· Datele sunt între caracterele "#": # 11.11.1981 #
· Constantele numerice sunt scrise, fără semne: 12345
Deschideți tabelul "elev" și ștergeți data de naștere a elevilor. Astfel de valori sunt numite "valori NULL". Salvați înregistrarea.
Realizați cererea noastră. Rezultatul expresiei a fost un șir gol.
Încercați să setați condiția la data respectivă. Înregistrarea cu "NULL" nu satisface nici condiția "<= #01.01.1980#» ни «>= # 01/01/1980 # ", nici nu este ciudat"<> # 01.01.1980 # ".
Pentru a verifica valoarea NULL, utilizați termenii "ESTE EMPTY" și "NOT IS EMPTY"
Vom compila o listă de grupuri în care există studenți născuți în 1980 și nu ne interesează numele complet al studenților, ci doar faptul că există studenți în grup.
Creați o interogare nouă în modul de proiectare. Adăugați masa Student. Adăugați coloanele "Grup" și "Data nașterii". În coloana a doua, organizați calculul expresiei "ANUL (" Data nașterii "), setați criteriul de selecție 1980, debifați" Vizibil ".
După ce interogarea este executată, primim:
De ce grupul "CM1-11" a intrat pe listă de 3 ori? Faptul este că în acest grup trei copii se nasc din 1980. Să scapi de repetare? Faceți clic pe butonul "Valori unice" din bara de instrumente (în partea dreaptă). Dacă butonul este încastrat, aceleași rânduri din selecție sunt excluse.
Rulați interogarea. Acum nu există replici, iar grupurile au fost sortate în ordine alfabetică.
Trebuie să retragem numele complet al profesorilor și numele subiecților pentru toate examinările grupului respectiv.
Particularitatea acestei cereri este ca numele profesorului, numele subiectului și cifrul grupului să fie în tabele diferite.
Creați o interogare nouă în modul de proiectare. Adăugați tabelele "Profesor", "Listă" și "Subiect". Selectăm tabelul "Declarație", pentru că are un cifru de grup, dar cel mai important lucru este că câmpurile din acest tabel se referă la înregistrările din tabelele subiectului și ale profesorilor.
Rețineți că Designerul de interogări a adăugat automat linkuri între tabele utilizând link-urile pe care le-am creat în linker. Dacă tabelele adăugate nu au nicio legătură, atunci nu ați adăugat o legătură între tabele sau tabelele nu sunt legate direct, atunci trebuie să adăugați un tabel prin care tabelele noastre sunt legate, deși nu avem nevoie de un singur câmp din acest tabel.
Dar înapoi la întrebarea noastră. Adăugați coloane:
· "Nume" din tabelul "Profesor"
· «Nume» din tabelul «Subiect»
· "Grup" din tabelul "Declarație"
Specificați cifrul de grup în câmpul "Criterion" din coloana "Grup" și executați interogarea.
Nu uitați să introduceți mai întâi datele în tabele.
1. Creați o listă de grupuri pentru o anumită facultate.
2. Determinați lista de subiecte (în ordine alfabetică) acceptată de profesorul prestabilit.
3. Rezultă numerele declarațiilor și datele examenelor, în semestrul de primăvară al anului respectiv.
4. Creați o listă de grupuri care au promovat examenul unui anumit profesor într-o anumită lună.
5. Faceți o listă de cadre didactice (în ordine alfabetică) care au luat examenele în anul curent.
Să presupunem că trebuie să deducem scorurile tuturor elevilor din matematică, dar nu pentru toți elevii există o înregistrare în tabelul de rezultate.
Din păcate, în constructorul «OpenOffice. org 3.0 "într-o singură interogare, o astfel de problemă nu a putut fi rezolvată. Pregătiți o interogare auxiliară care formează o listă de clase de matematică.
Creați o interogare nouă în modul de proiectare. Adăugați tabelele "Rezultat" și "Declarație". Adăugăm coloanele "Student" și "Evaluare" din tabelul "Rezultat". Adăugăm coloana "Subiect" din tabelul "Declarație". Coloana "Evaluare" dă pseudonimul "Matematică". Pentru coloana Subiect, setăm criteriile de selecție egale cu codul matematic (vezi tabelul "Subiect"). Valorile din coloana "Subiect" sunt identice cu cele pe care le cunoaștem, astfel încât vom elimina marca "Vizibilă".
Vom salva această interogare sub numele de "Evaluarea matematicii".
Creați o interogare nouă în modul de proiectare. Adăugăm tabelul "Student". Apoi selectați butonul "Solicitări" și adăugați interogarea noastră auxiliară "Evaluarea matematicii". Adesea, o interogare complexă poate fi împărțită convenabil în mai multe întrebări auxiliare simple și apoi utilizată în interogarea principală. De obicei, timpul de execuție nu se schimbă de la asta. Înainte de execuție, cererea generală este colectată și transferată în DBMS, ceea ce o optimizează.
Atenție vă rog! Tabelele trebuie să fie legate. Pentru a face acest lucru, să ia cursorul mouse-ului în câmpul „numărul zachetke“ din tabelul „Student“, faceți clic pe butonul din stânga al mouse-ului și fără a elibera muta cursorul mouse-ului la „Student“ din sub-interogare, și apoi eliberați butonul mouse-ului.
Adăugăm din tabelul "Student" coloanele "№ din cartea de înregistrare a elevului" și "Numele". Și coloana "Informatică" din interogarea auxiliară.
Dacă acum îndepliniți această solicitare, obținem numele studenților care au trecut matematica și notele lor. Faptul este că tipul de conexiune implicit este "Intrare internă". Cu această conexiune, sunt înregistrate numai înregistrări, în care valorile din câmpurile specificate sunt aceleași. Pentru a obține o listă a tuturor studenților, faceți dublu clic pe link-urile dintre tabele și selectați "Right" din lista verticală "Type", faceți clic pe "OK".
Rulați interogarea. Acum obținem o listă completă de elevi și scoruri de matematică pentru acei studenți care au trecut-o. Restul coloanei "Matematică" este goală. Dacă nu a funcționat, încercați "Unificarea stângă". Ceea ce se alăture pentru alegere nu depinde de localizarea tabelelor în fereastra de mijloc, ci de ordinea în care au fost adăugate. Și încă un lucru, dacă indiciul din partea de jos a dialogului "Proprietăți de comunicare" nu se potrivește cu rezultatul, nu-ți închipui ochii.
O solicitare nu a reușit să rezolve această problemă, nu numai pentru că designerul de interogări din "OpenOffice. org 3.0 nu digera două îmbinări dreapta / stânga într-o singură interogare.
Salvați interogarea ca "student-matematică" și eliminați copia (Ctrl + C, Ctrl + V în fereastra programului principal). Să experimentăm cu asta.
Încercați să setați condiția pe scorul = 5 în coloana "Informatică". Orice condiție din tabelul atașat va întrerupe toate celulele goale. Vă reamintesc că valoarea NULL nu satisface nici o operație logică. Pentru a păstra elevii în raport care nu au trecut matematica, puteți seta "ESTE EMPTY" în câmpul "sau". Dar, la fel, din lista listei vor dispărea studenții care au primit alte note. Aceasta nu este o eroare de program, ci rezultatul criteriului de selecție stabilit de noi. Nu-mi place, creați cu îndrăzneală solicitări auxiliare. De obicei, sistemul DBMS le optimizează în mod normal. Apropo, uneori, o interogare cu o uniune dreapta sau stânga este efectuată chiar mai repede decât interogările cu un intern intern. Uneori DBMS alege o secvență incorectă de executare a interogării. Utilizând legătura dreaptă forțează DBMS să execute interogarea într-o ordine diferită, ca rezultat, interogarea rulează de mai multe ori mai repede.
Acum, să presupunem că trebuie să găsim studenți care nu au trecut examenul de matematică. Se pare că este mai ușor.
Dar rezultatul unei astfel de interogări este o listă goală. Faptul este că pentru studenții care nu au promovat examenul, nu numai valoarea din câmpul "Evaluare" este goală, dar nu există nicio înregistrare. Este dificil să găsești o pisică neagră într-o cameră întunecată, mai ales dacă nu este acolo.
toate camerele și excludeți de pe lista camerelor unde este pisica.
Pentru a ne rezolva problema, trebuie să luăm o listă completă de studenți din tabelul "Student" și să excludem studenții care au note de la ei. Luați cererea noastră "student-matematică" și setați coloana "Matematică" la criteriul "ESTE EMPTY"
Nu întotdeauna pentru rezolvarea problemelor lipsesc capacitățile designerului interogării. În acest caz, ar trebui să faceți clic pe butonul "permiteți / dezactivați vizualizarea de proiectare" și mai multe, nu treceți la modul de designer de interogare. Constructorul vă va reconstrui interogarea, așa cum o dorește. Pentru a deschide o astfel de interogare, utilizați comanda "Editați în modul SQL". În plus, interogările SQL sunt principala modalitate de a accesa baza de date din C, Pascal, Java ...
Să luăm în considerare formele de bază ale interogărilor: