Cum pot conecta două sau mai multe tabele

II) Întrebări despre limbajul SQL

Cum pot specifica rezultatul tuturor coloanelor dintr-un tabel?

Pentru a afișa toate coloanele tabelului, fie listați toate coloanele din clauza SELECT, fie utilizați caracterul "*" în locul listei coloanelor. Următoarea interogare afișează întreaga tabelă FACULTY:







De ce aveți nevoie de aliasuri pentru numele coloanelor? Cum se face acest lucru?

Calificarea numelor coloanelor după numele tabelelor. Numele de coloană poate fi calificat (rafinat) de numele tabelului utilizând următoarea sintaxă:

Rafinarea numelui coloanei este necesară atunci când interogarea utilizează mai multe tabele (vedeți mai târziu), iar diferitele tabele au coloane cu aceleași nume. De asemenea, puteți rafina numele coloanei chiar și atunci când nu este necesar. De exemplu, următoarea interogare este considerată corectă:

SELECT ROOM.Num, ROOM.Seats, ROOM.Floor

3) Rezultatul interogării conține rânduri duplicat? Cum pot șterge rândurile duplicat?

Puteți șterge rândurile de rezultate duplicat folosind clauza DISTINCT sau UNIQUE din clauza SELECT. Această expresie se aplică întregului șir de ieșire, nu unei singure coloane. De exemplu, următoarele două interogări sunt echivalente și oferă o listă cu toate postările disponibile:

SELECT DISTINCT Mesaj SELECT UNIQUE Post

De la profesor; De la profesor;

Cuvântul cheie ALL înseamnă că trebuie salvate duplicate. Această valoare este folosită în mod prestabilit dacă nu sunt specificate cuvintele cheie de mai sus. Următoarele două interogări sunt echivalente:

SELECTAȚI TOATE Postul SELECT Post

De la profesor; De la profesor;

De ce avem nevoie de aliasuri de coloane? Cum se întreabă ei?

Oferă un nume diferit pentru expresia coloanei și acest alias este folosit ca antet de coloană. Fraza AS este opțională. Aliasul redenumește un element din lista de expresii SELECT în contextul întregii interogări. Aliasul poate fi folosit în expresia ORDER BY, dar utilizarea acestuia în alte fraze este interzisă.

De ce se califică coloanele ca nume de tabelă?

Calificarea numelor coloanelor după numele tabelelor. Numele de coloană poate fi calificat (rafinat) de numele tabelului utilizând următoarea sintaxă:

Rafinarea numelui coloanei este necesară atunci când interogarea utilizează mai multe tabele (vedeți mai târziu), iar diferitele tabele au coloane cu aceleași nume. De asemenea, puteți rafina numele coloanei chiar și atunci când nu este necesar. De exemplu, următoarea interogare este considerată corectă:

SELECT ROOM.Num, ROOM.Seats, ROOM.Floor

Ce este o conexiune externă? Formulați și scrieți cererea cu o conexiune externă.







Exteriorul se alătură. O conexiune externă extinde capacitățile unei conexiuni convenționale. Conexiune externă returnează toate rândurile care satisfac condiția compusului, precum și un șir de tabele pentru care nu a fost nici un rând de la o altă masă, care ar satisface condiția de conectare. Astfel de corzi nu sunt returnate printr-o conexiune normală. Pentru a produce un tabele de conectare A extern și B să aibă ca rezultat toate rândurile din tabelul A, operatorul trebuie să se aplice o conexiune externă (+) pentru toate coloanele din tabelul B. Pentru toate rândurile din tabelul A pentru care nu a existat nici un rând de potrivire a tabelului B , Oracle returnează NULL pentru toate acele expresii din lista SELECT care utilizează coloane din B. în acest exemplu, vom obține o listă de facultăți și departamente, și nume de departamente sunt prezente chiar și în cazul în care acestea nu au facultățile - în acest caz, în loc de un nume departament Valoarea de ieșire NULL:

SELECT FACULTY.Name AS FacName, DEPARTMENT.Name AS DepName, DEPARTMENT.Fund AS DepFund

DE LA FACULTATEA, DEPARTAMENTUL

Unde FACULTY.FacNo = DEPARTMENT.FacNo (+);

Cum pot conecta două sau mai multe mese?

Multe mese. Dacă specificați o listă de tabele în clauza FROM, atunci toate rândurile din prima tabelă sunt concatenate cu toate rândurile din tabelul doi. De exemplu, interogarea:

DE LA FACULTATEA, DEPARTAMENTUL;

efectuează concatenarea tuturor rândurilor din tabelul FACULTY cu toate rândurile tabelului DEPARTAMENT. Această interogare este echivalentă cu funcționarea produsului cartezian al unei algebre relationale.

Participați la două mese. Pentru a obține un rezultat semnificativ din punct de vedere semantic, este necesar să combinăm liniile facultăților cu acele rânduri de scaune care aparțin acestor facultăți.

Folosind coloana FacNo prezentă în ambele tabele, puteți conecta facultățile numai la departamentele lor utilizând condiția clauzei WHERE, așa cum se arată în următoarea interogare:

DE LA FACULTATEA, DEPARTAMENTUL

Unde FACULTY.FacNo = DEPARTMENT.FacNo;

O astfel de conexiune se numește equi-conexiune. deoarece se face prin egalitatea valorilor celor două coloane din tabele diferite.

Alăturați-vă la multe mese Puteți conecta cât mai multe mese de care aveți nevoie, de exemplu, în următoarea interogare, sunt afișate facultățile cu profesorii lor:

SELECT FACULTY.Name, TEACHER.Name

DE LA FACULTATEA, DEPARTAMENTUL, PROFESORUL

WHERE FACULTY.FacNo = DEPARTMENT.FacNo ȘI DEPARTMENT.DepNo = TEACHER.DepNo;

Rețineți că coloanele din tabelul DEPARTAMENT nu sunt afișate, sunt utilizate numai pentru conectarea facultăților cu profesorii. (Operatorii logici vor fi discutate mai târziu).

Specificați coloanele necesare. Când se utilizează mai multe table, puteți specifica coloanele ca coloane din tabele diferite. Dacă este necesar, numele coloanelor pot fi specificate prin numele tabelelor. Numele de coloane pot fi, de asemenea, redenumite folosind aliasuri, ca în următoarea interogare:

SELECT FACULTY.Name AS Numele Facultatii,

DEPARTMENT.Name AS Department_name,

DEPARTMENT.Fund AS Departamentul_fund

DE LA FACULTATEA, DEPARTAMENTUL

Unde FACULTY.FacNo = DEPARTMENT.FacNo;

Conectare prin condiție diferită de egalitate. Equi-join utilizează operatorul de egalitate (=) din clauza WHERE pentru a se alătura tabelelor, alți operatori de relaționare sunt utilizați în conexiunile non-equi. De exemplu, în exemplul următor, există departamente care au un fond de finanțare care depășește fondul de finanțare al facultății sale:

SELECT DEPARTMENT.Name, DEPARTMENT.Fund

DE LA FACULTATEA, DEPARTAMENTUL

CARE FACULTY.Fund

Rețineți că, deși conectăm două tabele pentru a obține răspunsul necesar, totuși, numai coloanele din tabelul DEPARTAMENT intră în rezultat.







Articole similare

Trimiteți-le prietenilor: