Politechnika Poznańska,
Instytut Elektrotechniki i Elektroniki Przemysłowej
JĘZYK SQL
PRAC Z DANYMI
2
Służy do dodawania wierszy do tabeli
INSERT [INTO] nazwa_tabeli
[(lista_kolumn)] VALUES
(lista_wartości)
Każda instrukcja INSERT może aktualizować
tylko pojedynczą tabelę
Jeżeli nie zostanie podana lista kolumn,
instrukcja INSERT musi zawierać wartości dla
wszystkich kolumn w takiej kolejności jak w
tabeli lub słowo kluczowe DEFAULT
Instrukcja INSERT
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
3
Instrukcja INSERT – przykłady
INSERT INTO etaty (etat_nazwa,
etat_placa_min, etat_placa_max) VALUES
('Instalator',700,1600)
INSERT INTO etaty
VALUES ('Sprzątacz',500,NULL)
INSERT INTO etaty
VALUES ('Sprzątaczka',DEFAULT,1300)
INSERT INTO etaty (etat_nazwa,etat_placa_max)
VALUES ('Monter',1600)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
4
Ćwiczenie 1
W Szczecinie przy ulicy Marynarzy 6 oddano do
eksploatacji nowy zakład (Zakład Zapłonników). Dodaj
informacje o nowym zakładzie do bazy danych.
INSERT INTO zaklady VALUES (70,'Zakład
Zapłonników','Szczecin','Marynarzy 6')
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
5
Ćwiczenie 2
Wstaw do tabeli pracownicy informacje o zatrudnionym
właśnie w zakładzie nr 40 na stanowisko czeladnika
Marcinie Świętym (szef: 190, płaca: 850)
INSERT INTO pracownicy VALUES
(290,'Marcin','Święty','Czeladnik',190,
GETDATE(),850,DEFAULT,40)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
6
Wstawianie WIELU WIERSZY
Zamiast listy VALUES występuje instrukcja
SELECT określająca wartości dla wiersza(-
y), który zostanie wstawiony
INSERT [INTO] nazwa_tabeli
[(lista_kolumn)]
SELECT (lista_kolumn) FROM
tabela [WHERE (warunek)]
Jeżeli nie występuje klauzula WHERE to
wszystkie wiersze tabeli podanej w klauzuli
FROM zostaną dołączone do tabeli
określonej w klauzuli INSERT
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
7
Wstawianie wielu wierszy - przykłady
INSERT INTO pracownicy_2
SELECT prac_id, prac_nazwisko, prac_imie,
prac_data_zatrud, prac_etat_nazwa,
prac_placa_pod, prac_placa_dod
FROM pracownicy
INSERT INTO pracownicy_40
SELECT prac_id, prac_nazwisko, prac_imie,
prac_data_zatrud, prac_etat_nazwa,
prac_placa_pod, prac_placa_dod
FROM pracownicy WHERE prac_zakl_id=40
INSERT INTO pracownicy_1
SELECT * FROM pracownicy
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
8
Instrukcja UPDATE
Umożliwia zmianę wartości w jednym lub kilku
wierszach tabeli
UPDATE nazwa_tabeli
SET lista_aktualizacji
[WHERE (warunek)]
Pojedyncza instrukcja UPDATE może
aktualizować tylko pojedynczą tabelę
Po słowie kluczowym SET umieszczana jest
lista nazw kolumn i ich nowych wartości
kolumna1=wartość1,kolumna2=wartość2,...
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
9
Instrukcja UPDATE - przykłady
UPDATE pracownicy SET prac_placa_dod=250,
prac_placa_pod=prac_placa_pod*1.1
UPDATE pracownicy SET prac_placa_pod=3000
WHERE prac_placa_pod>3000
UPDATE pracownicy SET prac_placa_pod=5000
WHERE prac_etat_nazwa='Dyrektor'
UPDATE pracownicy SET
prac_placa_pod=prac_placa_pod*1.25
WHERE prac_zakl_id=(SELECT zakl_id FROM
zaklady WHERE zakl_nazwa='Administracja')
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
10
Ćwiczenie 3
Ustal wartość płacy dodatkowej wszystkim
pracownikom na kwotę równą 8% płacy podstawowej
UPDATE pracownicy
SET prac_placa_dod=prac_placa_pod*0.08
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
11
Ćwiczenie 4
Awansuj pracownika o nazwisku Mickiewicz na
stanowisko mistrza i podnieś mu płacę o 30%.
UPDATE pracownicy
SET prac_etat_nazwa='Mistrz',
prac_placa_pod=prac_placa_pod*1.3
WHERE prac_nazwisko='Mickiewicz'
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
12
Ćwiczenie 5
Przenieś Wojciecha Smyczka na stanowisko dyrektora,
zwiększ mu płacę o 1500 i wpisz mu id_zakl takie jak
posiada zakład Administracja
UPDATE pracownicy SET
prac_etat_nazwa='Dyrektor',
prac_placa_pod=prac_placa_pod+1500,
prac_zakl_id=(SELECT zakl_id FROM zaklady
WHERE zakl_nazwa='Administracja')
WHERE prac_nazwisko='Smyczek' AND
prac_imie='Wojciech'
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
13
Instrukcja DELETE
Pozwala usunąć wybrane wiersze tabeli
DELETE nazwa_tabeli
[WHERE (warunek)]
DELETE pracownicy
WHERE prac_id=250
Pominiecie klauzuli WHERE spowoduje
usunięcie wszystkich wierszy w tabeli (ale nie
tabeli)
DELETE pracownicy_1
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
14
Instrukcja TRUNCATE
Pozwala usunąć wszystkie wiersze tabeli
TRUNCATE TABLE nazwa_tabeli
TRUNCATE TABLE pracownicy
Nie używamy klauzuli WHERE
Instrukcja TRUNCATE jest szybsza od DELETE,
ponieważ nie zapisuje przebiegu operacji w
pliku logu
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
15
Ćwiczenie 6
Usuń informacje o Kamilu Baczyńskim
DELETE pracownicy
WHERE prac_nazwisko=’Baczyński’
AND prac_imie=’Kamil’
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
16
Ćwiczenie 7
Usuń informacje o pracownikach zarabiających
mniej niż 2000
DELETE pracownicy
WHERE prac_placa_pod<2000
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
17
Ćwiczenie 8
Usuń informacje o czeladnikach, których nazwisko
rozpoczyna się od litery M
DELETE pracownicy
WHERE prac_nazwisko like 'M%‘
AND prac_etat_nazwa='Czeladnik'
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
18
Ćwiczenie 9
Usuń informacje o pracownikach Zakładu Kloszy
DELETE pracownicy WHERE
prac_zakl_id=(SELECT zakl_id FROM
zaklady
WHERE zakl_nazwa='Zakład Kloszy')
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
19
Tworzenie tabel
Instrukcja CREATE TABLE
CREATE TABLE nazwa_tabeli
(
<nazwa_kolumny>
<typ_danych>
[NULL
|
NOT NULL]
[ [DEFAULT <wartość_domyślna>] |
[IDENTITY (<wartość_początkowa>,
wartość_inkrementacji)] ]
[CONSTRAINT <nazwa_ograniczenia>]
[ [PRIMARY KEY] | [FOREIGN KEY]
REFERENCES <tabela_odnośników>
nazwa_kolumny)] |
[CHECK (wyrażenie_logiczne)] ]
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
20
Usuwanie tabel
Instrukcja DROP TABLE
DROP TABLE nazwa_tabeli
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
21
Podstawowe typy danych
Całkowite:
bigint
int
smallint
od -2^63 do 2^63-1
od -2^31 do 2^31-1
od -2^15 do 2^15-1
Zmiennoprzecinkowe:
numeric
decimal
od -10^38+1 do 10^38-1
Znakowe:
char, varchar
do 8000 znaków
Data i Czas:
datetime
smalldatetime
od 1753 do 9999
od 1900 do 2079
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
22
Tworzenie tabel (1)
CREATE TABLE mpracownicy
(
nazwisko varchar(20)
)
CREATE TABLE mpracownicy
(
id int,
nazwisko varchar(20)
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
23
Tworzenie tabel (2)
CREATE TABLE mpracownicy
(
id int,
imie varchar(15),
nazwisko varchar(20),
placa_pod numeric(8,2),
placa_dod numeric(6,2)
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
24
Tworzenie tabel (3)
CREATE TABLE mpracownicy
(
id int IDENTITY(5,10),
imie varchar(15),
nazwisko varchar(20),
placa_pod numeric(8,2),
placa_dod numeric(6,2) DEFAULT 200
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
25
Tworzenie tabel (4)
CREATE TABLE mpracownicy
(
id int CONSTRAINT PK_id PRIMARY KEY,
imie varchar(15),
nazwisko varchar(20),
placa_pod numeric(8,2)
CONSTRAINT CK_placa_powyzej_min
CHECK (placa_pod>1000),
placa_dod numeric(6,2) DEFAULT 200
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
26
Tworzenie tabel (5)
CREATE TABLE mzaklady
(
nr int CONSTRAINT PK_nr PRIMARY KEY,
nazwa varchar(15),
miasto varchar(15),
ulica varchar(20),
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
27
Tworzenie tabel (6)
CREATE TABLE mpracownicy
(
id int CONSTRAINT PK_id PRIMARY KEY,
imie varchar(15),
nazwisko varchar(20),
placa_pod numeric(8,2)
CONSTRAINT CK_placa_powyzej_min
CHECK (placa_pod>1000),
placa_dod numeric(6,2) DEFAULT 200,
id_zakl int CONSTRAINT FK_nr_zakladu
FOREIGN KEY REFERENCES mzaklady(nr)
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
28
Tworzenie tabel (7)
CREATE TABLE mpracownicy (
id int CONSTRAINT PK_id PRIMARY KEY,
imie varchar(15),
nazwisko varchar(20),
placa_pod numeric(8,2)
CONSTRAINT CK_placa_powyzej_min
CHECK (placa_pod>1000),
placa_dod numeric(6,2) DEFAULT 200,
zatrudniony
datetime
DEFAULT
GETDATE(),
id_zakl int CONSTRAINT FK_nr_zakladu
FOREIGN KEY REFERENCES mzaklady(nr)
)
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej
29
Ćwiczenie 10
Utwórz relacje o podanych poniżej schematach
atrybut
typ
rozmiar
własność
id_proj
int
autonumerowanie
opis_proj varchar
30
data_roz datetime
data systemowa
data_zak datetime
większa od data_roz
fundusz
numeric 10
większy od zera
atrybut
typ
rozmiar
własność
id_proj
int
klucz obcy
id_prac
numeric 4
klucz obcy
od
datetime
data systemowa
do
datetime
większa od od
stawka
numeric 8,2
większa od zera
rola
varchar
15
z listy: Kierownik, Mistrz, Czeladnik
Relacja: projekty
Relacja: przydzialy
J. Jajczyk, Politechnika Poznańska, Instytut Elektrotechniki i Elektroniki Przemysłowej