SQL-syntakse - SQL syntax

Syntaksi on SQL- ohjelmointikieli on määritelty ja ylläpitää ISO / IEC SC 32 osana ISO / IEC 9075 . Tätä standardia ei ole vapaasti saatavilla. Standardin olemassaolosta huolimatta SQL-koodi ei ole täysin siirrettävissä eri tietokantajärjestelmissä ilman säätöjä.

Kielielementit

Kaavio, joka näyttää useita SQL-kielielementtejä, jotka muodostavat yhden lauseen. Tämä lisää yhden USA: n väestöön maataulukossa.

SQL-kieli on jaettu useisiin kielielementteihin, mukaan lukien:

  • Avainsanat ovat SQL-kielellä määriteltyjä sanoja. Ne ovat joko varattuja (esim SELECT . COUNT Ja YEAR ) tai varaamattomia (esim ASC . DOMAIN Ja KEY ). Luettelo SQL-varattuista sanoista .
  • Tunnisteet ovat tietokantaobjektien nimiä, kuten taulukoita, sarakkeita ja kaavioita. Tunniste ei välttämättä ole yhtä suuri kuin varattu avainsana, ellei se ole erotettu tunniste. Erotetut tunnisteet tarkoittavat kaksoislainausmerkkeihin suljettuja tunnisteita. Ne voivat sisältää merkkejä, joita ei yleensä tueta SQL-tunnisteissa, ja ne voivat olla identtisiä varatun sanan kanssa, esim. Nimetty sarake määritetään YEAR nimellä "YEAR" .
  • Lausekkeet , jotka ovat lauseiden ja kyselyjen komponentteja. (Joissakin tapauksissa nämä ovat valinnaisia.)
  • Ilmaisuja , jotka voivat tuottaa joko skalaari- arvoja, tai taulukoita koostuu sarakkeiden ja rivien tiedon
  • Predikaatit , jotka määrittelevät ehdot, jotka voidaan arvioida SQL: n kolmiarvoiseksi logiikaksi (3VL) (true / false / unknown) tai Boolen totuusarvoiksi ja joita käytetään lauseiden ja kyselyjen vaikutusten rajoittamiseen tai ohjelmavirran muuttamiseen.
  • Kyselyt , jotka hakevat tietoja tiettyjen ehtojen perusteella. Tämä on tärkeä osa SQL: ää .
  • Lausekkeet , joilla voi olla pysyvä vaikutus kaavioihin ja tietoihin tai jotka voivat hallita tapahtumia, ohjelmavirtaa, yhteyksiä, istuntoja tai diagnostiikkaa.
    • SQL-käskyt sisältävät myös puolipisteen (";") käskyn terminaattorin. Vaikka sitä ei vaadita kaikilla alustoilla, se määritellään SQL-kieliopin vakio-osaksi.
  • Merkityksetön välilyönti jätetään yleensä huomiotta SQL-käskyissä ja kyselyissä, mikä helpottaa SQL-koodin muotoilua luettavuuden vuoksi.

Operaattorit

Operaattori Kuvaus Esimerkki
= Yhtä kuin Author = 'Alcott'
<> Ei yhtä suuri (monet DBMS: t hyväksyvät != lisäksi <> ) Dept <> 'Sales'
> Suurempi kuin Hire_Date > '2012-01-31'
< Vähemmän kuin Bonus < 50000.00
>= Suurempi tai yhtä suuri Dependents >= 2
<= Pienempi tai yhtä suuri Rate <= 0.05
[NOT] BETWEEN [SYMMETRIC] Sisältyvän alueen välillä. SYMMETRIC kääntää alueen rajat, jos ensimmäinen on suurempi kuin toinen. Cost BETWEEN 100.00 AND 500.00
[NOT] LIKE [ESCAPE] Alkaa hahmokuviolla Full_Name LIKE 'Will%'
Sisältää merkkikuvion Full_Name LIKE '%Will%'
[NOT] IN Yhtä yhtä monista mahdollisista arvoista DeptCode IN (101, 103, 209)
IS [NOT] NULL Vertaa nollaan (puuttuvat tiedot) Address IS NOT NULL
IS [NOT] TRUE tai IS [NOT] FALSE Boolen totuusarvotesti PaidVacation IS TRUE
IS NOT DISTINCT FROM On yhtä suuri kuin arvo tai molemmat ovat nollia (puuttuvat tiedot) Debt IS NOT DISTINCT FROM - Receivables
AS Käytetään sarakkeen nimen muuttamiseen tuloksia tarkasteltaessa SELECT employee AS department1

