Pokazywanie postów oznaczonych etykietą WHERE. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą WHERE. Pokaż wszystkie posty

środa, 5 kwietnia 2017

Lekcja 17. Podzapytania jednowierszowe.

Podzapytania jednowierszowe zwracają do zewnętrznej instrukcji SQL zero lub jeden wiersz. Podzapytanie możemy umieścić w klauzuli WHERE, klauzuli HAVING lub klauzuli FROM instrukcji SELECT.

Podzapytanie w klauzuli WHERE
Podzapytanie można umieścić w klauzuli WHERE innego zapytania. Klauzula WHERE poniższego zapytania zawiera podzapytanie. Należy zauważyć, że zostało ono umieszczone w nawiasach okrągłych. Ten przykład pobiera wartości pól first_name i last_name z wiersza tabeli employee, w którym ­last­_name ma wartość Forest


Podzapytanie w klauzuli WHERE ma postać :


To zapytanie jest uruchamiane jako pierwsze (i tylko jeden raz) i zwraca emp_no dla wiersza, w którym last­­­_name na wartość Forest. Wartość emp­­_no w tym wierszu wynosi 9 i jest ona przysłana do klauzuli WHERE zewnętrznego zapytania, dlatego też zwraca ono ten sam wynik co poniższe:



Użycie innych operatorów jednowierszowych
W klauzuli WHERE podzapytania przestawionego na początku był wykorzystywany operator równości (=). W podzapytaniach jednowierszowych można również używać innych operatorów porównania, takich jak <>, <, >, <= i >= .
W poniższym przykładzie w klauzuli WHERE zewnętrznego zapytania użyto operatora > . W podzapytaniu zastosowano funkcję AVG() do obliczania średniego wynagrodzenia pracowników, która jest przesłana do klauzuli WHERE zewnętrznego zapytania. Całe zapytanie zwraca emp­­_no, first­_name, last_name i salary pracowników, których wynagrodzenie jest większe od średniego wynagrodzenia wszystkich pracowników:

 

Poniższy przykład przestawia uruchomienie samego podzapytania:

 

Wartość 385796,85 zwrócona przez podzapytanie jest wykorzystywana w klauzuli WHERE zewnętrznego zapytania, w związku z czym jest ono tożsame z poniższym:


Podzapytanie w klauzuli HAVING
W klauzuli HAVING zewnętrznego zapytania możemy umieścić podzapytanie. To pozwala na filtrować wyniki grupy wierszy na podstawie wyników zwracanych przez podzapytanie.
W poniższym przykładzie użyto podzapytania w klauzuli HAVING zewnętrznego zapytania. Przykład pobiera kod (job_code) oraz średnie wynagrodzenie pracowników o danym kodzie, jeżeli jest ono większe niż średnie wynagrodzenie wszystkich pracowników:

 

Zauważmy, że podzapytanie oblicza najpierw średnie wynagrodzenie wszystkich pracowników za pomocą funkcji AVG(). Przeanalizujmy przykład, aby zrozumieć działanie tego zapytania. Oto wynik uruchomienia podzapytania: 

 

Wartość 385796,85 jest wykorzystywana w klauzuli HAVING zewnętrznego zapytania do odfiltrowania tylko wierszy grup, w których średnia wynagrodzeń jest większa od 385796,85. Poniższe zapytanie przestawia wersję zewnętrznego zapytania, która pobiera kod oraz średnie wynagrodzenie pracowników pogrupowanych według job_code:

 

Średnie wynagrodzenie większe niż niż 385796,85 występują w grupach z job_code równym Eng i SRep . Zgodnie z oczekiwaniami te same grupy zostały zwrócone przez zapytanie przestawione na początku.

Podzapytanie w klauzuli FROM
Podzapytanie można umieścić w klauzuli FROM zewnętrznego zapytania. Tego typu podzapytania nazywamy widokami wbudowanymi. Poniższy, prosty przykład pobiera pracowników, dla których emp_no jest mniejsze od 10:

 

Podzapytanie zwraca do zapytania zewnętrznego wiersze z tabeli employee, w których emp_no ma wartość mniejszą od 10. Zapytanie zewnętrzne pobiera i wyświetla te wartości emp_no. Z perspektywy klauzuli FROM zewnętrznego zapytania wyniki podzapytania są po prostu kolejnym źródłem danych. 

środa, 8 marca 2017

