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: 11 czerwca 2026 08:16
  • Data zakończenia: 11 czerwca 2026 08:38

Egzamin zdany!

Wynik: 26/40 punktów (65,0%)

Wymagane minimum: 20 punktów (50%)

Nowe
Analiza przebiegu egzaminu- sprawdź jak rozwiązywałeś pytania
Pochwal się swoim wynikiem!
Szczegółowe wyniki:
Pytanie 1

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

A. być innego rodzaju niż inne kolumny
B. zawierać unikalne wartości
C. zawierać wartości liczbowe
D. posiadać ciągłą numerację
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 2

Które z poniższych zdań poprawnie opisuje utworzoną tabelę?

CREATE TABLE dane (kolumna INTEGER(3));
A. Tabela zawiera jedną kolumnę, która przechowuje trzyelementowe tablice
B. Tabela o nazwie dane ma jedną kolumnę typu całkowitego
C. Tabela o nazwie dane składa się z trzech kolumn typu całkowitego
D. Kolumny tabeli dane są nazwane: kolumna1, kolumna2, kolumna3
Instrukcja CREATE TABLE w podanym przykładzie tworzy tabelę o nazwie `dane` z jedną, jedyną kolumną o nazwie `kolumna` i typie `INTEGER(3)`. Kluczowe są tu dwie rzeczy: po pierwsze, nazwa tabeli (`dane`), po drugie, lista kolumn w nawiasie. W tej liście jest tylko jedna pozycja: nazwa kolumny i jej typ danych. W SQL każda definicja kolumny to osobny wpis, oddzielany przecinkiem. Skoro nie ma przecinka, to znaczy, że jest dokładnie jedna kolumna. Zapis `INTEGER(3)` nie oznacza trzech kolumn ani tablicy, tylko typ liczbowy całkowity z określoną „szerokością wyświetlania” (w MySQL) lub po prostu liczbę całkowitą – w wielu silnikach baz danych nawias jest wręcz ignorowany. W praktyce tę kolumnę możemy potem używać np. do przechowywania wieku, liczby sztuk towaru, numeru poziomu uprawnień itp. Przykładowo: `INSERT INTO dane (kolumna) VALUES (5);` wstawi rekord z wartością 5 w tej jednej kolumnie. Z mojego doświadczenia warto przy projektowaniu tabel zawsze jasno nazywać kolumny, tak żeby z samej nazwy wynikało, co przechowują, np. `wiek`, `ilosc_sztuk`, a nie ogólne `kolumna`. Dobrą praktyką jest też od razu dodanie klucza głównego, np. `id INT AUTO_INCREMENT PRIMARY KEY`, ale w tym zadaniu skupiamy się tylko na liczbie kolumn i ich typie. To pytanie dobrze pokazuje, że w SQL struktura tabeli wynika z liczby pozycji w nawiasie, a nie z liczby w nawiasie przy typie danych.

Pytanie 3

Wartość atrybutu w tabeli, który pełni rolę klucza głównego

A. musi być unikalna
B. może przyjmować wartość null (NULL)
C. nigdy nie jest innego typu niż numeryczny
D. jest używana do szyfrowania zawartości tabeli
Klucz podstawowy w bazach danych to coś, co naprawdę musi być unikalne, żeby każda informacja w tabeli była dobrze zidentyfikowana. Przykładowo, w tabeli 'Klienci' mamy kolumnę 'ID_klienta'. To jest dobry klucz podstawowy, bo każdy klient musi mieć swój własny numer, żeby nie było sytuacji, gdzie dwóch klientów ma ten sam identyfikator. Gdyby klucz podstawowy był taki sam dla różnych rekordów, mogłoby to wywołać spore zamieszanie przy aktualizacjach czy usuwaniu danych. Warto też pamiętać, że są takie rzeczy jak indeksy, które mogą pomóc w zapewnieniu, że klucz podstawowy jest unikalny i przyspiesza wyszukiwanie danych. Można użyć kluczy naturalnych, które mają sens w kontekście danych, albo kluczy syntetycznych, które system tworzy sam, jak na przykład GUID-y. Z mojego doświadczenia, to znajomość tych zasad naprawdę pomaga w lepszym projektowaniu baz danych.

Pytanie 4

Funkcja agregująca MIN w języku SQL ma na celu obliczenie

A. średniej wartości różnych pól w rekordu zwróconego przez zapytanie
B. liczby wierszy, które zwraca kwerenda
C. minimalnej wartości kolumny, która jest wynikiem kwerendy
D. ilości znaków w rekordach zwróconych przez kwerendę
Funkcja agregująca MIN w języku SQL jest kluczowym narzędziem do analizy danych, której głównym celem jest zwracanie najmniejszej wartości z kolumny wynikowej zapytania. Jej zastosowanie jest szczególnie przydatne w kontekście analizy danych numerycznych, gdzie można chcieć określić najniższą wartość, na przykład w przypadku cen produktów, ocen studentów czy dat. Funkcja ta może być używana w klauzulach SELECT z instrukcją GROUP BY, co pozwala na obliczanie minimalnych wartości w różnych grupach danych. Przykładowo, zapytanie SELECT kategoria, MIN(cena) FROM produkty GROUP BY kategoria; zwróci najniższą cenę w każdej kategorii produktów. Warto także dodać, że zgodnie z standardem SQL, funkcja MIN działa na różnych typach danych, w tym liczbach całkowitych, zmiennoprzecinkowych i datach, co czyni ją niezwykle wszechstronnym narzędziem w codziennej pracy z bazami danych. Zrozumienie działania funkcji MIN i jej zastosowań pozwala na efektywne przetwarzanie danych oraz podejmowanie lepszych decyzji biznesowych opartych na analizie statystycznej.

Pytanie 5

W przedstawionym kodzie PHP w miejscu kropek powinno zostać umieszczone polecenie:

$zapytanie = mysqli_query($db, "SELECT imie, nazwisko FROM uzytkownik");
$ile = mysqli_num_rows($zapytanie);
for ($i = 0; $i < $ile; $i++)
{
  $wiersz = ....................................;
  echo "$wiersz[0] $wiersz[1]";
}
A. mysqli_free_result($zapytanie);
B. mysqli_query($zapytanie);
C. mysqli_num_fields($zapytanie);
D. mysqli_fetch_row($zapytanie);
W kontekście przedstawionego kodu PHP, prawidłowe uzupełnienie wiersza poleceń to użycie funkcji mysqli_fetch_row($zapytanie). Funkcja ta pobiera jeden wiersz z zestawu wyników zapytania jako tablicę indeksowaną numerycznie. Jest to istotny krok w procesie przetwarzania danych z bazy danych, ponieważ po wykonaniu zapytania SQL, dane muszą być odpowiednio odczytane, aby można je było wykorzystać w aplikacji. Przykładowo, po wykonaniu zapytania, możemy mieć wiele wierszy danych, a mysqli_fetch_row pozwala na iteracyjne pobieranie każdego z nich. W praktyce, stosując tę funkcję w pętli, możemy w prosty sposób zbudować listę lub tabelę, wyświetlając imię i nazwisko każdego użytkownika. Warto również pamiętać, że przy pracy z bazami danych ważne jest, aby uważnie monitorować proces pobierania danych, by uniknąć problemów z pamięcią, a także aby zwolnić zasoby po zakończeniu operacji. W związku z tym, standardową praktyką jest również stosowanie mysqli_free_result($zapytanie) po zakończeniu pracy z danymi, co pozwala na efektywne zarządzanie pamięcią.

Pytanie 6

Jakie imiona spełniają warunek klauzuli LIKE w poniższym zapytaniu: SELECT imię FROM mieszkańcy WHERE imię LIKE '_r%';?

A. Rafał, Rebeka, Renata, Roksana
B. Gerald, Jarosław, Marek, Tamara
C. Krzysztof, Krystyna, Romuald
D. Arieta, Krzysztof, Krystyna, Tristan
Odpowiedź "Arieta, Krzysztof, Krystyna, Tristan" jest prawidłowa, ponieważ wszystkie te imiona spełniają warunki klauzuli LIKE w zapytaniu SQL. Klauzula LIKE z wzorcem '_r%' oznacza, że imię musi mieć na drugiej pozycji literę 'r' oraz może zawierać dowolne znaki po tej literze. Przykładowo, imię 'Krzysztof' ma 'r' na drugiej pozycji, tak samo jak 'Krystyna', a 'Tristan' również spełnia ten warunek. Imię 'Arieta' również odpowiada, ponieważ 'r' występuje na drugiej pozycji. W praktyce, zastosowanie klauzuli LIKE jest typowe przy wyszukiwaniu wzorców w bazach danych, co jest nieocenione przy tworzeniu systemów informacyjnych, w których istotna jest elastyczność w wyszukiwaniu. Dobra praktyka sugeruje również stosowanie operatora LIKE w połączeniu z innymi warunkami, aby zwiększyć precyzję zapytań, co z kolei przyczynia się do efektywności systemów bazodanowych.

