Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Näkymät | Joitakin Lisäaiheita
SQL-optimointi ja kyselyominaisuudet

Näkymät

Pyyhkäise näyttääksesi valikon

Edellisessä luvussa mainittiin objekti nimeltä näkymä käyttäjäoikeuksista puhuttaessa. Tarkastellaan nyt tätä objektia tarkemmin.

Näkymä SQL:ssä on virtuaalinen taulu, joka perustuu SQL-kyselyn tulosjoukkoon. Se sisältää rivejä ja sarakkeita kuten oikea taulu, ja näkymän kentät ovat peräisin yhdestä tai useammasta tietokannan oikeasta taulusta.
Näkymiä käytetään useista syistä, kuten monimutkaisten kyselyiden yksinkertaistamiseen, tietoturvan parantamiseen rajoittamalla pääsyä tiettyihin tietoihin sekä tietojen esittämiseen tietyssä muodossa.

Näkymien keskeiset ominaisuudet

  • Virtuaalinen taulu: näkymä ei tallenna tietoja fyysisesti. Se muodostaa tietonsa tauluista, joihin se perustuu (ns. perustaulut);
  • Monimutkaisten kyselyiden yksinkertaistaminen: näkymät voivat yksinkertaistaa monimutkaisia SQL-kyselyitä kapseloimalla ne yhteen näkymään. Tämä helpottaa monimutkaisten yhdistelyjen ja aggregaatioiden käsittelyä;
  • Tietoturva: näkymät voivat rajoittaa pääsyä tiettyihin riveihin tai sarakkeisiin, mikä parantaa tietoturvaa. Käyttäjille voidaan antaa oikeudet näkymään ilman oikeuksia perustauluihin;
  • Yhtenäisyys: näkymät voivat tarjota yhtenäisen, muuttumattoman rajapinnan, vaikka taustalla oleva tietokantarakenne muuttuisi.

Toteutus

Luodaan näkymä nimeltä account_activity_view taulujen BankAccounts ja UserLogs pohjalta, joka näyttää tilinumeron, tilinomistajan nimen, saldon sekä viimeisimmän tilillä tehdyn toimenpiteen.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
Kyselyn kuvaus
expand arrow
  1. CREATE VIEW account_activity_view AS

    Tämä lause luo näkymän nimeltä account_activity_view, joka yhdistää bankaccounts-taulun tiedot ja userlogs-taulun viimeisimmän tapahtuman. Näkymä tarjoaa yhteenvedon tilinhaltijoista, heidän nykyisestä saldostaan ja viimeisimmästä toiminnastaan.

  2. Pääasiallinen SELECT-lause:

    • ba.accountnumber: Valitsee tilinumeron bankaccounts-taulusta.
    • ba.accountholder: Valitsee tilinhaltijan nimen bankaccounts-taulusta.
    • ba.balance: Valitsee saldon bankaccounts-taulusta.
    • ul.action AS latest_action: Valitsee viimeisimmän toiminnon userlogs-taulusta ja nimeää sen latest_action.
    • ul.timestamp AS latest_action_time: Valitsee viimeisimmän toiminnon aikaleiman ja nimeää sen latest_action_time.
  3. FROM-lause:

    • bankaccounts ba: Päätauluna toimii bankaccounts, joka nimetään aliaksella ba.
  4. LEFT JOIN-lause:

    • Alikysely hakee kunkin tilin viimeisimmän toiminnon.
    • SELECT DISTINCT ON (accountnumber): Varmistaa yksilölliset tilinumerot, valiten vain viimeisimmän rivin tiliä kohden.
    • ORDER BY accountnumber, timestamp DESC: Järjestää rivit tilinumeron ja aikaleiman mukaan laskevassa järjestyksessä, jotta viimeisin toiminto saadaan esiin.
  5. Liitosehto:

    • ul ON ba.accountnumber = ul.accountnumber: Liittää alikyselyn tuloksen bankaccounts-tauluun tilinumeron perusteella.

Nyt voit hyödyntää tätä näkymää muissa kyselyissä ilman, että sinun tarvitsee luoda monimutkaista liitoskyselyä uudelleen, vaan voit käyttää luotua näkymää kuten tavallista taulua.

Note
Huomio

Vaikka näkymää voidaan käyttää kuten tavallista taulua, se ei ole fyysinen taulu! Näkymän dataa ei tallenneta levylle. Sen sijaan aina kun näkymää käytetään, sen kysely suoritetaan ja tuloksena saatua dataa käytetään pääkyselyssä.

question mark

Mikä seuraavista väittämistä kuvaa parhaiten näkymien tietoturvaan liittyvää ominaisuutta?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Näkymät

Edellisessä luvussa mainittiin objekti nimeltä näkymä käyttäjäoikeuksista puhuttaessa. Tarkastellaan nyt tätä objektia tarkemmin.