Lekcja 7. Instrukcja SELECT.

Polecenie SELECT służy do pobierania informacji z tabel bazy danych. W najprostszej postaci tej instrukcji należy określić tabelę i kolumny, z których chcemy pobrać dane.

Wykonywanie instrukcji SELECT

Poniższa instrukcja SELECT pobiera kolumny cust_no, customer oraz phone_no z tabeli customer:


Tuż za słowem kluczowym SELECT należy wpisać nazwy kolumn, z których mają być pobrane dane. Za słowem kluczowym FROM należy wpisać nazwę tabeli. Instrukcję SQL trzeba zakończyć średnikiem (;).

Jeżeli chcemy pobrać wszystkie kolumny z tabeli, możemy użyć gwiazdki (*) zamiast listy kolumn. W poniższym przykładzie gwiazdka została użyta do pobrania wszystkich kolumn z tabeli department:


Za pomocą słowa kluczowego FIRST możemy ograniczyć ilość pobieranych rekordów.  W poniższym przykładzie ilość pobranych rekordów z tabeli department została ograniczona do 5:


Wykorzystanie klauzuli WHERE do wskazywania wierszy do pobrania
Klauzula WHERE ogranicza zakres pobieranych wierszy. Klauzulę WHERE umieszczamy za klauzulą FROM:

SELECT lista elementów
FROM lista tabel
WHERE lista warunków;

W poniższym zapytaniu użyto klauzuli WHERE do pobrania z tabeli customer wiersza, w którym kolumna cust_no ma wartość 1002.


Używanie aliasów kolumn
Gdy pobieramy kolumnę z tabeli, w wynikach jako nagłówek kolumny Firebird wpisuje nawę kolumny wielkimi literami. Na przykład gdy pobieramy kolumnę cust_no, nagłówkiem w wynikach jest CUST_NO. Możemy określić własny nagłówek , stosując alias. W poniższym zapytaniu kolumna cust_no otrzymuje alias NUMBER:


Jeżeli chcemy użyć spacji i zachować wielkość liter w aliasie, należy jego tekst umieścić w cudzysłowie:



Przed tekstem aliasu można również umieścić opcjonalne słowo kluczowe AS:



Łączenie wartości z kolumn za pomocą konkatenacji
Za pomocą konkatenacji można łączyć wartości z kolumn pobrane przez zapytanie, co umożliwia uzyskanie bardziej sensownych wyników. Poniższe zapytanie łączy kolumny first_name oraz last_name z tabeli employee za pomocą operatora konkatenacji (||). Nalży zauważyć, że po kolumnie first_name został dodany znak spacji, a dopiero później kolumna last_name:


Wartości kolumn first_name i last_name zostały połączone w wynikach pod aliasem Employee name.

Wartość null
Wartość specjalna – null – oznacza, że wartość dla danej kolumny jest nieznana. Nie jest ona jednak pustym wpisem.
Jeżeli pobieramy kolumnę, która zawiera wartość null, w jej wynikach zobaczymy <null> .


Można również sprawdzić występowanie wartości null, umieszczając w zapytaniu IS NULL. W poniższym przykładzie zostały zwrócone informacje o projekcie Translator upgrade, ponieważ w tym wierszu w kolumnie team_leader występuje null:


Zdarza się, że chcemy wyświetlić inną wartość w miejsce null. Aby to zrobić musimy posłużyć się funkcją COALESCE(). Funkcja COALESCE() przyjmuje dwa lub więcej parametrów i zwraca pierwszą wartość, która okażę się nie być null. W poniższym zapytaniu COALESCE() zwraca wyrażenie  ‘lack’, jeżeli kolumna team_leader zawiera wartość null:



Wyświetlanie unikatowych wierszy
Załóżmy, że chcemy uzyskać listę walut obowiązujących w krajach znajdujący się w tabeli country. Możemy to zrobić za pomocą poniższego zapytania, które pobiera kolumnę currency z tabeli country:


Jak widzimy w wynikach zwróconych przez zapytanie, niektóre waluty obowiązują w więcej niż jednym kraju i w związku z tym się powtarzają. Można usunąć powtarzające wiersze za pomocą słowa kluczowego DISTINCT. W poniższym zapytaniu użyto go, aby pominąć powtarzające się wiersze:


Na tej liście łatwiej zauważyć, że wszystkich walut jest 11; powtarzające się wiersze zostały pominięte.