Pytanie 7

Wymień dwa sposoby na zabezpieczenie bazy danych Microsoft Access

A. Funkcje anonimowe oraz ustawienie hasła do otwarcia bazy danych
B. Ustalanie hasła do otwarcia bazy danych oraz zabezpieczeń na poziomie użytkownika
C. Zaszyfrowanie pliku bazy danych oraz wiadomości SMS z kodem autoryzacyjnym
D. Ustalenie zabezpieczeń na poziomie użytkownika oraz w sesji
Zabezpieczenie bazy danych Microsoft Access wymaga zastosowania odpowiednich technik, które niestety nie są w pełni reprezentowane w niepoprawnych odpowiedziach. Funkcje anonimowe, choć mogą być używane w kontekście prywatności, nie odpowiadają rzeczywistym potrzebom ochrony bazy danych. Ustalanie hasła otwarcia bazy danych jest dobrym krokiem, ale sama metoda nie wystarcza w przypadku wysoce wrażliwych danych. Nie można opierać bezpieczeństwa wyłącznie na jednym mechanizmie. Zaszyfrowanie pliku bazy danych jest metodą, jednak SMS-y z kodem autoryzującym to błędne podejście, ponieważ nie są one standardowo wspierane w Microsoft Access jako forma zabezpieczenia bazy danych. Powinno się raczej korzystać z bardziej zaawansowanych systemów autoryzacji, które są lepiej zintegrowane z aplikacjami bazodanowymi. Ustalanie zabezpieczeń na poziomie użytkownika i sesji, mimo że teoretycznie mogą wydawać się skuteczne, w praktyce często pomijają kluczowe aspekty zarządzania rolami i uprawnieniami w systemach bazodanowych. To prowadzi do ryzyka nieautoryzowanego dostępu, jeśli nie zostaną spełnione odpowiednie normy zabezpieczeń. Warto zwrócić uwagę na metodologię zarządzania dostępem, która powinna być zgodna z zaleceniami branżowymi oraz regulacjami prawnymi dotyczącymi ochrony danych, takimi jak RODO.

Pytanie 8

Dostępna jest tabela pracownicy zawierająca pola id, nazwisko, imię oraz wynagrodzenie. Kolumnę wynagrodzenie można usunąć przy użyciu następującej instrukcji

A. ALTER TABLE pracownicy DROP COLUMN wynagrodzenie
B. ALTER TABLE pracownicy DELETE COLUMN wynagrodzenie
C. DROP TABLE pracownicy DELETE COLUMN wynagrodzenie
D. ALTER TABLE pracownicy DELETE wynagrodzenie
W prawidłowej odpowiedzi powinno być 'ALTER TABLE pracownicy DROP COLUMN wynagrodzenie;'. To polecenie ALTER TABLE to coś, co używamy, żeby zmodyfikować to, co już mamy w tabeli w bazie danych. Jak chcemy usunąć kolumnę, to kluczowe jest użycie DROP COLUMN, bo to dokładnie mówi, co chcemy zrobić – usunąć konkretną kolumnę. W praktyce często tak usuwamy zbędne dane, kiedy kolumna już nie jest potrzebna. Usunięcie kolumny upraszcza strukturę bazy danych i może zwiększyć wydajność, bo mamy mniej danych do przechowywania. Fajnie jest też pamiętać, żeby zanim coś zmienimy, zrobić kopię zapasową tabeli – nigdy nie wiadomo, kiedy mogą się przydać stare dane. No i jak pracujesz z dużą bazą danych, to najlepiej robić takie rzeczy w nocy czy w weekend, żeby nie wpływać na działanie systemu w godzinach szczytu.

Pytanie 9

Jakiego typu danych w bazie MySQL należy używać, aby zapisać datę oraz czas w jednym polu?

A. TIMESTAMP
B. YEAR
C. DATE
D. BOOLEAN
Wybór błędnych typów danych do przechowywania daty i czasu w MySQL może prowadzić do poważnych problemów w aplikacjach. Typ danych DATE jest zaprojektowany jedynie do przechowywania dat bez informacji o czasie, co oznacza, że nie nadaje się do sytuacji, gdzie potrzebne są dokładne informacje co do godzin i minut. Użycie DATE w tym kontekście ogranicza możliwości analizy danych związanych z czasem, na przykład w przypadku zapisywania logów zdarzeń, gdzie istotne jest zarówno data, jak i godzina wystąpienia. Z kolei typ YEAR jest jeszcze bardziej ograniczony, ponieważ pozwala na przechowywanie tylko informacji o roku. Takie podejście jest niewystarczające w większości przypadków, gdzie pełna data i czas są wymagane do prawidłowego zarządzania danymi. Typ BOOLEAN, który ma tylko dwa stany (prawda/fałsz), również nie jest odpowiedni do przechowywania daty i czasu, co jest absolutnie nieadekwatne do tego celu. Wybór niewłaściwego typu danych często wynika z braku zrozumienia, jak ważne jest precyzyjne określenie wymagań dotyczących danych w danym kontekście. Używanie typów danych, które nie są dostosowane do specyficznych potrzeb aplikacji, może prowadzić do błędów, utraty danych oraz trudności w przyszłych aktualizacjach i rozbudowach systemów.

Pytanie 10

Ustalenie klucza obcego jest konieczne do skonstruowania

A. klucza podstawowego
B. relacji 1..n
C. relacji 1..1
D. transakcji
Klucz obcy jest kluczowym elementem w modelowaniu relacji w bazach danych, szczególnie w kontekście relacji 1..n. Definiuje on powiązania pomiędzy dwiema tabelami, gdzie jedna tabela (tabela główna) może mieć wiele powiązanych rekordów w drugiej tabeli (tabela szczegółowa). Na przykład, w bazie danych dotyczącej studentów i ich zapisów na przedmioty, tabela studentów może mieć klucz obcy odnoszący się do tabeli przedmiotów. Dzięki temu, dla każdego studenta można przechowywać wiele zapisów na różne przedmioty, co jest istotne w kontekście analizy danych. Z perspektywy standardów, takie podejście jest zgodne z zasadami normalizacji, które mają na celu eliminację redundancji danych oraz zapewnienie integralności referencyjnej. Dobre praktyki w projektowaniu baz danych sugerują stosowanie kluczy obcych do zarządzania relacjami pomiędzy danymi, co ułatwia ich późniejsze przetwarzanie i analizy.

Pytanie 11

W języku SQL polecenie INSERT INTO

A. wprowadza dane do tabeli.
B. aktualizuje rekordy określoną wartością.
C. dodaje pola do tabeli.
D. dodaje tabelę.
Polecenie INSERT INTO w SQL służy dokładnie do tego, co wskazuje poprawna odpowiedź: do wprowadzania danych do istniejącej tabeli. W praktyce oznacza to dodanie nowego wiersza (rekordu) do tabeli, która ma już zdefiniowaną strukturę: kolumny, typy danych, klucze itp. Najprostszy przykład w standardowym SQL wygląda tak: INSERT INTO klienci (imie, nazwisko, email) VALUES ('Jan', 'Kowalski', '[email protected]'); Tutaj tabela klienci już istnieje, a polecenie tylko dopisuje nowy rekord. Moim zdaniem warto zapamiętać, że INSERT pracuje na danych, a nie na strukturze tabeli. Do tworzenia tabel służy CREATE TABLE, do zmiany struktury ALTER TABLE, a do modyfikacji istniejących rekordów UPDATE. W codziennej pracy z bazami danych INSERT INTO jest jednym z absolutnie podstawowych poleceń. Używa się go przy obsłudze formularzy rejestracji użytkownika, dodawaniu zamówień w sklepie internetowym, logowaniu zdarzeń w systemie (logi), czy zapisywaniu wyników pomiarów z czujników. Dobrą praktyką jest zawsze podawanie listy kolumn, do których wstawiamy dane, zamiast polegać na kolejności kolumn w tabeli. Dzięki temu kod SQL jest czytelniejszy i mniej podatny na błędy po zmianach w strukturze tabeli. Warto też wiedzieć, że istnieją różne warianty INSERT, np. INSERT ... SELECT (wstawianie danych na podstawie wyników zapytania), INSERT IGNORE czy INSERT ... ON CONFLICT/ON DUPLICATE KEY w konkretnych systemach (PostgreSQL, MySQL). To wszystko dalej jest ta sama rodzina poleceń: celem zawsze jest dodanie nowych rekordów, a nie modyfikacja starych czy zmiana schematu bazy. Z mojego doświadczenia, kto dobrze ogarnie różne formy INSERT, temu dużo łatwiej budować sensowne aplikacje bazodanowe.

