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 acategoriestáblaidoszlopá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!
| id | name |
|---|---|
| 1 | Informatika |
| 2 | Regény |
| 3 | Ismeretterjesztő |
| id | title | author | price | published_on | category_id | stock |
|---|---|---|---|---|---|---|
| 1 | SQL kezdőknek | Kiss Anna | 4500 | 2022-03-10 | 1 | 8 |
| 2 | Adatbázisok világa | Nagy Péter | 6200 | 2023-09-01 | 1 | 3 |
| 3 | C# alapok | Kiss Anna | 5800 | 2024-02-15 | 1 | 0 |
| 4 | A régi ház | Tóth Éva | 3900 | 2021-06-20 | 2 | 12 |
| 5 | Utazás északra | Szabó Ádám | 4500 | 2023-11-05 | 2 | 5 |
| 6 | A világűr titkai | Varga Dóra | 6200 | 2024-01-10 | 3 | 2 |
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!
- Listázd az összes könyv minden adatát!
- 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!
- Kérdezd le a 4000 és 6000 Ft közötti árú könyveket, a határokat is beleértve!
- Listázd azokat a könyveket, amelyekből van készleten, és az áruk 5000 Ft alatt van!
- Kérdezd le azokat a könyveket, amelyek címe „A” betűvel kezdődik!
- Listázd a 2023. január 1-jén vagy azután megjelent könyveket!
5. Összesítések és allekérdezések
- Határozd meg a könyvek számát és a legmagasabb árat!
- Számítsd ki a készleten lévő példányok összes darabszámát a
stockoszlop alapján! - 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!
- 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
INNER JOINsegítségével jelenítsd meg minden könyv címét, szerzőjét és kategóriájának nevét!- Listázd az „Informatika” kategóriába tartozó, készleten lévő könyvek címét és készletét!
- Jelenítsd meg kategóriánként a kategória nevét és a hozzá tartozó könyvek számát!