Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik informatyk
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 8 czerwca 2026 12:28
  • Data zakończenia: 8 czerwca 2026 12:38

Egzamin niezdany

Wynik: 10/40 punktów (25,0%)

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Które z poniższych oprogramowań NIE jest systemem zarządzania treścią (CMS)?

A. Joomla
B. Apache
C. Mambo
D. WordPress
Pozostałe pozycje to systemy CMS. WordPress to najpopularniejszy na świecie system zarządzania treścią, używany do blogów i serwisów. Joomla to rozbudowany CMS do bardziej złożonych witryn. Mambo to starszy system CMS, z którego historycznie wywodzi się Joomla. Apache nie zarządza treścią - jest serwerem WWW udostępniającym strony - dlatego to on jest odpowiedzią poprawną.

Pytanie 2

Której właściwości CSS użyć, aby dodać tekstowi podkreślenie (dolne lub górne)?

A.
text-align
B.
text-indent
C.
text-transform
D.
text-decoration
Pozostałe właściwości robią co innego. text-align wyrównuje tekst w poziomie, text-indent ustawia wcięcie pierwszej linii, a text-transform zmienia wielkość liter. Linie pod tekstem dodaje text-decoration.

Pytanie 3

Co zastosować, aby zapewnić integralność (spójność) danych w bazie MS Access?

A. kwerendę aktualizującą
B. więzy integralności
C. defragmentację bazy
D. archiwizację bazy
Pozostałe opcje nie chronią spójności. Kwerenda aktualizująca ZMIENIA dane, defragmentacja porządkuje fizyczny zapis pliku bazy, a archiwizacja tworzy kopię. Spójność powiązań danych zapewniają więzy integralności.

Pytanie 4

W przedstawionym kodzie PHP w miejscu kropek powinno znajdować się polecenie

Ilustracja do pytania
A. mysqli_fetch_row($zapytanie);
B. mysqli_free_result($zapytanie);
C. mysqli_num_fields($zapytanie);
D. mysqli_query($zapytanie);
Koncept mysqli_free_result wydaje się atrakcyjny gdyż służy do zwalniania pamięci zajmowanej przez zestaw wyników. Jednak jego zastosowanie w tym kontekście jest błędne ponieważ zwalnianie pamięci powinno odbywać się po zakończeniu przetwarzania danych a nie przed pobraniem wierszy. Użycie mysqli_num_fields mogłoby wprowadzić w błąd ponieważ funkcja ta zwraca liczbę kolumn w zestawie wyników a nie jest związana z pobieraniem poszczególnych wierszy danych. W kontekście iteracji po wierszach zapytania jest to nieadekwatne. Funkcja mysqli_query jest używana do wysyłania zapytań do bazy danych i zwraca wynik zapytania ale sama w sobie nie pobiera danych z zestawu wyników co w tym zadaniu jest niezbędne. Częstym błędem jest mylenie funkcji wynikowych z funkcjami wykonującymi zapytania. Kluczowym do zrozumienia jest właściwe wykorzystanie funkcji do iteracyjnego pobierania danych co wymaga rozróżnienia zadań jakie pełni każda z funkcji w kontekście przetwarzania wyników zapytań do bazy danych. Prawidłowe rozróżnianie tych funkcji pozwala na efektywne zarządzanie danymi i pamięcią co jest istotne w kontekście aplikacji webowych oraz zapewnienia ich wydajności i poprawnego działania.

Pytanie 5

W kodzie HTML zdefiniowano hiperłącze: <a href="http://website.com" rel="nofollow">link</a>. Użyty w nim atrybut rel="nofollow" w znaczniku <a>:

A. oznacza, że kliknięcie w link nie przeniesie użytkownika na stronę website.com
B. oznacza, że kliknięcie w link otworzy go w osobnej karcie przeglądarki
C. jest informacją dla robota wyszukiwarki, aby nie podążał za tym linkiem i nie przekazywał mu wartości rankingowej
D. jest poleceniem dla przeglądarki, aby nie traktowała słowa "link" jako odnośnika
Warto rozdzielić dwie rzeczy: działanie linku dla użytkownika i jego interpretację przez wyszukiwarki. Odpowiedź o braku przejścia na website.com oraz ta o renderowaniu słowa "link" mylą atrybut rel="nofollow" z zachowaniem przeglądarki - tymczasem nofollow nie dotyka sposobu, w jaki link działa czy wygląda; kliknięcie nadal otwiera stronę docelową. Odpowiedź o nowej karcie opisuje całkiem inny atrybut: za to odpowiada target="_blank", nie rel. Poprawna jest informacja o robocie wyszukiwarki: nofollow to sygnał dla wyszukiwarek, aby nie podążały za tym odnośnikiem i nie przekazywały mu wartości rankingowej. To narzędzie SEO służące do kontroli, które linki firmujemy autorytetem swojej witryny, a nie sposób na zmianę funkcjonowania samego hiperłącza.

Pytanie 6

Aby wykonać kopię zapasową bazy danych na serwerze MS SQL, należy użyć polecenia:

A.
EXPORT DATABASE
B.
SAVE DATABASE
C.
BACKUP DATABASE
D.
UNBACKUP DATABASE
Pozostałe odpowiedzi nie tworzą kopii. EXPORT DATABASE, SAVE DATABASE i UNBACKUP DATABASE brzmią sensownie, ale w MS SQL takich poleceń nie ma - serwer odrzuciłby je jako błąd składni. Tworzenie kopii zapasowej to zadanie BACKUP DATABASE, a jej późniejsze odtwarzanie - RESTORE DATABASE. Do samego wykonania kopii właściwe jest więc BACKUP DATABASE.

Pytanie 7

Co robi polecenie:

ALTER TABLE miasta ADD kod text;
?
A. zmienia nazwę tabeli miasta na kod
B. dodaje do tabeli kolumnę kod typu text
C. dodaje dwie kolumny: kod i text
D. zmienia nazwę kolumny kod na text
Polecenie ALTER TABLE miasta ADD kod text; rozszerza istniejącą tabelę miasta o jedną nową kolumnę o nazwie kod i typie text. ALTER TABLE zmienia strukturę tabeli, a ADD wskazuje dodanie kolumny (nazwa plus typ). Dlatego polecenie dodaje kolumnę kod typu text.

Pytanie 8

Wskaż warunek w języku JavaScript, który ma na celu sprawdzenie, czy przynajmniej jeden z poniższych przypadków jest spełniony: 1) dowolna naturalna liczba a jest liczbą trzycyfrową 2) dowolna liczba całkowita b jest liczbą ujemną

A. ((a>99)||(a<1000))||(b<0)
B. ((a>99)&&(a<1000))||(b<0)
C. ((a>99)||(a<1000))&&(b<0)
D. ((a>99)&&(a<1000))&&(b<0)
Wszystkie pozostałe odpowiedzi zawierają błędy w logice warunków, które prowadzą do niepoprawnych wywołań logicznych. W przypadku pierwszego zapisu ((a>99)||(a<1000))||(b<0) użycie operatora '||' w pierwszej części oznacza, że wystarczy, aby a było większe niż 99 lub mniejsze niż 1000, co w praktyce nigdy nie wyklucza a z zakresu liczb naturalnych, ponieważ wszystkie liczby naturalne (w tym te jedno- i dwu-cyfrowe) spełniają ten warunek. To powoduje, że wynik będzie zawsze prawdziwy, niezależnie od wartości a. Kolejny zapis ((a>99)&&(a<1000))&&(b<0) również jest błędny, ponieważ wymaga, aby obie części były prawdziwe równocześnie. Oznacza to, że zarówno warunek trzycyfrowości liczby a, jak i warunek, że b musi być liczbą ujemną, muszą być spełnione, aby całość była prawdziwa. W sytuacji, gdy a jest liczbą trzycyfrową, ale b jest liczbą dodatnią, wynik będzie fałszywy, co nie spełnia założonych wymagań, które mówią o tym, że wystarczy, aby jeden z przypadków był prawdziwy. Wreszcie, ostatni zapis ((a>99)&&(a<1000))&&(b<0) jest identyczny w swej logice do poprzedniego, jedynie potwierdza, że oba warunki muszą być spełnione jednocześnie, co z kolei ogranicza możliwości otrzymania prawdziwego wyniku. W kontekście programowania i analizy logicznej, kluczowe jest zrozumienie operatorów logicznych oraz ich zastosowanie w konstrukcjach warunkowych, aby uzyskać zamierzony efekt działania.

Pytanie 9

W PHP, aby usunąć białe znaki z początku i końca ciągu tekstowego, można skorzystać z funkcji

A. sort()
B. trim()
C. time()
D. strlen()
W kontekście wybranych odpowiedzi, sort() jest funkcją, która służy do sortowania tablic. Użycie tej funkcji w celu usunięcia spacji z ciągu znaków nie ma sensu, ponieważ jej zadaniem jest porządkowanie elementów w tablicy według zdefiniowanej kolejności, a nie manipulowanie zawartością ciągów tekstowych. Prawidłowe przetwarzanie danych wymaga stosowania odpowiednich funkcji, a sort() nie jest jedną z nich. Z kolei funkcja time() jest używana do uzyskiwania bieżącego znacznika czasu w formacie Unix timestamp. Jej zastosowanie w kontekście usuwania spacji jest nieadekwatne, ponieważ time() zwraca wartość liczbową reprezentującą czas, a nie operuje na ciągach znaków. Ostatnia z wymienionych funkcji, strlen(), służy do obliczania długości danego ciągu znaków. Chociaż może być przydatna w kontekście walidacji długości ciągów wejściowych, nie ma żadnej funkcji w usuwaniu spacji. Każda z tych funkcji ma swoje unikalne zastosowanie, ale żadna z nich nie jest odpowiednia do zadania, jakim jest usunięcie zbędnych spacji z początku i końca ciągu. Właściwe użycie funkcji trim() jest kluczowe dla uzyskania oczekiwanych rezultatów w operacjach na tekstach.

Pytanie 10

Aby strona poprawnie skalowała się na urządzeniach mobilnych, rozmiar czcionki należy zdefiniować:

A. w pikselach
B. w procentach
C. w milimetrach
D. tylko znacznikami big i small
Pozostałe sposoby nie zapewniają responsywności. Rozmiar w pikselach jest stały - na małym ekranie tekst nie zmaleje proporcjonalnie i może być za duży lub za mały. Milimetry to jednostka fizyczna, praktycznie nieużywana do skalowania tekstu na ekranie i również sztywna. Znaczniki <big> i <small> dają tylko zgrubną zmianę względem domyślnego rozmiaru, są przestarzałe i nie pozwalają precyzyjnie skalować. Responsywny rozmiar czcionki uzyskuje się jednostkami względnymi, czyli w procentach.

Pytanie 11

Określ, w jaki sposób należy odnosić się do pliku default.css, jeżeli index.html znajduje się bezpośrednio w folderze Strona?

Ilustracja do pytania
A. <link rel="stylesheet" type="text/css" href="./style/default.css" />
B. <link rel="stylesheet" type="text/css" href="c:/style/default.css" />
C. <link rel="stylesheet" type="text/css" href="...\style\default.css" />
D. <link rel="stylesheet" type="text/css" href="c:\style/default.css" />
Niepoprawne odpowiedzi wynikają z błędnego zrozumienia struktury ścieżek w HTML. Stosowanie absolutnych ścieżek takich jak c:/style/default.css jest niezalecane, ponieważ lokalizuje plik na konkretnym dysku twardym, co jest niepraktyczne w przypadku aplikacji webowych, które mogą być przenoszone na serwery o różnych strukturach katalogów. Użycie backslashów \ w ścieżkach takich jak ...\style\default.css jest błędne w kontekście URL, ponieważ slash / jest standardem w adresach URL, zgodnie z normami RFC. Backslashy używa się w systemach Windows do ścieżek lokalnych, ale w kontekście HTML powoduje to problemy z prawidłowym zaadresowaniem zasobów. Stosowanie ścieżek absolutnych lub błędnej składni w odwołaniach może prowadzić do sytuacji, w których pliki CSS nie są ładowane, co skutkuje nieprawidłowym wyświetlaniem strony. Dlatego istotne jest zrozumienie, że relatywne ścieżki zapewniają większą kompatybilność i elastyczność projektu webowego, co jest esencją dobrych praktyk w programowaniu frontendowym. Utrzymywanie spójnej i poprawnej struktury ścieżek jest kluczem do efektywnego zarządzania zasobami w aplikacjach internetowych.

Pytanie 12

Jaka jest poprawna kolejność procesów przetwarzania dźwięku z analogowego na cyfrowy?

A. próbkowanie, kwantyzacja, kodowanie
B. próbkowanie, kodowanie, kwantyzacja
C. kwantyzacja, próbkowanie, kodowanie
D. kwantyzacja, kodowanie, próbkowanie
Pozostałe warianty przestawiają etapy, które logicznie muszą iść po sobie. Kodowanie nie może wyprzedzać kwantyzacji - nie da się zapisać w bitach wartości, której jeszcze nie ustalono. Kwantyzacja nie może być pierwsza, bo wymaga już pobranych próbek sygnału. Jedyna spójna sekwencja to próbkowanie, kwantyzacja, kodowanie.

Pytanie 13

Która cecha wyróżnia format PNG?

A. obsługa animacji
B. kompresja bezstratna
C. brak obsługi kanału alfa
D. reprezentacja grafiki wektorowej
Pozostałe stwierdzenia są nieprawdziwe. PNG to format rastrowy (nie wektorowy) i co do zasady nie obsługuje animacji (od tego jest GIF lub APNG). Kanał alfa, czyli przezroczystość, PNG właśnie OBSŁUGUJE, więc „brak obsługi alfa” jest błędem. Wyróżnia go kompresja bezstratna.

Pytanie 14

Aby wybrać z bazy danych rekordy spełniające określone kryteria, należy utworzyć:

A. formularz
B. kwerendę (zapytanie)
C. raport
D. makro
Pozostałe obiekty służą do czego innego. Formularz to interfejs do wygodnego wprowadzania i edycji danych, a nie do ich filtrowania według warunków. Raport prezentuje już wybrane dane w czytelnej formie do wydruku - sam nie definiuje kryteriów selekcji (często bazuje na wyniku kwerendy). Makro automatyzuje powtarzalne czynności w bazie, lecz nie wybiera rekordów. Dane spełniające określone kryteria wybiera kwerenda (zapytanie), dlatego to ona jest poprawna.

Pytanie 15

Które wywołanie is_int() zwróci true?

A.
is_int("135")
B.
is_int(NULL)
C.
is_int(13.5)
D.
is_int(135)
is_int("135") to NAPIS, a nie liczba (cudzysłowy). is_int(13.5) to liczba zmiennoprzecinkowa (float). is_int(NULL) to wartość pusta. Wynik true daje tylko is_int(135).

Pytanie 16

Zastosowanie poniższej kwerendy SQL spowoduje usunięcie

DELETE FROM mieszkania WHERE status=1;
A. tabeli mieszkania z systemu baz danych
B. pola o nazwie status w tabeli mieszkania
C. rekordów, dla których pole status ma wartość 1, z tabeli mieszkania
D. tabel, w których pole status ma wartość 1, z bazy danych mieszkania
Odpowiedź, którą zaznaczyłeś, jest jak najbardziej trafna i dotyczy działania kwerendy SQL, szczególnie polecenia DELETE. W tym przypadku, to DELETE FROM mieszkania WHERE status=1 oznacza, że zamierzamy usunąć wszystkie rekordy z tabeli mieszkania, gdzie status jest równy 1. To jest ważne, bo w zarządzaniu bazami danych kluczowe jest precyzyjne ustalenie, które dane chcemy usunąć. Z mojej perspektywy, przed wykonaniem takiej operacji warto najpierw wykonać zapytanie SELECT z tymi samymi warunkami, żeby zobaczyć, co dokładnie usuniemy. Przykład? Możesz chcieć usunąć mieszkania, które są zarezerwowane lub niedostępne, co może być oznaczone statusem 1. To naprawdę dobra praktyka, bo pozwala na lepsze zarządzanie danymi i na utrzymanie porządku w bazie. A wiesz, co jeszcze? Zawsze warto zrobić kopię zapasową danych przed masowym usuwaniem, żeby nie stracić czegoś ważnego.

Pytanie 17

Którego słowa kluczowego użyć do deklaracji zmiennej w JavaScript?

A.
var
B.
new
C.
variable
D.
instanceof
Pozostałe słowa pełnią inne role. new tworzy obiekt na podstawie konstruktora, a instanceof sprawdza, czy obiekt jest instancją danej klasy. variable nie jest słowem kluczowym JavaScriptu. Zmienną deklaruje var.

Pytanie 18

Program napisany w języku PHP ma na celu wyliczenie średniej pozytywnych ocen ucznia w zakresie od 2 do 6. Warunek doboru ocen w pętli obliczającej średnią powinien zawierać wyrażenie logiczne

A. $ocena > 2 or $ocena < 6
B. $ocena > 2 and $ocena < 6
C. $ocena >= 2 or $ocena <= 6
D. $ocena >= 2 and $ocena <= 6
Wybrana odpowiedź jest poprawna, ponieważ warunek '$ocena >= 2 and $ocena <= 6' precyzyjnie definiuje zakres ocen, które mają być brane pod uwagę przy obliczaniu średniej. Użycie operatora 'and' zapewnia, że tylko oceny mieszczące się w przedziale od 2 do 6, włącznie z obydwoma krańcami, będą uwzględnione. Przykład praktyczny to sytuacja, w której programista chciałby zrealizować system oceny uczniów, w którym dopuszczalne oceny to 2, 3, 4, 5 i 6. Gdybyśmy użyli operatora 'or', program mógłby przyjąć oceny spoza tego zakresu, co prowadziłoby do nieprawidłowych obliczeń i fałszywych wniosków. W kontekście programowania w PHP, stosowanie poprawnych warunków logicznych jest kluczowe dla zapewnienia prawidłowego działania kodu. Dobrym przykładem zastosowania takiego warunku jest pętla, która iteruje przez zestaw ocen i sumuje je, aby na końcu obliczyć średnią. Stosując odpowiednie warunki, programista może być pewny, że obliczenia są realizowane na danych, które są zgodne z wymaganiami. Warto również zauważyć, że w kontekście dobrych praktyk programistycznych, jasne definiowanie warunków logicznych pozwala na łatwiejsze zrozumienie kodu przez innych programistów oraz ułatwia jego późniejsze utrzymanie.

Pytanie 19

Do której właściwości CSS można przypisać wartości static, relative, fixed, absolute, sticky?

A.
display
B.
position
C.
list-style-type
D.
text-transform
Pozostałe właściwości przyjmują inne wartości. display steruje typem wyświetlania (block, inline, flex). list-style-type ustala rodzaj punktora listy. text-transform zmienia wielkość liter (uppercase, lowercase). Słowa relative, absolute, sticky należą do position.

Pytanie 20

Dla strony internetowej stworzono styl, który będzie stosowany tylko do wybranych znaczników, takich jak niektóre nagłówki oraz kilka akapitów. W tej sytuacji, aby przypisać styl do konkretnych znaczników, najodpowiedniejsze będzie użycie

Ilustracja do pytania
A. klasy
B. pseudoklasy
C. identyfikatora
D. selektora akapitu
Pseudoklasy w CSS są używane do stylizowania elementów w określonym stanie, np. :hover dla zmiany stylu po najechaniu myszą. Nie są odpowiednie do przypisywania unikalnych stylów do konkretnych elementów. Identyfikator w CSS, oznaczany przez #, jest używany do stylizowania jednego unikalnego elementu na stronie. Jego użycie jest ograniczone do jednego elementu, co jest zgodne z zasadą unikalności identyfikatorów w dokumencie HTML. Nie nadaje się do sytuacji, gdy ten sam styl ma być stosowany do wielu elementów, ponieważ zmuszałoby to do definiowania i przypisywania wielu unikalnych identyfikatorów do każdego z nich, co jest przeciwieństwem DRY (Don't Repeat Yourself). Selektor akapitu bezpośrednio odnosi się do wszystkich elementów danego typu, np. p dla wszystkich akapitów. Nie jest on elastyczny, gdy chcemy zastosować styl tylko do niektórych elementów danego typu. Klasy oferują większą elastyczność w zarządzaniu stylami wielu elementów, ponieważ mogą być stosowane do różnych typów elementów w różnych miejscach dokumentu HTML. Ponadto, klasy są bardziej czytelne i ułatwiają utrzymanie kodu, co jest zgodne z najlepszymi praktykami w programowaniu front-endowym. Użycie klas wspiera również lepszą strukturę i modularność kodu CSS, co jest istotne w kontekście pracy zespołowej oraz skalowalności projektu.

Pytanie 21

Instrukcja w języku SQL GRANT ALL PRIVILEGES ON klienci TO pracownik

A. przyznaje wszystkie uprawnienia do tabeli klienci użytkownikowi pracownik
B. przeniesie uprawnienia z grupy klienci do użytkownika pracownik
C. przyznaje uprawnienie grupie klienci dla tabeli pracownik
D. cofa wszystkie uprawnienia pracownikowi do tabeli klienci
Wybór odpowiedzi, która nie odpowiada na pytanie, zazwyczaj wynika z błędnych założeń dotyczących działania polecenia GRANT w SQL. Odpowiedź, która sugeruje, że polecenie skopiuje uprawnienia z grupy klienci na użytkownika pracownik, jest błędna, ponieważ GRANT nie działa na zasadzie kopiowania uprawnień, ale bezpośrednio przydziela określone uprawnienia do wskazanego obiektu. W SQL nie istnieje konstrukcja, która automatycznie przenosi uprawnienia z jednej grupy na inny użytkownik, co czyni to zrozumienie niewłaściwym. Inną nieprawidłową koncepcją jest myślenie, że komenda nadaje uprawnienia grupie klienci do tabeli pracownik. To zrozumienie myli pojęcie grupy z użytkownikiem, co jest podstawowym błędem w interpretacji polecenia SQL. Ostatnia wskazana odpowiedź, która sugeruje, że odbiera wszystkie uprawnienia pracownikowi do tabeli klienci, jest również błędna, ponieważ polecenie GRANT nie jest używane do odbierania uprawnień, a do ich przydzielania. Powoduje to nieporozumienia co do funkcji i zastosowania polecenia w kontekście zarządzania dostępem do danych. Aby poprawnie zrozumieć te koncepcje, ważne jest, aby zapoznać się z dokumentacją SQL oraz najlepszymi praktykami zarządzania uprawnieniami, co przyczyni się do efektywnego i bezpiecznego zarządzania danymi w bazach danych.

Pytanie 22

Co MUSI wystąpić w konstrukcji switch w PHP?

A. instrukcja default
B. nagłówek switch(wyrażenie)
C. instrukcja break po każdym case
D. co najmniej dwie instrukcje case
Pozostałe elementy są OPCJONALNE lub niewymagane. Gałąź default można pominąć (wykona się tylko, gdy żaden case nie pasuje). break jest zalecany, ale niewymagany składniowo. Liczba case nie musi wynosić co najmniej dwa. Konieczny jest jedynie nagłówek switch(wyrażenie).

Pytanie 23

Jak określa się część strukturalnego języka zapytań, która dotyczy tworzenia zapytań do bazy danych za pomocą polecenia SELECT?

A. SQL DML (ang. Data Manipulation Language)
B. SQL DCL (ang. Data Control Language)
C. SQL DDL (ang. Data Definition Language)
D. SQL DQL (ang. Data Query Language)
Wybór SQL DML, SQL DCL lub SQL DDL jako odpowiedzi na to pytanie wskazuje na nieporozumienie dotyczące funkcji poszczególnych podzbiorów SQL. SQL DML (Data Manipulation Language) odnosi się do poleceń, które modyfikują dane w bazie, takich jak INSERT, UPDATE i DELETE. Myląc te pojęcia, można sądzić, że polecenia te są odpowiednie do pobierania danych, co jest błędne. Z kolei SQL DCL (Data Control Language) służy do zarządzania uprawnieniami użytkowników i kontroli dostępu do danych, co również nie ma związku z formułowaniem zapytań do bazy danych. Na przykład, polecenia GRANT i REVOKE są kluczowe w kontekście DCL, ale nie mają nic wspólnego z wyciąganiem danych. SQL DDL (Data Definition Language) dotyczy definicji struktury bazy danych, czyli tworzenia, modyfikowania i usuwania tabel oraz innych obiektów bazy danych (np. CREATE, ALTER, DROP). Wybór któregokolwiek z tych podzbiorów zamiast DQL wskazuje na brak zrozumienia hierarchii i celów SQL jako całości. Zrozumienie różnic między tymi podzbiorami jest kluczowe dla skutecznego zarządzania danymi i efektywnej pracy z bazami danych. Dobrą praktyką jest zapoznanie się z pełnym zakresem możliwości SQL, aby lepiej wykorzystać jego potencjał w codziennej pracy z danymi.

Pytanie 24

Programista stworzył pętlę w języku C++ mającą na celu obliczenie wartości 5! (5! = 1 * 2 * 3 * 4 * 5). Niestety, popełnił błąd logiczny polegający na tym, że

int a = 1;
for (int i = 1; i < 5; i++)
{
    a = a * i;
}
cout << a;
A. zmienna a powinna być ustawiona na 0 zamiast 1
B. w drugim warunku pętli powinno być porównanie i < 6 zamiast i < 5
C. parametr i pętli powinien być inicjowany wartością 0, a nie 1
D. parametr i pętli powinien być zmniejszany zamiast zwiększany
Podczas analizy błędów w pętli for jednym z kluczowych aspektów jest poprawne inicjowanie i aktualizowanie zmiennych sterujących oraz warunków zakończenia pętli. W kontekście obliczania silni 5 trzeba zwrócić uwagę na to, że inicjowanie zmiennej a wartością 0 zamiast 1 spowodowałoby, że wszystkie mnożenia dadzą wynik 0, co jest fundamentalnym błędem w logice obliczeń silni. Zmienna powinna startować od wartości 1, aby mnożenie było poprawne. Zainicjowanie parametru i wartością 0 zamiast 1 również prowadziłoby do niepoprawnych rezultatów, ponieważ mnożyłoby przez 0 w pierwszej iteracji, co skutkowałoby, że cała silnia wynosiłaby 0. To typowy błąd związany z niewłaściwym zakresem iteracji. Natomiast zmiana w kierunku dekrementacji zamiast inkrementacji nie ma sensu w kontekście tego zadania, gdzie celem jest sekwencyjne przemnożenie przez kolejne liczby naturalne do 5. Takie podejście jest błędne, ponieważ nie odwzorowuje poprawnego algorytmu obliczania silni. Rozumienie poprawnych zakresów i logicznych schodków iteracji w pętlach to kluczowy element w zapobieganiu tego typu błędom i osiąganiu zamierzonych wyników w algorytmach obliczeniowych. Warto pamiętać, że dbanie o poprawność warunków iteracyjnych jest nieodzowne w praktyce programistycznej, aby zapewnić niezawodność i poprawność działania kodu w różnych scenariuszach testowych i produkcyjnych.