Pytanie 12

W zamieszczonym kodzie PHP, który łączy się z serwerem bazy danych, jakie działania powinny być umieszczone w instrukcji warunkowej w miejscu trzech kropek?

$db = mysqli_connect("localhost","root","qwerty","baza1");
if ( !$db ) {
...
}
A. Informacja o udanym połączeniu z bazą
B. Przetwarzanie danych otrzymanych z bazy
C. Zarządzanie błędem połączenia
D. Zamknięcie połączenia z bazą danych
Wykonywanie operacji na źle zestawionym połączeniu z bazą danych mogłoby prowadzić do nieprzewidywalnych zachowań aplikacji. Próba obsługi danych pobranych z bazy kiedy połączenie nie zostało nawiązane jest błędnym podejściem. Bez prawidłowego połączenia nie można pobrać danych dlatego nie ma sensu implementowanie takiej logiki w tym miejscu kodu. Podobnie komunikat o pomyślnym połączeniu nie znajduje uzasadnienia w konstrukcji warunku sprawdzającego nieudane połączenie. Jeśli warunek jest spełniony oznacza to że połączenie się nie powiodło i należy podjąć kroki w celu obsługi tego błędu a nie informować o sukcesie. Zamknięcie połączenia z bazą danych jest czynnością wykonywaną na końcu pracy z bazą a nie na początku co również czyni tę odpowiedź niepoprawną w kontekście błędnego nawiązywania połączenia. Dobre praktyki programistyczne wskazują na potrzebę właściwego zarządzania połączeniami do bazy danych co obejmuje ich otwieranie dopiero gdy są potrzebne i zamykanie gdy nie są już używane. Koncepcje błędnego umiejscowienia tych operacji w logice aplikacji mogą prowadzić do nieskuteczności i obniżenia wydajności aplikacji co podkreśla wagę poprawnego zrozumienia procesu nawiązywania połączeń z bazą danych.

Pytanie 13

Zachowanie integralności encji w bazie danych będzie miało miejsce, jeżeli między innymi

A. klucz główny zawsze będzie liczbą całkowitą
B. każdej kolumnie przypisany zostanie typ danych
C. dla każdej tabeli zostanie ustanowiony klucz główny
D. każdy klucz główny będzie miał odpowiadający mu klucz obcy w innej tabeli
Wszystkie zaproponowane odpowiedzi mogą wydawać się związane z tematyką integralności encji, jednak nie każda z nich rzeczywiście przyczynia się do jej zachowania w kontekście baz danych. Użycie klucza głównego jako liczby całkowitej nie jest kryterium zapewniającym integralność; klucz główny może być również tekstowy lub złożony, o ile spełnia warunki unikalności i braku wartości NULL. Przypisanie typu danych dla każdej kolumny jest ważne dla sprawności operacji na danych, ale samo w sobie nie zapewnia integralności encji, ponieważ nie kontroluje unikalności rekordów. Kolejnym błędnym podejściem jest twierdzenie, że każdy klucz główny musi mieć odpowiadający klucz obcy w innej tabeli. Klucz obcy jest używany do ustanowienia relacji między tabelami, ale nie jest wymagany do zapewnienia integralności encji w pojedynczej tabeli. Klucz główny w jednej tabeli działa niezależnie od kluczy obcych w innych tabelach; jego główną rolą jest zapewnienie, że każdy rekord w tabeli jest unikalny. W praktyce, brak zrozumienia tych koncepcji może prowadzić do projektowania baz danych, które są nieefektywne i trudne do zarządzania, co w dłuższej perspektywie wpływa na jakość danych i ich dostępność.

Pytanie 14

Jakie imiona spełniają warunek klauzuli LIKE w zapytaniu

SELECT imie FROM mieszkancy WHERE imie LIKE 'o_%_a';
?
A. Oksana, Oktawia, Olga
B. Oksana, Ola, Olga
C. Oda, Oksana, Oktawia
D. Oktawia, Oktawian, Olga
Odpowiedź Oksana, Oktawia, Olga jest poprawna, ponieważ wszystkie te imiona spełniają warunki klauzuli LIKE w zapytaniu SQL. Klauzula LIKE 'o_%_a' wskazuje na to, że imię musi zaczynać się na literę 'o', mieć co najmniej jeden dowolny znak po 'o' (reprezentowany przez znak podkreślenia '_'), a następnie musi kończyć się na literę 'a'. Przykłady imion: Oksana zaczyna się na 'O', ma 'ks' jako drugi znak i kończy się na 'a'; Oktawia również dostosowuje się do tego wzoru, zaś Olga zaczyna się na 'O', ma 'lg' jako drugi i trzeci znak oraz kończy na 'a'. W praktyce, umiejętność korzystania z klauzuli LIKE jest kluczowa w SQL przy wyszukiwaniu danych według wzorców, co pozwala na bardziej elastyczne i precyzyjne zapytania. Poprawne użycie LIKE zwiększa efektywność filtrowania danych, co jest istotnym aspektem w zarządzaniu bazami danych oraz analizie danych, zgodnie z najlepszymi praktykami w branży.

Pytanie 15

Baza danych gromadzi dane multimedialne, co wiąże się z koniecznością przechowywania znacznych ilości danych binarnych. Jakiego typu należy użyć dla takich danych?

A. LONGTEXT
B. DOUBLE
C. ENUM
D. BLOB
Typ ENUM jest używany do definiowania kolumn w bazach danych, które zawierają ograniczony zestaw wartości, przy czym każda wartość jest traktowana jako tekst. Zastosowanie ENUM nie jest odpowiednie dla danych multimedialnych, które wymagają przechowywania dużych bloków danych binarnych, ponieważ ENUM nie obsługuje danych binarnych i może przechowywać jedynie dane tekstowe. Typ DOUBLE to liczba zmiennoprzecinkowa, która również nie nadaje się do przechowywania danych multimedialnych, gdyż służy do reprezentacji wartości numerycznych z podwójną precyzją, co ogranicza jego zastosowanie do obliczeń matematycznych. LONGTEXT jest typem tekstowym, który pozwala na przechowywanie długich ciągów tekstowych, jednak w przypadku multimediów, gdzie dane są w formie binarnej, nie jest to odpowiednie rozwiązanie. Sugerowanie stosowania LONGTEXT w kontekście danych multimedialnych może prowadzić do błędów wydajnościowych oraz problemów z zarządzaniem danymi, ponieważ silnik bazy danych nie jest zoptymalizowany do obsługiwania takich danych w tym formacie. Dlatego ważne jest, aby przy wyborze typów danych w bazach danych kierować się ich przeznaczeniem oraz specyfiką przechowywanych informacji, aby uniknąć nieefektywności i problemów z wydajnością.

Pytanie 16

Używając polecenia ALTER TABLE, co można zrobić?

A. zmiana wartości w rekordach tabeli
B. stworznie tabeli
C. usunięcie tabeli
D. zmiana struktury tabeli
Polecenie ALTER TABLE w SQL jest używane do modyfikacji struktury istniejącej tabeli w bazie danych. Dzięki temu poleceniu można dodawać nowe kolumny, usuwać istniejące, zmieniać typ danych kolumn, a także dodawać klucze obce lub indeksy. Przykładem zastosowania ALTER TABLE może być dodanie nowej kolumny do tabeli pracowników w celu rejestrowania daty zatrudnienia: 'ALTER TABLE pracownicy ADD COLUMN data_zatrudnienia DATE;'. Good practices w zakresie modyfikacji tabeli sugerują, aby przed dokonaniem takich zmian zawsze tworzyć kopię zapasową bazy danych. Warto również monitorować wpływ zmian na istniejące zapytania oraz aplikacje, które wykorzystują tę tabelę, aby uniknąć potencjalnych błędów w przyszłości. W kontekście projektowania baz danych, ALTER TABLE stanowi kluczowy element w utrzymaniu i dostosowywaniu struktury bazy danych do zmieniających się potrzeb organizacji. Na przykład, w miarę wzrostu firmy mogą pojawić się potrzeby wprowadzenia nowych informacji dotyczących klientów, co wymaga elastyczności w strukturze bazy danych.

