Kasowanie danych – delete

Składnia zapytania SQL kasującego dane z tabeli jest następująca:

delete from nazwa_tabeli where warunek_usunięcia

lub jeśli potrzeba usunąć wszystkie dane z tabeli można użyć wersji bez where:

delete from nazwa_tabeli

Uwaga: Kasując dane z tabeli zawsze się upewnij, czy masz dobrze zdefiniowany warunek, inaczej możesz utracić dane.

Uwaga: Nie można skasować rekordów w tabeli, do których istnieją powiązane dane poprzez klucze obce w innych tabelach.

Jeśli potrzebujesz wyczyścić całą tabelę, być może lepszym pomysłem będzie użycie truncate table. Kwerenda delete zachowuje stan pól automatycznie inkrementowanych.

Przykład:

Dla danych w tabeli names:

Zawartość tabeli names

Poniższy kod skasuje wpisy z id od 1 do 3:

delete from names where id < 4

Po wykonaniu powyższego kodu tabela names będzie zawierać następujące wpisy:

Rezultat kodu delete from names where id < 4

Skasowanie wszystkich danych w tabeli można uzyskać kodem:

delete from names

W w wyniku czego tabela names będzie wyglądać tak:

Wynik komendy: delete from names

Zapis danych do bazy danych – insert into

Insert into realizuje zapis do bazy danych, składnia kwerendy jest następująca:

insert into nazwa_tabeli(nazwy_kolumn) values (wartości)

lub

insert into nazwa_tabeli values (wartości)

oraz

insert into nazwa_tabeli(nazwy_kolumn) select wartości

Wartości muszą być zgodne z polami w bazie, które są przekazywane przez nazwy_kolumn.

Uwaga: Nie zalecam korzystać z wersji bez wyszczególnienia nazw kolumn. Jeśli struktura tabeli, do której zapisujesz dane zostanie zmieniona lub zawiera pola automatycznie inkrementowane, wersja bez nazw kolumn może przestać działać poprawnie.

Uwaga: Operacje dodawana danych do tabeli zazwyczaj powodują założenie lokalnej transakcji.

Przykłady:

Dla tabeli:

create table rt_user_type(
	rt_user_type char(1) unique not null,
	descr varchar(100) not null
)

Dane możemy wprowadzić w następujący sposób:

insert into rt_user_type(rt_user_type, descr) values ('G', 'guest')
insert into rt_user_type values ('N', 'noob')
insert into rt_user_type(rt_user_type, descr) select '?', '?'

Po wykonaniu powyższych zapytań w tabeli rt_user_type zobaczymy nowe wpisy:

Czyszczenie tabeli – truncate table

Aby wyczyścić tabelę wystarczy użyć kodu:

truncate table nazwa_tabeli

Jest równoważne z wywołaniem kodu drop oraz kolejno create table.

Przykład:

Aby wyczyścić tabelę users:

truncate table users

Uwaga: Czyszczenie tabeli jest nieodwracalne i może spowodować utratę danych.

Odczytywanie danych z bazy – select distinct, top X, top X percent

Distinct:

Jeśli mamy zdublowane wyniki zapytania select, można się ich pozbyć używając słowa kluczowego distinct.

select distinct nazwy_kolumn from tabela

Przykład:

Dla danych:

Dane testowe
select distinct * from test_data

Powyższe zapytanie zwróci następujące rekordy:

Wynik zapytania: select distinct * from test_data

Ograniczanie ilości rekordów:

Tabele w bazach danych bardzo często zawierają ogromne ilości danych. W celu zmniejszenia ilości pobranych danych, można zawęzić ilość zwracanych wyników używając słowa kluczowego top.

select top X nazwy_kolumn from tabela

X oznacza ilość rekordów, które mają zostać zwrócone.

Inną opcją jest ograniczenie procentowe ilości rekordów:

select top X percent nazwy_kolumn from tabela

W tym wypadku X oznacza procent rekordów, które mają zostać zwrócone.

Przykłady:

Dane w tabeli names:

Top:
select top 3 * from names

Dla powyższej kwerendy otrzymamy następujące wynik:

Przykład: select top 3 * from names
Top percent:
select top 33 percent * from names

Dla takie zapytania otrzymamy:

Przykład: select top 33 percent * from names

Zawężanie zapytań – where

Aby określić warunki dla jakich zapytanie ma zostać wykonane stosuje się słowo kluczowe where. Może występować w zapytaniach select, update, delete – wszędzie tam, gdzie wymagane jest doprecyzowanie zapytania SQL.

Select:

select nazwy_kolumn from tabela

Warunek jest wyrażeniem logicznym, który zawęża wyniki zwracane poprzez zapytanie SQL.

Update:

update nazwa_tabeli set warunki_aktualizacji where warunek

Warunek zawęża rekordy, dla których będą robione zmiany.

Delete:

delete from tabela where warunek

Klauzura where wskazuje, które rekordy mają zostać usunięte z tabeli.

Wyrażenia warunkowe:

W wyrażeniach warunkowych można stosować różne operatory, które zwracają wartości logiczne, np.: arytmetyczne, logiczne, porównania lub funkcje zwracające wynik logiczny.

Nawiasy wprowadzają grupowanie warunków, np.:

select * from books where id > 3 or (id < 2 and author = 'Craig Walls')

Powyższy kod ma zwrócić wszystkie książki z tabeli books o id > 3 lub gdzie id < 2 oraz author = Craig Walls.

Dla danych w tabeli books:

Zawartość tabeli books

Powyższe zapytanie zwróci:

Wynik zapytania: select * from books where id > 3 or (id < 2 and author = 'Craig Walls’)

W przypadku, kiedy dane zawierają wartość null można korzystać z konstrukcji is null lub is not null lub funkcji isnull.

Operatory arytmetyczne

Język SQL posiada następujące operatory matematyczne:

Operator

+

*

/

%

Działanie

dodawanie

odejmowanie

mnożenie

dzielenie

dzielenie modulo – reszta z dzielenia

Dodawanie – przykład:
select 1 + 2
Przykład : select 1 + 2
Odejmowanie – przykład:
select 4 - 2
Przykład : select 4 – 2
Mnożenie – przykład:
select 3 * 4
Przykład: select 3 * 4
Dzielenie – przykłady:
select 13 / 3
Przykład: select 13 / 3
select 13.0 / 3
Przykład: select 13.0 / 3

Uwaga: operator „/” zachowywał się w różny sposób w zależności od parametrów. Jest to związanie z zapamiętywaniem typów parametrów operatora. Jeśli przynajmniej jeden z parametrów będzie typu zmiennopozycyjnego, to wynik także będzie tego typu. Jeśli jest niezbędna wartość w innym typie, to niezbędne jest jawna konwersja typów.

Dzielenie modulo – reszta z dzielenia:
select 13 % 3
Przykład: select 13 % 3

Operatory logiczne: „and”, „or” „not”

W języku SQL możemy wyszczególnić operatory logiczne: and, or oraz not:

AND:

Operator logiczny „i”.

warunek1 and warunek2

Tabela zwracanych wartości operatora and:

warunek1

true

false

true

false

warunek2

true

true

false

false

wartość zwracana

true

false

false

false

Oba warunki muszą być spełnione, aby operator and zwrócił wartość true – warunek był spełniony.

Przykład:
select * from names where name like 'K%' and name like '%A'
Przykład operatora and
OR:

warunek1 or warunek2

Operator logiczny „lub”.

Tabela zwracanych wartości operatora:

warunek1

true

false

true

false

warunek2

true

true

false

false

wartość zwracana

true

true

true

false

Przykład:
select * from names where name = 'Klaudia' or name = 'Krzysztof'
Przykład operatora or
NOT

not warunek

Operator logiczny „not”.

Tabela zwracanych wartości operatora:

warunek

true

false

wartość zwracana

false

true

Przykład:
select * from names where name not like '%a'
Przykład operatora not

Where – like

Like jest dobrym sposobem, jeśli niezbędne jest znalezienie ciągu znaków pasującego do wzorca.

Składnia where z like jest następująca:

where badana_wartość like szukane_wyrażenie

Przykład:
select * from names where name like 'a%'
Szukana wartość:

Szukanym wyrażeniem jest ciąg znaków, w którym możemy wykorzystywać następujące symbole, tzn. wildcards:

% – dowolny ciąg znaków, może być pusty

_ – dokładnie jeden znak

Przykład:

Dla danych w bazie:

Tabela names
select name from names where name like '_ar%'

Powyższe zapytanie zwróci następujące wynik:

Przykład: select name from names where name like '_ar%’
Uwaga:

Jeśli to możliwe, unikaj wyrażeń, gdzie % jest na innej pozycji niż ostatni znak z prawej strony. Wpływa to bardzo na wydajność zapytania SQL.

MsSql Server:

MsSql Server dopuszcza także inne konstrukcje:

[] – zakres znaków

– przedział od znaku do znaku

^ wykluczenie znaków z nawiasów kwadratowych

Przykłady:
select * from names where name like '[M]%'
select * from names where name like '[M]%’
select * from names where name like '[op]%'
select * from names where name like '[op]%’
select * from names where name like '[^kam]%'
select * from names where name like '[^kam]%’
select * from names where name like '[i-k]%'
select * from names where name like '[i-k]%’

Odczytywanie danych z bazy – select

Komenda, która służy do pobierania danych z bazy danych to select, w najprostszej postaci ma formę:

select nazwy_kolumn from tabela

Przykład:
select * from books
Przykład działania select *

Znak * oznacza wszystkie obecne kolumny w kolejności zgodniej z tabelami.

Nazwy_kolumn są listą kolumn, które mają zostać zwrócone poprzez zapytanie obecnych w tabeli. Nazwy rozdzielamy przecinkami „,”. Szczegółowe wskazanie kolumn pozwala na pominięcie kolumn, które są nam zbędne lub określenie kolejności.

Uwaga:

Zalecam szczegółowe wskazywanie kolumn – pozwala uniknąć problemów z zmianą kolejności wyników oraz na zmniejszenie ilości przesyłanych danych poprzez sieć w przypadku dużych baz.

Przykład:
select id, author, name from books

Nie jest wymagane podawanie po słowie kluczowym select, a przed słowem from podawania tylko kolumn obecnych w tabeli. Można użyć wyrażeń zwracających jakąś wartość:

Przykłady:
select null as id, name from books
select id, name, 'Janusz' as author from books

Dopuszczalne jest także pominięcie sekcji from.

select 'test'

Takie rozwiązanie jest przydatne wraz z poleceniem insert.

Inne opcje:

Wraz z komendą select mogą występować inne słowa kluczowe, które zwiększają możliwości.. Część z nich zebrałem poniżej, zostaną opisane w innych wpisach:

  • where
  • distinct
  • order by
  • group by
  • having