SQL is ons alles

Zoals je waarschijnlijk al vermoedt, kunnen alle opdrachten aan de SQL-server worden gegeven via SQL-query's. Alles.

Deze teams zijn officieel verdeeld in 4 groepen:

  • verklaringen voor gegevensdefinitie (Data Definition Language, DDL ):

    • CREATE maakt een database-object (database zelf, tabel, weergave, gebruiker, enzovoort)
    • ALTER verandert een object
    • DROP verwijdert een object
  • operatoren voor gegevensmanipulatie (Data Manipulation Language, DML ):

    • SELECT selecteert gegevens die aan bepaalde voorwaarden voldoen
    • INSERT voegt nieuwe gegevens toe
    • UPDATE wijzigt bestaande gegevens
    • DELETE verwijdert gegevens
  • operators voor gegevenstoegangsdefinitie (Data Control Language, DCL ):

    • GRANT verleent een gebruiker (groep) machtigingen om bepaalde bewerkingen op een object uit te voeren
    • REVOKE trekt eerder verleende machtigingen in
    • DENY stelt een verbod in dat voorrang heeft op een vergunning
  • Transaction Control Language ( TCL ) verklaringen :

    • COMMIT past een transactie toe
    • ROLLBACK draait alle wijzigingen terug die zijn aangebracht in de context van de huidige transactie
    • SAVEPOINT verdeelt een transactie in kleinere secties

En op de eerste twee niveaus hebben we alleen varianten van de SELECT-instructie bestudeerd. Stel je voor hoeveel interessante dingen ons in de toekomst te wachten staan.

Maar we bereiden ons hier vooral voor op Java-programmeurs, dus we zullen die scenario's bestuderen die je zeker op het werk zult tegenkomen.

De systeembeheerder van het project zal hoogstwaarschijnlijk alle databases aanmaken, maar u zult beslist zelf vele malen een selectie uit de data moeten maken.

Bovendien zal uw code soms niet alle gegevens naar de database schrijven of op de verkeerde manier schrijven, dus u zult er vaak met pennen in moeten klimmen om te zien wat daar daadwerkelijk is opgeslagen.

Laten we de dingen die we in vorige colleges hebben aangeroerd nog eens overlopen.

Een schema maken in een database

Om een ​​nieuw schema in het DBMS te maken, moet u de volgende opdracht uitvoeren:

CREATE SCHEMA Name;

Dit is de gemakkelijkste optie. Ook kunt u bij het maken van een nieuw schema het gegevenscoderingsformaat en andere parameters opgeven.

Als u het schema wilt verwijderen, maar niet zeker weet of het bestaat, voert u de volgende opdracht uit:

DROP SCHEMA IF EXIST Name;

Je zult deze commando's vaak zien in bestanden met back-ups van verschillende databases, daarom breng ik ze hier.

Het huidige schema selecteren

Als u veel schema's in uw DBMS heeft, kan het gemakkelijk gebeuren dat verschillende schema's dezelfde tabellen hebben. Om verwarring te voorkomen, kunt u twee dingen doen:

  • Plaats altijd de schemanaam voor de tabelnaam
  • Geef het standaardschema op

Laten we een query schrijven die gegevens uit de gebruikerstabel selecteert , die zich in het testschema bevindt . Het zal er ongeveer zo uitzien:

SELECT * FROM test.user;

Dit is simpelweg onmisbaar als u meerdere tabellen uit verschillende schema's in één query moet samenvoegen (JOIN).

Trouwens, in de Java-taal doen we vaak iets soortgelijks: als we in de code klassen met dezelfde naam uit verschillende pakketten moeten gebruiken, voegen we de pakketnaam toe voor de klassenaam.

De tweede manier is om het standaardschema op te geven . Als de query een tabelnaam opgeeft maar geen schema, wordt het standaardschema gebruikt. Gebruik hiervoor de USE-instructie :

USE name - schemes;

Laten we de vorige query herschrijven met behulp van de USE-instructie:

USE test;
SELECT * FROM user;

Een weergave maken

Naast tabellen met echte gegevens, kunt u met SQL zoiets als virtuele tabellen opslaan, waar gegevens uit echte tabellen worden gehaald. Dergelijke virtuele tabellen worden VIEW genoemd.

Zo'n tabel kan geen echte gegevens opslaan en elke keer dat deze wordt geopend, haalt het gegevens uit echte tabellen. De inhoud van zo'n VIEW wordt gespecificeerd met behulp van een SQL-query.

U kunt een VIEW maken van elke SELECT-query met een opdracht als:

CREATE VIEW Name AS
SELECT-request;
Laten we een query schrijven die een virtuele public_employee-tabel maakt op basis van de werknemerstabel, waar de salarisinformatie van de werknemer wordt verborgen:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

In het bovenstaande voorbeeld bevat onze tabel (VIEW) public_employee alleen werknemers-ID's en hun namen, maar geen informatie over hun salaris. U kunt dergelijke weergaven op dezelfde plaats gebruiken als echte tabellen.

Waarom zijn weergaven nodig? Ze hebben een aantal voordelen:

Flexibele controle van toegang tot informatie . U kunt bepaalde gebruikers alleen toegang geven tot VIEW, maar niet om toegang te geven tot tabellen. En haal in View alleen openbare informatie uit tabellen. Als er in de toekomst nieuwe kolommen met belangrijke informatie aan de tabellen worden toegevoegd, komt deze bovendien niet per ongeluk in de weergave terecht.

Denormalisatie van gegevens . Voor het gemak van opslag worden gegevens vaak verdeeld in honderden en duizenden tabellen, maar het is voor een gewoon persoon niet erg handig om met dergelijke gegevens te werken - u moet te complexe query's schrijven. Met View kunt u virtuele tabellen maken die gegevens uit tientallen verschillende tabellen in één tabel weergeven.

Polymorfisme en inkapseling . U kunt de structuren van uw database wijzigen. Tegelijkertijd zullen gebruikers van het programma die met uw Views werken niet raden dat er iets is veranderd. En het is niet nodig om de code te herschrijven van programma's die toegang hebben tot View. U hoeft alleen het SQL-script aan te passen dat gerelateerd is aan VIEW.

Alleen lezen . View kan alleen worden ingesteld met een SELECT-query, dus het werken met View kan de gegevens in echte tabellen op geen enkele manier veranderen. Dit is trouwens nog een voordeel ten gunste van query-caching. Maar daarover de volgende keer meer.