Pytanie 17

Istnieje tabela programisci z polami: id, nick, ilosc_kodu, ocena. Wartość w polu ilosc_kodu przedstawia liczbę linii kodu, które dany programista stworzył w określonym miesiącu. Aby obliczyć całkowitą liczbę linii kodu napisanych przez wszystkich programistów, należy zastosować następujące polecenie

A. SELECT COUNT(programisci) FROM ilosc_kodu;
B. SELECT SUM(ilosc_kodu) FROM programisci;
C. SELECT SUM(ocena) FROM ilosc_kodu;
D. SELECT MAX(ilosc_kodu) FROM programisci;
Poprawna odpowiedź to "SELECT SUM(ilosc_kodu) FROM programisci;" ponieważ to zapytanie dokładnie ilustruje, jak można obliczyć sumę wszystkich linii kodu napisanych przez programistów. Funkcja agregująca SUM() służy do sumowania wartości w podanym polu, które w tym przypadku jest polem "ilosc_kodu". W kontekście relacyjnych baz danych, stosowanie funkcji agregujących jest kluczowe do analizy danych w sposób statystyczny. W praktyce, takie zapytanie może być przydatne w raportach dotyczących wydajności zespołu programistycznego, gdzie analiza sumy napisanych linii kodu pozwala na ocenę produktywności oraz identyfikację programistów, którzy mogą potrzebować wsparcia w realizacji zadań. Ponadto, zgodnie z najlepszymi praktykami SQL, warto być świadomym kontekstu zapytań, a dobór odpowiednich funkcji agregujących, takich jak SUM(), COUNT(), AVG() itp., jest niezbędny do efektywnego przetwarzania danych.

Pytanie 18

Tabele Klienci oraz Zgloszenia są związane relacją jeden do wielu. Jakie polecenie należy wydać, aby uzyskać tylko opis zgłoszenia oraz odpowiadające mu nazwisko klienta dla zgłoszenia numer 5?

Ilustracja do pytania
A. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci ON Klienci.id = Zgloszenia.Klienci_id WHERE Klienci.id = 5
B. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci ON Klienci.id = Zgloszenia.id WHERE Zgloszenia.id = 5
C. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci WHERE Klienci.id = 5
D. SELECT opis, nazwisko FROM Zgloszenia JOIN Klienci ON Klienci.id = Zgloszenia.Klienci_id WHERE Zgloszenia.id = 5
Ta odpowiedź jest prawidłowa, ponieważ używa poprawnej składni SQL do wykonania zapytania z dwóch tabel powiązanych relacją jeden do wielu. Kluczowym elementem jest użycie klauzuli JOIN, która łączy tabelę Zgloszenia z tabelą Klienci poprzez pole Klienci_id, będące kluczem obcym w tabeli Zgloszenia. Dzięki temu możliwe jest powiązanie odpowiednich rekordów z dwóch tabel. Warunek w klauzuli WHERE Zgloszenia.id = 5 precyzuje, że zapytanie ma zwrócić dane tylko dla zgłoszenia o identyfikatorze 5. Taki sposób pisania zapytań SQL jest zgodny z normami ANSI SQL i jest powszechnie stosowany w systemach zarządzania bazami danych jak MySQL, PostgreSQL czy SQL Server. Korzystanie z JOIN, zwłaszcza z klauzulą ON, jest dobrą praktyką, ponieważ zapewnia czytelność i bezpieczeństwo zapytań. W realnych zastosowaniach, takie zapytania są używane do łączenia danych z różnych źródeł w celu ich analizy lub raportowania. Prawidłowa struktura zapytania ułatwia jego modyfikację i integrację z innymi operacjami bazy danych, co jest niezbędne w zarządzaniu danymi w dużych systemach informatycznych. Zrozumienie mechanizmu JOIN oraz użycie klauzuli WHERE w celu ograniczenia wyników jest kluczowe w efektywnym zarządzaniu i analizie danych w relacyjnych bazach danych.

Pytanie 19

Aby ustanowić połączenie z serwerem bazy danych w języku PHP, należy użyć funkcji

A. mysqli_connect()
B. mysqli_autocommit()
C. mysqli_get_connection_stats()
D. mysqli_fetch_row()
Funkcja mysqli_connect() to taka podstawa w PHP, która pomaga połączyć się z bazą danych MySQL. Musisz jej użyć z czterema argumentami: nazwą hosta, użytkownika, hasłem i nazwą bazy danych. Dzięki mysqli_connect() Twoja aplikacja będzie działać sprawniej i bezpieczniej, co jest mega ważne. Na przykład, żeby połączyć się z bazą, możesz użyć takiego kodu: $conn = mysqli_connect('localhost', 'username', 'password', 'database_name');. Jak już masz połączenie, to później możesz robić różne zapytania SQL i manipulować danymi. To też jest zgodne z zasadą separacji, bo oddziela logikę od zarządzania danymi. No i pamiętaj, że warto zadbać o obsługę błędów przy łączeniu, najlepiej sprawdzić to przy pomocy prostego warunku: if (!$conn) { die('Connection failed: ' . mysqli_connect_error()); } Moim zdaniem, to bardzo przydatne podejście.

Pytanie 20

W języku SQL do grupy operacji DCL (ang. Data Control Language) należą polecenia:

A. SELECT i INSERT
B. CREATE i DROP
C. GRANT i REVOKE
D. DELETE i UPDATE
W SQL rozróżnienie między DDL, DML i DCL jest kluczowe, bo każdy z tych zestawów poleceń odpowiada za inny obszar pracy z bazą danych. Wiele osób intuicyjnie wrzuca wszystkie komendy „do jednego worka”, a potem trudno jest im zrozumieć, gdzie kończy się manipulacja danymi, a zaczyna zarządzanie uprawnieniami. Data Control Language, czyli DCL, to bardzo wąska, ale ważna grupa poleceń, służąca wyłącznie do kontroli dostępu. W standardowym SQL do DCL zaliczamy praktycznie tylko GRANT i REVOKE. Odpowiedzi typu CREATE i DROP są kuszące, bo też brzmią „administracyjnie”, ale to już inna kategoria – DDL (Data Definition Language). CREATE, ALTER, DROP czy TRUNCATE służą do definiowania i modyfikowania struktury bazy: tworzą tabele, widoki, indeksy, usuwają obiekty. One nie zarządzają prawami użytkowników, tylko tym, jakie obiekty w ogóle istnieją. To, że często wykonuje je administrator, nie znaczy jeszcze, że należą do DCL. Z kolei SELECT, INSERT, UPDATE, DELETE to klasyczne DML (Data Manipulation Language). Te polecenia działają na rekordach: odczytują dane, dodają nowe wiersze, modyfikują istniejące, usuwają je. Typowy błąd myślowy polega na tym, że ktoś myśli: skoro DELETE usuwa dane, to trochę jak „kontrola”, więc może DCL. Niestety nie – DELETE w ogóle nie dotyka uprawnień, ono po prostu kasuje rekordy, o ile użytkownik już ma odpowiednie prawa. Dopiero DCL decyduje, czy użytkownik może wykonać DELETE na danej tabeli. To subtelne, ale bardzo ważne rozróżnienie. Moim zdaniem warto zapamiętać prosty schemat: DDL – struktura, DML – dane, DCL – uprawnienia. Wtedy łatwiej od razu skojarzyć, że tylko GRANT i REVOKE pasują do kategorii Data Control Language, a reszta odpowiedzi dotyczy zupełnie innych warstw pracy z bazą.

Pytanie 21

Jakie imiona spełniają warunki klauzuli LIKE w podanym zapytaniu?

SELECT imie FROM mieszkancy WHERE imie LIKE '_r%';
A. Arleta, Krzysztof, Krystyna, Tristan
B. Gerald, Jarosław, Marek, Tamara
C. Krzysztof, Krystyna, Romuald
D. Rafał, Rebeka, Renata, Roksana
No, więc ta odpowiedź jest totalnie na miejscu, bo klauzula LIKE w SQL służy do szukania ciągów, które pasują do jakiegoś wzoru. W tym przypadku wzór '_r%' mówi nam, że przed literą 'r' musi być dokładnie jeden dowolny znak, a po 'r' może być cokolwiek. Jak spojrzymy na imiona, które wybrałeś, 'Arleta' i 'Krzysztof' mają 'r' na drugiej pozycji, a 'Krystyna' i 'Tristan' na trzeciej. Czyli wszystko się zgadza. W ogóle, klauzula LIKE jest super przydatna w wyszukiwaniu danych, na przykład w aplikacjach, gdy chcemy znaleźć kogoś po imieniu czy nazwisku. A ten symbol '%' to genialny sposób na dopasowywanie, bo pozwala na różne kombinacje. Fajna sprawa, nie?

Pytanie 22

Uprawnienia obiektowe, przyznawane użytkownikom serwera bazy danych, mogą umożliwiać lub uniemożliwiać

A. dziedziczenie uprawnień
B. realizowanie czynności, takich jak tworzenie kopii zapasowej
C. wykonywanie operacji na bazie, takich jak wstawianie lub modyfikowanie danych
D. zmienianie ról oraz kont użytkowników
Uprawnienia obiektowe w systemach zarządzania bazami danych (DBMS) są kluczowym elementem bezpieczeństwa oraz zarządzania dostępem do danych. Pozwalają one na kontrolowanie, kto i w jaki sposób może korzystać z zasobów bazy danych. Odpowiedź dotycząca wykonywania operacji na bazie, takich jak wstawianie lub modyfikowanie danych, jest poprawna, ponieważ uprawnienia te bezpośrednio odnoszą się do możliwości modyfikacji danych, co jest fundamentem działania aplikacji bazodanowych. Na przykład, użytkownik z odpowiednimi uprawnieniami może dodawać nowe rekordy do tabeli za pomocą instrukcji SQL INSERT lub modyfikować istniejące dane za pomocą UPDATE. W kontekście standardów, takie jak SQL-92 oraz nowsze wersje, definiują uprawnienia, które mogą być przyznawane użytkownikom na poziomie obiektów, co pozwala na granularne zarządzanie dostępem. W praktyce, administratorzy baz danych muszą starannie przydzielać te uprawnienia, aby zapewnić integralność i bezpieczeństwo danych w systemie, co jest niezbędne do efektywnego zarządzania informacjami.

Pytanie 23

W tabeli pracownicy zdefiniowano klucz główny jako INTEGER z atrybutami NOT NULL oraz AUTO_INCREMENT. Dodatkowo zdefiniowano kolumny imie oraz nazwisko. W przypadku wykonania poniższej kwerendy SQL wprowadzającej dane, w której pominięto pole klucza, w bazie danych MySQL wystąpi:

INSERT INTO pracownicy (imie, nazwisko) VALUES ('Anna', 'Nowak');
A. dodanie rekordu do tabeli, dla klucza głównego zostanie przypisana kolejna wartość naturalna
B. dodanie rekordu do tabeli, dla klucza głównego zostanie przypisana wartość NULL
C. ignorowanie polecenia, tabela nie ulegnie zmianie
D. błąd związany z nieprawidłową liczbą kolumn
Kiedy pomijasz wartość klucza głównego w instrukcji INSERT, to naprawdę może to prowadzić do zamieszania, jeśli nie rozumiesz, jak działają klucze w bazach danych. Mówienie, że pojawi się błąd z nieprawidłową liczbą pól, to tak, jakbyś nie znał zasad działania tabel w MySQL. Jak masz klucz główny ustawiony na AUTO_INCREMENT, to naprawdę nie musisz go podawać, bo system zrobi to za Ciebie. Powinieneś wiedzieć, że klucz główny jest mega ważny do identyfikacji rekordów w tabeli i jest potrzebny, żeby wszystko działało jak należy. Z kolei druga błędna odpowiedź, która mówi, że MySQL zignoruje polecenie, pokazuje, że nie łapiesz koncepcji, jak silnik bazy danych zajmuje się brakującymi danymi. MySQL nie zignoruje tego, tylko zareaguje i przydzieli nową wartość klucza. A jeszcze jedna rzecz – przypisanie wartości NULL do klucza głównego to już w ogóle zła droga, bo klucz musi być unikalny i nigdy nie może być pusty. Tego rodzaju myślenie wskazuje na typowe błędy, które wynikają z niepełnego rozumienia działania kluczy w bazach danych i jak to się ma do wprowadzania nowych rekordów.

Pytanie 24

Jedną z charakterystyk relacyjnej bazy danych jest

A. obecność klas, obiektów i metod
B. używanie języka zapytań OQL
C. stosowanie kluczy głównych do identyfikacji rekordów w tabelach
D. zdefiniowanie jej stanu według obiektowego modelu danych
Relacyjne bazy danych opierają się na koncepcji tabel, gdzie dane są przechowywane w wierszach i kolumnach. Klucze główne odgrywają kluczową rolę w zapewnieniu unikalności rekordów w tabelach i umożliwiają ich identyfikację. Klucz główny to kolumna (lub zestaw kolumn), której wartości są unikalne w obrębie tabeli i nie mogą być puste. Przykładem może być tabela 'Użytkownicy', w której identyfikatorem użytkownika (kluczem głównym) może być numer PESEL lub unikalny ID. Dzięki kluczom głównym, można łatwo odnaleźć konkretne rekordy, a także powiązać je z innymi tabelami przy pomocy kluczy obcych, co jest fundamentalne dla relacyjnej struktury bazy danych. Standardy takie jak SQL (Structured Query Language) dostarczają narzędzi do definiowania, modyfikowania i manipulowania danymi z wykorzystaniem kluczy głównych, co jest podstawą projektowania baz danych zgodnie z najlepszymi praktykami. Dobre praktyki projektowe sugerują również, aby klucze główne były proste, stabilne i unikalne, co ułatwia zarządzanie danymi w relacyjnych systemach zarządzania bazą danych (RDBMS).

Pytanie 25

Zdefiniowana jest tabela o nazwie wycieczki z atrybutami nazwa, cena oraz miejsca (jako liczba dostępnych miejsc). Aby wyświetlić jedynie nazwy tych wycieczek, dla których cena jest mniejsza niż 2000 złotych i które mają co najmniej cztery wolne miejsca, należy użyć zapytania

A. SELECT nazwa FROM wycieczki WHERE cena<2000 OR miejsca>4;
B. SELECT nazwa FROM wycieczki WHERE cena<2000 AND miejsca>3;
C. SELECT * FROM wycieczki WHERE cena<2000 AND miejsca>4;
D. SELECT * FROM wycieczki WHERE cena<2000 OR miejsca>3;
Zapytanie SQL, które pozwala na wyświetlenie nazw wycieczek, dla których cena jest niższa niż 2000 złotych i które mają przynajmniej cztery wolne miejsca, jest poprawnie sformułowane jako: SELECT nazwa FROM wycieczki WHERE cena<2000 AND miejsca>3. W tym zapytaniu używamy klauzuli SELECT, aby wskazać, że interesuje nas tylko kolumna 'nazwa'. Warunki zawarte w klauzuli WHERE filtrują wyniki na podstawie określonych kryteriów. Operator AND zapewnia, że oba warunki muszą być spełnione jednocześnie, co oznacza, że interesują nas tylko te wycieczki, które są tańsze niż 2000 zł i mają więcej niż 3 wolne miejsca. Technicznie rzecz biorąc, operator < jest używany do porównywania wartości, a operator > do określenia, że liczba miejsc musi być większa od 3. Przykładem działania tego zapytania może być sytuacja, w której w tabeli wycieczki znajdują się dane o takich wycieczkach jak: 'Wakacje w górach' (cena: 1800 zł, miejsca: 5) oraz 'Wczasy nad morzem' (cena: 2200 zł, miejsca: 2). W wyniku działania zapytania uzyskamy jedynie 'Wakacje w górach', ponieważ spełnia ono oba kryteria. Tego rodzaju zapytania są powszechnie stosowane w systemach baz danych, aby efektywnie przeszukiwać i filtryzować dane zgodnie z wymaganiami użytkownika.

Pytanie 26

Które z poniższych twierdzeń na temat języków programowania jest FAŁSZYWE?

