You are on page 1of 5

Bazy Danych Ł.

Wąs 2021

Union czyli pionowe operacje na zbiorach

Sposoby łączenia tabel w klauzuli FROM – dotyczyły łączenia zbiorów w sposób poziomy. Określane
były typy złączeń (m.in. INNER, OUTER JOIN) oraz warunki dopasowania rekordów – wyszczególnione
przed operatorem ON. W wyniku otrzymywaliśmy zbiór elementów, opisywany za pomocą
wszystkich kolumn (atrybutów) łączonych tabel. Dlatego nazywamy to połączenie jako poziome.
Drugą grupą operacji na zbiorach, są operacje pionowe, czyli Union , EXCEPT oraz INTERSECT

Zagadnienia teoretyczne znajdują sie w osobnym pliku o nazwie union.pdf

Znaleźć najtańszy i najdroższy z produktów kto go dostarczył do jakiej kategorii należy

(najtańszy produkt nie może mieć wartości nieokreślonej lub zero) a w osobnej kolumnie zamieść
informacje czy produkt jest najtańszy czy najdroższy

(zapytanie do zrealizowania na bazie northwind angielski )

select 'najtanszy' ogolne, p.productname,p.unitprice, s.COMPANYNAME from products p inner join


categories c on c.categoryid = p.categoryid inner join suppliers s on s.supplierid = p.supplieridwhere
unitprice in (select min(unitprice) from products where unitprice is not null and unitprice<>0)

union

select 'najdrozszy' ogolne, p.productname,p.unitprice,s.COMPANYNAME from products p inner join


categories c on c.categoryid = p.categoryid inner join suppliers s on s.supplierid = p.supplierid where
unitprice in (select max(unitprice) from products);

Szukam produktów o nazwie zaczynającej się na dowolną literę, a druga litera zaczyna się

od c do p i trzecia litera nie jest g oraz cena produktu zawiera się w przedziale 10-100 bez wartości
10 i 90

select productname, unitprice from products where productname like '___%' and
(substring(productname,2,1)>'c' and substring (productname,2,1)<'p') or
(substring(productname,2,1)>'C' and substring (productname,2,1)<'P') and
substring(productname,3,1)<>'g' and unitprice between '10' and'100' and unitprice <> '90';
Bazy Danych Ł. Wąs 2021

Zadanie do wykonania

znajdź najtańszy i najdroższy produkt dostarczony przez dostawce którego nazwa zaczyna sie na literę
od a-g podaj z jakiej kategorii on pochodzi oraz w dodatkowej kolumnie czy jest to najdroższy czy
najtańszy produkt oraz nazwę kategorii

Substring

Funkcja SUBSTRING() daje nam możliwość wycięcia fragmentu ciągu znaków z rekordu.

Przykłady

SELECT SUBSTRING(`nazwa_kolumny`, pozycja[,liczba_znaków])

FROM `nazwa_tabeli`

WHERE `nazwa_tabeli` operator 'wartość'

SELECT SUBSTRING('nazwisko', 1,2)

FROM pracownicy

SELECT RIGHT ('hello world' , 3) ;

SELECT LEFT ('hello world' , 3) ;

SELECT CHARINDEX (' ','hello world') ;

SELECT SUBSTRING ('hello world', 4,5) ;

SELECT LEFT ('hello world' , CHARINDEX (' ','hello world') -1 )


Bazy Danych Ł. Wąs 2021

Klauzula having

Jest to trzeci i ostatni krok, w którym możemy filtrować elementy zbioru wynikowego. Różni się
zasadniczo od poznanych do tej pory, związanych z selekcją wierszy we FROM (gdzie filtrem są
warunki złączeń z innymi tabelami) oraz WHERE.

(5) SELECT

(1) FROM

(2) WHERE

(3) GROUP BY

(4) HAVING

(6) ORDER BY

Operacja grupowania opisana w artykule na temat GROUP BY, wprowadza pewne ograniczenia. W
każdym kolejnym kroku po GROUP BY, odwoływać się możemy bezpośrednio tylko do atrybutów
(kolumn) sekcji grupującej. Do pozostałych kolumn (sekcji danych surowych) tylko za pośrednictwem
funkcji agregujących.

HAVING jest kolejnym krokiem po GROUP BY – działamy zatem na całych grupach wierszy. Jest to tak
zwana selekcja pozioma grup wierszy. Warunki określone w WHERE, traktujemy jako selekcję
poziomą pojedynczych rekordów.

1. zapytanie zwracajace 2 kolumny ; kraj oraz ilosc zamowien z niego realizowanych, jedynie
kraje o najwiekszej liczbie zamowien

SELECT Kraj,COUNT (Idzamówienia) as 'ile' FROM zamówienia as z JOIN Klienci as k

ON z.IDklienta=k.IDklienta GROUP BY kraj HAVING COUNT (Idzamówienia) =

(SELECT MAX(ile) as 'maks' FROM (SELECT Kraj, COUNT(IDzamówienia) as 'ile'

FROM zamówienia as z JOIN Klienci as k ON z.IDklienta=k.IDKlienta

GROUP BY Kraj) as t1);


Bazy Danych Ł. Wąs 2021

przykłady klauzula having na bazie northwind angielski

select Country, CIty, CustomerID , ContactName, CompanyName

from dbo.Customers

WHERE Country = 'Brazil'

select CIty, COUNT(CustomerID) as CustQty

from dbo.Customers

WHERE Country = 'Brazil'

GROUP BY City

select City, COUNT(CustomerID) as CustQty

from dbo.Customers

WHERE Country = 'Brazil'

GROUP BY City

HAVING COUNT(CustomerID)>1

select Country,City, COUNT(CustomerID) as CustQty

from dbo.Customers

GROUP BY Country, City

HAVING Country = 'Brazil' AND COUNT(CustomerID) >1

Zadanie do wykonania

(zapytanie do zrealizowania na bazie northwind angielski )

1. Które z zamówienie opiewa na najwyższa wartość, podać datę zamówienia


Bazy Danych Ł. Wąs 2021

You might also like