Näkymä SQL:ssä on virtuaalinen taulu, joka perustuu SQL-kyselyn tulosjoukkoon. Se sisältää rivejä ja sarakkeita kuten oikea taulu, ja näkymän kentät ovat peräisin yhdestä tai useammasta tietokannan oikeasta taulusta.
Näkymiä käytetään useista syistä, kuten monimutkaisten kyselyiden yksinkertaistamiseen, tietoturvan parantamiseen rajoittamalla pääsyä tiettyihin tietoihin sekä tietojen esittämiseen tietyssä muodossa.

Näkymien keskeiset ominaisuudet

  • Virtuaalinen taulu: näkymä ei tallenna tietoja fyysisesti. Se muodostaa tietonsa tauluista, joihin se perustuu (ns. perustaulut);
  • Monimutkaisten kyselyiden yksinkertaistaminen: näkymät voivat yksinkertaistaa monimutkaisia SQL-kyselyitä kapseloimalla ne yhteen näkymään. Tämä helpottaa monimutkaisten yhdistelyjen ja aggregaatioiden käsittelyä;
  • Tietoturva: näkymät voivat rajoittaa pääsyä tiettyihin riveihin tai sarakkeisiin, mikä parantaa tietoturvaa. Käyttäjille voidaan antaa oikeudet näkymään ilman oikeuksia perustauluihin;
  • Yhtenäisyys: näkymät voivat tarjota yhtenäisen, muuttumattoman rajapinnan, vaikka taustalla oleva tietokantarakenne muuttuisi.

Toteutus

Luodaan näkymä nimeltä account_activity_view taulujen BankAccounts ja UserLogs pohjalta, joka näyttää tilinumeron, tilinomistajan nimen, saldon sekä viimeisimmän tilillä tehdyn toimenpiteen.

1234567891011121314151617181920212223242526
-- Create a view that shows account details along with their latest action CREATE OR REPLACE VIEW account_activity_view AS SELECT ba.account_number, -- Select the account number from the bankaccounts table ba.account_holder, -- Select the account holder's name from the bankaccounts table ba.balance, -- Select the balance from the bankaccounts table ul.action AS latest_action, -- Select the latest action from the userlogs table (alias as latest_action) ul.timestamp AS latest_action_time -- Select the timestamp of the latest action (alias as latest_action_time) FROM BankAccounts ba -- Main table: bankaccounts LEFT JOIN ( -- Subquery to get the most recent action for each account SELECT DISTINCT ON (account_number) account_number, -- Select the account number action, -- Select the action timestamp -- Select the timestamp FROM UserLogs ORDER BY account_number, -- Order by account number timestamp DESC -- Order by timestamp in descending order to get the latest action ) ul ON ba.account_number = ul.account_number; -- Join the subquery result with bankaccounts on account number -- Get data from the view SELECT * FROM account_activity_view;
Kyselyn kuvaus
expand arrow
  1. CREATE VIEW account_activity_view AS

    Tämä lause luo näkymän nimeltä account_activity_view, joka yhdistää bankaccounts-taulun tiedot ja userlogs-taulun viimeisimmän tapahtuman. Näkymä tarjoaa yhteenvedon tilinhaltijoista, heidän nykyisestä saldostaan ja viimeisimmästä toiminnastaan.

  2. Pääasiallinen SELECT-lause:

    • ba.accountnumber: Valitsee tilinumeron bankaccounts-taulusta.
    • ba.accountholder: Valitsee tilinhaltijan nimen bankaccounts-taulusta.
    • ba.balance: Valitsee saldon bankaccounts-taulusta.
    • ul.action AS latest_action: Valitsee viimeisimmän toiminnon userlogs-taulusta ja nimeää sen latest_action.
    • ul.timestamp AS latest_action_time: Valitsee viimeisimmän toiminnon aikaleiman ja nimeää sen latest_action_time.
  3. FROM-lause:

    • bankaccounts ba: Päätauluna toimii bankaccounts, joka nimetään aliaksella ba.
  4. LEFT JOIN-lause:

    • Alikysely hakee kunkin tilin viimeisimmän toiminnon.
    • SELECT DISTINCT ON (accountnumber): Varmistaa yksilölliset tilinumerot, valiten vain viimeisimmän rivin tiliä kohden.
    • ORDER BY accountnumber, timestamp DESC: Järjestää rivit tilinumeron ja aikaleiman mukaan laskevassa järjestyksessä, jotta viimeisin toiminto saadaan esiin.
  5. Liitosehto:

    • ul ON ba.accountnumber = ul.accountnumber: Liittää alikyselyn tuloksen bankaccounts-tauluun tilinumeron perusteella.

Nyt voit hyödyntää tätä näkymää muissa kyselyissä ilman, että sinun tarvitsee luoda monimutkaista liitoskyselyä uudelleen, vaan voit käyttää luotua näkymää kuten tavallista taulua.

Note
Huomio

Vaikka näkymää voidaan käyttää kuten tavallista taulua, se ei ole fyysinen taulu! Näkymän dataa ei tallenneta levylle. Sen sijaan aina kun näkymää käytetään, sen kysely suoritetaan ja tuloksena saatua dataa käytetään pääkyselyssä.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6
some-alt