A. PHP jest językiem do tworzenia stron w czasie rzeczywistym
B. SQL jest językiem programowania strukturalnego
C. C++ jest językiem obiektowym
D. JavaScript jest językiem skryptowym
C++ jest językiem obiektowym, co oznacza, że wspiera programowanie obiektowe, umożliwiając tworzenie klas i obiektów, co jest przydatne w przypadku dużych systemów, gdzie kod musi być modularny i łatwy do zarządzania. PHP jest często używany do tworzenia dynamicznych stron internetowych, co oznacza, że może generować treści w czasie rzeczywistym, w oparciu o interakcje użytkownika. Jednak, chociaż PHP jest doskonałym narzędziem do tworzenia aplikacji webowych, nie można go uznać za „język do tworzenia stron w czasie rzeczywistym” w sensie, że nie jest on jedynym językiem odpowiedzialnym za tę funkcjonalność. JavaScript, z drugiej strony, to język skryptowy, który działa w przeglądarkach internetowych, pozwalając na interaktywność i dynamiczne zmiany na stronach bez konieczności przeładowywania ich. Wiele osób myli terminy związane z językami programowania, co prowadzi do nieprawidłowych wniosków. Kluczowym błędem jest myślenie, że język programowania posiada jedną, niezmienną rolę. W rzeczywistości wiele języków może być używanych w różnych kontekstach, a ich zastosowanie zależy od środowiska i celów projektu. Zrozumienie tych różnic oraz wykorzystanie odpowiednich narzędzi są kluczowe dla efektywnego programowania i rozwoju aplikacji.

Pytanie 27

Narzędzie używane do organizowania i przedstawiania danych z wielu wpisów w celu ich wydruku lub dystrybucji to

A. formularz
B. makropolecenie
C. raport
D. kwerenda
Raport to taki pomocny zestaw danych, który pozwala na analizę i prezentację informacji z różnych źródeł. Jak myślisz, to naprawdę kluczowe narzędzie, jeśli chodzi o zarządzanie danymi i bazami danych. Dzięki raportom możemy fajnie zobaczyć wyniki sprzedaży czy inne dane, które z różnych miejsc się zbiera. To ułatwia podejmowanie decyzji, bo wszystko jest w jednym dokumencie. Na przykład, kiedy porównujemy wyniki z różnych okresów, to od razu widzimy, co działa, a co nie. Systemy takie jak Microsoft SQL Server Reporting Services czy IBM Cognos pomagają w tworzeniu tych raportów, a nawet pozwalają na ich ładne formatowanie. Super sprawa, bo można je dopasować do własnych potrzeb, co z kolei czyni je bardziej użytecznymi. W branży IT, raportowanie jest podstawą zarządzania usługami, a także w analizach SWOT. Przemyślane podsumowanie danych naprawdę pomaga w ocenie sytuacji firmy.

Pytanie 28

W tabeli zwierzeta znajdują się kolumny nazwa, gatunek, gromada, cechy, dlugosc_zycia. Aby uzyskać listę nazw zwierząt, które dożywają przynajmniej 20 lat oraz są ssakami, jakie zapytanie należy wykonać?

A. SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >= 20 AND gromada = 'ssak';
B. SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >= 20 OR gromada = 'ssak';
C. SELECT nazwa FROM zwierzeta WHERE gromada = 'ssak';
D. SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >= 20;
Wybrana odpowiedź jest prawidłowa, ponieważ spełnia wymagania określone w pytaniu, które dotyczą zarówno długości życia zwierząt, jak i ich przynależności do grupy ssaków. Zapytanie SQL 'SELECT nazwa FROM zwierzeta WHERE dlugosc_zycia >=20 AND gromada = ‘ssak‘;' precyzyjnie definiuje warunki, które muszą być spełnione, aby uzyskać oczekiwane wyniki. Warunek 'dlugosc_zycia >=20' zapewnia, że tylko zwierzęta o długości życia wynoszącej co najmniej 20 lat będą uwzględnione w rezultatach, co jest kluczowe dla osiągnięcia zamierzonego celu. Dodatkowo, użycie operatora 'AND' łączy oba kryteria, co oznacza, że obie zasady muszą być spełnione jednocześnie. Dzięki temu zapytanie jest zwięzłe i efektywne, co jest zgodne z najlepszymi praktykami w dziedzinie baz danych, gdzie ważne jest, aby unikać zbędnych danych w wynikach, co usprawnia proces przetwarzania informacji. Ta metoda jest szczególnie przydatna w kontekście analizy danych i raportowania, gdzie precyzyjne filtry pomagają w uzyskaniu istotnych informacji.

Pytanie 29

Jakie parametry powinny być ustawione w funkcji biblioteki mysqli, aby umożliwić połączenie z serwerem oraz bazą danych?

mysqli_connect($a, $b, $c, $d) or die('Brak połączenia z serwerem MySQL.');
A. adres serwera - $c, nazwa bazy danych - $d, login - $b, hasło - $a
B. adres serwera - $a, nazwa bazy danych - $b, login - $c, hasło - $d
C. adres serwera - $c, nazwa bazy danych - $d, login - $a, hasło - $b
D. adres serwera - $a, nazwa bazy danych - $d, login - $b, hasło - $c
W przypadku niepoprawnych odpowiedzi można zauważyć typowe błędy związane z zrozumieniem argumentów funkcji mysqli_connect. Wiele osób myli kolejność zmiennych oraz ich znaczenie. Na przykład, podanie adresu serwera jako $c lub $d jest błędne, ponieważ pierwszy argument zawsze powinien wskazywać na adres serwera. Warto również zwrócić uwagę na znaczenie loginu i hasła – nie można ich zamieniać miejscami, ponieważ każdy z tych parametrów pełni inną funkcję w kontekście autoryzacji do bazy danych. W ramach dobrych praktyk programistycznych, istotne jest także stosowanie raz jeszcze uwierzytelnienia użytkownika, co pozwala uniknąć nieautoryzowanego dostępu do danych. Przykłady niepoprawnych odpowiedzi pokazują też, że błędne przypisanie nazw bazy danych do zmiennych może prowadzić do błędów w aplikacji, co w efekcie utrudnia jej działanie oraz zwiększa ryzyko wycieków danych. Kluczowe jest zrozumienie, że każdy parametr pełni specyficzną rolę w tworzeniu połączenia. Niezrozumienie tego kontekstu może prowadzić do trudności w dalszym programowaniu oraz w diagnostyce problemów z bazą danych.

Pytanie 30

Dana jest tabela ksiazki z polami: tytul, autor, cena (typu liczbowego). Aby kwerenda SELECT wybrała tylko tytuły, dla których cena jest mniejsza od 50 zł, należy zapisać

A. SELECT * FROM ksiazki WHERE cena < 50;
B. SELECT tytul FROM ksiazki WHERE cena > '50 zł';
C. SELECT tytul FROM ksiazki WHERE cena < 50;
D. SELECT ksiazki FROM tytul WHERE cena < '50 zł';
Prawidłowa odpowiedź wybiera dokładnie to, o co chodzi w treści zadania: tylko kolumnę tytul z tabeli ksiazki, ale tylko dla tych rekordów, gdzie cena jest mniejsza niż 50. Składnia SELECT tytul FROM ksiazki WHERE cena < 50; jest zgodna ze standardowym SQL i pokazuje dobrą praktykę – pobieramy tylko te dane, które są nam potrzebne, zamiast używać SELECT *. Dzięki temu zapytanie jest lżejsze, szybsze i czytelniejsze, co w większych projektach ma naprawdę duże znaczenie. Moim zdaniem warto zwrócić uwagę na kilka elementów. Po pierwsze, w klauzuli SELECT podajemy konkretne nazwy kolumn (tu: tytul), nie nazwę tabeli. Po drugie, w FROM podajemy dokładnie nazwę tabeli, z której korzystamy (ksiazki). Po trzecie, warunek WHERE cena < 50 poprawnie porównuje wartość liczbową, bo kolumna cena ma typ liczbowy, więc nie używamy tu cudzysłowów ani żadnych „zł” w środku. W praktyce podobny wzorzec stosuje się cały czas, np.: SELECT tytul, autor FROM ksiazki WHERE cena <= 30; żeby dostać tańsze książki, albo SELECT tytul FROM ksiazki WHERE cena BETWEEN 20 AND 40; gdy interesuje nas konkretny przedział. W profesjonalnych aplikacjach webowych taka precyzja w definiowaniu zapytań SQL jest podstawą: ułatwia optymalizację, indeksowanie kolumn (np. indeks na kolumnie cena przyspiesza filtrowanie w WHERE) i minimalizuje przesyłanie niepotrzebnych danych między bazą a aplikacją. Dobra praktyka jest też taka, żeby dostosowywać typy danych: skoro cena jest liczbą, to porównujemy ją z liczbą, bez jednostek, a formatowanie typu „50 zł” robimy później w warstwie prezentacji, np. w PHP, JavaScript albo w szablonach widoków.

Pytanie 31

Tabele Osoby oraz Zainteresowania są połączone relacją jeden do wielu. Jakie zapytanie SQL należy użyć, aby w oparciu o tę relację poprawnie wyświetlić imiona i odpowiadające im hobby?

Ilustracja do pytania
A. SELECT imie, hobby FROM Osoby, Zainteresowania WHERE Osoby.id = Zainteresowania.id;
B. SELECT imie, hobby FROM Osoby JOIN Zainteresowania ON Osoby.Zainteresowania_id = Zainteresowania.id;
C. SELECT imie, hobby FROM Osoby, Zainteresowania;
D. SELECT imie, hobby FROM Osoby.Zainteresowania_id = Zainteresowania.id FROM Osoby, Zainteresowania;
Odpowiedź numer 1 jest poprawna, ponieważ wykorzystuje składnię JOIN, która jest standardowym sposobem łączenia dwóch tabel w SQL. W tym przypadku tabele Osoby i Zainteresowania są połączone za pomocą klucza obcego Osoby.Zainteresowania_id, który odwołuje się do klucza głównego w tabeli Zainteresowania. Dzięki użyciu klauzuli ON możemy precyzyjnie określić warunek łączenia tych tabel. Takie podejście jest zgodne z dobrymi praktykami projektowania baz danych, ponieważ pozwala na efektywne zarządzanie relacjami między danymi. Stosowanie JOIN umożliwia również ograniczenie wyniku do konkretnych wierszy, co zwiększa wydajność zapytań. Praktyczne zastosowanie tego rodzaju zapytań obejmuje różne systemy zarządzania danymi, gdzie konieczne jest pobieranie powiązanych informacji z wielu źródeł danych. Warto również pamiętać, że JOIN-y są ustandaryzowanym elementem języka SQL, co gwarantuje ich poprawne działanie w różnych systemach bazodanowych, takich jak MySQL, PostgreSQL czy Oracle SQL. W kontekście relacyjnych baz danych stanowią one fundament w optymalizacji i organizacji danych, co jest kluczowe dla profesjonalistów z branży IT.

Pytanie 32

W relacyjnych bazach danych encja jest przedstawiana przez

A. tabelę.
B. rekord.
C. kwerendę.
D. relację.
Nieprawidłowe odpowiedzi wskazują na pewne nieporozumienia dotyczące definicji podstawowych elementów relacyjnych baz danych. Rekord, chociaż jest istotnym składnikiem tabeli, nie reprezentuje encji, lecz pojedynczą instancję encji. Mylne jest również utożsamianie tabeli z relacją, ponieważ relacja w kontekście teorii zbiorów odnosi się do zbioru krotek, podczas gdy tabela jest fizycznym i trwałym przedstawieniem tychże zbiorów w bazie danych. Kwerenda natomiast to instrukcja używana do uzyskiwania danych z bazy danych, a nie do ich reprezentacji. To podejście do zrozumienia modeli relacyjnych może prowadzić do błędnych wniosków w projektowaniu baz danych. Dla przykładu, nieumiejętność rozróżnienia między tabelą a rekordem może skutkować niewłaściwym modelowaniem danych, co wpłynie negatywnie na wydajność i integralność bazy danych. Warto zwrócić uwagę na znaczenie właściwego stosowania terminologii oraz zrozumienie struktury danych w relacyjnych bazach danych, co jest kluczowe dla efektywnego zarządzania danymi i ich relacjami.

Pytanie 33

Model, w którym wszystkie informacje są zgromadzone w jednej tabeli, określa się jako struktura prostych baz danych

A. hierarchicznym
B. relacyjnym
C. jednorodnym
D. sieciowym
Model jednorodny, znany też jako model płaskiej tabeli, to taka struktura bazy, w której trzymamy wszystkie dane w jednej tabeli. To najprostsza opcja do zrozumienia i wdrożenia, dlatego świetnie nadaje się do małych i prostych aplikacji. W tym modelu dane są poukładane w wiersze i kolumny – każdy wiersz to jakiś rekord, a kolumny to różne cechy lub atrybuty tego rekordu. Na przykład, wyobraź sobie tabelę z informacjami o książkach: każda książka to osobny wiersz, a kolumny mogą zawierać tytuł, autora, rok wydania czy ISBN. Oczywiście, ma to swoje ograniczenia, zwłaszcza jeśli chodzi o wydajność i zarządzanie dużymi zbiorami danych. Dlatego w praktyce często przechodzi się na bardziej zaawansowane modele, jak relacyjny. Mimo to, model jednorodny sprawdza się w prototypowaniu albo tam, gdzie liczy się prostota i szybki dostęp do danych. Warto też wiedzieć, że nie korzysta się tu do końca ze standardów typu SQL, bo nie ma relacji między danymi.

Pytanie 34

Instrukcja REVOKE SELECT ON nazwa1 FROM nazwa2 w języku SQL pozwala na

A. odebranie uprawnień danemu użytkownikowi
B. przyznawanie praw do tabeli
C. usunięcie użytkownika z bazy danych
D. przyznawanie uprawnień z użyciem ustalonego schematu
Polecenie REVOKE SELECT ON w języku SQL jest używane do odbierania uprawnień do wykonywania operacji SELECT na określonej tabeli lub widoku dla konkretnego użytkownika lub grupy użytkowników. W przypadku użycia tej komendy, administrator bazy danych lub właściciel obiektu wskazuje, że dany użytkownik nie ma już prawa do odczytu danych z określonej tabeli, co skutkuje zablokowaniem dostępu do informacji w tej tabeli. Przykładowo, jeśli mamy tabelę 'Pracownicy' i użytkownika 'JanKowalski', polecenie REVOKE SELECT ON Pracownicy FROM JanKowalski skutkuje tym, że Jan Kowalski nie będzie mógł wykonywać zapytań typu SELECT na tej tabeli. Ważne jest, aby zrozumieć, że polecenie to nie usuwa użytkownika z bazy danych ani nie zmienia struktury bazy, a jedynie modyfikuje uprawnienia dostępu. W kontekście SQL, standardy takie jak ANSI SQL definiują sposób, w jaki uprawnienia mogą być przyznawane i odbierane, co sprawia, że umiejętność zarządzania uprawnieniami jest niezbędna dla każdego administrującego bazą danych.

Pytanie 35

Rezultatem wykonania podanego zapytania SQL jest

SELECT count(*) FROM Uczniowie WHERE srednia = 5;
A. Średnia ocen wszystkich uczniów.
B. Liczba uczniów, którzy mają średnią ocen równą 5.
C. Całkowita liczba uczniów.
D. Suma ocen uczniów, których średnia ocen wynosi 5.
Zapytanie SQL, które zostało przedstawione, używa funkcji `COUNT(*)` w celu zliczenia wszystkich wierszy w tabeli `Uczniowie`, które spełniają określone kryterium w klauzuli `WHERE`. W tym przypadku kryterium to jest `srednia = 5`. Oznacza to, że zapytanie zlicza wszystkich uczniów, których średnia ocen wynosi dokładnie 5. Takie użycie `COUNT(*)` jest zgodne ze standardami SQL, gdzie funkcja ta służy do zliczania wszystkich wierszy w zbiorze wyników, które spełniają dane warunki. W praktyce, uzyskanie liczby uczniów z określoną średnią może być przydatne w analizie statystycznej lub raportowaniu wyników akademickich. Zrozumienie, jak korzystać z `COUNT(*)` w połączeniu z różnymi warunkami `WHERE`, jest kluczowe dla efektywnego zarządzania i analizowania danych w bazach danych SQL. Dzięki temu można wydobywać konkretne informacje, które wspierają podejmowanie decyzji w edukacji i zarządzaniu danymi.

Pytanie 36

Podaj zapytanie SQL, które tworzy użytkownika sekretarka na localhost z hasłem zaq123?

