Aliasuri pentru coloane și tabele (sql - lecție din curs)

Aliasuri pentru coloane și tabele (sql - lecție din curs)

În unele situații, coloanele și tabelele MySQL sunt mult mai ușor de accesat prin alte nume. Să luăm în considerare această acțiune pe un exemplu de bază de date pentru ordinea biletelor de avion.







Informațiile despre zborurile propuse de compania aeriană sunt prezentate sub forma a două mese - zbor și oraș. Fiecare intrare din tabelul de zbor reflectă informații despre un anumit zbor: punctul de plecare (coloana de origine), destinația (coloana destinație) și data și ora plecării, tipul aeronavei, numărul zborului și prețul biletului (coloanele rămase). În tabelul orașului se află o listă a tuturor orașelor în care se efectuează zboruri. Astfel, în coloanele originalcityid și destinationcityid ale mesei de zbor, vor fi localizate numai identificatorii care fac referire la înregistrările din tabelul de oraș.

Pentru a obține o listă de zboruri cu puncte de plecare, trebuie să executați următoarea interogare:

Cererea de obținere a unei liste cu zboruri cu destinație este similară celei anterioare:

Este logic să presupunem că pentru retragerea zborurilor cu ambele puncte - plecare și destinație - trebuie să implementați cererea prezentată mai jos.

Cu toate acestea, de îndată ce încercați să faceți acest lucru, phpMyAdmin va afișa o eroare:
# 1066 - Nu este un tabel / alias unic: "oraș".

De ce se întâmplă acest lucru? Aruncați-vă așteptările și încercați să aflați ce înseamnă într-adevăr interogarea. Cere serverului MySQL să combine mesele de zbor. oraș și oraș. Sa încercat să se atașeze de două ori același tabel și rezultă un mesaj de eroare.







În plus, există o lipsă de logică în interogare. El încearcă să afișeze numărul zborului, numele orașului și numele orașului (din nou de două ori) pentru toate înregistrările primite, care corespund coloanelor origincityid și destinationcityid cu id-ul tabelului de oraș. Cu alte cuvinte, id-ul tabelului de oraș și coloanele originalcityid și destinationcityid trebuie să fie aceleași. Chiar dacă cererea ar fi funcționat, ar rezulta o listă a tuturor zborurilor în care punctele de plecare și destinațiile coincid. Este puțin probabil că va exista cel puțin un zbor care să corespundă acestei descrieri, dacă nu este vorba despre compania aeriană care oferă zboruri de vizitare a orașelor.

Trebuie să veniți cu o altă modalitate de reutilizare a mesei orașului. Permite MySQL să scape de confuzie. Ar trebui să returnați două intrări diferite din tabel pentru fiecare rezultat: unul pentru locația de plecare și celălalt pentru destinație. Două copii ale mesei orașului (una după origine și cealaltă în funcție de destinație) ar simplifica foarte mult situația. Dar de ce se angajează în susținerea a două liste diferite cu aceleași orașe? Puteți rezolva problema prin specificarea a două aliasuri unice (nume temporare) pentru tabelul de oraș din interogare.

Dacă după numele tabelului din fragmentul de interogare SELECT. începând cu cuvântul cheie FROM. scrieți alias AS, atunci veți primi un nume temporar, pe care îl puteți referi oriunde în interogare. Consultați prima mu cod emitent numărul de zbor și locul de plecare, și indică originea de tabel alias oraș:

Solicitare funcționează ca înainte, iar rezultatele vor rămâne același, doar acum aveți posibilitatea de a înlocui numele mesei lungi mai scurte. Dacă ați folosit pseudonimele f și o în loc de zbor și respectiv de origine, atunci înregistrarea ar fi redusă deja substanțial.

Să revenim la interogarea problemei. Acum, de două ori, referindu-vă la tabelul de oraș folosind diferite pseudonime, puteți efectua un triple join (în care cele două tabele sunt de fapt unul) și obțineți rezultatul dorit:

Aliasurile de alias pentru coloane sunt definite în mod similar. În cazul nostru, acest lucru va ajuta la distingerea coloanelor de nume din tabelul rezumativ:

Utilizați această abordare pentru ao adăuga la proiectul dvs. Încercați să implementați această idee pe cont propriu.







Trimiteți-le prietenilor: