podzapytanie z instrukcją IN - THE DATA SCIENCE LIBRARY https://sigmaquality.pl/tag/podzapytanie-z-instrukcja-in/ Wojciech Moszczyński Sun, 06 Oct 2024 09:28:35 +0000 pl-PL hourly 1 https://wordpress.org/?v=6.8.3 https://sigmaquality.pl/wp-content/uploads/2019/02/cropped-ryba-32x32.png podzapytanie z instrukcją IN - THE DATA SCIENCE LIBRARY https://sigmaquality.pl/tag/podzapytanie-z-instrukcja-in/ 32 32 27_SQL. Podzapytanie z instrukcją IN https://sigmaquality.pl/mysql-kurs-podstawowy/27_sql-podzapytanie-z-instrukcja-in/ Sun, 24 May 2015 07:12:00 +0000 http://sigmaquality.pl/?p=1901 Podzapytanie z instrukcją IN służy do sprawdzenia, czy wartość należy do określonego zbioru wartości.  Do omówienia podzapytań skorzystamy z bezpłatnej bazy Oracle HR dostępnej tutaj: [...]

Artykuł 27_SQL. Podzapytanie z instrukcją IN pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>

Podzapytanie z instrukcją IN służy do sprawdzenia, czy wartość należy do określonego zbioru wartości. 

 Podzapytanie to zapytanie zagnieżdżone w innym zapytaniu. W podzapytaniu pojawia się kolejny raz instrukcja SELECT 

Do omówienia podzapytań skorzystamy z bezpłatnej bazy Oracle HR dostępnej tutaj:

http://www.oracle.com/technetwork/database/express-edition/downloads/index.html

Chcemy dowiedzieć się, w których grupach zatrudnienia suma wynagrodzeń jest równa 42 000.

SELECT

JOBS.JOB_ID,

JOBS.JOB_TITLE,

EMPLOYEES.SALARY

FROM EMPLOYEES,JOBS

WHERE JOBS.JOB_ID = EMPLOYEES.JOB_ID

AND EMPLOYEES.SALARY IN

(SELECT EMPLOYEES.SALARY

FROM EMPLOYEES

WHERE EMPLOYEES.SALARY = 4200);

Zwróćmy uwagę, że inicjująca zapytanie instrukcja SELECT pojawiła się drugi raz. Całe podzapytanie weszło po wyrażenia IN. Ponadto podzapytanie znajduje się w nawiasie.

Otrzymujemy tabelę wynikową:

Kolejne podzapytanie z instrukcją IN. Chcemy się dowiedzieć, którzy pracownicy mają prowizję większa od 0,25.

SELECT

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

JOBS.JOB_ID,

JOBS.JOB_TITLE,

EMPLOYEES.COMMISSION_PCT

FROM EMPLOYEES,JOBS

WHERE JOBS.JOB_ID = EMPLOYEES.JOB_ID

AND EMPLOYEES.COMMISSION_PCT IN

(SELECT EMPLOYEES.COMMISSION_PCT

FROM EMPLOYEES

WHERE EMPLOYEES.COMMISSION_PCT > 0.25);

Otrzymujemy tabelę wynikową:

Podzapytanie z instrukcją IN służy do złożonych zapytań. Dzięki niemu zapytanie staje się bardziej przejrzyste.

Wyświetlimy wszystkich pracowników, którzy pracują w Oxfordzie a ich imiona zaczynają się od „J”. Zrobimy to najpierw bez instrukcji IN a potem z tą instrukcją.

SELECT

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

DEPARTMENTS.DEPARTMENT_NAME,

LOCATIONS.CITY,

EMPLOYEES.SALARY

FROM EMPLOYEES, LOCATIONS, DEPARTMENTS

WHERE DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID AND DEPARTMENTS.LOCATION_ID = LOCATIONS.LOCATION_ID

AND EMPLOYEES.FIRST_NAME LIKE 'J

Otrzymujemy tabelę wynikową:

Teraz ta sama instrukcja z użyciem podzapytania z instrukcją IN.

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

DEPARTMENTS.DEPARTMENT_NAME,

LOCATIONS.CITY,

EMPLOYEES.SALARY

FROM EMPLOYEES, LOCATIONS, DEPARTMENTS

WHERE DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID AND DEPARTMENTS.LOCATION_ID = LOCATIONS.LOCATION_ID

AND EMPLOYEES.FIRST_NAME IN

(SELECT EMPLOYEES.FIRST_NAME

FROM EMPLOYEES

WHERE EMPLOYEES.FIRST_NAME LIKE 'J

Ciekawym rozwiązaniem jest instrukcja NOT IN. Stosując ją w miejsce instrukcji IN do powyżej zamieszczonego zapytania można wyświetlić wszystkich pracowników z Oxfordu, których imiona nie zaczynają się na J.

SELECT

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

DEPARTMENTS.DEPARTMENT_NAME,

LOCATIONS.CITY,

EMPLOYEES.SALARY

FROM EMPLOYEES, LOCATIONS, DEPARTMENTS

WHERE DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID AND DEPARTMENTS.LOCATION_ID = LOCATIONS.LOCATION_ID

AND EMPLOYEES.FIRST_NAME NOT IN

(SELECT EMPLOYEES.FIRST_NAME

FROM EMPLOYEES

WHERE EMPLOYEES.FIRST_NAME LIKE 'J

 

Artykuł 27_SQL. Podzapytanie z instrukcją IN pochodzi z serwisu THE DATA SCIENCE LIBRARY.

]]>