A. CREATE USER 'sekretarka'@'localhost' IDENTIFIED `zaq123`;
B. CREATE USER `sekretarka`@`localhost` IDENTIFY BY `zaq123`;
C. CREATE USER `sekretarka`@`localhost` IDENTIFIED BY 'zaq123';
D. CREATE USER `sekretarka`@`localhost` IDENTIFY "zaq123";
W analizowanych odpowiedziach można dostrzec kilka kluczowych błędów związanych z zarządzaniem użytkownikami w MySQL. Przykładowo, odpowiedź sugerująca użycie słowa kluczowego 'IDENTIFY' zamiast 'IDENTIFIED' jest niewłaściwa, ponieważ w kontekście MySQL nie istnieje tego typu polecenie. Takie nieprawidłowe zrozumienie składni SQL może prowadzić do nieudanych prób tworzenia użytkowników, co z kolei skutkuje frustracją i czasem straconym na debugowanie. Ponadto, odpowiedzi, które używają backticków (`) do oznaczania hasła, są niepoprawne. W SQL backticki służą do oznaczania identyfikatorów, takich jak nazwy tabel czy kolumn, a nie do łańcuchów tekstowych. Oznaczanie haseł przy użyciu backticków może prowadzić do nieprzewidywalnych błędów podczas wykonywania zapytań. Kolejnym problemem jest brak właściwego zrozumienia konwencji dotyczących użycia pojedynczych lub podwójnych cudzysłowów do definiowania łańcuchów. Użycie cudzysłowów zamiast apostrofów prowadzi do błędów składniowych. W kontekście bezpieczeństwa, każda nieprawidłowa próba utworzenia użytkownika może zagrażać integralności danych, dlatego ważne jest, aby korzystać z poprawnych praktyk, jak również ze zrozumienia zasad dotyczących zarządzania użytkownikami w systemie baz danych.

Pytanie 37

Formularz główny używany do poruszania się w bazie danych pomiędzy formularzami i kwerendami dostępnymi w systemie określany jest jako formularz

A. głównym
B. pierwotnym
C. sterującym
D. zagnieżdżonym
Odpowiedzi takie jak 'główny', 'pierwotny' czy 'zagnieżdżony' nie odpowiadają rzeczywistości funkcjonalnej formularzy w systemach baz danych. Formularz główny może być mylony z formularzem sterującym, jednakże jego funkcjonalność jest zazwyczaj ograniczona do wyświetlania danych w jednym kontekście, bez zapewnienia możliwości nawigacji między różnymi sekcjami bazy. Z kolei termin 'pierwotny' nie jest standardowym określeniem w kontekście formularzy; może prowadzić do nieporozumień związanych z terminologią baz danych, gdzie termin 'pierwotny klucz' zyskuje znaczenie w innej sferze. Formularz zagnieżdżony odnosi się do formularzy umieszczonych wewnątrz innych formularzy, co jest zupełnie inną koncepcją i nie ma związku z ogólną nawigacją po systemie. Typowe błędy myślowe, które prowadzą do takich odpowiedzi, obejmują mylenie różnych typów formularzy i ich funkcji. Użytkownicy powinni być świadomi, że prawidłowe nazewnictwo i zrozumienie kontekstu jest kluczowe w pracy z bazami danych, co może wpływać na efektywność działania oraz na jakość wytwarzanych aplikacji.

Pytanie 38

Jakie zapytanie SQL umożliwi wyszukanie z podanej tabeli tylko imion i nazwisk pacjentów, którzy przyszli na świat przed rokiem 2002?

Ilustracja do pytania
A. SELECT imie, nazwisko FROM Pacjenci WHERE rok_urodzenia < 2002
B. SELECT * FROM Pacjenci WHERE rok_urodzenia LIKE 2002
C. SELECT * FROM Pacjenci WHERE rok_urodzenia <= 2002
D. SELECT imie, nazwisko FROM Pacjenci WHERE data_ostatniej_wizyty < 2002
To zapytanie SQL, które napisałeś, czyli SELECT imie, nazwisko FROM Pacjenci WHERE rok_urodzenia < 2002, jest całkiem trafione. Po pierwsze, używasz operatora SELECT, żeby wskazać, jakie kolumny chcesz zwrócić - czyli imię i nazwisko. To jest dokładnie to, co było potrzebne. Po drugie, warunek WHERE z rokiem urodzenia zapewnia, że do wyników dostają się tylko pacjenci, którzy przyszli na świat przed 2002 rokiem. No i to jest ważne, bo masz tutaj operator mniejszości <, który wyklucza sam rok 2002. Takie podejście jest super przydatne w bazach danych, bo pozwala na filtrowanie informacji w oparciu o lata, co często wykorzystuje się w raportach i analizach. Generalnie, dobre praktyki w SQL mówią, że warto precyzyjnie określać, jakie kolumny chcesz uwzględnić, bo to pomaga odciążyć system i zrobione zapytanie będzie działać wydajniej. Twoje zapytanie nie tylko spełnia wymagania, ale także jest optymalne, co jest naprawdę istotne w pracy z bazami danych.

Pytanie 39

W aplikacji PHP, która zarządza bazą danych, aby uzyskać numer błędu oraz jego opis po dokonaniu jakiejkolwiek operacji, jakie funkcje powinny być wykorzystane?

A. funkcje mysqli_error i mysqli_connect_errno
B. funkcje mysqli_error i mysqli_errno
C. tylko funkcję mysqli_error
D. funkcje mysqli_error i mysqli_error_number
Wybór funkcji mysqli_error i mysqli_connect_errno nie jest właściwy, ponieważ mysqli_connect_errno jest funkcją przeznaczoną do uzyskiwania numeru błędu połączenia z bazą danych, a nie błędu SQL. Użycie tej funkcji w kontekście operacji na bazie danych prowadzi do mylnego wniosku, że jej zastosowanie jest uniwersalne dla wszystkich błędów. W rzeczywistości, mysqli_connect_errno powinno być stosowane głównie podczas nawiązywania połączenia, natomiast dla błędów związanych z zapytaniami SQL właściwe są inne funkcje. Z kolei wskazanie tylko na funkcję mysqli_error nie jest wystarczające, ponieważ sama dostarcza jedynie opisu błędu, a nie jego numeru, co ogranicza możliwości analizy i diagnostyki. Użytkownicy często popełniają błąd myślowy, zakładając, że pojedyncza funkcja może spełnić wszystkie potrzeby związane z obsługą błędów. W prawidłowym procesie zarządzania błędami w programowaniu, kluczowe jest użycie zestawu funkcji, które dostarczają zarówno opisy, jak i kody błędów, co pozwala na bardziej wszechstronną reakcję na różne sytuacje awaryjne. Ignorowanie tej zasady może prowadzić do nieefektywnego debugowania i długotrwałych problemów w działaniu aplikacji.

Pytanie 40

Na zakończenie dnia w systemie zarządzania magazynem sklepu spożywczego generowany jest raport, który przedstawia produkty oraz ich dostawców, dla których ilość na stanie jest mniejsza niż 10 sztuk. Do stworzenia tego raportu zastosowano kwerendę

A. CHECK TABLE
B. INSERT INTO
C. SELECT
D. UPDATE
Odpowiedzi takie jak CHECK TABLE, UPDATE i INSERT INTO są niewłaściwe w kontekście opisywanego raportu. CHECK TABLE jest komendą używaną do sprawdzania integralności tabel w bazie danych, ale nie ma zastosowania w kontekście generowania raportów. Nie umożliwia ona pobierania danych ani ich analizowania, co jest kluczowe w przypadku raportowania stanów magazynowych. Z kolei UPDATE to polecenie, które służy do modyfikowania istniejących rekordów w bazie danych. Chociaż może być użyteczne w sytuacjach, gdy chcemy zaktualizować ilość produktów w magazynie, nie ma zastosowania w kontekście generowania raportu, ponieważ nie jest to operacja mająca na celu odczyt danych. Tak samo INSERT INTO jest używane do dodawania nowych rekordów do tabeli. W przypadku raportu, którego celem jest analizy danych, to podejście nie jest ani odpowiednie, ani praktyczne. Typowym błędem w myśleniu jest mylenie operacji manipulacji danymi z operacjami odczytu. W kontekście efektywnego zarządzania bazami danych, kluczowe jest zrozumienie, że każda z tych kwerend ma swoje specyficzne zastosowania, a w przypadku raportowania stanów magazynowych jedynie kwerenda SELECT jest odpowiednia, ponieważ umożliwia wydobycie i analizę danych zgodnie z zdefiniowanymi kryteriami.