Toisinaan on ehdotettu tai toteutettu muita operaattoreita, kuten siluettioperaattoria (vain sellaisten rivien löytämiseksi, jotka eivät ole "huonompia" kuin muut).

SQL: llä on case lauseke, joka otettiin käyttöön SQL-92: ssä . Yleisimmässä muodossaan, jota SQL-standardissa kutsutaan "haetuksi tapaukseksi":

CASE WHEN n > 0
          THEN 'positive'
     WHEN n < 0
          THEN 'negative'
     ELSE 'zero'
END

SQL testaa WHEN olosuhteet siinä järjestyksessä kuin ne esiintyvät lähteessä. Jos lähde ei määritä ELSE lauseketta, SQL oletuksena on ELSE NULL . Lyhennettyä syntaksia nimeltä "yksinkertainen tapaus" voidaan käyttää myös:

CASE n WHEN 1
            THEN 'One'
       WHEN 2
            THEN 'Two'
       ELSE 'I cannot count that high'
END

Tässä syntaksissa käytetään implisiittisiä tasa-arvon vertailuja tavallisten varoitusten kanssa verrattaessa NULL: iin .

Erikoislausekkeille on kaksi lyhyttä muotoa CASE : COALESCE ja NULLIF .

COALESCE Ilmaisu palauttaa arvon ensimmäinen ei-NULL operandin, saapuvat työskentelevät vasemmalta oikealle tai NULL, jos kaikki operandit yhtä NULL.

COALESCE(x1,x2)

vastaa:

CASE WHEN x1 IS NOT NULL THEN x1
     ELSE x2
END

NULLIF Ilmaisu on kahden operandin ja palaa NULL, jos operandit on sama arvo, muuten sillä on arvo ensimmäinen operandi.

NULLIF(x1, x2)

vastaa

CASE WHEN x1 = x2 THEN NULL ELSE x1 END

Kommentit

Standard SQL mahdollistaa kahden formaatteja kommentit : -- comment , joka päättyy ensimmäisen rivinvaihto , ja /* comment */ , joka voi ulottua useita rivejä.

Kyselyt

SQL: n yleisimpiä toimintoja, kysely, käyttää deklaratiivista SELECT käskyä. SELECT noutaa tietoja yhdestä tai useammasta taulukosta tai lausekkeesta. Vakiolausekkeilla SELECT ei ole pysyviä vaikutuksia tietokantaan. Joillakin epätyypillisillä toteutuksilla SELECT voi olla pysyviä vaikutuksia, kuten SELECT INTO joissakin tietokannoissa tarjottu syntaksit.

Kyselyt avulla käyttäjä voi kuvata halutun datan, jolloin tietokannan hallintajärjestelmän (DBMS) suorittaa suunnitteluun , optimointiin , ja suorittaa fyysisiä toimintoja tarvitaan tuottamaan tämä tulos, kun se valitsee.

Kysely sisältää luettelon sarakkeista, jotka sisällytetään lopputulokseen, yleensä heti SELECT avainsanan jälkeen. Tähdellä (" * ") voidaan määrittää, että kyselyn pitäisi palauttaa kaikki kyseltyjen taulukoiden sarakkeet. SELECT on SQL: n monimutkaisin käsky, valinnaisilla avainsanoilla ja lausekkeilla, jotka sisältävät:

  • FROM Lauseke, joka ilmaisee taulukon (t) hakea tietoja. FROM Lauseke voi sisältää valinnaisia JOIN alakohdissa määrittää säännöt taulukoiden yhdistämisestä.
  • WHERE Lauseke sisältää vertailun predikaatti, joka rajoittaa rivit palauttaa kyselyn. WHERE Lauseke poistaa kaikki rivit tulosjoukon vaikka vertailun predikaatti ei arvioi True.
  • GROUP BY Lauseke hankkeet rivit, joilla on yhteisiä arvoja pienemmäksi rivien. GROUP BY käytetään usein yhdessä SQL-aggregaatiotoimintojen kanssa tai päällekkäisten rivien poistamiseksi tulosjoukosta. WHERE Lauseketta sovelleta ennen GROUP BY lauseketta.
  • HAVING Lauseke sisältää predikaatti, jota käytetään suodattimen rivit saatu GROUP BY lauseke. Koska se vaikuttaa GROUP BY lauseen tuloksiin , aggregaatiofunktioita voidaan käyttää HAVING lauseen predikaatissa.
  • ORDER BY Lauseke tunnistaa sarakkeessa [s] käyttää lajitella tuloksena olevan datan, ja mihin suuntaan lajitella ne (nouseva tai laskeva). Ilman ORDER BY lauseketta SQL-kyselyn palauttamien rivien järjestys on määrittelemätön.
  • DISTINCT Avainsanan eliminoi päällekkäiset tiedot.
  • OFFSET Lauseke täsmennetään rivien hypätä ennen tietojen palauttamiseen.
  • FETCH FIRST Lauseke määrittää rivien palauttamista. Joissakin SQL-tietokannoissa on sen sijaan epätyypillisiä vaihtoehtoja, esim LIMIT . TOP Tai ROWNUM .