Pytanie 25

Jak przeglądarka zaprezentuje kod HTML formularza?

<form>
stanowisko: <input type="text"><br>
obowiązki:<br>
<input type="checkbox" name="obowiazek1" value="1" disabled checked>
sporządzanie dokumentacji<br>
<input type="checkbox" name="obowiazek2" value="2" checked>
pisanie kodu<br>
<input type="checkbox" name="obowiazek3" value="3">
testy oprogramowania<br>
</form>
Ilustracja do pytania
A. A
B. B
C. C
D. D
Zrozumienie jak działają atrybuty HTML takie jak disabled i checked jest kluczowe dla prawidłowego wyświetlania i funkcjonalności formularzy w przeglądarce. Niektóre z odpowiedzi zawierają błędne interpretacje tych atrybutów co prowadzi do niepoprawnego rozumienia jak formularz będzie prezentowany. Na przykład jeśli pole checkbox nie ma ustawionego atrybutu checked to domyślnie będzie niezaznaczone a użytkownik będzie mógł to zmienić. Dodanie atrybutu checked oznacza że pole będzie zaznaczone od razu po załadowaniu strony. Atrybut disabled uniemożliwia interakcję użytkownika z danym elementem co oznacza że użytkownik nie będzie mógł zmienić jego stanu. Częstym błędem jest założenie że wszystkie pola wyboru mogą być domyślnie edytowalne co nie jest prawdą w przypadku zastosowania atrybutu disabled. Również brak zrozumienia jak kolejność elementów i ich atrybutów wpływa na wizualne i funkcjonalne aspekty formularza może prowadzić do błędnych wniosków dotyczących ich zachowania. Warto pamiętać że prawidłowe zrozumienie tych zasad pozwala na tworzenie bardziej intuicyjnych i użytecznych aplikacji internetowych które spełniają oczekiwania użytkowników i standardy branżowe. Poprawna interpretacja kodu HTML jest więc niezbędna dla każdego profesjonalisty zajmującego się tworzeniem stron i aplikacji internetowych aby zapewnić bezbłędne działanie i łatwość obsługi formularzy przez końcowego użytkownika. Powinno się też zwracać uwagę na dostępność i użyteczność formularzy co jest kluczowym aspektem w procesie projektowania stron internetowych.

Pytanie 26

Jakim zapisem w dokumencie HTML można stworzyć element, który wyświetli obraz kotek.jpg oraz tekst alternatywny "obrazek kotka"?

A. <img href="kotek.jpg" title="obrazek kotka">
B. <img href="kotek.jpg" alt="obrazek kotka">
C. <img src="kotek.jpg" alt="obrazek kotka">
D. <img src="kotek.jpg" title="obrazek kotka">
Wszystkie odpowiedzi, które nie odpowiadają poprawnemu zapisowi, zawierają błędy związane z użyciem atrybutów w tagu <img>. W pierwszej odpowiedzi użyto atrybutu href, który nie jest właściwie stosowany w kontekście obrazów; zamiast tego, do osadzania linków należy używać tagu <a>. Druga odpowiedź również zawiera niepoprawny atrybut href, co sprawia, że obraz nie zostanie poprawnie załadowany. W trzeciej opcji atrybut title jest użyty, jednak jego funkcja jest inna niż atrybutu alt. Atrybut title dostarcza dodatkowych informacji o elemencie w formie podpowiedzi, ale nie jest wyświetlany w przypadku, gdy obraz nie może być załadowany, co czyni go niewystarczającym do celów dostępności. Taki błąd myślowy prowadzi do pominięcia istoty atrybutu alt, który jest niezbędny do opisania zawartości obrazu. Ponadto, nieprawidłowe atrybuty mogą powodować problemy z dostępnością, co jest sprzeczne z najlepszymi praktykami webowymi, mającymi na celu stworzenie ogólnodostępnych treści. Użycie niewłaściwych atrybutów może również negatywnie wpłynąć na doświadczenia użytkowników oraz potencjalnie na pozycjonowanie w wyszukiwarkach, dlatego ważne jest stosowanie zalecanych standardów przy tworzeniu stron internetowych.

Pytanie 27

Aby przeanalizować rozkład ilościowy różnych kolorów na zdjęciu, należy skorzystać z

A. histogramu
B. desaturacji
C. balansu kolorów
D. rozmycia Gaussa
Desaturacja to taki proces, który sprawia, że kolory w obrazku są mniej intensywne, co czasem prowadzi do efektu czarno-białego albo po prostu bardziej stonowanej kolorystyki. Moim zdaniem, w niektórych sytuacjach może się to przydać, ale nie daje informacji o tym, jak kolory się rozkładają. Ludzie mogą pomyśleć, że desaturacja pomoże im w analizie kolorów, ale tak naprawdę to tylko zasłania różnice i nie ujawnia, co tak naprawdę jest w obrazie. Balans kolorów to sprawa dostosowywania intensywności poszczególnych kolorów, co zmienia wygląd zdjęcia, ale też nie mówi nic o ich ilościowym rozkładzie. A rozmycie Gaussa to sposób na wygładzanie obrazów, żeby zredukować szumy, a nie do analizy kolorów. Wybierając jedną z tych opcji, można łatwo pomylić się i sądzić, że zyskuje się jakieś dane o rozkładzie kolorów, podczas gdy tak naprawdę żadna z tych metod tego nie robi. Dlatego lepiej trzymać się histogramu, bo on naprawdę pokazuje, co się dzieje z kolorami w obrazach.

Pytanie 28

Który lekki, tekstowy format danych jest dziś najczęściej używany do asynchronicznej wymiany danych między klientem a serwerem (np. w AJAX)?

A. CSV
B. JSON
C. DOCX
D. BMP
Pozostałe formaty nie służą do wymiany danych w AJAX. CSV to prosty zapis tabelaryczny (wartości oddzielone przecinkami) - nadaje się do arkuszy i eksportu, ale nie odwzorowuje zagnieżdżonych struktur danych i rzadko bywa używany w API. DOCX to format dokumentów tekstowych programu Word, przeznaczony do treści do druku, a nie do komunikacji aplikacji. BMP to format obrazu rastrowego - przechowuje grafikę, a nie dane strukturalne. Do asynchronicznej wymiany danych z serwerem używa się JSON, dlatego ta odpowiedź jest poprawna.

Pytanie 29

W formularzu wartość z pola input o typie number została przypisana do zmiennej a, a następnie przetworzona w skrypcie JavaScript w sposób poniższy

var x = parseInt(a);

Jakiego typu jest zmienna x?

A. NaN
B. napisowego.
C. zmiennoprzecinkowego.
D. liczbowe, całkowite.
Wybór odpowiedzi związanej z NaN jest wynikiem nieporozumienia dotyczącego działania funkcji <span>parseInt()</span> oraz podstawowych typów danych w JavaScript. Kiedy wartość wprowadzona do zmiennej <span>a</span> jest liczbą, a funkcja <span>parseInt()</span> jest używana, to jest mało prawdopodobne, aby wynik był <span>NaN</span>. <span>NaN</span> (Not-a-Number) zwracane jest wtedy, gdy próbujemy przekonwertować na liczbę coś, co nie jest liczbowym ciągiem znaków, jak np. tekst. Na przykład, jeśli użytkownik wpisze "abc" do pola <span>input</span>, wówczas <span>parseInt("abc")</span> zwróci <span>NaN</span>, co jest właściwe. Odpowiedzi dotyczące typów napisowych oraz zmiennoprzecinkowych są również błędne, ponieważ <span>parseInt()</span> nigdy nie zwraca wartości napisowej, a jego celem jest zwrócenie liczby całkowitej. W kontekście zmiennoprzecinkowym, używamy funkcji <span>parseFloat()</span>, aby uzyskać liczbę z ułamkiem. Zdarzenia te często prowadzą do błędnego rozumienia typów danych w JavaScript. Warto zatem zwrócić uwagę na to, że typ danych (w tym przypadku liczba całkowita) jest kluczowym elementem programowania, a dobre praktyki wymagają ścisłego przestrzegania typowania i konwersji danych w celu uniknięcia nieoczekiwanych wyników w kodzie.

Pytanie 30

Która z wartości tekstowych nie odpowiada podanemu wzorcowi wyrażenia regularnego?

(([A-ZŁŻ][a-ząęóżźćńłś]{2,})(-[A-ZŁŻ][a-ząęóżźćńłś]{2,}))?
A. Jelenia Góra
B. Kasprowicza
C. Nowakowska-Kowalska
D. Kowalski
Odpowiedź 'Jelenia Góra' jest nietrafiona. Wzór wyrażenia regularnego wymaga, żeby ciąg zaczynał się od wielkiej litery, a potem miał przynajmniej dwie małe litery. Dodatkowo, może być tam segment po myślniku z kolejną wielką literą, a na końcu małe litery. No i tutaj problem, bo 'Jelenia Góra' ma spację, a wzór nie lubi takich rzeczy, bo nie rozpoznaje spacji jako separatora. Z mojego doświadczenia w pracy z regexami, ważne jest, żeby takie elementy jak spacje były dokładnie przemyślane, szczególnie przy pracy z danymi. Im lepiej zrozumiesz te zasady, tym łatwiej będzie Ci pracować z różnymi przykładami i sytuacjami przy programowaniu. Także, warto pomyśleć o tym, jak optymalizować wzorce, żeby nasza praca była wydajniejsza i bezbłędna.

Pytanie 31

Wskaż pole edycyjne sformatowane przedstawionym stylem CSS

input {
  border: none;
  border-bottom: 2px solid Blue;
  color: Gray;
  font-weight: 900;
}

Input 1. Podaj imię:

Input 2. Podaj imię:

Input 3. Podaj imię:

Input 4. Podaj imię: Agnieszka

A. Input 2.
B. Input 1.
C. Input 4.
D. Input 3.
Dobrze wybrałeś! Odpowiedź 'Input 2.' jest rzeczywiście poprawna. To, co oferuje ten element, to wszystko, co potrzebne do spełnienia wymagań stylu CSS, czyli ma niebieskie dolne obramowanie o grubości 2px, szary tekst oraz pogrubioną czcionkę. Wygląd elementów formularza jest mega ważny, bo to właśnie od niego zależy, jak użytkownicy będą się poruszać po stronie. Dzięki CSS możemy to wszystko kontrolować, co daje nam spójność i ładny wygląd. Różne właściwości CSS, takie jak 'border-bottom', 'color' czy 'font-weight', pozwalają na dokładne dostosowanie stylu każdego elementu strony. W sumie, jak już się bardziej wkręcisz w CSS, zauważysz, że można dodać też różne efekty, jak hover, focus czy active, co dodatkowo wzbogaca interakcję. Rozumienie, jak te różne właściwości działają, jest kluczowe, żeby tworzyć fajne i funkcjonalne interfejsy.

Pytanie 32

Skrypt stworzony w języku JavaScript wyznacza cenę promocyjną dla swetrów w barwach: zielonej, niebieskiej (zmienna kolor) przy wydatkach przekraczających 200 zł (zmienna zakupy). Warunek niezbędny do obliczeń powinien być zapisany z użyciem wyrażenia logicznego?

A. zakupy > 200 || kolor == 'zielony' || kolor == 'niebieski'
B. zakupy > 200 && kolor == 'zielony' && kolor == 'niebieski'
C. zakupy > 200 && (kolor == 'zielony' || kolor == 'niebieski')
D. zakupy > 200 || (kolor == 'zielony' && kolor == 'niebieski')
Niepoprawne odpowiedzi bazują na błędnych założeniach dotyczących operatorów logicznych oraz struktury warunków. Odpowiedź zakupy > 200 || kolor == 'zielony' || kolor == 'niebieski' wykorzystuje operator '||' w sposób, który pozwala na spełnienie warunku nawet, gdy zakupy są mniejsze niż 200, co nie prowadzi do pożądanego efektu obliczenia ceny promocyjnej. Kolejna odpowiedź, zakupy > 200 && kolor == 'zielony' && kolor == 'niebieski', nie uwzględnia możliwości, że kolor może być jednym z dwóch dozwolonych, co sprawia, że jest zbyt restrykcyjna. Ostatnia odpowiedź zakupy > 200 || (kolor == 'zielony' && kolor == 'niebieski') implikuje, że kolor musi być jednocześnie zielony i niebieski, co w kontekście jednego swetra jest fizycznie niemożliwe. Kluczowym błędem myślowym w tych odpowiedziach jest nieprawidłowa interpretacja operatorów logicznych oraz brak zrozumienia, jak połączenie warunków '&&' i '||' wpływa na ich działanie. Zastosowanie odpowiednich operatorów w konstruowaniu wyrażeń logicznych jest fundamentalne w programowaniu, ponieważ nieprawidłowe podejście do logiki warunkowej może prowadzić do błędów w aplikacji oraz nieoczekiwanych zachowań w kodzie.

Pytanie 33

Dla którego akapitu zastosowano przedstawioną właściwość stylu CSS?

Ilustracja do pytania
A. Akapit 2
B. Akapit 1
C. Akapit 4
D. Akapit 3
Twoja odpowiedź jest prawidłowa. Właściwość CSS 'border-radius: 20%;' jest faktycznie zastosowana do drugiego akapitu, co jest widoczne na załączonym obrazie. Akapit ten ma zaokrąglone rogi, co jest efektem działania tej właściwości CSS. Zaokrąglenie rogów elementów HTML jest często stosowaną techniką, która dodaje estetyki i wyrafinowania do projektu strony internetowej. Pozwala to na łamanie monotonii sześciokątnych zmian i dodaje unikalności do ogólnego wyglądu. Dobrą praktyką jest stosowanie 'border-radius' z umiarem, aby nie przesadzić z zaokrągleniem, które może zakłócić spójność całego projektu. Oprócz zaokrąglania rogów, właściwość 'border-radius' pozwala również na tworzenie kształtów eliptycznych czy okrągłych, co potrafi bardzo ciekawie odmienić charakter strony.

Pytanie 34

Aby uzyskać dane z tabeli pracownicy wyłącznie dla osób, które osiągnęły 26 lat, należy zastosować zapytanie

A. SELECT * FROM wiek WHERE pracownicy > '25'
B. SELECT * FROM pracownicy AND wiek > '25'
C. SELECT * FROM pracownicy WHERE wiek > '25'
D. SELECT * FROM pracownicy OR wiek > '25'
Poprawne zapytanie to 'SELECT * FROM pracownicy WHERE wiek > '25';'. To zapytanie jest zgodne z zasadami SQL i pozwala na wyświetlenie wszystkich rekordów z tabeli 'pracownicy', które spełniają określony warunek dotyczący wieku. Używając klauzuli WHERE, precyzyjnie filtrujemy wyniki i zwracamy tylko tych pracowników, którzy mają więcej niż 25 lat. Warto pamiętać, że w SQL operator '>' jest wykorzystywany do porównywania wartości, a w tym przypadku pozwala nam na wybranie pracowników, którzy ukończyli 26 lat. Przy projektowaniu zapytań SQL, kluczowe jest stosowanie odpowiednich warunków filtrujących, aby ograniczyć zwracane dane do tych istotnych dla analiz. Przykładowo, analiza wieku pracowników w kontekście przyznawania dodatków lub przeprowadzania szkoleń może opierać się na takich zapytaniach. W praktyce, ważne jest także wykorzystanie indeksów w bazach danych, aby zwiększyć wydajność zapytań, zwłaszcza w dużych zbiorach danych.

Pytanie 35

Który atrybut kolumny zapewnia automatyczne nadawanie kolejnych, unikalnych wartości (np. dla klucza głównego)?

A.
AUTO_INCREMENT
B.
NOT NULL
C.
DEFAULT
D.
UNIQUE
Atrybut AUTO_INCREMENT (w MySQL) sprawia, że przy dodaniu nowego wiersza baza sama wstawia do kolumny kolejną, większą o jeden liczbę. Stosuje się go najczęściej dla numerycznego klucza głównego (id), by nie trzeba było ręcznie pilnować unikalności identyfikatorów. Dlatego automatyczne nadawanie kolejnych wartości zapewnia AUTO_INCREMENT.

Pytanie 36

Informacje o ciasteczkach (cookies) są w PHP przechowywane w tablicy:

A.
$_GET
B.
$_POST
C.
$_COOKIE
D.
$_SERVER
Ciasteczka odesłane przez przeglądarkę PHP udostępnia w tablicy superglobalnej $_COOKIE. Odczytuje się z niej wartość po nazwie, np. $_COOKIE["jezyk"]. Samo ciasteczko ustawia się funkcją setcookie("jezyk", "pl", time()+3600), a serwer wysyła je w nagłówku odpowiedzi; przy kolejnych żądaniach przeglądarka odsyła je z powrotem i trafiają właśnie do $_COOKIE. W praktyce wykorzystuje się je do zapamiętania preferencji użytkownika czy identyfikatora sesji. Dlatego informacje o ciasteczkach przechowuje tablica $_COOKIE.

Pytanie 37

<script>
  var imiona = ["Ala", "Ola", "Ela", ""];
  tymczasowa=imiona.length;
</script>
Przedstawiony kod JavaScript powoduje przypisanie do zmiennej tymczasowa wartości:
A. 1
B. 3
C. 4
D. 9
Kod tworzy tablicę `imiona` i przypisuje do niej cztery elementy: trzy napisy z imionami oraz jeden pusty string. Następnie do zmiennej `tymczasowa` przypisywana jest wartość `imiona.length`. Kluczowe jest zrozumienie, co dokładnie oznacza właściwość `.length` w kontekście tablicy JavaScript.
Częsty błąd polega na myleniu `.length` tablicy z długością pojedynczego napisu. Niektórzy patrzą na pierwszy element "Ala" i kojarzą długość 3, inni sumują znaki w kilku elementach, jeszcze inni w ogóle ignorują pusty string, bo „nic tam nie ma”. To są naturalne skojarzenia, ale w tym przypadku zupełnie nietrafione. W przypadku obiektu typu Array, zgodnie ze specyfikacją ECMAScript, właściwość `length` odzwierciedla najwyższy użyty indeks plus jeden, czyli de facto liczbę pozycji w tablicy, a nie zawartość tych pozycji.
Pusty string `""` jest pełnoprawnym elementem tablicy, tak jak każdy inny. To, że ma długość tekstową 0, nie ma żadnego wpływu na długość tablicy. Tablica ma indeksy 0, 1, 2 i 3, więc `length` jest równe 4. Próby uzasadniania innych odpowiedzi zwykle wynikają z mieszania pojęć: długości tekstu, liczby niepustych elementów, albo jakiegoś intuicyjnego „liczenia tylko tych, co coś zawierają”. JavaScript tego nie robi automatycznie. Jeżeli chcielibyśmy policzyć tylko niepuste napisy, trzeba by użyć np. `imiona.filter(x => x !== "").length`.
Innym typowym nieporozumieniem jest traktowanie `.length` jak czegoś dynamicznie obliczanego na podstawie treści, a nie struktury. Tymczasem silnik języka przechowuje tę wartość jako właściwość, związaną z indeksem elementów, a nie z ich wartością. Dobra praktyka w programowaniu webowym to zawsze sprawdzać w dokumentacji, co dokładnie oznacza dana właściwość lub metoda dla konkretnego typu danych. Pozwala to unikać takich pułapek i pisać kod, który zachowuje się przewidywalnie, szczególnie gdy pracujemy z tablicami o mieszanej zawartości, w tym z pustymi stringami czy wartościami `null` i `undefined`.

Pytanie 38

W której notacji diagramów ER został zapisany model związków encji przedstawiony na ilustracji?

Ilustracja do pytania
A. Bachmana.
B. Min-Max.
C. Martina.
D. Chena.
Na diagramie przedstawiono model w notacji Martina, a nie w żadnej z pozostałych wymienionych. Warto zrozumieć, czym ta notacja różni się od innych, bo w praktyce projektowania baz danych bardzo łatwo je ze sobą pomylić. Notacja Chena to bardziej „akademickie” podejście do ERD. Encje są zwykle rysowane jako prostokąty, ale atrybuty pojawiają się w osobnych elipsach, połączonych liniami z encją. Klucz główny bywa podkreślony, a związki są reprezentowane przez romby z nazwą relacji. Na naszym diagramie nic takiego nie ma – atrybuty są w środku prostokąta, w formie listy, a nie jako osobne kształty, więc to już mocny sygnał, że to nie jest Chen. Z kolei notacja Bachmana historycznie kojarzy się z modelami sieciowymi i specyficznym sposobem prezentowania struktur danych, często z łamanymi liniami i strzałkami, raczej nie przypomina tabel z nagłówkiem i listą pól. W typowych podręcznikach do systemów baz danych Bachman jest pokazywany jako dość stary styl, dziś mało używany przy klasycznym relacyjnym ERD, więc mało prawdopodobne, by tak wyglądał nowoczesny diagram klient–zakup–towar. Odpowiedź Min-Max jest też myląca, bo Min-Max nie jest nazwiskiem autora notacji, tylko sposobem zapisu krotności relacji, np. (0,1), (1,n). Można taki zapis wykorzystać zarówno z notacją Chena, jak i z innymi, ale sam diagram z obrazka nie używa jawnego oznaczenia min/max przy relacjach – widzimy crow’s foot, czyli styl typowy dla Martina. Typowy błąd w tego typu pytaniach polega na tym, że ktoś kojarzy jeden detal, np. gdzieś widział oznaczenia min-max, i automatycznie zakłada, że każda notacja z relacjami i krotnościami to „Min-Max”. Tutaj jednak kluczowe są kształty encji i sposób zapisu atrybutów: prostokąt z nagłówkiem i lista pól jak w tabeli, bez elips i rombów, bez dodatkowych znaczników kluczy – to bardzo klasyczny, praktyczny styl używany przy projektowaniu relacyjnych baz danych, właśnie w notacji Martina. Dobrze jest więc patrzeć na diagram całościowo, a nie tylko na pojedynczy symbol, bo wtedy łatwiej uniknąć takich pomyłek.

Pytanie 39

Do usuwania czego stosuje się w MySQL polecenie TRUNCATE TABLE?

A. tabel
B. kolumn
C. baz danych
D. wierszy tabeli
Polecenie TRUNCATE TABLE usuwa z tabeli WSZYSTKIE wiersze naraz, zostawiając jej strukturę (kolumny, definicję) nienaruszoną. Działa szybciej niż DELETE bez warunku, bo nie kasuje wiersz po wierszu. Dlatego TRUNCATE TABLE usuwa wiersze tabeli.

Pytanie 40

W języku SQL, aby wybrać wszystkie rekordy z tabeli B, w tym część wspólną z tabelą A, należy zastosować typ związku

Ilustracja do pytania
A. A LEFT JOIN B
B. A RIGHT JOIN B
C. A INNER JOIN B
D. A FULL OUTER JOIN B
W tym pytaniu pułapka polega na tym, że łatwo pomylić pojęcie części wspólnej z całością jednego ze zbiorów. Diagram pokazuje całą tabelę B (włącznie z przecięciem z A), a nie tylko przecięcie. W SQL typ złączenia określa, z której tabeli bierzemy wszystkie rekordy, a z której tylko te pasujące. To, że widzimy też obszar wspólny, jest naturalnym efektem działania złączeń zewnętrznych, ale nie oznacza jeszcze, że chodzi o `INNER JOIN`.
Jeśli ktoś wybiera `A LEFT JOIN B`, to zwykle wynika z myślenia „chcę część wspólną i coś jeszcze”, ale myli kierunek. `LEFT JOIN` gwarantuje wszystkie rekordy z **lewej** tabeli (A), a z prawej (B) tylko dopasowane. Diagram z pytania pokazuje dokładnie odwrotną sytuację: komplet danych z B, a z A tylko tam, gdzie istnieje relacja. `A LEFT JOIN B` odpowiadałoby sytuacji, gdzie podświetlony jest cały zbiór A i przecięcie, a nie B.
Z kolei `A INNER JOIN B` zwróciłby wyłącznie część wspólną A∩B, czyli tylko te rekordy, które mają dopasowanie po obu stronach. Na diagramie byłby wtedy zaznaczony wyłącznie środek, a nie cały zielony obszar B. To typowy błąd: utożsamianie każdego JOIN z „częścią wspólną”. INNER JOIN jest dobry, gdy interesują nas tylko powiązane dane (np. zamówienia, które mają istniejącego klienta), ale w zadaniu wyraźnie mowa o „wszystkich rekordach z B”.
`A FULL OUTER JOIN B` idzie w drugą stronę – zwraca wszystko z A **i** wszystko z B, niezależnie od tego, czy jest dopasowanie, czy nie. To byłby diagram z zaznaczonymi obiema kółkami, czyli suma zbiorów A∪B. W standardzie SQL taki typ złączenia jest opisany jako pełne złączenie zewnętrzne i stosuje się go rzadziej, np. do porównywania różnic między dwiema tabelami. Tutaj jest to za szeroki zakres danych w stosunku do pytania.
Poprawne podejście wymaga więc skojarzenia, że skoro chcemy wszystkie rekordy z tabeli B, to w zapisie `A ... JOIN B` tabela B musi być po tej stronie, która jest „obowiązkowa”. Właśnie to zapewnia `RIGHT JOIN`: pełny zestaw wierszy z prawej tabeli, plus dopasowania z lewej tam, gdzie istnieją. Świadome operowanie tymi pojęciami bardzo ułatwia projektowanie zapytań raportowych i unikanie nieoczekiwanych braków lub duplikacji danych.