Postawy języka TSQL

SELECT ##################################################
Podstawowe polecenie wyświetlające dane z podanej tabeli

SQL> select * from employee

EMPNO  FIRSTNME     MIDINIT LASTNAME        WORKDEPT PHONENO HIREDATE   JOB      EDLEVEL SEX BIRTHDATE  SALARY      BONUS       COMM
------ ------------ ------- --------------- -------- ------- ---------- -------- ------- --- ---------- ----------- ----------- -----------
000010 CHRISTINE    I       HAAS            A00      3978    01/01/1995 PRES          18 F   08/24/1963   152750.00     1000.00     4220.00
000020 MICHAEL      L       THOMPSON        B01      3476    10/10/2003 MANAGER       18 M   02/02/1978    94250.00      800.00     3300.00
000030 SALLY        A       KWAN            C01      4738    04/05/2005 MANAGER       20 F   05/11/1971    98250.00      800.00     3060.00
000050 JOHN         B       GEYER           E01      6789    08/17/1979 MANAGER       16 M   09/15/1955    80175.00      800.00     3214.00
...
200280 EILEEN       R       SCHWARTZ        E11      8997    03/24/1997 OPERATOR      17 F   03/28/1966    46250.00      500.00     2100.00
200310 MICHELLE     F       SPRINGER        E11      3332    09/12/1994 OPERATOR      12 F   04/21/1961    35900.00      300.00     1272.00
200330 HELENA               WONG            E21      2103    02/23/2006 FIELDREP      14 F   07/18/1971    35370.00      500.00     2030.00
200340 ROY          R       ALONZO          E21      5698    07/05/1997 FIELDREP      16 M   05/17/1956    31840.00      500.00     1907.00

  42 record(s) selected.

ORDER BY ###############################################
Sortuje wyświetlane dane po podanej kolumnie. Można sortować malejąco DESC lub rosnąco ASC

SQL> select FIRSTNME, LASTNAME, PHONENO, BIRTHDATE, SALARY from employee where PHONENO IN (3490,1682,8953,0672) ORDER BY FIRSTNME DESC

FIRSTNME     LASTNAME        PHONENO BIRTHDATE  SALARY
------------ --------------- ------- ---------- -----------
JENNIFER     LUTZ            0672    03/19/1978    49840.00
MARILYN      SCOUTTEN        1682    02/21/1979    51340.00
REBA         JOHN            0672    03/19/1978    69840.00
SYBIL        JOHNSON         8953    10/05/1976    47250.00
VINCENZO     LUCCHESSI       3490    11/05/1959    66500.00

  5 record(s) selected.

Sortowanie wielokrotne malejąco wg daty i rosnąco wg wagi
SQL> select orderid, custid, orderdate, shipcity
from Sales.Orders
order by orderdate desc, freight asc

orderid     custid      orderdate               shipcity
----------- ----------- ----------------------- ---------------
11075       68          2008-05-06 00:00:00.000 Geneve
11077       65          2008-05-06 00:00:00.000 Albuquerque
11074       73          2008-05-06 00:00:00.000 Kobenhavn
...
10250       34          2006-07-08 00:00:00.000 Rio de Janeiro
10249       79          2006-07-05 00:00:00.000 Münster
10248       85          2006-07-04 00:00:00.000 Reims

(830 row(s) affected)

ALIAS ###################################################
Służą do zmiany nazwy wyświetlanej kolumny na nazwę własną. Uwaga! Niektóre bazy (DB2) nie rozpoznają aliasów w nawiasach i cudzyslowiach.

SQL> select FIRSTNME as [imie], LASTNAME 'nazwisko' from employee

IMIE         NAZWISKO
------------ ---------------
CHRISTINE    HAAS
MICHAEL      THOMPSON
SALLY        KWAN
JOHN         GEYER
...
EILEEN       SCHWARTZ
MICHELLE     SPRINGER
HELENA       WONG
ROY          ALONZO

  42 record(s) selected.

WHERE ##################################################
Jest to wyrażenie dzieki któremu możemy wyszukiwać dane w tabelach. Po tym wyrażeniu musi nastąpić jakiś warunek którego spełnienie spowoduje wyświetlenie danych

