SELECT Id FROM Student;
SQL
Editovat
Note
|
Syntaxe a sémantika příkazů. Příkazy pro dotazování a aktualizaci dat, agregační funkce, triggery a uložené procedury. Příkazy pro definici dat, integritní omezení. PB154 |
Structured Query Language je jazyk určený pro dotazovaní nad databázemi a jejich správu.
Syntax SQL se snaží přípomínat angličtinu. Příkazy se píší ALL_CAPS, ale jsou case-insensitive, a za příkazy se může ale nemusí psát středník (bodkočiarka).
Datové typy v SQL
char(n)
-
Řetězec fixní délky.
varchar(n)
-
Řetězec o maximální délce
n
. int
-
32-bitový int.
smallint
-
16-bitový int.
numeric(p, s)
-
Čísla v desítkové soustavě o maximálním počtu číslic (precision), z čehož (scale) jich bude napravo od desetinné čárky.
real
,double precision
-
Float s přesností závislou na stroji.
float(n)
-
IEEE 754 float s mantissou o alespoň bitech.
uniqueidentifier
-
Na SQL serveru je to GUID.
Dotazovací a aktualizační příkazy
- FROM
-
Vybere všechny záznamy z dané relace (případně kartézského součinu daných relací). Odpovídá kartézskému součinu () z relační algebry.
- SELECT
-
Vybírá sloupce z tabulky. Odpovídá projekci () z relační algebry.
- WHERE
-
Filtruje data na základě podmínky. Odpovídá selekci () z relační algebry.
SELECT * FROM Student WHERE Uco > 500000;
- UPDATE
-
Upraví záznamy dané tabulky (které lze nejprve přefiltrovat).
UPDATE Student SET FirstName = 'Adolf' WHERE LastName = 'Hitler';
- DELETE
-
Maže záznamy.
DELETE FROM Student WHERE MOD(Uco, 42) = 0;
- INSERT
-
Vloží záznam do tabulky. Hodnoty musí splňovat omezení uvalená na sloupce.
INSERT INTO Student(Uco, FirstName) VALUES (666666, 'Satén');
- DISTINCT
-
Eliminuje duplicity po příkazu
SELECT
.SELECT DISTINCT FirstName FROM Student;
- ALL
-
Ponechává duplicity po příkazu
SELECT
. - ORDER BY
-
Seřadí data podle daného sloupce vzestupně (
ASC
) nebo sestupně (DESC
).SELECT * FROM Student ORDER BY SemesterCount DESC;
- GROUP BY
-
Odpovídá agregaci () z relační algebry. Mezi agregační funkce patří:
COUNT
,MAX
,MIN
,SUM
,AVG
.SELECT COUNT(Uco), AVG(SemesterCount) FROM Student GROUP BY Faculty;
- JOIN
-
Rodina příkazů provádějící joiny.
-
NATURAL JOIN
-
NATURAL LEFT OUTER JOIN
-
NATURAL RIGHT OUTER JOIN
-
INNER JOIN
-
FULL OUTER JOIN
SELECT Student.Uco, EnrolledCourse.CourseName FROM Student INNER JOIN EnrolledCourse ON Student.Uco = EnrolledCourse.Uco;
-
- AS
-
Přejmenování.
SELECT s.FirstName AS Jmeno, e.CourseName AS Predmet FROM Student AS s, EnrolledCourse AS e;
- HAVING
-
Where pro agregáty.
SELECT COUNT(Uco) FROM Student GROUP BY Faculty HAVING COUNT(Uco) > 10; -- eliminate fsps
- LIKE
-
Regex lite.
%
je libovolný počet znaků a_
je právě jeden znak.SELECT * FROM Student WHERE FirstName LIKE '_damn%';
Triggery
Příkazy, jenž jsou vykonány automaticky jako při modifikaci databáze (INSERT, DELETE, UPDATE).
Třeba, aby se aktualizovaly kredity při složení zkoušky:
CREATE TRIGGER FixCreditsOnExam
AFTER UPDATE OF Exam
BEGIN
UPDATE Student
SET Credits = (SELECT SUM(CourseCredits) FROM Exam
WHERE Exam.StudentUco = Student.Uco);
END;
Uložené procedury
Definované funkce uložené poblíž databáze. Každý databázový SW pro ně má trochu jiný jazyk (např. PL/SQL a Transact-SQL). Umožňují složitejší operace, mohou zlepšit výkon a lze je použít v triggerech.
Příkazy pro definici dat
- CREATE TABLE
-
Vytvoří novou tabulku s danými atributy, které mají uvedené datové typy a integritní omezení.
CREATE TABLE Employee ( Id uniqueidentifier PRIMARY KEY, FirstName varchar(20), LastName varchar(20) NOT NULL, Age int CHECK(Age >= 0) )
- DROP TABLE name
-
Smaže celou tabulku
name
. - ALTER TABLE
-
Přidá nebo odebere atribut.
ALTER TABLE Employee ADD Salary int CHECK(Salary >= 0);
ALTER TABLE Employee DROP Salary;
Integritní omezení
Omezení uvalená na data, která zabraňují náhodnému poškození databáze. Třeba věk by asi neměl být záporný.
- NOT NULL
-
Atribut nesmí být
NULL
. - UNIQUE (A1, A2, … AN)
-
Atributy A1, A2, … AN musí tvořit kandidátní klíč.
- CHECK (P)
-
Musí platit predikát P.
CHECK(semester in ('fall', 'spring'))
- PRIMARY KEY
-
Atributy se stanou primárním klíčem. To stejný jako
UNIQUE
, ale atributy nesmí býtNULL
.