Inne działy

 

Wyrażenia SQLite

W tej części kursu SQLite, będziemy poznawali wyrażenia SQLite.

Wyrażenie w języku programowania to kombinacja wartości, zmiennych, operatorów, funkcji i nawiasów, wartościowana (inaczej: ewaluowana) zgodnie z regułami tego języka, która po zakończeniu wykonywania, zwraca pewną wartość[1]. Proces ten nazywamy "wartościowaniem wyrażenia"; potocznie mówi się też, że "wyrażenie ewaluuje do tej wartości". Podobnie jak w matematyce, wyrażenie jest reprezentacją otrzymanej wartości.
Wyrażenia mogą (choć nie muszą) mieć skutków ubocznych. Brak skutków ubocznych jest jedną z zasad programowania funkcyjnego – języki całkowicie nie obsługujące efektów ubocznych nazywamy "językami czysto funkcyjnymi"(Wikipedia).

 

Wartości znakowe

Wartość znakowa jest to stała pewnego rodzaju. Wartość znakowa może być typu integer, floating, string, BLOB lub NULL.

 

sqlite> SELECT 5, 'Andrzej', 44.5;
5|Andrzej|44.5

Powyżej mamy wartości znakowe mianowicie typu integer, string oraz floating.

sqlite> .nullvalue NULL
sqlite> SELECT NULL;
NULL

Komenda .nullvalue podpowiada SQLite aby pokazać wartość NULL jako NULL. SQLite pokazuje pusty ciąg znakowy domyślnie jako NULL.

 

sqlite> SELECT x'345eda2348587aeb';
4^?#HXz

Ciąg znaków typu BLOB zawiera dane w formacie danych szesnastkowych poprzedzonych jednym znakiem "x" lub "X".

 

Operatory

Operatorzy są wykorzystywane do budowania wyrażeń. Operatorzy SQL są bardzo podobne do operatorów matematycznych. Istnieją dwa rodzaje operatorów. Binarne i jednoargumentowe. Operatorzy binarne mogą pracować z dwoma operandami, operator jednoargumentowy może pracować z jednym.Operator może mieć jeden lub dwa argumenty.Operand jest jednym z wejść (argumenty) od operatora.

Mamy kilka rodzajów operatorów:

  • operatory arytmetyczne
  • operatory logiczne
  • operatory relacyjne
  • operatory bitowe
  • inne operatory

 SQLite rozpoznaje następujące operatory binarne.

 

||
* / %
+ -
<< <> & |
< <= > >=
= == != <> IS IN LIKE GLOB BETWEEN
AND
OR

Operatory są ułożone według hierarchii ważności Operator || ma najwyższy priorytet, natomiast operator OR ma najniższy priorytet.

 

Poniżej są przedstawione operatory jednoargumentowe:

-    +    ~    NOT

Operator jednoargumentowy zmienia wartości dodatnie na ujemne i na odwrót.

 

sqlite> SELECT -(3-44);
41

Wynikiem działania jest wynik 41. Pozostałe dwa operatory zostaną omówione później.


 

Operatory arytmetczne


Operatory arytmetyczne rozumiane przez SQLite są to: mnożenie, dzielenie, dodawanie, odejmowanie i modulo.

sqlite> SELECT 3 * 3/9;
1

Są to działania mnożenia i dzielenia, które są znane jak wiemy z matematyki.

sqlite> SELECT 3 + 4 - 1 + 5;
11

Dodawanie i odejmowanie operatorów

sqlite> SELECT 11% 3;
2

Operator % nazywany jest operatorem modulo. Daje wynik w swoim działaniu, że reszta z dzielenia jednej liczby przez drugą. 11 % 3, 11 % 3 jest modulo 2, ponieważ 3 mieści się 3 trzykrotnie w 11 a reszta wynosi 2.


 

Operatory logiczne

Z operatorami logicznymi wykonujemy operacje logiczne. SQLite posiada następujące operatory logiczne I , LUB oraz NOT . Operatory logiczne zwracają wartości true lub false. W SQLite, 1 jest to wartość rue, 0 jest to false.

I operator zwraca wartość true, jeśli oba operandy są prawdziwe.

sqlite> SELECT 0 AND 0, 0 AND 1, 1 AND 0, 1 AND 1;
0|0|0|1

Pierwsze trzy operacje dają dają w wyniku wartość false, a ostatni wartość true.

sqlite> SELECT 3=3 AND 4=4;
1

Oba argumenty są prawdziwe, więc wynik jest prawdziwy (true) (1).

Operator OR jest prawdziwy, jeżeli co najmniej jeden z argumentów jest prawdziwy.

sqlite> SELECT 0 OR 0, 0 OR 1, 1 OR 0, 1 OR 1;
0|1|1|1

Pierwsza operacja ma wartość false, następne działania maja wartość true.

Operator NOT jest operatorem negacji. To sprawia, że wartość true zmienia się na false, a false na true.

sqlite> SELECT NOT 1, NOT 0;
0|1
sqlite> SELECT NOT (3=3);
0


 

Operatory relacyjne

 

 Operatory relacyjne służą do porównywania wartości. Te operatory zawsze skutkują wartością logiczną.

 sqlite> SELECT 3*3 == 9, 9 = 9;
1|1

Zarówno = i == są to operatory równości.

sqlite> SELECT 3 < 4, 3 <> 5, 4 >= 4, 5 != 5;
1|1|1|0

Użycie operatorów relacyjnych znane jest z matematyki.

Operatory bitowe

Liczby dziesiętne są naturalnymi dla ludzi. Liczby dwójkowe są naturalnymi liczbami dla komputerów. Binarne, ósemkowe, dziesiętne lub szesnastkowe symbole są to tylko zapisy o tym samym numerze. Operatory bitowe pracują z bitami liczby binarnej. Mamy binarne operatory logiczne i operatory przesunięcia.

Operator bitowy i(and) wykonuje porównanie bit-by-bit pomiędzy dwoma liczbami. Wynik na pozycji wynosi 1 tylko wtedy jeśli obydwa bity mają wartość 1.
     
    00110
  & 00011
  = 00010

Pierwsza cyfra to dwójkowo 6. Druga jest 3. Wynik jest 2.

sqlite> SELECT 6 & 3;
2
sqlite> SELECT 3 & 6;
2

Operator bitowy lub(or) wykonuje porównanie bit-by-bit pomiędzy dwoma liczbami. Wynik na pozycji wynosi 1 jeśli jeden z bitów mają wartość 1.

    
     00110
  |  00011
   = 00111

Wynikiem jest 00110 czyli dzisiętnie 7

sqlite> SELECT 6 | 3;
7

Operatory przesunięcia bitowego (Shift) dokonują przesunięcia bitów w prawo lub w lewo.

number << n : multiply number 2 to the nth power
number >> n : divide number by 2 to the nth power

Operatory te nazywane są również jako przesunięcie arytmetyczne.
     00110
  >>  00001
   = 00011

Przesuwamy każdy z bitów o 6 w prawo. Jest to równoważne podzieleniu 6 przez 2. Wynikiem jest 00011 lub dziesiętnie 3.

sqlite> SELECT 6 >> 1;
3
     00110
  << 00001
   = 01100

Przesuwamy każdy bit o 6 w lewo. Jest to równoważne mnożeniu 6 przez 2. Wynikiem jest 01100 lub dziesiętnie 12.

sqlite> SELECT 6 << 1;
12

Operator bitowej negacji zmienia każde 1 na 0 i 0 na 1.
>>> ~7
-8
>>> ~-8
7

Operator przywraca wszystkie bity do liczby 7. Jeden z bitów, określa czy liczba jest ujemny, czy też nie. Jeśli zanegujemy wszystkie bity jeszcze raz , otrzymamy ponownie liczbę 7.

Inne operatory



Istnieją jeszcze niektóre inne operatory. Obejmują one IN, LIKE, GLOB, BETWEEN.

sqlite> SELECT 'wolf' || 'hound';
wolfhound

Operator || jest operatorem konkatenacji ciągów znaków. Łączy po prostu ciągi.

Możemy zastosować operator IN w dwóch przypadkach.

sqlite> SELECT 'Tom' IN ('Tom', 'Frank', 'Jane');
1

Tutaj sprawdzamy, jeśli wartość ciągu ‘Tom’ jest na liście nazw, po operatorze IN. To wartość zwracana jest to wartość logiczna.

Na poniższym przykładzie Podsumujmy, co mamy w tabeli Cars.

sqlite> SELECT * FROM Cars;
Id          Name        Cost      
----------  ----------  ----------
1           Audi        52642     
2           Mercedes    57127     
3           Skoda       9000      
4           Volvo       29000     
5           Bentley     350000    
6           Citroen     21000     
7           Hummer      41400     
8           Volkswagen  21600  

W drugim przypadku operator IN pozwala na określenie wielu wartości w klauzuli WHERE.

sqlite> SELECT * FROM Cars WHERE Name IN ('Audi', 'Hummer');
Id          Name        Cost      
----------  ----------  ----------
1           Audi        52642     
7           Hummer      41400

Z tabeli Cars wybieramy samochody, które są wymienione po operatorze IN.

Operator LIKE jest używany w klauzuli WHERE, aby wyszukać określony wzorzec w kolumnie.

sqlite>  SELECT * FROM Cars WHERE Name LIKE 'Vol%';
Id          Name        Cost      
----------  ----------  ----------
4           Volvo       29000     
8           Volkswagen  21600   

W tym miejscu możemy wybrać samochody, których nazwy zaczynają się od "Vol.".

sqlite> SELECT * FROM Cars WHERE Name LIKE '____';
Id          Name        Cost      
----------  ----------  ----------
1           Audi        52642      

W tym miejscu możemy wybrać nazwę samochodów, która składa się z dokładnie czterech znaków. Istnieją cztery znaki podkreślenia.

Operator GLOB jest podobny do LIKE, ale używa składni globbing pliku Unix dla jego symboli wieloznacznych. Ponadto w GLOB jest uwzględniana wielkość liter, w przeciwieństwie do LIKE.