Kyselyn lauseilla on erityinen suoritusjärjestys, joka on merkitty numerolla oikealla puolella. Se on seuraava:

SELECT <columns> 5.
FROM <table> 1.
WHERE <predicate on rows> 2.
GROUP BY <columns> 3.
HAVING <predicate on groups> 4.
ORDER BY <columns> 6.
OFFSET 7.
FETCH FIRST 8.

Seuraava SELECT kyselyesimerkki palauttaa luettelon kalliista kirjoista. Kysely noutaa kaikki kirjat- taulukon rivit , joissa hinta- sarake sisältää arvon, joka on suurempi kuin 100,00. Tulos lajitellaan nousevaan järjestykseen otsikon mukaan . Tähti (*) on Valitse lista osoittaa, että kaikki sarakkeet kirjan pöydän olisi sisällytettävä tulosjoukon.

SELECT *
 FROM  Book
 WHERE price > 100.00
 ORDER BY title;

Alla oleva esimerkki osoittaa kyselyn useista taulukoista, ryhmittelystä ja yhdistämisestä palauttamalla luettelon kirjoista ja kuhunkin kirjaan liittyvien tekijöiden lukumäärän.

SELECT Book.title AS Title,
       count(*) AS Authors
 FROM  Book
 JOIN  Book_author
   ON  Book.isbn = Book_author.isbn
 GROUP BY Book.title;

Esimerkkilähtö saattaa muistuttaa seuraavaa:

Title                  Authors
---------------------- -------
SQL Examples and Guide 4
The Joy of SQL         1
An Introduction to SQL 2
Pitfalls of SQL        1

Edellytyksenä on, että isbn on kahden taulukon ainoa yhteinen sarakkeen nimi ja että sarakkeella, jonka nimi on otsikko, on vain Kirja- taulukko, yllä oleva kysely voidaan kirjoittaa uudelleen seuraavassa muodossa:

SELECT title,
       count(*) AS Authors
 FROM  Book
 NATURAL JOIN Book_author
 GROUP BY title;

Monet toimittajat joko eivät tue tätä lähestymistapaa, tai vaativat tiettyjä sarakkeiden nimeämiskäytäntöjä, jotta luonnolliset liitokset toimisivat tehokkaasti.

SQL sisältää operaattorit ja toiminnot tallennettujen arvojen laskemiseksi. SQL sallii lausekkeiden käytön valintaluettelossa datan projisointiin, kuten seuraavassa esimerkissä, joka palauttaa yli 100,00: n kustannuksia sisältävän kirjeluettelon ja lisää sales_tax -sarakkeen, joka sisältää arvonlisäveroluvun, joka on laskettu 6% hinnasta .

SELECT isbn,
       title,
       price,
       price * 0.06 AS sales_tax
 FROM  Book
 WHERE price > 100.00
 ORDER BY title;

Alakyselyt

Kyselyt voidaan sijoittaa niin, että yhden kyselyn tuloksia voidaan käyttää toisessa kyselyssä relaatiooperaattorin tai aggregaatiofunktion avulla. Sisäkkäinen kysely tunnetaan myös alikyselynä . Liittyminen ja muut taulukkotoiminnot tarjoavat monissa tapauksissa laskennallisesti ylivoimaiset (eli nopeammat) vaihtoehdot, mutta alakyselyjen käyttö tuo käyttöön hierarkian, joka voi olla hyödyllistä tai välttämätöntä. Seuraavassa esimerkissä aggregaatiofunktio AVG vastaanottaa syötteenä alikyselyn tuloksen:

SELECT isbn,
       title,
       price
 FROM  Book
 WHERE price < (SELECT AVG(price) FROM Book)
 ORDER BY title;

Alikysely voi käyttää ulomman kyselyn arvoja, jolloin sitä kutsutaan korreloiduksi alakyselyksi .

Vuodesta 1999 lähtien SQL-standardi sallii WITH lausekkeet alakyselyille, nimeltään alakyselyille , joita yleensä kutsutaan yhteisiksi taulukkoilmaisuiksi (kutsutaan myös alakyselykerroiksi ). CTE: t voivat olla myös rekursiivisia viittaamalla itseensä; tuloksena oleva mekanismi sallii puiden tai kuvaajien liikkumisen (kun ne esitetään suhteina) ja yleisemmin kiinteän pisteen laskennan.

Johdettu taulukko

Johdettu taulukko on käyttää löytymistä SQL alikysely on lausekkeesta. Pohjimmiltaan johdettu taulukko on alakysely, joka voidaan valita tai liittyä siihen. Johdetun taulukon toiminnallisuuden avulla käyttäjä voi viitata alakyselyyn taulukkona. Inline-näkymää kutsutaan myös inline-näkymäksi tai alavalinnaksi .

Seuraavassa esimerkissä SQL-käsky sisältää liitoksen alkuperäisestä "Book" -taulukosta johdettuun "sales" -taulukkoon. Tämä johdettu taulukko sieppaa niihin liittyvät kirjamyyntitiedot ISBN-koodin avulla liittyäkseen Kirja-taulukkoon. Tuloksena on, että johdettu taulukko tarjoaa tulosjoukon lisäsarakkeilla (myytyjen tuotteiden määrä ja kirjojen myynyt yritys):

SELECT b.isbn, b.title, b.price, sales.items_sold, sales.company_nm
FROM Book b
  JOIN (SELECT SUM(Items_Sold) Items_Sold, Company_Nm, ISBN
        FROM Book_Sales
        GROUP BY Company_Nm, ISBN) sales
  ON sales.isbn = b.isbn

Nolla tai kolmiarvoinen logiikka (3VL)

Null- konseptin avulla SQL pystyy käsittelemään relaatiomallista puuttuvia tietoja. Sana NULL on varattu avainsana SQL: ssä, jota käytetään Null-erikoismerkin tunnistamiseen. Vertailut Nulliin, esimerkiksi WHERE-lausekkeiden tasa-arvo (=), tuottavat Tuntemattoman totuuden arvon. SELECT-lauseissa SQL palauttaa vain tulokset, joille WHERE-lauseke palauttaa arvon True; ts. se sulkee pois tulokset, joiden arvot ovat False, ja myös ne, joiden arvo on Tuntematon.

Tosi ja väärä -toiminnon lisäksi Nullin kanssa tehdyistä suorista vertailuista saatu Tuntematon tuo siten fragmentin kolmiarvoisesta logiikasta SQL: ään. Totuustaulukot, joita SQL käyttää AND: lle, OR: lle ja EI, vastaavat Kleene- ja Lukasiewicz-kolmenarvoisen logiikan yleistä fragmenttia (jotka eroavat implikaation määritelmässään, mutta SQL ei määritä tällaista operaatiota).

p JA q s
Totta Väärä Tuntematon
q Totta Totta Väärä Tuntematon
Väärä Väärä Väärä Väärä
Tuntematon Tuntematon Väärä Tuntematon
p TAI q s
Totta Väärä Tuntematon
q Totta Totta Totta Totta
Väärä Totta Väärä Tuntematon
Tuntematon Totta Tuntematon Tuntematon
p = q s
Totta Väärä Tuntematon
q Totta Totta Väärä Tuntematon
Väärä Väärä Totta Tuntematon
Tuntematon Tuntematon Tuntematon Tuntematon
q EI q
Totta Väärä
Väärä Totta
Tuntematon Tuntematon

