Ugrás a fő tartalomhoz

SQL alapok

SQL nyelvi elemek​

  • DDL (Data Definition Language): Adatszerkezetek definiálása (táblák, séma, nézetek, indexek).
    • CREATE, ALTER, DROP, TRUNCATE
  • DML (Data Manipulation Language): Adatok manipulálása (beszúrás, módosítás, törlés).
    • INSERT, UPDATE, DELETE, MERGE
  • QL (Query Language / DQL – Data Query Language): Adatok lekérdezése.
    • SELECT

Példa kódok​

Figyelem!

Minden DML művelet után (INSERT, UPDATE, DELETE) szükséges a COMMIT utasítást kiadni, különben a változtatások nem kerülnek mentésre! A DDL műveletek (CREATE, ALTER, DROP) esetében implicit (automatikus) COMMIT hajtódik végre.

drop table people;

create table people (
-- auto increment id
-- id integer generated always as identity primary key,
id integer not null primary key,
name varchar2(250) not null,
birth_date date default sysdate,
is_male char(1) not null,
constraint ck_is_male check(is_male in ('I', 'N'))
);


alter table people add height integer not null;
alter table people add constraint ck_height check(height > 0);
alter table people drop column height;
alter table people add constraint uq_name unique(name);
alter table people add city varchar2(250) not null;


insert into people (id, name, birth_date, is_male, city)
values (1, 'mark', TO_DATE('2003-02-13', 'YYYY-MM-DD'), 'I', 'hort');

-- Default value for birth_date
insert into people (id, name, is_male, city)
values (2, 'mark2', 'I', 'hort');

insert into people values (3, 'mark3', TO_DATE('2003-02-13', 'YYYY-MM-DD'), 'I', 'hort');

commit;

update people set name = 'mark1' where id = 1;
commit;

-- Basic queries
select * from people;
select name, height from people;
select * from people where height > 20;
select * from people where height between 10 and 20;
select * from people order by height;

-- Advanced queries
select max(age) from people;
select sum(age) from people;
select count(*), city from people group by city;
select count(*), city from people group by city having count(*) > 1;
select name from people where height = (select max(height) from people);
-- Select people whose name starts with 'r'
select * from people where name like 'r%';


delete from people where id = 3;
commit;


-- Foreign keys
create table table1 (
id integer not null primary key,
name varchar2(250) not null
);

create table table2 (
id integer not null primary key,
table1_id integer not null,
name varchar2(250) not null,
constraint fk_table2_table1_id foreign key(table1_id) references table1(id)
);

select * from table1 t1 inner join table2 t2 on t1.id = t2.table1_id;

Feladatok​

Az alábbi részfeladatok egymásra épülnek, ezért sorrendben oldd meg őket.

1. Táblák létrehozása​

Hozd létre az alábbi táblákat!

  • categories – könyvkategóriák:
    • id: egész szám, elsődleges kulcs.
    • name: legfeljebb 100 karakteres szöveg, kötelező és egyedi.
  • books – könyvek:
    • id: egész szám, elsődleges kulcs.
    • title: legfeljebb 250 karakteres szöveg, kötelező.
    • author: legfeljebb 150 karakteres szöveg, kötelező.
    • price: egész szám, kötelező, értéke pozitív (forintban).
    • published_on: dátum, alapértelmezett értéke az aktuális dátum.
    • category_id: egész szám, kötelező, idegen kulcsként hivatkozik a categories tábla id oszlopára.

2. Táblaszerkezet módosítása​

Bővítsd a books táblát egy stock nevű, egész szám típusú oszloppal! Az oszlop legyen kötelező, alapértelmezett értéke legyen 0.

3. Adatok beszúrása​

Az alábbi mintaadatok beszúrásához másold be és futtasd a táblázatok utáni SQL utasításokat!

idname
1Informatika
2Regény
3Ismeretterjesztő
idtitleauthorpricepublished_oncategory_idstock
1SQL kezdőknekKiss Anna45002022-03-1018
2Adatbázisok világaNagy Péter62002023-09-0113
3C# alapokKiss Anna58002024-02-1510
4A régi házTóth Éva39002021-06-20212
5Utazás északraSzabó Ádám45002023-11-0525
6A világűr titkaiVarga Dóra62002024-01-1032
insert into categories (id, name) values (1, 'Informatika');
insert into categories (id, name) values (2, 'Regény');
insert into categories (id, name) values (3, 'Ismeretterjesztő');

insert into books (id, title, author, price, published_on, category_id, stock)
values (1, 'SQL kezdőknek', 'Kiss Anna', 4500, TO_DATE('2022-03-10', 'YYYY-MM-DD'), 1, 8);
insert into books (id, title, author, price, published_on, category_id, stock)
values (2, 'Adatbázisok világa', 'Nagy Péter', 6200, TO_DATE('2023-09-01', 'YYYY-MM-DD'), 1, 3);
insert into books (id, title, author, price, published_on, category_id, stock)
values (3, 'C# alapok', 'Kiss Anna', 5800, TO_DATE('2024-02-15', 'YYYY-MM-DD'), 1, 0);
insert into books (id, title, author, price, published_on, category_id, stock)
values (4, 'A régi ház', 'Tóth Éva', 3900, TO_DATE('2021-06-20', 'YYYY-MM-DD'), 2, 12);
insert into books (id, title, author, price, published_on, category_id, stock)
values (5, 'Utazás északra', 'Szabó Ádám', 4500, TO_DATE('2023-11-05', 'YYYY-MM-DD'), 2, 5);
insert into books (id, title, author, price, published_on, category_id, stock)
values (6, 'A világűr titkai', 'Varga Dóra', 6200, TO_DATE('2024-01-10', 'YYYY-MM-DD'), 3, 2);

commit;

4. Egyszerű lekérdezések​

Az alábbi feladatokat külön-külön lekérdezéssel oldd meg!

  1. Listázd az összes könyv minden adatát!
  2. Jelenítsd meg a könyvek címét és árát ár szerint csökkenő sorrendben! Azonos ár esetén cím szerint növekvő sorrendet használj!
  3. Kérdezd le a 4000 és 6000 Ft közötti árú könyveket, a határokat is beleértve!
  4. Listázd azokat a könyveket, amelyekből van készleten, és az áruk 5000 Ft alatt van!
  5. Kérdezd le azokat a könyveket, amelyek címe „A” betűvel kezdődik!
  6. Listázd a 2023. január 1-jén vagy azután megjelent könyveket!

5. Összesítések és allekérdezések​

  1. Határozd meg a könyvek számát és a legmagasabb árat!
  2. Számítsd ki a készleten lévő példányok összes darabszámát a stock oszlop alapján!
  3. Csak azoknak a kategóriáknak az azonosítóját és könyveik számát jelenítsd meg, amelyekhez legalább két könyv tartozik!
  4. Allekérdezéssel listázd a legdrágább könyvek címét és árát! Azonos legmagasabb ár esetén minden érintett könyv jelenjen meg!

6. Táblák összekapcsolása​

  1. INNER JOIN segítségével jelenítsd meg minden könyv címét, szerzőjét és kategóriájának nevét!
  2. Listázd az „Informatika” kategóriába tartozó, készleten lévő könyvek címét és készletét!
  3. Jelenítsd meg kategóriánként a kategória nevét és a hozzá tartozó könyvek számát!