sqlite> SELECT * FROM Cars WHERE Name GLOB '*en';
Id          Name        Cost      
----------  ----------  ----------
6           Citroen     21000     
8           Volkswagen  21600

Mamy tutaj samochody, których nazwy kończą się znakami 'en'.

sqlite> SELECT * FROM Cars WHERE Name GLOB '????';
Id          Name        Cost      
----------  ----------  ----------
1           Audi        52642

W tym miejscu możemy ponownie wybrać nazwę samochodów, która składa się z dokładnie czterech znaków.

sqlite> SELECT * FROM Cars WHERE Name GLOB '*EN';
sqlite> SELECT * FROM Cars WHERE Name LIKE '%EN';
Id          Name        Cost      
----------  ----------  ----------
6           Citroen     21000     
8           Volkswagen  21600  

Te dwa wyrażenia demonstrują, że operator LIKE rozróżniana wielkość znaków, w GLOB jest uwzględniana wielkość liter.

Operator BETWEEN jest odpowiednikiem pary porównań. BETWEEN b i c jest odpowiednikiem a>=b AND a<=c

sqlite> SELECT * FROM Cars WHERE Cost BETWEEN 20000 AND 55000;
Id          Name        Cost      
----------  ----------  ----------
1           Audi        52642     
4           Volvo       29000     
6           Citroen     21000     
7           Hummer      41400     
8           Volkswagen  21600  
 
W tej instrukcji SQL wybraliśmy samochody, które kosztują pomiędzy 20000 i 55000 jednostkami.

Pierszeństwo

Priorytet operatorów mówi nam, które operatory są sprawdzane jako pierwsze. Poziom pierwszeństwa jest niezbędny w celu uniknięcia niejednoznaczności w wyrażeniach.

Co to jest wynikiem następującego wyrażenia? 28 lub 40?
3 + 5 * 5

Podobnie jak w matematyce operator mnożenia ma wyższy priorytet niż operator dodawania. Więc wynikiem jest 28.
(3 + 5) * 5

Aby zmienić kolejność obliczeń, możemy użyć nawiasów kwadratowych. Wyrażenia w nawiasach kwadratowych są obliczane zawsze najpierw.

sqlite> SELECT 3+5*5, (3+5)*5;
28|40

Pierwsze wyrażenie ma 28, ponieważ operator mnożenia ma wyższy priorytet, niż dodawanie. W drugim przykładzie aby zmienić kolejność pierwszeństwa wykorzystaliśmy nawiasy kwadratowe. Tak więc drugie wyrażenie ma wynik 40.

Tutaj umieściliśmy ponownie listę operatorów w SQLite.

unary + - ~ NOT
||
*    /    %
+    -
<<   <>   &    |
<    <=   >    >=
=    ==   !=   <>   IS  IN  LIKE  GLOB  BETWEEN
AND   
OR

Operatory w tym samym wierszu mają ten sam poziom pierwszeństwa. Priorytet rośnie od dołu do góry.

Łączność

Czasami pierwszeństwo nie jest zadowalające do określenia wyniku wyrażenia. Istnieje inna reguła o nazwie łączność. Łączność operatorów określa kolejność operatorów o tym samym poziomie pierwszeństwa.

9 / 3 * 3

Jaki jest wynik tego wyrażenia? 9 lub 1? Mnożenie, usuwania i modulo operatory są od lewej do prawej skojarzone. Wyrażenie jest obliczane w ten sposób: (9 / 3) * 3 i wynikiem jest 9.

sqlite> SELECT 9 / 3 * 3;
9

Reguła łączność jest od lewej do prawej.

sqlite> SELECT 0 AND 0 OR 1;
1

Reguła łączność jest ponownie obliczana od lewej do prawej. Jeśli został prawej do lewej, wynik będzie 0.  Operacje arytmetyczne, operatorów logicznych, relacyjnych i bitowe są wszystkie skojarzone od lewej do prawej.


 Łączność

Czasami pierwszeństwo nie jest zadowalające do określenia wyniku wyrażenia. Istnieje inna reguła o nazwie łączność. Łączność operatorów określa kolejność operatorów o tym samym poziomie pierwszeństwa.

9 / 3 * 3

Jaki jest wynik tego wyrażenia? 9 lub 1? Operatory mnożenia, usuwania i modulo stosuję się od lewej do prawej. Tak, więc wyrażenie jest obliczane w ten sposób: (9 / 3) * 3 i wynikiem jest 9.

sqlite> SELECT 9 / 3 * 3;

9

Reguła łączność jest stosowana od lewej do prawej.

sqlite> SELECT 0 AND 0 OR 1;

1

Zasada łączność jest ponownie stosowana od lewej do prawej. Gdyby było od prawej do lewej, wynik byłby 0.

Operatory arytmetyczne, logiczne, relacyjne i bitowe są stosowane od lewej do prawej strony.

________________________________________

W tej części kursu SQLite omówiliśmy wyrażenia SQLite. 

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.