Nullsin semanttisesta tulkinnasta SQL: ssä on kuitenkin kiistoja, koska sitä käsitellään suorien vertailujen ulkopuolella. Kuten yllä olevasta taulukosta näkyy, suorat tasa-arvon vertailut kahden NULL: n välillä SQL: ssä (esim. {{{1}}} ) Palauttavat Tuntematon-arvon. Tämä on yhdenmukainen tulkinnan kanssa, jonka mukaan Nullilla ei ole arvoa (eikä se ole minkään tietotunnuksen jäsen), vaan se on pikemminkin paikkamerkki tai "merkki" puuttuville tiedoille. Kuitenkin periaate että kaksi Nulls eivät ole yhtä suuria keskenään tehokkaasti rikotaan SQL eritelmän UNION ja INTERSECT operaattoreille, jotka eivät tunnistaa nollia keskenään. Tästä johtuen nämä asetetut operaatiot SQL: ssä voivat tuottaa tuloksia, jotka eivät edusta varmaa tietoa, toisin kuin toiminnot, joihin liittyy nimenomaisia ​​vertailuja NULL: ään (esim WHERE . Edellä käsitellyn lausekkeen toiminnot). Coddin vuoden 1979 ehdotuksessa (jonka periaatteessa hyväksyi SQL92) tämä semanttinen epäjohdonmukaisuus järkeistetään väittämällä, että kaksoiskappaleiden poisto asetetuissa operaatioissa tapahtuu "alemmalla yksityiskohtien tasolla kuin tasa-arvotestaus palautusoperaatioiden arvioinnissa". Tietojenkäsittelytieteen professori Ron van der Meyden päätyi kuitenkin siihen johtopäätökseen, että "SQL-standardin epäjohdonmukaisuudet tarkoittavat, että mitään intuitiivista loogista semantiikkaa ei voida liittää nollien käsittelyyn SQL: ssä".

Lisäksi, koska SQL-operaattorit palauttavat Tuntematon verrattaessa mitään suoraan Nulliin, SQL tarjoaa kaksi Null-spesifistä vertailuennustetta: IS NULL ja IS NOT NULL testaa, ovatko tiedot Null-vai ei. SQL ei tue nimenomaisesti yleistä kvantifiointia , ja sen on toimittava negatiivisena eksistentiaalisena kvantifikaationa . On myös "<riviarvolauseke> Eristetään <riviarvolauseke>" -korjattu vertailuoperaattori, joka palauttaa TOSI-arvon, elleivät molemmat operandit ole yhtä suuria tai molemmat ovat NULL. Samoin IS NOT DISTINCT FROM määritellään "EI (<riviarvolauseke> IS DISTINCT FROM <riviarvolauseke>)". SQL: 1999 esitteli myös BOOLEAN tyyppimuuttujia, jotka standardin mukaan voivat sisältää myös tuntemattomia arvoja, jos se on mitätöitävissä. Käytännössä useat järjestelmät (esim. PostgreSQL ) toteuttavat BOOLEAN Tuntemattoman BOOLEAN NULL: ina, jonka standardin mukaan NULL BOOLEAN ja TUNNETTU "voidaan käyttää vuorotellen tarkoittamaan täsmälleen samaa". C. Päivämäärä (2011). SQL ja relaatioteoria: Kuinka kirjoittaa tarkka SQL-koodi . O'Reilly Media, Inc. s. 83. ISBN   978-1-4493-1640-2 . </ref>

Tietojen käsittely

Data Manipulation Language (DML) on osajoukko SQL käytetään lisätä, päivittää ja poistaa tiedot:

  • INSERT lisää rivit (muodollisesti sarakkeet ) olemassa olevaan taulukkoon, esimerkiksi:
INSERT INTO example
 (column1, column2, column3)
 VALUES
 ('test', 'N', NULL);
  • UPDATE muokkaa joukkoa olemassa olevia taulukkorivejä, esimerkiksi:
UPDATE example
 SET column1 = 'updated value'
 WHERE column2 = 'N';
  • DELETE poistaa olemassa olevat rivit taulukosta, esimerkiksi:
DELETE FROM example
 WHERE column2 = 'N';
  • MERGE käytetään useiden taulukoiden tietojen yhdistämiseen. Se yhdistää INSERT ja UPDATE elementit. Se on määritelty SQL: 2003-standardissa; ennen sitä jotkut tietokannat tarjosivat samanlaista toiminnallisuutta eri syntaksin kautta, joita joskus kutsutaan " ylöspäin ".
 MERGE INTO table_name USING table_reference ON (condition)
 WHEN MATCHED THEN
 UPDATE SET column1 = value1 [, column2 = value2 ...]
 WHEN NOT MATCHED THEN
 INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])

Tapahtumien hallinta

Tapahtumat, jos saatavilla, kääri DML-operaatiot:

  • START TRANSACTION (tai BEGIN WORK , tai BEGIN TRANSACTION SQL-murteesta riippuen) merkitsee tietokantatapahtuman alkua , joka joko suoritetaan kokonaan tai ei ollenkaan.
  • SAVE TRANSACTION (tai SAVEPOINT ) tallentaa tietokannan tilan tapahtuman nykyiseen kohtaan
CREATE TABLE tbl_1(id int);
 INSERT INTO tbl_1(id) VALUES(1);
 INSERT INTO tbl_1(id) VALUES(2);
COMMIT;
 UPDATE tbl_1 SET id=200 WHERE id=1;
SAVEPOINT id_1upd;
 UPDATE tbl_1 SET id=1000 WHERE id=2;
ROLLBACK to id_1upd;
 SELECT id from tbl_1;
  • COMMIT tekee kaikista tapahtuman tietomuutoksista pysyviä.
  • ROLLBACK hylkää kaikki datamuutokset viimeisen jälkeen COMMIT tai ROLLBACK jättää tiedot sellaisiksi kuin ne olivat ennen näitä muutoksia. Kun COMMIT lauseke on valmis, tapahtuman muutoksia ei voida palauttaa.

COMMIT ja ROLLBACK lopettaa nykyinen tapahtuma ja vapauta tietolukot. Jos START TRANSACTION vastaavaa lausetta ei ole, SQL: n semantiikka on toteutuksesta riippuvainen. Seuraava esimerkki näyttää klassisen varojensiirtotapahtuman, jossa raha poistetaan tililtä ja lisätään toiselle. Jos joko poisto tai lisäys epäonnistuu, koko tapahtuma palautetaan.

START TRANSACTION;
 UPDATE Account SET amount=amount-200 WHERE account_number=1234;
 UPDATE Account SET amount=amount+200 WHERE account_number=2345;

IF ERRORS=0 COMMIT;
IF ERRORS<>0 ROLLBACK;

Tietojen määrittely

Data Definition Language (DDL) hallinnoi pöytä ja indeksin rakenne. Keskeisin erät DDL ovat CREATE , ALTER , RENAME , DROP ja TRUNCATE lausunnot:

  • CREATE luo objektin (esimerkiksi taulukon) tietokantaan, esimerkiksi:
CREATE TABLE example(
 column1 INTEGER,
 column2 VARCHAR(50),
 column3 DATE NOT NULL,
 PRIMARY KEY (column1, column2)
);
  • ALTER muokkaa olemassa olevan objektin rakennetta eri tavoin, esimerkiksi lisäämällä sarakkeen olemassa olevaan taulukkoon tai rajoitteen, esimerkiksi:
ALTER TABLE example ADD column4 INTEGER DEFAULT 25 NOT NULL;
  • TRUNCATE poistaa kaikki tiedot taulukosta erittäin nopeasti poistamalla taulukon sisällä olevat tiedot eikä itse taulukkoa. Se tarkoittaa yleensä myöhempää COMMIT-operaatiota, ts. Sitä ei voi palauttaa takaisin (tietoja ei kirjoiteta lokiin myöhempää palautusta varten, toisin kuin POISTA).
TRUNCATE TABLE example;
  • DROP poistaa objektin tietokannasta, yleensä peruuttamattomasti, ts. sitä ei voida palauttaa takaisin, esimerkiksi:
DROP TABLE example;

Tietotyypit

Jokainen SQL-taulukon sarake ilmoittaa tyypin (tyypit), jotka sarake voi sisältää. ANSI SQL sisältää seuraavat tietotyypit.

Merkkijonot ja kansalliset merkkijonot
  • CHARACTER(n) (tai ): kiinteä leveys n- merkkijono, täytetty tarvittaessa välilyönneillä CHAR(n)
  • CHARACTER VARYING(n) (tai ): vaihtelevan leveyden merkkijono, jonka enimmäiskoko on n merkkiä VARCHAR(n)
  • CHARACTER LARGE OBJECT(n [ K | M | G | T ]) (tai ): merkki iso esine, jonka enimmäiskoko on n [K | M | G | T] merkkiä CLOB(n [ K | M | G | T ])
  • NATIONAL CHARACTER(n) (tai ): kiinteä leveysmerkkijono, joka tukee kansainvälistä merkistöä NCHAR(n)
  • NATIONAL CHARACTER VARYING(n) (tai ): vaihtelevan leveyden merkkijono NVARCHAR(n)NCHAR
  • NATIONAL CHARACTER LARGE OBJECT(n [ K | M | G | T ]) (tai ): kansallinen merkki, suuri esine, jonka enimmäiskoko on n [K | M | G | T] merkkiä NCLOB(n [ K | M | G | T ])