SQL> select FIRSTNME, LASTNAME FROM employee WHERE LASTNAME = 'SCHWARTZ'

AND i OR #################################################
Czasami występuje konieczność połączenia dwóch warunków. Stosujemy wtedy warunki AND (i) oraz OR (lub).
W pierwszym przypadku zostaną wyświetlone dane spełniające oba warunki a w drugim przypadku jeden lub drugi.

SQL> select FIRSTNME, LASTNAME FROM employee WHERE FIRSTNME = 'JOHN' AND LASTNAME='SMITH';

db2 => select FIRSTNME, LASTNAME FROM employee WHERE FIRSTNME = 'JOHN' OR LASTNAME='SMITH';

W warunkach mozemy stosować znaki =, lub je np łączyć (=>,= 20 AND IdKlienta < 100;

BETWEEN ###############################################
Służy do wyszukiwania wierszy którcyh wartości należą do podanego przedziału

SQL> SELECT firstnme, lastname, phoneno, birthdate, salary FROM employee WHERE salary BETWEEN 70000 AND 90000

FIRSTNME     LASTNAME        PHONENO BIRTHDATE  SALARY
------------ --------------- ------- ---------- -----------
JOHN         GEYER           6789    09/15/1955    80175.00
IRVING       STERN           6423    07/07/1975    72250.00
EILEEN       HENDERSON       5498    05/15/1971    89750.00
THEODORE     SPENSER         0972    12/18/1980    86150.00
DELORES      QUINTANA        4578    09/15/1955    73800.00

  5 record(s) selected.

IN ######################################################
Służy do wyszukiwania wierszy w tabelach posiadających podane wartości

SQL> select FIRSTNME, LASTNAME, PHONENO, BIRTHDATE, SALARY from employee where PHONENO IN (3490,1682,8953,0672)

FIRSTNME     LASTNAME        PHONENO BIRTHDATE  SALARY
------------ --------------- ------- ---------- -----------
VINCENZO     LUCCHESSI       3490    11/05/1959    66500.00
MARILYN      SCOUTTEN        1682    02/21/1979    51340.00
JENNIFER     LUTZ            0672    03/19/1978    49840.00
SYBIL        JOHNSON         8953    10/05/1976    47250.00
REBA         JOHN            0672    03/19/1978    69840.00

  5 record(s) selected.

LIKE ####################################################
Służy do wyszukiwania wzorców (danych tekstowych) w podanych tabelach

SQL> select FIRSTNME, LASTNAME, PHONENO, BIRTHDATE, SALARY from employee where FIRSTNME like 'C%'

FIRSTNME     LASTNAME        PHONENO BIRTHDATE  SALARY
------------ --------------- ------- ---------- -----------
CHRISTINE    HAAS            3978    08/24/1963   152750.00

  1 record(s) selected.

Przy stosowaniu warunków WHERE i ciągów znaków zaleca się stosowanie znaku N. Szczególnie gdy w tabelach znajdują się znaki narodowe (ąśćź itd). Znak N przed ciągiem 'Spain’ zamienia tekst na UNICODE, bez N jest zamieniany na kod ASCII i może błędnie pokazywać dane. Zalecane jest stosowanie przy ciągach tekstowych

SQL> select FIRSTNME, LASTNAME FROM employee WHERE LASTNAME = N'SCHWARTZ'

FIRSTNME     LASTNAME
------------ ---------------
EILEEN       SCHWARTZ

  1 record(s) selected.

Dolna kreska zastepuje jeden znak
SQL> select firstname from hr.Employees where firstname like '__ria'

firstname
----------
Maria

(1 row(s) affected)

Składające się z czterech znaków:
SQL> select firstname from hr.Employees where firstname like '____'

Kończące się na literę A:
SQL> select firstname from hr.Employees where firstname like '%a'

firstname
----------
Sara
Maria
Zoya

(3 row(s) affected)

Dane mające literę A w środku wyrazu:
SQL> select firstname from hr.Employees where firstname like '%a%'

firstname
----------
Sara

(1 row(s) affected)

Zaczynające się od podanych liter i składające się z trzech znaków i mające więcej niż 5 znaków

SQL> SELECT IdOsoby,Imie,Nazwisko,Wzrost FROM Osoby WHERE Nazwisko LIKE '[JKL]___%'

Kończące się na podane litery

SQL> SELECT IdOsoby,Imie,Nazwisko,Wzrost FROM Osoby WHERE Nazwisko LIKE '%[ak]'

Warunek dotyczący wartości dziesiętnych. Uwaga! Stosujemy kropki oddzielające jednostki od liczb dziesietnych

SQL> SELECT Imie+Nazwisko as Dane, Wzrost FROM Osoby WHERE Wzrost BETWEEN 1.60 AND 1.80;

Odrocenie kolejnosci znakow w rekordzie
SQL> select firstname from hr.Employees where reverse(firstname) like 'a%'

firstname
----------
Sara
Maria
Zoya

(3 row(s) affected)

TOP #####################################################
Wyświetla podaną liczbę pierwszych wierszy w tabeli. Uwaga! Na maszynach wielokorowych dane moga być to dane losowe !!

SQL> select top(5) orderid, custid, orderdate ,shipcity from Sales.Orders;

orderid     custid      orderdate               shipcity
----------- ----------- ----------------------- ---------------
10248       85          2006-07-04 00:00:00.000 Reims
10249       79          2006-07-05 00:00:00.000 Münster
10250       34          2006-07-08 00:00:00.000 Rio de Janeiro
10251       84          2006-07-08 00:00:00.000 Lyon
10252       76          2006-07-09 00:00:00.000 Charleroi

(5 row(s) affected)

Można też wyświetlać procentowo (np 10 procent tabeli)

SQL> select top(10) percent orderid, custid, orderdate , shipcity from Sales.Orders;

orderid     custid      orderdate               shipcity
----------- ----------- ----------------------- ---------------
10248       85          2006-07-04 00:00:00.000 Reims
10249       79          2006-07-05 00:00:00.000 Münster
10250       34          2006-07-08 00:00:00.000 Rio de Janeiro
...
10328       28          2006-10-14 00:00:00.000 Lisboa
10329       75          2006-10-15 00:00:00.000 Lander
10330       46          2006-10-16 00:00:00.000 Barquisimeto

(83 row(s) affected)

Na jego podstawie można utworzyć widoki. Pozwala na zastosowanie ORDER przy tworzeniu widoku
Normalnie nie można tego stosować. Eksportujemy 100% tabeli do widoku

SQL> create view Sales.MyOrders as
select top(100) percent * from Sales.Orders
order by orderdate desc, freight asc

Command(s) completed successfully.

Wyświetlamy widok
SQL> select orderid, orderdate, freight, shipcity from Sales.MyOrders

orderid     orderdate               freight               shipcity
----------- ----------------------- --------------------- ---------------
10248       2006-07-04 00:00:00.000 32,38                 Reims
10249       2006-07-05 00:00:00.000 11,61                 Münster
10250       2006-07-08 00:00:00.000 65,83                 Rio de Janeiro
...
11075       2008-05-06 00:00:00.000 6,19                  Geneve
11076       2008-05-06 00:00:00.000 38,28                 Marseille
11077       2008-05-06 00:00:00.000 8,53                  Albuquerque

(830 row(s) affected)

LIMIT ################################################
Za jej pomocą ograniczamy liczbę wyświetlanych wierszy:

sql> select * from testbaza1.testtable1 limit 1;

+----+-----------+----------+--------------------+
| id | firstname | lastname | email              |
+----+-----------+----------+--------------------+
|  1 | Anna      | Nowak    | anna.nowak@mail.pl |
+----+-----------+----------+--------------------+
1 row in set (0.00 sec)

DECLARE ################################################
Za jej pomocą deklarujemy zmianne które potem możemy wykorzystać w zapytaniach

SQL> declare @wiek int;
set @wiek = 125;
select @wiek as wiek;

wiek
-----------
125

1 record(s) selected.

Można też od razu zadeklarować i przypisać wartość

declare @rok int = 1410;

lub przypiąć je za pomocą polecenie SELECT

select @data1 = year(getdate());

CONCAT #################################################
Wartości w tabelach możemy łączyć ze sobą jeśli są tego samego typu.

SQL> select FIRSTNME + ' ' + LASTNAME as [imie i nazwisko] from employee order by [imie i nazwisko]

imie i nazwisko
-------------------------------
Don Funk
Judy Lew
Maria Cameron
...
Sven Buck
Yael Peled
Zoya Dolgopyatova

(9 row(s) affected)

Służy do łączenia dwóch lub więcej kolumn w jedną całość
SQL> select concat(FIRSTNME,' ',LASTNAME) as nazwa from employee

NAZWA
---------------------------
CHRISTINE HAAS
MICHAEL THOMPSON
SALLY KWAN
JOHN GEYER
...
EILEEN SCHWARTZ
MICHELL ESPRINGER
HELEN AWONG
ROY ALONZO

  42 record(s) selected.

W niektórych bazach sumowanie wartości i NULLa za pomocą plusów daje wynik NULL (MsSQL od wersji 2012)
SQL> select FIRSTNME+' '+null as wynik from HR.Employees

wynik
------------
NULL
NULL
NULL
...
NULL
NULL
NULL

(9 row(s) affected)

Sumowanie wartości i NULLA nie zwraca NULL’a w przypadku stosowania CONCAT’a (po prostu wstawia pusty znak)
select concat(FIRSTNME,null,'!') from HR.Employee

WITH TIES ###############################################
To wyświetlenie 10 wierszy wraz z wierszami o takiej samej wartości jak w wartości ORDER
(ORDER musi byc inaczej nie zadziała)

SQL> select top(10) with ties orderid, custid, orderdate from Sales.Orders order by shipperid

orderid     custid      orderdate
----------- ----------- -----------------------
10249       79          2006-07-05 00:00:00.000
10251       84          2006-07-08 00:00:00.000
10258       20          2006-07-17 00:00:00.000
...
11065       46          2008-05-01 00:00:00.000
11070       44          2008-05-05 00:00:00.000
11071       46          2008-05-05 00:00:00.000

(249 row(s) affected)

Powyższe zapytanie zwraca 249 wierszy. Niżej tylko 10 wierszy

SQL> select top(10) orderid, custid, orderdate from Sales.Orders

orderid     custid      orderdate
----------- ----------- -----------------------
10248       85          2006-07-04 00:00:00.000
10249       79          2006-07-05 00:00:00.000
10250       34          2006-07-08 00:00:00.000
...
10255       68          2006-07-12 00:00:00.000
10256       88          2006-07-15 00:00:00.000
10257       35          2006-07-16 00:00:00.000

(10 row(s) affected)

OFFSET ##################################################
Wyswietlenie po okreslonej liczbie wierszy (stronicowanie rekordow). Pierwszych 10 rekordow od 0 do 10 (musi byc ORDER BY… !!!)
SQL> select
orderid,
custid,
empid,
orderdate
from Sales.Orders
order by orderdate desc, freight asc
offset 0 rows fetch first 10 rows only

Pominiecie 50 rekordow i wyswietlenie kolejnych 30 (od 51 do 60)

SQL> select
orderid,
custid,
empid,
orderdate
from Sales.Orders
order by orderdate desc, freight asc
offset 50 rows fetch first 20 rows only

Inny zapis z wykorzystaniem zmiennych

SQL> declare @page int = 2 -- numer strony z danymi
declare @offset int = 25 -- liczba wierszy na stronie
select
orderid,
custid,
empid,
orderdate
from Sales.Orders
order by orderdate desc, freight asc
offset (@page-1) * @offset rows fetch first @offset rows only

FETCH ##################################################
Polecenie FETCH zwraca określoną liczbę wierszy z podanej tabeli.

SQL> select FIRSTNME, LASTNAME, PHONENO, BIRTHDATE, SALARY from employee fetch first 5 rows only

FIRSTNME     LASTNAME        PHONENO BIRTHDATE  SALARY
------------ --------------- ------- ---------- -----------
CHRISTINE    HAAS            3978    08/24/1963   152750.00
MICHAEL      THOMPSON        3476    02/02/1978    94250.00
SALLY        KWAN            4738    05/11/1971    98250.00
JOHN         GEYER           6789    09/15/1955    80175.00
IRVING       STERN           6423    07/07/1975    72250.00

  5 record(s) selected.

GROUP BY … HAVING #######################################
Łączy kilka wierszy w jeden na podstawie wartości jednej lub kilku kolumn.
Dla lepszego zrozumienia wyświetlimy najpierw całą tabelę Employee

SQL> select FIRSTNME, LASTNAME, WORKDEPT, SALARY from employee

FIRSTNME     LASTNAME        WORKDEPT SALARY
------------ --------------- -------- -----------
CHRISTINE    HAAS            A00        152750.00
MICHAEL      THOMPSON        B01         94250.00
SALLY        KWAN            C01         98250.00
JOHN         GEYER           E01         80175.00
...
EILEEN       SCHWARTZ        E11         46250.00
MICHELLE     SPRINGER        E11         35900.00
HELENA       WONG            E21         35370.00
ROY          ALONZO          E21         31840.00

  42 record(s) selected.

Teraz pogrupujemy sprzedaż (SALARY) zgodnie z numerem departamentu (WORKDEPT)

SQL> SELECT workdept, SUM(salary) AS total_salary FROM employee GROUP BY workdept

WORKDEPT TOTAL_SALARY
-------- ---------------------------------
A00                              354250.00
B01                               94250.00
C01                              308890.00
D11                              646620.00
D21                              358680.00
E01                               80175.00
E11                              317140.00
E21                              282520.00

  8 record(s) selected.

SQL> SELECT workdept, SUM(salary) AS total_salary FROM employee GROUP BY workdept HAVING workdept like 'A%'
(sprawdzić bo coś nie działa)

CASE ##################################################
Używamy jej jeśli chcemy uzależnić wykonywane operacje od zwróconej wartości

SQL> select FIRSTNME, LASTNAME, SALARY from employee fetch first 5 rows only

FIRSTNME     LASTNAME        SALARY
------------ --------------- -----------
CHRISTINE    HAAS              152750.00
MICHAEL      THOMPSON           94250.00
SALLY        KWAN               98250.00
JOHN         GEYER              80175.00
IRVING       STERN              72250.00

  5 record(s) selected.

SQL> select distinct LASTNAME
CASE SALARY
WHEN 94200 THEN '94.200 zł'
WHEN 80175 THEN '80.175 zł';
ELSE 'inna'
END AS commnent
FROM employee

I jeszcze drugi sposób na ALIAS

SQL> select distinct
categoryid as [ID],
Kategoria = case categoryid
when 1 then 'Obuwie'
when 2 then 'Czapki'
when 3 then 'Odziez'
else 'nieznany' -- jesli nie damy tego ELSE to zwroci NULL dla nieznanych wartosci
end
from Production.Products

i jeszcze jeden z z wyrazeniami logicznymi gdzie categoryid wpisujemy po kazdym WHERE

select distinct
categoryid as [ID],
case
when categoryid = 1 then 'Obuwie'
when categoryid = 2 and unitprice 20 then 'drogie czapki'
when categoryid = 3 then 'Odziez'
else 'nieznany'
end as [Kategoria]
from Production.Products

(do sprawdzenia)

ROWNUMBER i OVER #######################################
Funkcja FETCH zwraca pierwsze wiersz. Aby wyświetlić np 15 wiersz i dalsze nalezy posłużyć się funkcją ROWNUMBER i OVER

SQL> select DEPTNO,DEPTNAME from department

DEPTNO DEPTNAME
------ ------------------------------------
A00    SPIFFY COMPUTER SERVICE DIV.
B01    PLANNING
C01    INFORMATION CENTER
D01    DEVELOPMENT CENTER
D11    MANUFACTURING SYSTEMS
D21    ADMINISTRATION SYSTEMS
E01    SUPPORT SERVICES
E11    OPERATIONS
E21    SOFTWARE SUPPORT
F22    BRANCH OFFICE F2
G22    BRANCH OFFICE G2
H22    BRANCH OFFICE H2
I22    BRANCH OFFICE I2
J22    BRANCH OFFICE J2

  14 record(s) selected.

SQL> select ROWNUMBER() OVER() ROWID, DEPTNO,DEPTNAME from department

SQL> select ROWNUMBER() OVER() ROWID, DEPTNO,DEPTNAME from department

ROWID                DEPTNO DEPTNAME
-------------------- ------ ------------------------------------
                   1 A00    SPIFFY COMPUTER SERVICE DIV.
                   2 B01    PLANNING
                   3 C01    INFORMATION CENTER
                   4 D01    DEVELOPMENT CENTER
                   5 D11    MANUFACTURING SYSTEMS
                   6 D21    ADMINISTRATION SYSTEMS
                   7 E01    SUPPORT SERVICES
                   8 E11    OPERATIONS
                   9 E21    SOFTWARE SUPPORT
                  10 F22    BRANCH OFFICE F2
                  11 G22    BRANCH OFFICE G2
                  12 H22    BRANCH OFFICE H2
                  13 I22    BRANCH OFFICE I2
                  14 J22    BRANCH OFFICE J2

  14 record(s) selected.

Teraz spróbujemy wyświetlić tylko wiersze powyżej 5:

SQL> select ROWID, DEPTNO, DEPTNAME FROM (select ROWNUMBER() OVER() as ROWID,DEPTNO, DEPTNAME FROM department) as temp where rowid > 5

ROWID                DEPTNO DEPTNAME
-------------------- ------ ------------------------------------
                   6 D21    ADMINISTRATION SYSTEMS
                   7 E01    SUPPORT SERVICES
                   8 E11    OPERATIONS
                   9 E21    SOFTWARE SUPPORT
                  10 F22    BRANCH OFFICE F2
                  11 G22    BRANCH OFFICE G2
                  12 H22    BRANCH OFFICE H2
                  13 I22    BRANCH OFFICE I2
                  14 J22    BRANCH OFFICE J2

  9 record(s) selected.

DISTINCT ################################################
Wyświetla niepowtarzające się wartości

SQL> select DISTINCT WORKDEPT from employee

WORKDEPT
--------
A00
B01
C01
D11
D21
E01
E11
E21

  8 record(s) selected.

NULL ###################################################
Jest to specyficzna wartość.jest to wartosc nieokreslona oprocz 1 i 0 jest NULL (Three-Valued Logic)
— 2 + 2 = 4
— 2 + NULL = NULL
— 2 + 0 = 2
–porownywalne do nieskonczonosci (?)

SQL> select
companyname,
region
from Sales.Customers
where region = NULL --nic nie zwroci bo nie na pola rownemu NULL

companyname                              region
---------------------------------------- ---------------

(0 row(s) affected)

SQL> select
companyname,
region
from Sales.Customers
where region is NULL

Zwrócone pole jest NULL’em, ale nie jest jemu rowne

companyname                              region
---------------------------------------- ---------------
Customer NRZBB                           NULL
Customer MLTDN                           NULL
Customer KBUDE                           NULL
...
Customer ZHYOS                           NULL
Customer XBBVR                           NULL
Customer CCFIZ                           NULL

(60 row(s) affected)

SQL> select ''
select NULL

Jeśli podczas INSERTU nie podamy okreslonej wartosci to jest wprowadzona wartość NULL. Oznacza to ze nie było żadnych operacji na danym polu
Jeśli coś wpiszemy a potem to usuniemy bedzie ” (puste miejsce).

ISSNULL ################################################
Funkcjaa ISSNULL zamienia NULL’a na określoną wartość

SQL> select
isnull(region,'nieokreslone'),*
from Sales.Customers

Zamiana NULL’a na liczbę

SQL> select
isnull(region,0),*
from Sales.Customers
where region is NULL

A teraz kilka matematycznych funkcji:

COUNT ##################################################
Wyświetla liczbę wierszy w podanej tabeli

SQL> select count(*) as licznik from employee

LICZNIK
-----------
         42

  1 record(s) selected.

Połączenie COUNT i DISTINCT – wyświetlenie ilości niepowtarzających się danych oraz ilości danych.

SELECT COUNT(DISTINCT Imie) AS "bez powtórzeń", COUNT(Imie) AS powtórzenia FROM Klienci

Count możemy łączyć np z funkcją GROUP:

sql> select count(*),ulica from dane group by ulica;

+----------+-----------+
| count(*) | ulica     |
+----------+-----------+
|   1      | Marszalka |
|   2      | Polna     |
|   1      | Sienna    |
+----------+-----------+
3 rows in set (0.00 sec)

SUM ####################################################
Suma wartości w kolumnie
SQL> select sum(salary) as suma from employee

SUMA
---------------------------------
                       2442525.00

  1 record(s) selected.

AVG ####################################################
Średnia wartość
SQL> select avg(salary) as srednia from employee

SREDNIA
---------------------------------
   58155.357142857142857142857142

  1 record(s) selected.

Jesli występują NULLe trzeba je zamienic na 0 zeby wynik byl prawidlowy (w naszym przypadku nie ma)

SQL> select avg(isnull(salary,0)) as srednia from employee

SREDNIA
---------------------------------
   58155.357142857142857142857142

  1 record(s) selected.

MIN ####################################################

SQL> SELECT MIN(Cena) as Min FROM Towar

MAX ####################################################

SQL> SELECT MAX(Cena) as maks FROM Towar

Największa i najmniejsza cena
SQL> SELECT MAX(CenaZakupu), MIN(CenaZakupu) FROM Towar

Można też połączyć funkcję MIN i MAX z GROUP BY

SQL> SELECT Imie,MIN(Brutto) as Najmniej,MAX(BRutto) as Najwiecej
FROM Zarobki,Osoby INNER JOIN Zarobki.IdOsoby=Osoby.IdOsoby
GROUP BY Imie

COLAESCE ###############################################
Funkcja przydatna z pracą z wartościami NULL. Wartość końcowa jest zwracana jeśli ma ona wartość inną niż NULL. Jeśli ma ona wartość NULL zwracana jest wartość podana jako druga w funkcji COLAESCE

SQL> select FIRSTNME,LASTNAME,MIDINIT from employee where FIRSTNME like 'D%'

FIRSTNME     LASTNAME        MIDINIT
------------ --------------- -------
DELORES      QUINTANA        M
DAVID        BROWN
DANIEL       SMITH           S
DIAN         HEMMINGER       J

  4 record(s) selected.

SQL> select FIRSTNME,LASTNAME, COLAESCE(MIDINIT, 'X') from employee where FIRSTNME like 'D%'

SQL0440N  No authorized routine named "COLAESCE" of type "FUNCTION" having
compatible arguments was found.  SQLSTATE=42884

UNION, UNION ALL i EXCEPT ##############################
Funkcja ta służy do pobierania sumy, części wspólnej i różnicy dwóch tabel.

W bazie mamy dwie tabele
SQL> select WORKDEPT from employee

WORKDEPT
--------
A00
C01
D11
D11
...
D21
E01
E11
E21

  42 record(s) selected.

SQL> select SALES_PERSON from sales

SALES_PERSON
---------------
LUCCHESSI
LEE
GOUNOT
LUCCHESSI
...
LUCCHESSI
LEE
GOUNOT
GOUNOT

  41 record(s) selected.

UNION ALL wyświetla sumę dwóch tabel bez usuwania powtarzających się wierszy.
SQL> select WORKDEPT FROM employee UNION ALL select SALES_PERSON FROM sales

WORKDEPT
---------------
LUCCHESSI
LEE
LEE
LEE
...
E21
E21
E21
E21

  83 record(s) selected.

UNION łączy ze sobą dwie tabele i usuwa powtarzające się wiersze
SQL> select WORKDEPT FROM employee UNION select SALES_PERSON FROM sales

WORKDEPT
---------------
A00
B01
C01
D11
D21
E01
E11
E21
GOUNOT
LEE
LUCCHESSI

  11 record(s) selected.

Funkcja EXCEPT zwraca niepowtarzające się wiersze występujące w pierwszej tabeli ale nie występujące w drugiej tabeli:
SQL> select WORKDEPT FROM employee EXCEPT select SALES_PERSON FROM sales

WORKDEPT
---------------
A00
B01
C01
D11
D21
E01
E11
E21

  8 record(s) selected.

INTERSECT i INTERSECT ALL ################################
Zwraca on niepowtarzalny zbiór wartości występujących w dwóch kolumnach, INTERSECT ALL zwraca wszystkie wartości spełniające warunek
SQL> select cyfra FROM tabela_pl INTERSECT select number FROM tabela_en

cyfra
-----------
1
2

(2 row(s) affected)

SQL> select WORKDEPT FROM employee INTERSECT ALL select SALES_PERSON FROM sales

WORKDEPT
---------------

  0 record(s) selected.

Ten wpis został opublikowany w kategorii TSQL i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz