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: 7 czerwca 2026 23:56
  • Data zakończenia: 8 czerwca 2026 00:15

Egzamin zdany!

Wynik: 28/40 punktów (70,0%)

Wymagane minimum: 20 punktów (50%)

Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

W przedstawionej regule CSS h1{color: blue} co oznacza h1?

A. klasę
B. wartość
C. selektor
D. deklarację
W regule CSS h1{color: blue} termin h1 odnosi się do selektora, który jest używany do wybierania elementów HTML, a w tym przypadku oznacza wszystkie nagłówki pierwszego poziomu. Selekcje w CSS są kluczowym elementem stylizacji stron internetowych, ponieważ pozwalają na precyzyjne określenie, które elementy mają być stylizowane. Selekcja h1 odnosi się do wszystkich elementów <h1> w dokumencie HTML, co oznacza, że wszystkie nagłówki pierwszego poziomu zostaną stylizowane zgodnie z podaną regułą. Wartością kolorystyki, czyli blue, jest przypisana do właściwości CSS 'color', co skutkuje zmianą koloru tekstu nagłówka na niebieski. Zgodnie z W3C, CSS (Cascading Style Sheets) pozwala na oddzielenie treści od prezentacji, co zwiększa elastyczność i ułatwia zarządzanie stylem strony. Przykładem praktycznym może być strona internetowa, gdzie wszystkie nagłówki pierwszego poziomu są wyróżnione kolorem niebieskim, co przyciąga uwagę użytkowników i poprawia czytelność. Selekcja jest zatem podstawowym narzędziem w stylizacji, umożliwiającym aplikację reguł CSS do określonych elementów HTML.

Pytanie 2

Na czym polega operacja selekcji w algebrze relacji?

A. na usunięciu pustych wierszy
B. na wyborze krotek spełniających określone warunki
C. na wyborze krotek bez wartości NULL
D. na usunięciu krotek z powtarzającymi się polami
Pozostałe opisy mylą selekcję z innymi operacjami. Usuwanie pustych wierszy lub krotek z NULL oraz eliminacja duplikatów to osobne czynności (ta ostatnia przypomina DISTINCT). Selekcja wybiera wiersze według warunku, podczas gdy wybór kolumn to projekcja.

Pytanie 3

Z jaką bazą danych nawiązuje połączenie funkcja pg_connect w PHP?

A. MySQL
B. MS SQL
C. PostgreSQL
D. MS Access
Funkcja pg_connect() nawiązuje w PHP połączenie z bazą PostgreSQL - prefiks pg_ to skrót od „PostgreSQL”, tak jak mysqli_ wskazuje na MySQL. Każdy system bazodanowy ma w PHP własny zestaw funkcji. Zapamiętaj: po prefiksie funkcji poznasz, z jaką bazą pracujesz.

Pytanie 4

Dane z pola input o typie number zostały zapisane do zmiennej a, a następnie przetworzone w kodzie JavaScript w sposób następujący:

var x = parseFloata);
Jakiego typu będzie zmienna x?
A. NaN
B. napisowego
C. zmiennoprzecinkowego
D. liczbowego, całkowitego
Widzisz, zmienna x dostaje wartość z funkcji parseFloat, która zmienia coś z pola input typu number na liczbę zmiennoprzecinkową. To jest dość standardowa funkcja w JavaScript, często używana do zamiany tekstu (czyli stringów) na liczby zmiennoprzecinkowe. Na przykład, jak w polu input masz '123.45', to po napisaniu var x = parseFloat(a);, x stanie się liczbą 123.45. Tylko pamiętaj, że jak przekazany tekst nie może być zmieniony na liczbę, to dostaniesz NaN (czyli Not-a-Number). Ta funkcja jest zgodna z ECMAScript i jest naprawdę przydatna, np. w sytuacjach, gdy trzeba walidować dane, które użytkownicy wprowadzają. Twoja odpowiedź jest na plus, bo korzystając z parseFloat, dostajesz typ zmiennoprzecinkowy, co jest ważne w obliczeniach matematycznych. Zresztą, dokładność w tych wartościach liczbowych jest kluczowa.

Pytanie 5

Jak wygląda poprawny zapis samozamykającego się znacznika łamania linii?

A.
</br>
B.
<br/>
C.
</ br>
D.
<br> </br>
Łamanie linii <br> to element pusty (void) - nie zawiera żadnej treści, więc nie ma osobnego znacznika zamykającego. W składni XHTML zapisuje się go w formie samozamykającej <br/>, z ukośnikiem tuż przed > (w HTML5 wystarczy samo <br>). Dlatego poprawną formą samozamykającą jest <br/>.

Pytanie 6

Podczas edytowania grafiki w programie do obróbki grafiki rastrowej należy usunąć kolory z obrazu, aby uzyskać wersję w odcieniach szarości. Do osiągnięcia tego efektu można wykorzystać funkcję

A. desaturacji
B. kadrowania
C. szumu RGB
D. filtru rozmycia
Desaturacja to proces, który polega na usunięciu kolorów z obrazu, co skutkuje uzyskaniem odcieni szarości. Technika ta jest powszechnie wykorzystywana w edytorach grafiki rastrowej, takich jak Adobe Photoshop czy GIMP. Desaturacja obrazu można zrealizować na kilka sposobów, na przykład poprzez zastosowanie odpowiednich filtrów lub narzędzi. W praktyce, desaturując obraz, można uzyskać różne efekty wizualne, które podkreślają fakturę i kształt elementów, a także mogą być użyteczne w kontekście analizy zdjęć medycznych czy archiwalnych. Standardy dotyczące edycji grafiki, takie jak Adobe RGB czy sRGB, również uwzględniają desaturację jako istotny element przetwarzania kolorów. Warto zauważyć, że desaturacja nie jest tym samym co konwersja do odcieni szarości; pierwsza metoda zachowuje wartości jasności kolorów, podczas gdy druga przekształca je w jednolite odcienie szarości, co może prowadzić do utraty detali. Zastosowanie desaturacji jest szczególnie przydatne w przypadku fotografii czarno-białej, gdzie kluczowe jest zachowanie kontrastu i detali w obrazie.

Pytanie 7

Które reguły CSS poprawnie ustawiają dla akapitu czcionkę Arial, rozmiar 16 pt i pochylenie (kursywę)?

A.
p { font-style: Arial; size: 16px; font-weight: normal; }
B.
p { font-family: Arial; font-size: 16pt; font-style: italic; }
C.
p { font-style: Arial; font-size: 16pt; font-variant: normal; }
D.
p { font-family: Arial; font-size: 16px; font-variant: normal; }
Wygląd czcionki opisują w CSS trzy osobne właściwości: font-family ustala krój (np. Arial), font-size - rozmiar (tu 16pt, bo zadano punkty, a nie piksele), a font-style: italic włącza pochylenie. Razem daje to p { font-family: Arial; font-size: 16pt; font-style: italic; }. Warto pamiętać, że font-style odpowiada za kursywę, a font-weight za grubość - to częste źródło pomyłek. Dlatego poprawny jest ten zestaw reguł.

Pytanie 8

Do czego służy debugger?

A. do analizy właściwości oprogramowania
B. do sprawdzania wydajności programu
C. do wyszukiwania błędów w kodzie programu
D. do optymalizacji zużycia pamięci
Debugger to narzędzie do WYSZUKIWANIA BŁĘDÓW w kodzie - pozwala wykonywać program krok po kroku, wstawiać pułapki (breakpointy) i podglądać wartości zmiennych w trakcie działania. Dlatego debugger służy do wyszukiwania błędów w kodzie programu.

Pytanie 9

Na ilustracji pokazano relację jeden do wielu. Łączy ona

Ilustracja do pytania
A. klucz obcy rezyserzy_id tabeli filmy z kluczem obcym id tabeli rezyserzy
B. klucz podstawowy id tabeli filmy z kluczem podstawowym id tabeli rezyserzy
C. klucz obcy rezyserzy_id tabeli filmy z kluczem podstawowym id tabeli rezyserzy
D. klucz podstawowy id tabeli filmy z kluczem obcym rezyserzy_id tabeli rezyserzy
Relacja jeden do wielu w bazach danych często wiąże się z sytuacją, gdzie jeden rekord w tabeli nadrzędnej może być powiązany z wieloma rekordami w tabeli podrzędnej. W tym kontekście tabela nadrzędna to rezyserzy posiadająca klucz podstawowy id, natomiast tabela podrzędna to filmy która odnosi się do tej wartości poprzez klucz obcy rezyserzy_id. Klucz podstawowy to unikalny identyfikator rekordu w tabeli, który pozwala na jednoznaczne rozróżnienie każdego rekordu. Klucz obcy natomiast jest atrybutem w tabeli podrzędnej, który odnosi się do klucza podstawowego w tabeli nadrzędnej. Jest to zgodne z teorią normalizacji baz danych, gdzie relacje jeden do wielu są standardowym podejściem do projektowania struktur danych. Użycie klucza obcego pozwala na utrzymanie integralności referencyjnej, co oznacza że każda wartość klucza obcego musi odpowiadać wartości klucza podstawowego w powiązanej tabeli lub być null, jeśli taka relacja jest dozwolona. Praktyczne zastosowanie tej relacji można zaobserwować w systemach zarządzania treścią, gdzie jeden autor (reżyser) może mieć przypisanych wiele artykułów (filmów), jednak każdy artykuł jest przypisany do jednego autora, co umożliwia na przykład efektywne zarządzanie danymi i generowanie raportów o twórczości danego autora.

Pytanie 10

Podano fragment kodu PHP, w którym znajduje się zadeklarowana zmienna typu tablica. Jakie imię zostanie wyświetlone po wykonaniu tego kodu?

Ilustracja do pytania
A. Anna
B. Tomasz
C. Krzysztof
D. Aleksandra
W prezentowanym kodzie PHP mamy do czynienia z tablicą indeksowaną. Tablica ta zawiera cztery elementy: 'Anna' 'Tomasz' 'Krzysztof' i 'Aleksandra'. W PHP tablice indeksowane są zerowane czyli pierwszy element znajduje się pod indeksem 0 drugi pod indeksem 1 i tak dalej. Dlatego jeśli chcemy uzyskać dostęp do trzeciego elementu tablicy musimy odwołać się do indeksu 2. W związku z tym wyrażenie echo $imiona[2] wypisze wartość 'Krzysztof'. Zrozumienie indeksowania tablic w PHP jest kluczowe zwłaszcza przy operacjach na dużych zbiorach danych. Poprawna praktyka programistyczna polega na dokładnym śledzeniu indeksów aby uniknąć błędów typu 'index out of range'. Warto również zwrócić uwagę na alternatywne sposoby deklaracji tablic w PHP np. za pomocą skróconej notacji [] co jest preferowane w nowszych wersjach PHP ze względu na czytelność i zwięzłość kodu. Takie podejście zgodne jest z dobrymi praktykami w programowaniu obiektowym oraz w przypadku tworzenia API gdzie struktury danych są często wykorzystywane w podobny sposób.

Pytanie 11

Jaki format CSS dla akapitu definiuje styl szarej ramki z następującymi cechami?

p {
  padding: 15px;
  border: 2px dotted gray; }
A. linia kropkowa; grubość 2 px; marginesy między tekstem a ramką 15 px
B. linia ciągła; grubość 2 px; marginesy między tekstem a ramką 15 px
C. linia kreskowa; grubość 2 px; marginesy poza ramką 15 px
D. linia ciągła; grubość 2 px; marginesy poza ramką 15 px
Odpowiedź numer jeden jest poprawna, ponieważ prawidłowo opisuje stylizację akapitu przy użyciu CSS zgodnie z przedstawionym kodem. Właściwość 'border' definiuje styl obramowania elementu. W tym przypadku użyto stylu 'dotted', który oznacza linię kropkowaną, o grubości 2 pikseli i kolorze szarym. Jest to użyteczne w sytuacjach, gdy chcemy wizualnie wyróżnić element, ale w sposób subtelny i nienachalny. Dodatkowo, właściwość 'padding' określa margines wewnętrzny, czyli odstęp między zawartością elementu a jego krawędzią. Zapewnienie marginesu wewnętrznego 15 pikseli pozwala tekstowi oddalić się od krawędzi obramowania, co zwiększa czytelność i estetykę. Praktyczne zastosowanie takich stylizacji można znaleźć w projektowaniu stron internetowych, gdzie często używa się różnych stylów obramowań do organizowania treści. Zgodność z dobrymi praktykami web designu zakłada użycie spójnych i intuicyjnych stylów, co poprawia doświadczenia użytkownika oraz ułatwia nawigację po stronie internetowej. Tego typu formatowanie jest zgodne ze standardami CSS, co czyni kod bardziej przewidywalnym i łatwiejszym w utrzymaniu

Pytanie 12

Brak którego elementu spowoduje BŁĄD/ostrzeżenie walidatora HTML?

A.
<link>
B.
<title>
C. przynajmniej jednego <h1>
D.
<meta name="author">
W poprawnym dokumencie HTML wymagany jest znacznik <title> (w sekcji <head>) - określa tytuł strony widoczny na karcie przeglądarki i w wynikach wyszukiwania. Jego brak walidator zgłasza jako błąd. Dlatego chodzi o <title>.

Pytanie 13

Wskaź, która instrukcja jest równoważna z instrukcją switch w języku PHP?

Ilustracja do pytania
A. Instrukcja 1
B. Instrukcja 2
C. Instrukcja 3
D. Instrukcja 4
Instrukcja switch w PHP służy do wykonywania różnych bloków kodu w zależności od wartości wyrażenia. W podanym przykładzie, jeśli zmienna $liczba wynosi 10 lub 20, zostanie zwiększona o 1. W przeciwnym razie $liczba zostanie ustawiona na 0. Instrukcja 2 używa warunku if z operatorem or, który sprawdza, czy $liczba jest równa 10 lub 20, co odpowiada logice w switch. Dzięki temu, mimo że struktura instrukcji if różni się od switch, logika działania jest identyczna. Praktycznie, użycie instrukcji if z operatorem or w takich sytuacjach jest czytelne i wydajne zwłaszcza jeśli mamy do czynienia z ograniczoną liczbą warunków. Warto zauważyć, że switch jest bardziej efektywny, gdy mamy wiele przypadków do sprawdzenia, ale if z operatorami logicznymi jest bardziej elastyczny, co czyni go przydatnym w różnorodnych scenariuszach programistycznych. Dobre praktyki wskazują na wybór struktury kontrolnej w zależności od złożoności i specyfiki problemu, co pozwala na optymalizację czytelności i utrzymania kodu.

Pytanie 14

Czym jest w języku C++ konstrukcja double *x;?

A. formalnym argumentem typu rzeczywistego
B. wskaźnikiem
C. zmienną całkowitą
D. zmienną rzeczywistą
Pozostałe odpowiedzi mylą wskaźnik ze zwykłą zmienną. Bez * (double x;) byłaby to zmienna rzeczywista przechowująca liczbę. Nie jest to zmienna całkowita (to byłby int) ani formalny argument funkcji. Gwiazdka czyni z x wskaźnik.

Pytanie 15

Jak nazywa się rodzaj programowania, w którym program to ciąg poleceń (sekwencja instrukcji) przekazywanych komputerowi?

A. funkcyjne
B. logiczne
C. stanowe
D. imperatywne
Pozostałe paradygmaty inaczej organizują kod. Funkcyjne opiera się na funkcjach i unikaniu zmiennego stanu (opisuje „co policzyć”, nie „jak krok po kroku”). Logiczne (np. Prolog) zadaje fakty i reguły, a wynik wnioskuje silnik. „Stanowe” nie jest klasycznym paradygmatem programowania. Ciąg poleceń to programowanie imperatywne.

Pytanie 16

W języku PHP wyniki zapytania z bazy danych zostały pobrane przy użyciu polecenia mysql_query(). Aby uzyskać dane w postaci wierszy z tej zwróconej kwerendy, należy użyć polecenia:

A. mysql_field_len()
B. mysql_fetch_row()
C. mysql_fetch_lengths()
D. mysql_list_fields()
Funkcja mysql_fetch_row() to naprawdę ważne narzędzie w PHP, które pomaga w pracy z wynikami zapytań SQL. Kiedy wykonasz zapytanie za pomocą mysql_query(), dostajesz zestaw wyników, który można traktować jak tablicę. Używając mysql_fetch_row(), możesz pobrać jeden wiersz danych z tego zestawu, a to przychodzi w formie tablicy numerycznej. To bardzo przydatne, szczególnie gdy chcesz przejść przez wszystkie wiersze, które zwraca zapytanie. Na przykład, przy wyświetlaniu danych w HTML. Super jest to, że ta funkcja jest prosta w użyciu i działa efektywnie, dlatego tak wielu programistów ją ceni. Pamiętaj, żeby zawsze zabezpieczać zapytania przed SQL Injection. Możesz to zrobić, stosując przygotowane zapytania (prepared statements) albo funkcje, jak mysqli_query() z mysqli_fetch_row(). Warto też wiedzieć, że jeśli nie ma już więcej wierszy do pobrania, to mysql_fetch_row() zwróci false. Można to wykorzystać do kontrolowania pętli w kodzie, co jest przydatne.

Pytanie 17

Grafika powinna być zapisana w formacie GIF, jeśli

A. jest to obraz w technologii stereoskopowej
B. istnieje potrzeba zapisu obrazu w formie bez kompresji
C. konieczne jest zapisanie obrazu lub animacji
D. jest to grafika wektorowa
Wybór formatu GIF dla obrazów stereoskopowych jest niewłaściwy z kilku powodów. Obrazy stereoskopowe wymagają specyficznej technologii obrazowania, która pozwala na uzyskanie efektu głębi, a format GIF nie jest w stanie tego efektywnie zrealizować. GIF jest formatem 2D, który nie obsługuje trójwymiarowej struktury danych, co czyni go nieodpowiednim narzędziem do zapisu obrazów wymagających zaawansowanej parallaxu. Podobnie, potrzeba zapisu obrazu bez kompresji kojarzy się z formatami takimi jak BMP lub TIFF, które zachowują pełną jakość obrazu, natomiast GIF stosuje kompresję bezstratną, która ogranicza liczbę kolorów, co z kolei wpływa na jakość i szczegółowość zapisywanych obrazów. Grafika wektorowa, z kolei, opiera się na matematycznych równaniach i jest zapisywana w formatach takich jak SVG lub EPS, a nie w GIF, który jest formatem rastrowym. Wybierając format do przechowywania określonego typu obrazu, należy kierować się jego cechami oraz wymaganiami technologicznymi, co pozwala uniknąć typowych błędów myślowych związanych z doborem formatu do zastosowania. Właściwe zrozumienie różnic pomiędzy formatami obrazów jest kluczowe w kontekście ich zastosowań, aby efektywnie zarządzać zasobami graficznymi.

Pytanie 18

Jaką wartość wydrukuje na standardowe wyjście poniższy fragment kodu C++?

int obliczenia( int x ) {
x %= 3;
x++;
return x;
}

int main() {
std::cout<<obliczenia(32);
}
A. 0
B. 3
C. 32
D. 2
Rozważając dostępne odpowiedzi musimy przeanalizować dlaczego niektóre z nich są błędne w kontekście działania fragmentu programu. Zaczynając od odpowiedzi 0 warto zauważyć że reszta z dzielenia 32 przez 3 nie wynosi 0 co oznacza że operacja x %= 3 nie da w wyniku zera. Wartość 0 mogłaby być wynikiem tylko wtedy gdyby liczba 32 była podzielna przez 3 co nie jest prawdą w tym przypadku. Przechodząc dalej odpowiedź 32 sugeruje że operacje wewnątrz funkcji nie zmieniają wartości x co jest błędnym założeniem. Operacja x %= 3 zmienia wartość x na 2 a następnie x++ zmienia ją na 3. Dlatego wynik nie może być 32 ponieważ funkcja jawnie modyfikuje wartość wejściową. W kontekście odpowiedzi 2 operacje w funkcji mogą rzeczywiście prowadzić do wyniku 2 jeśli pominie się krok inkrementacji. Jednakże analiza kodu pokazuje że po operacji modulo wartość x wynosi 2 a następny krok to x++ który zwiększa tę wartość do 3. W rezultacie żadna z tych odpowiedzi nie uwzględnia pełnego przepływu operacji w funkcji co prowadzi do nieprawidłowych wniosków. Analizując ten problem można zauważyć jak ważne jest dokładne śledzenie przepływu danych w programie oraz zrozumienie wpływu każdej operacji na ostateczny wynik co jest kompetencją kluczową w profesjonalnym programowaniu.

Pytanie 19

Jaki wynik pojawi się po wykonaniu zaprezentowanego kodu HTML?

Ilustracja do pytania
A. Odpowiedź A
B. Odpowiedź B
C. Odpowiedź C
D. Odpowiedź D
W analizie kodu HTML istotne jest zrozumienie struktury zagnieżdżonych list. Błędne odpowiedzi wynikają z niedokładnej interpretacji hierarchii i stylizacji list. Listy uporządkowane oznaczone tagiem ol oraz nieuporządkowane ul są podstawą do strukturalizacji informacji w HTML. Częsty błąd polega na nieuwzględnieniu, jak przeglądarki interpretują zagnieżdżone listy. Element ol z atrybutami type i start zmienia styl numeracji. Wersje z atrybutem type=A zmieniają numerację na literową, a start=4 decyduje o punkcie startowym. Pominięcie tego aspektu prowadzi do błędnych wniosków. Dobre praktyki obejmują klarowność struktury HTML poprzez właściwe użycie tagów i atrybutów, co jest kluczowe dla dostępności i użyteczności stron. Przy projektowaniu, warto pamiętać o spójności formatowania i zgodności z semantyką HTML, co poprawia doświadczenia użytkowników i wydajność SEO. Właściwe zrozumienie i zastosowanie atrybutów list ułatwia zarządzanie złożonymi strukturami na stronach internetowych.

Pytanie 20

Nazywa się inaczej nasycenie koloru

A. przezroczystość koloru
B. dopełnienie koloru
C. nasycenie koloru
D. jasność koloru
Saturacja koloru, znana również jako nasycenie, odnosi się do intensywności koloru, określając, jak czysty lub żywy jest dany kolor w porównaniu do szarości o tej samej jasności. W praktyce, wysoka saturacja oznacza, że kolor jest bardziej intensywny i wyrazisty, podczas gdy niska saturacja sprawia, że kolor staje się bardziej stonowany i bliski szarości. Na przykład, jaskrawoczerwony odcień czerwieni ma wysoką saturację, podczas gdy różowy odcień tej samej barwy będzie charakteryzował się niższą saturacją, ponieważ zawiera więcej bieli. W kontekście projektowania graficznego i fotografii, zrozumienie nasycenia jest kluczowe. Pomaga to w tworzeniu harmonijnych kompozycji, które przyciągają uwagę i wywołują określone emocje u odbiorców. Profesjonaliści często korzystają z narzędzi do edycji zdjęć, takich jak Adobe Photoshop, aby manipulować nasyceniem kolorów, co może znacząco wpłynąć na ostateczny odbiór wizualny. Satysfakcjonująca paleta kolorów w projektach graficznych opiera się na właściwym balansowaniu nasycenia, co jest zgodne z zasadami teorii kolorów.

Pytanie 21

Jakie z wyrażeń logicznych w języku C weryfikuje, czy zmienna o nazwie zm1 znajduje się w zakresie (6, 203)?

A. (zm1 > 6) || (zm1 <= 203)
B. (zm1 > 6) && (zm1 <= 203)
C. (zm1 > 6) && (zm1 != 203)
D. (zm1 > 6) || (zm1 != 203)
W analizie wyrażeń logicznych ważne jest zrozumienie logiki za każdym z operatorów oraz ich zastosowania w kontekście zadania. Przykładowo, wyrażenie (zm1 > 6) || (zm1 <= 203) jest niepoprawne, ponieważ użycie operatora || (OR) sugeruje, że wystarczy, aby zm1 spełniało jeden z dwóch warunków, co nie jest zgodne z definicją przedziału. W przypadku (zm1 > 6) && (zm1 != 203) wyrażenie również nie jest prawidłowe, ponieważ ignoruje dolny limit przedziału – wartość 203 nie jest wbudowana w przedział, co sprawia, że zmienna może przyjmować wartości, które nie są odpowiednie. Z kolei (zm1 > 6) || (zm1 != 203) jest całkowicie mylne, gdyż połączenie operatora OR nie tylko rozluźnia wymagania, ale również wprowadza błąd logiczny, który może prowadzić do nieprawidłowych wyników, gdyż zm1 może być mniejsze lub równe 6. Te błędy mogą wynikać z niepełnego zrozumienia operatorów logicznych oraz ich kontekstu w programowaniu. Właściwe stosowanie operatorów logicznych jest kluczowe dla tworzenia poprawnych i niezawodnych aplikacji. Warto pamiętać, że precyzyjne określenie zakresów i warunków w programie ma kluczowe znaczenie dla jego poprawności oraz stabilności działania.

Pytanie 22

Którego znacznika użyć, aby przejść do nowej linii tekstu BEZ tworzenia akapitu?

A.
</br>
B.
</b>
C.
<p>
D.
<br>
Pozostałe znaczniki nie łamią wiersza w ten sposób. </br> to błędny zapis. </b> zamyka pogrubienie. <p> tworzy nowy AKAPIT z odstępem, a nie samo przejście do nowej linii. Złamanie wiersza bez akapitu daje <br>.

Pytanie 23

W poleceniu CREATE TABLE zastosowanie klauzuli PRIMARY KEY przy definiowaniu kolumny tabeli spowoduje, że ta kolumna stanie się

A. kluczem podstawowym
B. indeksem klucza
C. kluczem obcym
D. indeksem unikalnym
Użycie klauzuli PRIMARY KEY w instrukcji CREATE TABLE pozwala na zdefiniowanie unikalnego identyfikatora dla każdego rekordu w tabeli. Klucz podstawowy zapewnia, że żadne dwa wiersze nie mogą mieć tej samej wartości w kolumnie, co jest kluczowe dla zachowania integralności danych. Przykładem praktycznym może być stworzenie tabeli użytkowników, gdzie 'id_użytkownika' jest kluczem podstawowym. Taki klucz może być typu INTEGER z automatycznym inkrementowaniem, co oznacza, że dla każdego nowego użytkownika wartość 'id_użytkownika' wzrasta automatycznie. Standardy branżowe zalecają definiowanie klucza podstawowego dla każdej tabeli, aby upewnić się, że rekordy można w sposób jednoznaczny zidentyfikować, co jest niezbędne dla relacyjnych baz danych. Dodatkowo, klucz podstawowy automatycznie tworzy indeks na tej kolumnie, co przyspiesza operacje wyszukiwania. Ważne jest, aby klucz podstawowy był dobrze przemyślany, ponieważ jego zmiana w przyszłości może wiązać się z dużymi komplikacjami w bazie danych.

Pytanie 24

W podanym kodzie JavaScript ponumerowano linie dla ułatwienia. W programie występuje błąd, ponieważ po wykonaniu żadna wiadomość nie jest wyświetlana. Aby usunąć ten błąd, należy

1. if (a < b)
2. document.write(a);
3. document.write(" jest mniejsze");
4. else
5. document.write(b);
6. document.write(" jest mniejsze");
A. dodać nawiasy klamrowe w sekcjach if oraz else
B. umieścić znaki $ przed nazwami zmiennych
C. w liniach 3 i 6 zamienić znaki cudzysłowu na apostrof, np. ' jest mniejsze'
D. w liniach 2 i 5 zmienne a i b umieścić w cudzysłowach
Wstawienie nawiasów klamrowych do sekcji 'if' oraz 'else' jest kluczowe dla prawidłowego działania kodu w JavaScript. Kiedy nie używamy nawiasów klamrowych, język domyślnie interpretuje tylko jedną linię jako część bloku 'if' lub 'else'. W sytuacji, gdy mamy więcej niż jedną operację do wykonania w ramach tego samego warunku, brak nawiasów prowadzi do błędów wykonania. Przykład: jeśli chcemy wyświetlić komunikat oraz wartość zmiennej 'a', musimy objąć te operacje nawiasami klamrowymi. Warto również pamiętać, że korzystanie z nawiasów klamrowych zwiększa czytelność kodu, co jest zgodne z najlepszymi praktykami programistycznymi. Stosowanie tej zasady pozwala unikać niejednoznaczności i potencjalnych błędów w logicznych blokach kodu. Dodatkowo, pomocne jest testowanie kodu w środowiskach, które wyłapują błędy syntaktyczne, co ułatwia wczesne wykrywanie problemów.

Pytanie 25

Który z rysunków obrazuje efekt działania przedstawionego fragmentu kodu HTML?

<table border="1">
 <tr><td rowspan="2">pierwszy</td><td>drugi</td></tr>
 <tr><td>trzeci</td></tr>
</table>
Ilustracja do pytania
A. A.
B. B.
C. C.
D. D.
Super, wybrałeś właściwą odpowiedź! To rysunek C. Kod HTML to taki jakby zestaw narzędzi, który pozwala tworzyć różne układy stron internetowych, w tym tabelki. W tym przypadku mamy do czynienia z tabelą, która ma dwa wiersze i dwie kolumny. Zauważ, że pierwsza komórka z tekstem 'pierwszy' zajmuje miejsce aż na dwa wiersze, dzięki atrybutowi rowspan='2'. To oznacza, że można ją rozciągnąć w pionie, co zmienia układ całej tabeli. W pierwszym wierszu obok tej komórki jest komórka z tekstem 'drugi', a w drugim wierszu mamy jedynie 'trzeci', bo obok 'pierwszy' już jest zajęte miejsce. Dzięki temu, rysunek C dokładnie pokazuje, jak to wszystko działa. Pamiętaj, że umiejętność pracy z tabelami w HTML jest naprawdę ważna, jeśli chcesz tworzyć estetyczne i funkcjonalne strony.

Pytanie 26

Na tabeli muzyka, przedstawionej na rysunku, zostało wykonane następujące zapytanie SQL. Jaki wynik zwróci ta kwerenda?

SELECT wykonawca FROM `muzyka` WHERE wykonawca LIKE 'C%w';
IDtytul_plytywykonawcarok_nagraniaopis
1Czas jak rzekaCzeslaw Niemen2005Przyjdz W Taka Noc itd.
2IkonaStan Borys2014
3AerolitCzeslaw Niemen2017Winylowa reedycja płyty „Aerolit”.
4JourneyMikolaj Czechowski2013
A. Czeslaw, Niemen
B. Czeslaw
C. pusty wynik
D. Czeslaw, Czechowski
Dobrze, wybrałeś prawidłową odpowiedź. Zapytanie SQL, które widzimy w tym pytaniu, zostało sformułowane w taki sposób, że wyszukuje ono wszystkich wykonawców (kolumna 'wykonawca' w tabeli 'muzyka'), których nazwy zaczynają się na literę 'C' i kończą na literę 'w'. Składnia LIKE 'C%w' w warunku WHERE zapytania SQL jest używane do dopasowania wzorca, gdzie '%' oznacza dowolny ciąg znaków, a 'C' i 'w' to konkretne litery na początku i końcu nazwy. Jednak w tabeli 'muzyka' nie ma żadnego wykonawcy, który spełniałby ten warunek. Dlatego wynik zapytania jest pusty. Jest to dobra praktyka, aby zrozumieć, jak używać operatora LIKE w zapytaniach SQL, ponieważ pozwala na elastyczne wyszukiwanie danych w bazie danych.

Pytanie 27

Dana jest tabela uczniowie, do której wpisano rekordy jak na rysunku. Co będzie wynikiem działania przedstawionego zapytania SQL?

SELECT AVG(ocena) FROM uczniowie;

NazwiskoImieocena
KowalskiSebastian4
KaczmarekMarta3
BaryłaZenon4
GotaAnna3
A. Suma ocen równa 14
B. Dane 4, 3, 4, 3
C. Wartość 3.5
D. Liczba wierszy równa 4
Tak, poprawna odpowiedź to 'Wartość 3.5'. W zapytaniu SQL 'SELECT AVG(ocena) FROM uczniowie;' używamy funkcji AVG, żeby obliczyć średnią. W tym przypadku ona bierze oceny z tabeli 'uczniowie' i liczy, ile wynosi średnia. Jak to działa? Suma wszystkich ocen to 14 (3 + 4 + 3 + 4), a mamy cztery oceny, więc dzielimy 14 przez 4 i wychodzi nam 3.5. To jest super przykład, jak można wykorzystać funkcję AVG w SQL, co jest naprawdę przydatne, szczególnie, gdy mamy dużą ilość danych do przeanalizowania. Dobrze jest znać takie funkcje agregujące jak AVG, SUM, MAX czy MIN, bo ułatwiają one analizę danych.

Pytanie 28

Podaj polecenie SQL, które pozwoli na dodanie kolumny miesiacSiewu do tabeli rośliny znajdującej się w bazie danych

A. ALTER TABLE rośliny ADD miesiacSiewu int;
B. CREATE TABLE rośliny {miesiacSiewu int};
C. INSERT INTO rośliny VALUES (miesiacSiewu int);
D. UPDATE rośliny ADD miesiacSiewu int;
Odpowiedź 'ALTER TABLE rośliny ADD miesiacSiewu int;' jest jak najbardziej na miejscu. Używasz tutaj komendy SQL 'ALTER TABLE', co jest standardem, jeśli chcesz coś zmienić w już istniejącej tabeli. W tym przypadku dodajesz nowe pole 'miesiacSiewu' w formacie 'int' do tabeli 'rośliny'. Fajnie, bo dodawanie kolumn w relacyjnych bazach danych to chleb powszedni, zwłaszcza gdy musisz dodać nowe informacje. Na przykład, jak chcesz wiedzieć, kiedy siać rośliny, to zrobienie tego przy pomocy tej komendy pozwoli Ci trzymać te dane blisko innych szczegółów roślin. Warto też pamiętać, żeby nowe kolumny były dobrze indeksowane lub miały jakieś wartości domyślne, bo to może przyspieszyć zapytania do bazy. Tego typu operacje są naprawdę ważne w zarządzaniu bazami danych, bo dają Ci elastyczność, żeby dostosować strukturę bazy do potrzeb Twojej aplikacji.

Pytanie 29

Aby w języku PHP odwołać się do danych formularza przesłanych metodą POST, należy użyć tablicy:

A.
$_SERVER
B.
$_FILES
C.
$_POST
D.
$_SESSION
Dane pól formularza wysłanego metodą POST PHP udostępnia w tablicy superglobalnej $_POST. Odwołujesz się do konkretnego pola po jego atrybucie name, na przykład $_POST["login"]. Jest ona dostępna w każdym miejscu skryptu bez deklarowania. Analogicznie dane wysłane metodą GET trafiają do $_GET. Dlatego do odczytania pól formularza przesłanego przez POST używa się właśnie $_POST.

Pytanie 30

Zidentyfikuj styl CSS, który doprowadził do uzyskania pokazanego efektu.

Ilustracja do pytania
A. Styl 1
B. Styl 2
C. Styl 3
D. Styl 4
Odpowiedź Styl 2 jest prawidłowa, ponieważ zastosowanie border-radius w wartości 50px pozwala osiągnąć efekt zaokrąglenia narożników elementu do kształtu koła, o ile element jest kwadratem. W tym przypadku obraz ma szerokość 100px, co oznacza, że promień zaokrąglenia równy 50px sprawia, że wszystkie narożniki zbiegają się w punktach centralnych ścianek kwadratu, tworząc idealny okrąg. Ta technika jest szeroko stosowana w projektowaniu stron internetowych zwłaszcza w odniesieniu do awatarów lub elementów graficznych, które wymagają zaokrąglonego kształtu. Stosowanie odpowiednich wartości border-radius jest zgodne z dobrymi praktykami w CSS, co pozwala projektantom na eleganckie i efektywne kształtowanie wyglądu witryny. Dzięki temu można tworzyć intuicyjne i estetyczne interfejsy użytkownika. Ważne jest również, aby testować wyświetlanie na różnych urządzeniach, ponieważ CSS powinien być responsywny i adaptowalny do różnorodnych rozdzielczości wyświetlaczy co zwiększa dostępność oraz użyteczność witryn.

Pytanie 31

Ile razy zostanie wykonana pętla przedstawiona w kodzie PHP?

for($i = 0; $i < 25; $i += 5) { ...... }
A. 0
B. 5
C. 25
D. 26
Pętla for w PHP, zdefiniowana jako for($i = 0; $i < 25; $i += 5), będzie wykonywana do momentu, gdy warunek $i < 25 będzie spełniony. Początkowa wartość $i to 0, a w każdej iteracji zwiększamy $i o 5. Wartości $i w kolejnych iteracjach będą wynosiły: 0, 5, 10, 15, 20. Po piątej iteracji, gdy $i osiągnie wartość 25, warunek $i < 25 przestanie być spełniony, co zakończy działanie pętli. W sumie, pętla wykona się dokładnie pięć razy. Zrozumienie działania pętli for jest kluczowe w programowaniu, ponieważ pozwala na automatyzację wielu zadań, co jest niezbędne w tworzeniu efektywnych i zoptymalizowanych aplikacji. Przykłady zastosowania to iteracja przez elementy tablic, generowanie numerów identyfikacyjnych czy przetwarzanie danych w bazach.

Pytanie 32

Kolumna, która pełni funkcję klucza głównego w tabeli, powinna

A. posiadać ciągłą numerację
B. zawierać unikalne wartości
C. zawierać wartości liczbowe
D. być innego rodzaju niż inne kolumny
Klucz główny w tabeli bazy danych to naprawdę ważny element. To taki unikalny identyfikator, który pozwala na jednoznaczne rozróżnianie rekordów. Dzięki temu unikamy dublowania danych, co jest istotne, żeby wszystko było jasne i klarowne, bo jak byśmy mieli dwa takie same rekordy, to mogłoby być sporo zamieszania. Na przykład w tabeli 'Klienci' klucz główny to np. numery PESEL czy jakieś unikalne identyfikatory klientów. W praktyce stosuje się też różne standardy, jak SQL, które pomagają ustawić te klucze jako ograniczenia. To sprawia, że nasze dane są bezpieczniejsze i bardziej poprawne. No i tak z doświadczenia, najlepiej jest, jak klucz główny jest prosty, może jako liczba całkowita, bo wtedy wszystko działa szybciej. Podsumowując, unikalność klucza głównego to podstawa, żeby mieć pewność, że nasze dane są spójne i wiarygodne. To kluczowe w każdym systemie bazodanowym.

Pytanie 33

Jaki jest domyślny port serwera HTTP?

A. 80
B. 8080
C. 443
D. 21
Domyślnym portem usługi HTTP jest 80 - przeglądarka łączy się z nim automatycznie, gdy w adresie nie podano innego, dlatego adresów typu http://strona.pl nie trzeba uzupełniać o numer portu. Port to liczbowy „adres” usługi na serwerze; znajomość domyślnych portów ułatwia konfigurację i diagnozę sieci. Dla bezpiecznego HTTPS używa się portu 443. Dlatego domyślny port serwera HTTP to 80.

Pytanie 34

Która metoda JavaScript dodaje nowy element na końcu tablicy?

A.
push()
B.
pop()
C.
shift()
D.
unshift()
Metoda push() dodaje nowy element na KOŃCU tablicy i zwraca jej nową długość. Dlatego element na końcu dodaje push().

Pytanie 35

Plik cookie utworzony przedstawionym poleceniem PHP:

setcookie("osoba", "Anna Kowalska", time() + (3600 * 24));
A. wygaśnie po jednej dobie od jego utworzenia.
B. wygaśnie po jednej godzinie od jego utworzenia.
C. będzie przechowywany na serwerze przez jedną dobę.
D. będzie przechowywany na serwerze przez jedną godzinę.
Kod z funkcją setcookie() w PHP bardzo często myli się z mechanizmami przechowywania danych po stronie serwera, dlatego łatwo tu o błędne skojarzenia. W tym przykładzie kluczowe są dwie rzeczy: po pierwsze, gdzie fizycznie przechowywane jest cookie, a po drugie, w jakiej jednostce podajemy czas. Ciasteczka HTTP są zawsze przechowywane po stronie klienta, czyli w przeglądarce użytkownika, w jej lokalnym magazynie. Serwer jedynie informuje przeglądarkę, jaki ma być czas życia takiego wpisu, wysyłając odpowiedni nagłówek Set-Cookie z datą wygaśnięcia. Stąd pomysł, że cookie „będzie przechowywane na serwerze” jest po prostu nietrafiony – serwer nie ma osobnego magazynu na ciasteczka użytkowników, on tylko je odczytuje z nagłówków przychodzących żądań i ewentualnie ustawia nowe. Druga częsta pomyłka dotyczy samego czasu. Funkcja time() zwraca aktualny timestamp w sekundach od 1.01.1970, a w wyrażeniu 3600 * 24 wyliczana jest liczba sekund w jednej dobie. Jeśli ktoś pobieżnie spojrzy na zapis, może skojarzyć 3600 z godziną i założyć, że cookie jest ważne tylko godzinę, ignorując mnożenie przez 24. To typowy błąd „czytania po łebkach” kodu. Tymczasem przeglądarka dostaje konkretny moment w przyszłości, przesunięty o 86400 sekund, i do tej chwili będzie wysyłać cookie przy każdym żądaniu do odpowiedniej domeny i ścieżki. Warto też pamiętać, że samo istnienie cookie nie oznacza trwałego przechowywania danych po stronie serwera. Dane z ciasteczka trafiają na serwer dopiero, gdy przeglądarka wyśle je w nagłówku HTTP. Dlatego planując logikę aplikacji, trzeba jasno rozróżniać dane sesyjne na serwerze (np. w $_SESSION) od danych w cookie, które użytkownik może modyfikować po swojej stronie i które wygasają dokładnie według tego timestampu, jaki podamy w setcookie().

Pytanie 36

Które rozszerzenie pliku jest związane z formatem wideo?

A. *.jpg
B. *.png
C. *.avi
D. *.bmp
Pozostałe rozszerzenia to formaty grafiki, a nie wideo. *.jpg to obraz z kompresją stratną, używany głównie do zdjęć. *.png to obraz rastrowy z kompresją bezstratną i przezroczystością. *.bmp to mapa bitowa zwykle bez kompresji, dająca duże pliki. Wszystkie przechowują pojedynczy, nieruchomy obraz, a nie sekwencję wideo z dźwiękiem. Plik wideo oznacza rozszerzenie *.avi, dlatego ta odpowiedź jest poprawna.

Pytanie 37

Który efekt został zaprezentowany na filmie?

A. Przenikanie zdjęć.
B. Zmiana jasności zdjęć.
C. Zwiększenie ostrości zdjęcia.
D. Zmniejszenie kontrastu zdjęcia.
Poprawnie wskazany efekt to przenikanie zdjęć, często nazywane też płynnym przejściem (ang. crossfade). Polega to na tym, że jedno zdjęcie stopniowo zanika, jednocześnie drugie pojawia się z narastającą widocznością. W praktyce technicznej realizuje się to najczęściej przez zmianę przezroczystości (opacity) dwóch warstw – jedna warstwa z pierwszym obrazem ma zmniejszaną wartość opacity z 1 do 0, a druga z kolejnym zdjęciem zwiększaną z 0 do 1. Na stronach WWW taki efekt robi się zwykle za pomocą CSS (transition, animation, keyframes) albo JavaScriptu, czasem z użyciem bibliotek typu jQuery czy gotowych sliderów. Moim zdaniem to jest jeden z podstawowych efektów, który warto umieć odtworzyć, bo pojawia się w galeriach, sliderach na stronach głównych, prezentacjach produktów czy prostych pokazach slajdów. W materiałach multimedialnych, np. w edycji wideo, dokładnie ten sam efekt nazywa się przejściem typu „cross dissolve” lub „fade”, i zasada działania jest identyczna – płynne nakładanie się dwóch klatek obrazu w czasie. Dobre praktyki mówią, żeby nie przesadzać z czasem trwania przenikania: zwykle 0,5–1,5 sekundy daje przyjemny, profesjonalny wygląd, bez wrażenia „zamulenia” interfejsu. Warto też pilnować spójności – jeśli na stronie używasz przenikania w jednym miejscu, dobrze jest utrzymać podobny styl animacji w innych elementach, żeby całość wyglądała konsekwentnie i nie rozpraszała użytkownika. W kontekście multimediów na WWW przenikanie jest też korzystne wydajnościowo, bo operuje głównie na właściwości opacity i transformacjach, które przeglądarki potrafią optymalizować sprzętowo.

Pytanie 38

Oznaczenie barwy w postaci #FF00E0 jest równoważne zapisowi

A. rgb(F, 0, E0)
B. rgb(FF, 0, E0)
C. rgb(255, 0, 128)
D. rgb(255, 0, 224)
Zapis #FF00E0 to klasyczny przykład koloru w notacji szesnastkowej, używanej w CSS i ogólnie w webdesignie. Cały haczyk polega na tym, że te literki i cyfry nie są traktowane jako tekst, tylko jako liczby w systemie o podstawie 16. Każde dwa znaki odpowiadają jednej składowej koloru: czerwonej, zielonej i niebieskiej. Czyli mamy strukturę: #RRGGBB. W tym konkretnym przypadku RR = FF, GG = 00, BB = E0.

Częsty błąd polega na traktowaniu tych liter dosłownie, jak w odpowiedziach typu rgb(F, 0, E0) czy rgb(FF, 0, E0). W zapisie rgb() wartości muszą być liczbami dziesiętnymi z zakresu 0–255, a nie ciągami znaków. Przeglądarka oczekuje tam konkretnych wartości natężenia składowych, a nie kodu szesnastkowego. FF to nie symbol, tylko liczba w systemie hex. Żeby ją poprawnie zinterpretować, trzeba przeliczyć ją na system dziesiętny: F to 15, więc FF = 15×16 + 15 = 255. Podobnie z E0: E to 14, więc E0 = 14×16 + 0 = 224. Z mojego doświadczenia to przeliczanie jest źródłem wielu pomyłek, szczególnie na początku nauki.

Inny typowy błąd myślowy to zgadywanie wartości na oko, jak w odpowiedzi rgb(255, 0, 128). Ktoś widzi intensywny kolor, więc daje maksymalny czerwony i jakąś średnią wartość niebieskiego. Problem w tym, że hex E0 to wcale nie jest 128, tylko 224, czyli dużo bliżej maksimum 255 niż środka skali. Takie „strzelanie” bez przeliczenia łamie spójność pomiędzy zapisem hex a rgb i prowadzi do zupełnie innego koloru niż zamierzony.

Dobra praktyka w branży jest taka, żeby zawsze pamiętać: zapis hex to trzy liczby 0–255 zapisane w bazie 16, a rgb() to te same liczby zapisane normalnie, po ludzku, w systemie dziesiętnym. Jeżeli pojawiają się litery A–F, to znaczy, że mamy do czynienia z systemem szesnastkowym i trzeba je potraktować jak cyfry 10–15, a nie jako jakiś tekst. To niby drobiazg, ale w pracy front-endowca albo grafika webowego ma ogromne znaczenie, bo precyzja kolorów jest kluczowa dla spójności całego projektu graficznego.

Pytanie 39

Aby przywrócić bazę danych o nazwie Sklep z pliku towary.sql, należy w miejsce gwiazdek wpisać nazwę użytkownika. Polecenie wygląda następująco:

mysql -u ******* -p Sklep < towary.sql
A. adres IP bazy danych.
B. nazwę użytkownika.
C. nazwę odzyskiwanej tabeli.
D. liczbę importowanych obiektów bazy.
W tym poleceniu kluczowy jest fragment „-u *******”. Przełącznik -u w kliencie mysql zawsze oznacza nazwę użytkownika bazy danych, pod której kontem chcemy się połączyć z serwerem MySQL/MariaDB. Dlatego w miejsce gwiazdek wpisujemy konkretną nazwę użytkownika, np. root, admin, albo konto utworzone specjalnie do obsługi danej aplikacji, np. sklep_user. To jest standardowa składnia narzędzia wiersza poleceń mysql: mysql -u NAZWA_UŻYTKOWNIKA -p NAZWA_BAZY < plik.sql. Opcja -p mówi, że program ma poprosić o hasło dla tego użytkownika (nie podajemy hasła wprost w poleceniu, ze względów bezpieczeństwa). Nazwa bazy danych, do której importujemy dane, pojawia się dalej, w tym przykładzie jest to Sklep. Z kolei po znaku < podajemy plik z kopią bazy, czyli skryptem SQL zawierającym instrukcje CREATE TABLE, INSERT i inne potrzebne do odtworzenia struktury i danych. W praktyce przy przywracaniu baz danych zawsze łączymy się jako użytkownik, który ma odpowiednie uprawnienia: przynajmniej do tworzenia tabel i wstawiania danych w tej bazie (INSERT, CREATE, ALTER, czasem DROP). W środowiskach produkcyjnych dobrą praktyką jest nie używać konta root, tylko dedykowanego użytkownika z ograniczonymi uprawnieniami. Moim zdaniem warto też pamiętać, że adres IP serwera bazy (opcjonalnie podawany przez -h) i port (-P) to zupełnie inne parametry niż -u. One określają, z jakim serwerem się łączymy, a -u i -p – kim się logujemy. To rozróżnienie jest bardzo ważne przy codziennej administracji i automatyzacji backupów oraz importów.

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.