Varten CHARACTER LARGE OBJECT ja NATIONAL CHARACTER LARGE OBJECT tietotyypit, kertojat K (1 024), M (1 048 576), G (1 073 741 824) ja T (1 099 511 627 776), voidaan vaihtoehtoisesti käyttää, kun määritetään pituus.

Binääri
  • BINARY(n) : Kiinteän pituinen binaarijono, enimmäispituus n .
  • BINARY VARYING(n) (tai ): Muuttuvan pituinen binaarijono, enimmäispituus n . VARBINARY(n)
  • BINARY LARGE OBJECT(n [ K | M | G | T ]) (tai ): binäärinen iso esine, jonka enimmäispituus on n [K | M | G | T] . BLOB(n [ K | M | G | T ])

Että BINARY LARGE OBJECT tietotyyppi, kertojat K (1 024), M (1 048 576), G (1 073 741 824) ja T (1 099 511 627 776), voidaan vaihtoehtoisesti käyttää, kun määritetään pituus.

Boolen
  • BOOLEAN

BOOLEAN Tietotyyppi voi tallentaa arvoja TRUE ja FALSE .

Numeerinen
  • INTEGER (tai INT ), SMALLINT ja BIGINT
  • FLOAT , REAL ja DOUBLE PRECISION
  • NUMERIC(precision, scale) tai DECIMAL(precision, scale)
  • DECFLOAT(precision )

Esimerkiksi numeron 123.45 tarkkuus on 5 ja asteikko 2. Tarkkuus on positiivinen kokonaisluku, joka määrittää merkittävien numeroiden lukumäärän tietyssä radiksissa (binääri tai desimaali). Asteikko on ei-negatiivinen kokonaisluku. Asteikko 0 osoittaa, että luku on kokonaisluku. Desimaaliluvulle asteikolla S tarkka numeerinen arvo on merkittävien numeroiden kokonaisluku jaettuna 10 S: llä .

SQL tarjoaa toiminnot CEILING ja FLOOR pyöristää numeeriset arvot. (Suosittuja toimittajakohtaisia ​​toimintoja ovat TRUNC (Informix, DB2, PostgreSQL, Oracle ja MySQL) ja ROUND (Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server ja Mimer SQL.))

Ajallinen (päivämäärä)
  • DATE : päivämääräarvoille (esim. 2011-05-03 ).
  • TIME : aika-arvoille (esim. 15:51:36 ).
  • TIME WITH TIME ZONE : sama kuin TIME , mutta sisältää tietoja kyseisestä aikavyöhykkeestä.
  • TIMESTAMP : Tämä on a DATE ja TIME koottu yhteen muuttujaan (esim. 2011-05-03 15:51:36.123456 ).
  • TIMESTAMP WITH TIME ZONE : sama kuin TIMESTAMP , mutta sisältää tietoja kyseisestä aikavyöhykkeestä.

SQL-toimintoa EXTRACT voidaan käyttää yksittäisen kentän (esimerkiksi sekuntien) purkamiseen päivämääräajasta tai aikaväliarvosta. Nykyisen järjestelmän päivämäärä / kellonaika tietokantapalvelimen voidaan kutsua käyttämällä toimintoja kuten CURRENT_DATE , CURRENT_TIMESTAMP , LOCALTIME , tai LOCALTIMESTAMP . (Suosittu valmistajakohtaisia toimintoja TO_DATE , TO_TIME , TO_TIMESTAMP , YEAR , MONTH , DAY , HOUR , MINUTE , SECOND , DAYOFYEAR , DAYOFMONTH ja DAYOFWEEK .)

Intervalli (päivämäärä)
  • YEAR(precision) : useita vuosia
  • YEAR(precision) TO MONTH : useita vuosia ja kuukausia
  • MONTH(precision) : useita kuukausia
  • DAY(precision) : useita päiviä
  • DAY(precision) TO HOUR : päivien ja tuntien määrä
  • DAY(precision) TO MINUTE : päivien, tuntien ja minuuttien määrä
  • DAY(precision) TO SECOND(scale) : päivien, tuntien, minuuttien ja sekuntien määrä
  • HOUR(precision) : useita tunteja
  • HOUR(precision) TO MINUTE : useita tunteja ja minuutteja
  • HOUR(precision) TO SECOND(scale) : tuntien, minuuttien ja sekuntien määrä
  • MINUTE(precision) : muutama minuutti
  • MINUTE(precision) TO SECOND(scale) : minuuttien ja sekuntien määrä

Tietojen hallinta

Data Control Language (DCI) valtuuttaa käyttäjät voivat käyttää ja käsitellä tietoja. Sen kaksi päälausumaa ovat:

  • GRANT valtuuttaa yhden tai useamman käyttäjän suorittamaan toiminnon tai joukon toimintoja objektille.
  • REVOKE eliminoi avustuksen, joka voi olla oletusapuraha.

Esimerkki:

GRANT SELECT, UPDATE
 ON example
 TO some_user, another_user;

REVOKE SELECT, UPDATE
 ON example
 FROM some_user, another_user;

Huomautuksia

  1. ^ ANSI / ISO / IEC kansainvälinen standardi (IS). Tietokannan kieli SQL — osa 2: Säätiö (SQL / Foundation). 1999.
  2. ^ "Transact-SQL-viite". SQL Server Language Reference . SQL Server 2005 Books Online. Microsoft. 2007-09-15 . Haettu 17.06.2007 .
  3. ^ SAS 9.4 SQL-menettelyjen käyttöopas . SAS-instituutti. 2013. Sivumäärä 248. ISBN   9781612905686 . Haettu 21.10.2015 . Vaikka UNIQUE-argumentti on sama kuin DISTINCT, se ei ole ANSI-standardi.
  4. ^ Leon, Alexis ; Leon, Mathews (1999). "Kopioiden poistaminen - VALITSE käyttämällä DISTINCT". SQL: Täydellinen viite . New Delhi: Tata McGraw-Hill Education (julkaistu 2008). s. 143. ISBN   9780074637081 . Haettu 21.10.2015 . [...] avainsana DISTINCT [...] poistaa kaksoiskappaleet tulosjoukosta.
  5. ^ "Mikä on SQL-kyselyn suoritusjärjestys? - Designcise.com" . www.designcise.com . Haettu 2018-02-04 .
  6. ^ a b Hans-Joachim, K. (2003). Msgstr "Nolla-arvot relaatiotietokannoissa ja varma tietovasta" Semantiikka tietokannoissa. Toinen kansainvälinen työpaja Dagstuhlin linna, Saksa, 7. – 12. Tammikuuta 2001. Revised Papers . Tietojenkäsittelytieteen luennot. 2582 . s. 119–138. doi : 10.1007 / 3-540-36596-6_7 . ISBN   978-3-540-00957-3 .
  7. ^ a b Ron van der Meyden, "Loogiset lähestymistavat epätäydelliseen tietoon: kysely" Chomickissä, Jan; Saake, Gunter (Toim.) Logics for Databases and Information Systems , Kluwer Academic Publishers ISBN   978-0-7923-8129-7 , s. 344
  8. ^ ISO / IEC. ISO / IEC 9075-2: 2003, "SQL / Foundation" . ISO / IEC.
  9. ^ "SQL: n yleisen kvantifioinnin semantiikka ja ongelmat" . Tietokonelehti . Helmikuu 1989. doi : 10.1093 / comjnl / 32.1.90 . Haettu 16.1.2017 .
  10. ^ Fratarcangeli, Claudio (1991). "Tekniikka universaalille kvantifioinnille SQL: ssä" . ACM SIGMOD -tietue . 20 (3): 16–24. doi : 10.1145 / 126482.126484 . Haettu 16.1.2017 .
  11. ^ Kawash, Jalal (2004) Monimutkainen kvantifiointi strukturoidussa kyselykielessä (SQL): relaatiolaskua käyttävä opetusohjelma ; Journal of Computers in Mathematics and Science Teaching ISSN   0731-9258, osa 23, numero 2, 2004, AACE Norfolk, Virginia. Thefreelibrary.com
  12. ^ ISO / IEC 9075-2: 2011, §4.5
  13. ^ "ISO / IEC 9075-1: 2016: Tietotekniikka - Tietokannan kielet - SQL - Osa 1: Kehys (SQL / Framework)" .