Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych
  • Data rozpoczęcia: 13 maja 2026 12:36
  • Data zakończenia: 13 maja 2026 13:00

Egzamin zdany!

Wynik: 27/40 punktów (67,5%)

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

W zaprezentowanym schemacie bazy danych o nazwie biblioteka, składniki: czytelnik, wypożyczenie oraz książka są

Ilustracja do pytania
A. polami
B. encjami
C. krotkami
D. atrybutami
W kontekście modelowania danych w relacyjnych bazach danych istotne jest rozróżnienie między encjami a innymi pojęciami. Pola w bazach danych zazwyczaj odnoszą się do pojedynczych jednostek danych w obrębie kolumn tabeli reprezentujących atrybuty encji. Atrybuty to cechy opisujące encje takie jak imię czy nazwisko w przypadku encji czytelnik. Natomiast krotki często określają pojedynczy rekord czyli wiersz w tabeli który jest instancją encji. Błędne jest przypisywanie czytelnik wypozyczenie i ksiazka do kategorii pól ponieważ w modelowaniu danych pola są najmniejszymi jednostkami danych które nie reprezentują obiektów realnego świata lecz ich właściwości. Podobnie błędem jest klasyfikowanie ich jako atrybuty ponieważ atrybuty opisują encje a nie są nimi. Traktowanie tych elementów jako krotek również jest nieprawidłowe gdyż krotki to konkretne instancje danych a nie typy obiektów które chcemy modelować. Typowy błąd myślowy polega na myleniu poziomu abstrakcji czyli traktowaniu encji które są wysokopoziomowymi konceptami jak atrybuty czy krotki które są bardziej szczegółowymi jednostkami w strukturze danych. Zrozumienie tych różnic jest kluczowe dla efektywnego projektowania i implementacji baz danych oraz uniknięcia problemów związanych z redundancją czy nieefektywnością w przetwarzaniu informacji

Pytanie 2

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_fetch_row($zapytanie);
B. mysqli_free_result($zapytanie);
C. mysqli_num_fields($zapytanie);
D. mysqli_query($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 3

Polecenie SQL przedstawione poniżej ma za zadanie

UPDATE Uczen SET id_klasy = id_klasy + 1;
A. ustawienie wartości kolumny id_klasy na 1 dla każdego rekordu w tabeli Uczen
B. ustawienie wartości pola Uczen na 1
C. zwiększenie o jeden wartości pola Uczen
D. zwiększenie o jeden wartości kolumny id_klasy dla wszystkich rekordów tabeli Uczen
Analizując inne odpowiedzi warto zrozumieć dlaczego są one błędne Instrukcja zwiększenia wartości pola Uczen nie ma sensu w kontekście podanego polecenia SQL ponieważ w poleceniu modyfikujemy kolumnę id_klasy zamiast Uczen Nie istnieje tam również żaden mechanizm by ustawić wartość kolumny id_klasy na 1 dla wszystkich rekordów ponieważ taki efekt wymagałby użycia konkretnej wartości w poleceniu zamiast operacji dodawania jeden Dodatkowo ustawienie wartości pola Uczen na 1 nie ma związku z podanym zapytaniem które wyraźnie odnosi się do kolumny id_klasy Błędne zrozumienie poleceń SQL często wynika z nieuwagi i braku zrozumienia składni SQL Ważne jest aby zawsze dokładnie analizować jakich kolumn dotyczy operacja i jaka jest jej intencja SQL jako język deklaratywny wymaga precyzji w konstrukcji zapytań by osiągnąć zamierzony efekt Takie błędy mogą prowadzić do niezamierzonych modyfikacji danych dlatego zrozumienie kontekstu i poprawne interpretowanie poleceń jest kluczowe w pracy z bazami danych

Pytanie 4

Tabela o nazwie naprawy posiada kolumny klient oraz czyNaprawione. W celu usunięcia rekordów, w których wartość pola czyNaprawione wynosi prawda, należy użyć komendy

A. DELETE FROM naprawy WHERE czyNaprawione = TRUE;
B. DELETE klient FROM naprawy WHERE czyNaprawione = TRUE;
C. DELETE FROM naprawy;
D. DELETE naprawy WHERE czyNaprawione = TRUE;
Wszystkie błędne odpowiedzi zawierają niepoprawne podejście do użycia polecenia DELETE w SQL. Odpowiedź sugerująca "DELETE klient FROM naprawy WHERE czyNaprawione = TRUE;" powiela powszechny błąd związany z błędnym formatowaniem zapytania. W SQL nie używa się słowa kluczowego 'klient' w kontekście polecenia DELETE, ponieważ nie ma takiej struktury w poleceniach usuwania. Natomiast "DELETE naprawy WHERE czyNaprawione = TRUE;" również jest niepoprawne, ponieważ nie jest to prawidłowa składnia SQL; brak jest klauzuli FROM, co skutkuje błędem w zapytaniu. Odpowiedź "DELETE FROM naprawy;" z kolei jest skrajnie nieodpowiednia, ponieważ usuwa wszystkie rekordy z tabeli naprawy, co może prowadzić do nieodwracalnej utraty danych. Takie podejście łamie zasadę ostrożności w zarządzaniu bazami danych, gdzie ważne jest, aby nie wykonywać operacji na wszystkich rekordach bez wyraźnego określenia warunków. Typowym błędem jest również zrozumienie, że każdy nieprecyzyjny zapis w SQL skutkuje utratą danych lub błędami wykonania. Dlatego kluczowe jest, aby mieć świadomość struktury składni SQL oraz konsekwencji każdej operacji na bazach danych, w tym ryzyka związane z usuwaniem danych.

Pytanie 5

W SQL, aby dodać kolumnę rozmiar typu znakowego o maksymalnej długości 20 znaków do tabeli Towar, należy wykonać następujące polecenie

A. ALTER TABLE Towar ALTER COLUMN rozmiar varchar(20)
B. ALTER TABLE Towar CREATE COLUMN rozmiar varchar(20)
C. ALTER TABLE Towar DROP COLUMN rozmiar varchar(20)
D. ALTER TABLE Towar ADD rozmiar varchar(20)
Aby dodać nową kolumnę do istniejącej tabeli w bazie danych SQL, właściwe jest użycie polecenia ALTER TABLE z opcją ADD. W tym przypadku, aby dodać kolumnę 'rozmiar' typu varchar o maksymalnej długości 20 znaków do tabeli 'Towar', należy napisać: ALTER TABLE Towar ADD rozmiar varchar(20). Typ danych varchar (zmienny znak) jest często stosowany do przechowywania tekstu o zmiennej długości, co czyni go idealnym do przechowywania informacji takich jak rozmiary, nazwy czy opisy. Zachowanie maksymalnej długości kolumny do 20 znaków zapewnia, że żadne dane nie przekroczą ustalonego limitu, co z kolei może pomóc w utrzymaniu integralności danych. Dodatkowo, standard SQL definiuje ALTER TABLE jako polecenie do modyfikacji istniejących obiektów w bazie danych, co czyni go kluczowym narzędziem dla administratorów baz danych. Przykładowo, po dodaniu kolumny można zaktualizować istniejące rekordy, aby wprowadzić odpowiednie dane do nowej kolumny. Warto również zaznaczyć, że różne systemy zarządzania bazami danych (DBMS) mogą mieć swoje specyficzne rozszerzenia, ale powyższa składnia jest zgodna z SQL ANSI.

Pytanie 6

Aby wykonać kopię zapasową bazy danych w MySQL, jakie polecenie należy zastosować?

A. mysqldump
B. mysqlreplicate
C. mysqlcheck
D. mysqlslap
Wybór polecenia mysqlslap jako metody do tworzenia kopii zapasowych bazy danych jest nieuzasadniony, ponieważ funkcjonalność tego narzędzia jest całkowicie inna. Mysqlslap jest narzędziem do testowania wydajności MySQL, które symuluje obciążenie bazy danych i umożliwia ocenę jej reakcji na różne zapytania. Zamiast służyć do backupu, jest wykorzystywane do analizy i optymalizacji wydajności systemu, co może prowadzić do błędnych wniosków o jego zastosowaniu w kontekście bezpieczeństwa danych. Podobnie, mysqlcheck jest narzędziem używanym do sprawdzania i naprawy tabel w bazach danych MySQL, co oznacza, że nie ma on zastosowania w kontekście tworzenia kopii zapasowych. Jego główną rolą jest diagnostyka i konserwacja bazy danych, a nie zarządzanie danymi. Z kolei mysqlreplicate, jak sama nazwa wskazuje, odnosi się do replikacji bazy danych, co jest zupełnie inną procedurą, mającą na celu zapewnienie wysokiej dostępności i skalowalności poprzez tworzenie duplikatów danych na różnych serwerach. Typowym błędem jest mylenie narzędzi do zarządzania danymi z narzędziami do ich zabezpieczania. Aby skutecznie zarządzać bazą danych, konieczne jest zrozumienie różnicy między tymi funkcjami oraz właściwe dobieranie narzędzi do konkretnych zadań, co jest kluczowe dla zapewnienia spójności i bezpieczeństwa danych.

Pytanie 7

W języku PHP zapisano fragment kodu działającego na bazie MySQL. Jego zadaniem jest wypisanie

$z = mysqli_query($db, "SELECT ulica, miasto, kod_pocztowy FROM adresy");
$a = mysqli_fetch_row($z);
echo "$a[1], $a[2]";
A. miasta i kodu pocztowego z pierwszego zwróconego rekordu.
B. ulicy i miasta z pierwszego zwróconego rekordu.
C. ulicy i miasta ze wszystkich zwróconych rekordów.
D. miasta i kodu pocztowego ze wszystkich zwróconych rekordów.
Niestety, wybrałeś niepoprawną odpowiedź. W twoim fragmencie kodu PHP, wykonujesz zapytanie SQL, które wybiera kolumny 'ulica', 'miasto', 'kod pocztowy' z tabeli 'adresy'. Następnie używasz funkcji mysqli_fetch_row(), która pobiera pierwszy zwrócony rekord jako indeksowaną tablicę. Funkcja echo wyświetla drugi i trzeci element tej tablicy (indeksy 1 i 2), które odpowiadają kolumnom 'miasto' i 'kod pocztowy'. Niepoprawne odpowiedzi sugerują, że twój kod wypisze 'ulicę i miasto' lub 'miasto i kod pocztowy' ze wszystkich zwróconych rekordów, co jest nieprawdą. Niezrozumienie, jak funkcje PHP działają z MySQL i jaki jest ich wynik, może prowadzić do poważnych błędów w kodzie. Wskazane jest dokładne zrozumienie, jakie dane są zwracane przez SQL i jak je przetwarzać w PHP.

Pytanie 8

Atrybut NOT NULL kolumny jest konieczny w przypadku

A. klucza podstawowego
B. określenia wszystkich pól tabeli
C. użycia atrybutu DEFAULT
D. określenia wszystkich pól typu numerycznego
W przypadku atrybutu DEFAULT, jego zadaniem jest przypisanie domyślnej wartości do kolumny w momencie tworzenia nowego rekordu, jeśli nie zostanie podana inna wartość. Oznaczenie kolumny jako NOT NULL nie jest wymagane, ponieważ DEFAULT pozwala na wprowadzenie wartości domyślnej, co jest wystarczające do spełnienia wymogu posiadania wartości w kolumnie. Wartości domyślne mogą być stosowane w różnorodnych sytuacjach, na przykład, aby zapewnić, że pole z datą utworzenia zawsze ma przypisaną aktualną datę. W odniesieniu do definicji wszystkich pól tabeli, nie ma konieczności, aby każde pole miało atrybut NOT NULL. W praktyce wiele kolumn w tabelach baz danych jest zaprojektowanych tak, aby mogły przyjmować wartości NULL, co daje większą elastyczność w przechowywaniu danych. Co więcej, w przypadku pól typu numerycznego, możliwość przechowywania wartości NULL jest często wykorzystywana do reprezentacji braku danych, co czyni atrybut NOT NULL w tym kontekście zbędnym. Wykorzystywanie NULL w bazach danych ma swoje uzasadnienie i powinno być stosowane rozważnie, gdyż niektóre systemy zarządzania bazami danych mogą mieć różne metody obsługi NULL, co może wpływać na operacje zapytań i logikę aplikacji korzystających z tych danych. Powszechnym błędem jest myślenie, że wszystkie kolumny w tabeli muszą być oznaczone jako NOT NULL, co prowadzi do nieoptymalnych struktur danych i może ograniczać możliwości rozwoju aplikacji.

Pytanie 9

Systemem zarządzania wersjami w projekcie programistycznym, który działa w trybie rozproszonym, jest

A. GIT
B. TotalCommander
C. FileZilla
D. Eclipse
FileZilla to program służący do transferu plików przez protokoły FTP, SFTP i FTPS. Chociaż może być użyty w kontekście zarządzania plikami projektów, nie oferuje funkcji kontroli wersji, co jest kluczowym elementem rozproszonych systemów kontroli wersji. TotalCommander jest menedżerem plików, który współpracuje z lokalnym systemem plików, a nie z repozytoriami kodu źródłowego. W przypadku projektów programistycznych jego zastosowanie ogranicza się głównie do porządkowania i kopiowania plików, co nie ma związku z kontrolą wersji. Eclipse to zintegrowane środowisko programistyczne (IDE), które może wspierać różne systemy kontroli wersji, w tym GIT, ale samo w sobie nie jest rozproszonym systemem kontroli wersji. Typowe błędy myślowe prowadzące do takich wniosków to mieszanie pojęć związanych z zarządzaniem plikami i kontrolą wersji. Systemy kontroli wersji, takie jak GIT, wprowadzają struktury i procesy, które umożliwiają śledzenie zmian, zarządzanie wersjami kodu oraz współpracę w zespołach, co jest całkowicie odmiennym podejściem od prostego przesyłania plików czy zarządzania nimi w lokalnym systemie. W związku z tym, zrozumienie podstawowych różnic między tymi narzędziami jest kluczowe dla efektywnego zarządzania projektami programistycznymi.

Pytanie 10

Jakie zapytanie umożliwi Administratorowi odebranie uprawnień do przeglądania oraz edytowania danych w bazie gazeta, dla użytkownika redaktor?

A. REVOKE SELECT, UPDATE ON gazeta.* FROM 'redaktor'@'localhost';
B. GRANT SELECT, ALTER ON gazeta.* TO 'redaktor'@'localhost';
C. REVOKE SELECT, ALTER ON gazeta.* FROM 'redaktor'@'localhost';
D. GRANT SELECT, UPDATE ON gazeta.* TO 'redaktor'@'localhost';
Wszystkie pozostałe odpowiedzi są niepoprawne, ponieważ mylą pojęcie przyznawania i odbierania uprawnień. Na przykład, odpowiedź z użyciem GRANT SELECT, UPDATE ON gazeta.* TO 'redaktor'@'localhost'; jest błędna, ponieważ GRANT służy do przyznawania uprawnień, a nie ich odbierania. Użytkownik, który rozważa tę opcję, może mieć fałszywe przekonanie, że jest możliwe przypisanie uprawnień w sytuacji, gdy celem jest ich cofnięcie. Podobnie, odpowiedzi zawierające ALTER, jak REVOKE SELECT, ALTER ON gazeta.* FROM 'redaktor'@'localhost'; wprowadzają dodatkowy zamęt, ponieważ ALTER nie jest związane z przeglądaniem lub aktualizowaniem danych, ale odnosi się do modyfikacji struktury bazy danych. Błędne rozumienie różnic między SELECT, UPDATE i ALTER może prowadzić do poważnych problemów w zarządzaniu bazą danych, na przykład do nieautoryzowanych zmian w strukturze danych. Użytkownicy mogą także popełniać błąd w zakresie lokalizacji użytkownika, co w przypadku odpowiedzi jest określone jako 'redaktor'@'localhost';, co może być mylące w sytuacji, gdy użytkownik jest przypisany do innego hosta. Właściwe zrozumienie i stosowanie uprawnień w bazach danych jest fundamentalne dla ochrony danych, a także dla zapewnienia, że tylko uprawnieni użytkownicy mają dostęp do krytycznych informacji.

Pytanie 11

Proces przetwarzania sygnału wejściowego w czasie, wykorzystujący zasadę superpozycji, jest związany z filtrem

A. przyczynowym
B. niezmiennym w czasie
C. liniowym
D. o skończonej odpowiedzi impulsowej
Filtr liniowy to taki, który w procesie przetwarzania sygnału spełnia zasadę superpozycji. Oznacza to, że wynik działania filtru na sumie sygnałów wejściowych jest równy sumie wyników działania filtru na poszczególne sygnały. W praktyce, filtry liniowe są powszechnie stosowane w różnych zastosowaniach, takich jak audio, telekomunikacja czy przetwarzanie obrazu, co wynika z ich zdolności do efektywnej analizy sygnałów. Przykładowo, w systemach audio, filtry liniowe mogą być używane do eliminacji szumów czy wzmacniania określonych częstotliwości, co pozwala na uzyskanie lepszej jakości dźwięku. Zgodnie z dobrą praktyką inżynieryjną, projektowanie filtrów liniowych opiera się na zrozumieniu ich charakterystyki częstotliwościowej oraz odpowiedzi impulsowej, co jest kluczowe dla osiągnięcia zamierzonych efektów w przetwarzaniu sygnałów.

Pytanie 12

Na ilustracji przedstawiono związek jeden do wielu. Łączy on

Ilustracja do pytania
A. klucz podstawowy id w tabeli filmy z kluczem podstawowym id w tabeli rezyserzy
B. klucz obcy rezyserzy_id w tabeli filmy z kluczem obcym id w tabeli rezyserzy
C. klucz podstawowy id w tabeli z kluczem obcym rezyserzy_id w tabeli rezyserzy
D. klucz obcy rezyserzy_id w tabeli filmy z kluczem podstawowym id w tabeli rezyserzy
Relacja jeden do wielu jest kluczowym elementem projektowania baz danych i występuje, gdy pojedynczy rekord w jednej tabeli może być powiązany z wieloma rekordami w innej tabeli. W tym przypadku mamy do czynienia z relacją między tabelą 'rezyserzy' i 'filmy'. Klucz podstawowy 'id' w tabeli 'rezyserzy' jest związany z kluczem obcym 'rezyserzy_id' w tabeli 'filmy'. Oznacza to, że jeden reżyser może być autorem wielu filmów. Klucz obcy w tabeli 'filmy' wskazuje na odpowiedni rekord w tabeli 'rezyserzy', co zapewnia integralność danych i umożliwia wykonywanie operacji takich jak JOIN w języku SQL, co jest przydatne przy pobieraniu danych z obu tabel jednocześnie. W praktyce stosowanie kluczy obcych jest standardową praktyką w projektowaniu relacyjnych baz danych, ponieważ ułatwia organizację i normalizację danych. Zrozumienie tych relacji jest niezbędne dla każdego, kto pracuje z bazami danych, gdyż pozwala na efektywne zarządzanie i analizowanie danych w skomplikowanych systemach informatycznych.

Pytanie 13

Tabele Klienci oraz Zgłoszenia są ze sobą połączone relacją jeden do wielu. W celu uzyskania jedynie opisu zgłoszenia oraz odpowiadającego mu nazwiska klienta dla zgłoszenia o numerze 5, należy wykonać polecenie

Ilustracja do pytania
A. SELECT opis, nazwisko FROM Zgłoszenia JOIN Klienci ON Klienci.id = Zgłoszenia.Klienci_id WHERE Klienci.id = 5
B. SELECT opis, nazwisko FROM Zgłoszenia JOIN Klienci WHERE Klienci.id = 5
C. SELECT opis, nazwisko FROM Zgłoszenia JOIN Klienci ON Klienci.id = Zgłoszenia.id WHERE Zgłoszenia.id = 5
D. SELECT opis, nazwisko FROM Zgłoszenia JOIN Klienci ON Klienci.id = Zgłoszenia.Klienci_id WHERE Zgłoszenia.id = 5
Odpowiedź jest poprawna, ponieważ uwzględnia właściwe połączenie między tabelami Klienci i Zgłoszenia za pomocą klucza obcego Klienci_id w tabeli Zgłoszenia. W relacyjnych bazach danych, gdy chcemy pobrać dane z dwóch tabel powiązanych relacją klucz główny-klucz obcy, używamy klauzuli JOIN. W tym przypadku Klienci_id w tabeli Zgłoszenia odnosi się do kolumny id w tabeli Klienci. Zapytanie SELECT opis, nazwisko FROM Zgłoszenia JOIN Klienci ON Klienci.id = Zgłoszenia.Klienci_id WHERE Zgłoszenia.id = 5; precyzyjnie pobiera kolumny opis i nazwisko z odpowiednich tabel, filtrując wyniki, aby dotyczyły jedynie zgłoszenia o id równym 5. Takie podejście jest zgodne z dobrymi praktykami projektowania relacyjnych baz danych, gdzie separacja danych na tabele pozwala na efektywne zarządzanie związkami między danymi. Korzystając z JOIN, integrujemy te dane w logiczny sposób, co jest fundamentem wydajnych i skalowalnych systemów bazodanowych. Praktyczne zastosowanie tego podejścia można znaleźć w projektowaniu systemów CRM, gdzie dane o klientach i ich zgłoszeniach są regularnie łączone w celu analizy i raportowania.

Pytanie 14

W systemie baz danych zdefiniowano tabelę Mieszkancy, która zawiera dane. W celu usunięcia tej tabeli oraz jej zawartości, należy użyć polecenia

A. DELETE FROM Mieszkancy;
B. DROP TABLE Mieszkancy;
C. ALTER TABLE Mieszkancy;
D. TRUNCATE TABLE Mieszkancy;
Polecenie 'DROP TABLE Mieszkancy;' jest odpowiednie do usunięcia tabeli z bazy danych, wraz ze wszystkimi jej danymi i strukturą. W przeciwieństwie do innych poleceń, takich jak 'DELETE' czy 'TRUNCATE', które modyfikują zawartość tabeli, 'DROP TABLE' usuwa całą tabelę z systemu. Użycie tego polecenia jest nieodwracalne, dlatego przed jego zastosowaniem warto upewnić się, że posiadamy kopię zapasową danych, jeśli będą one w przyszłości potrzebne. W praktyce, jeśli jesteś administratorem bazy danych i chcesz usunąć zbędną tabelę, polecenie to jest niezwykle efektywne i pozwala na zwolnienie zasobów. Zgodnie z najlepszymi praktykami, przed wykonaniem operacji na bazie danych, zawsze warto przeprowadzić analizę wpływu na inne powiązane obiekty, takie jak relacje między tabelami. Dobrą praktyką jest również włączenie kontroli dostępu, aby nieuprawnione osoby nie mogły wykonywać takich operacji.

Pytanie 15

Zapytanie przedstawione poniżej zwróci wynik:

SELECT COUNT(cena) FROM uslugi;
A. wszystkie wartości cen usług w tabeli
B. liczbę wszystkich cen usług w tabeli
C. sumę wartości cen usług w tabeli
D. średnią wartość cen usług w tabeli
Pojawiające się nieporozumienia związane z interpretacją zapytania mogą prowadzić do błędnych wniosków. Wybór odpowiedzi, która zakłada, że zapytanie zwróci wszystkie ceny usług, jest nieprecyzyjny, ponieważ funkcja COUNT() nie wyświetla wszystkich wartości, a jedynie ich ilość. Z kolei odpowiedź sugerująca, że zapytanie oblicza średnią cenę usług, również jest błędna, ponieważ do obliczenia średniej stosuje się funkcję AVG(), a nie COUNT(). Dodatkowo, wybór opcji dotyczącej sumy cen usług jest mylący, gdyż do tego celu używa się funkcji SUM(). Zrozumienie, jak działają te funkcje, jest kluczowe w pracy z bazami danych. Funkcja COUNT() wykonuje zadanie zliczenia, co różni się od zadań agregacyjnych takich jak SUM() czy AVG(), które operują na wartościach liczbowych. Typowym błędem jest mylenie zadań zliczania z zadaniami obliczeniowymi, co może prowadzić do nieprawidłowych analiz danych. Dlatego ważne jest, aby przed sformułowaniem zapytania dobrze zrozumieć, jakie operacje są wykonywane na danych i jakie funkcje są do tego odpowiednie.

Pytanie 16

W celu zmiany struktury tabeli w systemie MySQL trzeba wykonać polecenie

A. ALTER TABLE
B. UPDATE
C. GRANT
D. INSERT INTO
Odpowiedź 'ALTER TABLE' to strzał w dziesiątkę, bo to właśnie to polecenie w MySQL pozwala na zmiany w strukturze tabeli w bazach danych. Gdy używamy 'ALTER TABLE', możemy dodawać nowe kolumny, usuwać te, które już nie są potrzebne, albo zmieniać typ danych w kolumnach. Przykładowo, jeśli chcemy dodać kolumnę 'wiek' do tabeli 'pracownicy', używamy: ALTER TABLE pracownicy ADD COLUMN wiek INT;. A żeby usunąć kolumnę 'adres', wystarczy: ALTER TABLE pracownicy DROP COLUMN adres;. Pamiętaj przy tym, żeby zawsze sprawdzić, czy te zmiany nie będą miały negatywnego wpływu na dane oraz czy mamy odpowiednie uprawnienia. Osobiście uważam, że warto robić kopie zapasowe przed większymi zmianami, bo to może uratować skórę, gdy coś pójdzie nie tak. Dobry sposób na to, by być pewnym siebie w pracy z bazami danych, to dobrze poznać 'ALTER TABLE' i jego możliwości.

Pytanie 17

Testy aplikacji webowej, mające na celu ocenę wydajności aplikacji oraz bazy danych, a także architektury serwera i konfiguracji, noszą nazwę testów

A. kompatybilności
B. bezpieczeństwa
C. funkcjonalnych
D. użyteczności
Testy kompatybilności to naprawdę ważna część oceny, czy nasza aplikacja www dobrze działa w różnych środowiskach i na różnych systemach. Gdy myślimy o skalowalności aplikacji oraz baz danych, te testy pomagają sprawdzić, jak aplikacja znosi rosnące obciążenia i jak współpracuje z różnymi bazami danych czy serwerami. Przykładowo, możemy przetestować działanie aplikacji na różnych wersjach systemów operacyjnych lub przeglądarek. W branży sporo ludzi korzysta z takich narzędzi jak Selenium czy QUnit, które pomagają w automatyzacji tych testów. Z mojej perspektywy, te testy powinny być częścią cyklu życia oprogramowania, aby użytkownicy mogli cieszyć się spójnym i niezawodnym doświadczeniem. Zrozumienie testów kompatybilności jest kluczowe, nie tylko dla programistów, ale też dla inżynierów jakości, ponieważ ma to bezpośredni wpływ na to, jak użytkownicy odbierają nasz produkt oraz jego sukces na rynku.

Pytanie 18

Jakie dane zostaną pokazane w wyniku wykonania podanego zapytania SQL na 8 rekordach w tabeli zwierzeta?

SELECT imie FROM zwierzeta
WHERE rodzaj = 2
AND szczepienie = 2016;
idrodzajimiewlascicielszczepienieopis
11FafikAdam Kowalski2016problemy z uszami
21BrutusAnna Wysocka2016zapalenie krtani
41SabaMonika Nowak2015antybiotyk
51AlmaJan KowalewskiNULLantybiotyk
62FigaroAnna KowalskaNULLproblemy z uszami
72DikaKatarzyna Kowal2016operacja
82FuksJan Nowak2016antybiotyk
A. Anna Kowalska, Jan Nowak
B. Figaro, Dika, Fuks
C. Dika, Fuks
D. Fafik, Brutus, Dika, Fuks
W zapytaniu SQL określono, że chcemy wybrać kolumnę 'imie' z tabeli 'zwierzeta' dla rekordów, które spełniają dwa warunki: 'rodzaj' równa się 2 oraz 'szczepienie' równa się 2016. Analizując dane z tabeli, widzimy, że rekordy spełniające oba te kryteria to rekordy o ID 7 i 8, gdzie imiona to 'Dika' i 'Fuks'. Jest to poprawna odpowiedź, ponieważ jedynie te dwa rekordy mają 'rodzaj' równe 2 i 'szczepienie' równe 2016. Takie podejście do zapytań SQL jest zgodne z praktykami branżowymi, które uczą, by precyzyjnie definiować warunki filtrowania danych. Dzięki temu można efektywnie zarządzać danymi i uzyskiwać jedynie te informacje, które są istotne dla bieżącej analizy czy raportu. Warto zauważyć, że zastosowanie logicznej operacji 'AND' jest kluczowe, gdy chcemy, aby wszystkie określone warunki były spełnione jednocześnie. W różnych systemach baz danych, takich jak MySQL czy PostgreSQL, takie zapytania są powszechne i pomagają w utrzymaniu precyzyjnych i wydajnych operacji na danych.

Pytanie 19

Tabela filmy zawiera klucz główny id oraz klucz obcy rezyserID. Tabela reżyserzy posiada klucz główny id. Obie tabele są powiązane relacją jeden do wielu, gdzie strona reżyserzy jest po stronie jeden, a filmy po stronie wiele. Aby wykonać kwerendę SELECT łączącą tabele filmy i reżyserzy, należy użyć zapisu

A. ... filmy JOIN rezyserzy ON filmy.id=rezyserzy.id ...
B. ... filmy JOIN rezyserzy ON filmy.rezyserID=rezyserzy.filmyID ...
C. ... filmy JOIN rezyserzy ON filmy.rezyserzyID=rezyserzy.id ...
D. ... filmy JOIN rezyserzy ON filmy.id=rezyserzy.filmyID ...
Wybór niepoprawnej odpowiedzi może wynikać z nieporozumienia co do relacji między tabelami i ich kluczami. W pierwszej opcji, warunek łączenia jest błędny, ponieważ użyto 'filmy.id' zamiast 'filmy.rezyserID'. Klucz główny 'id' w tabeli 'filmy' nie jest powiązany z kluczem głównym w tabeli 'rezyserzy', co prowadzi do nieprawidłowego łączenia. W drugiej opcji, podobnie jak w pierwszej, jest błędne odniesienie, ponieważ 'filmy.filmyID' nie istnieje jako klucz w tabeli 'filmy', co skutkuje niezgodnością, ponieważ 'filmy' nie powinny mieć klucza o takiej nazwie. Rozważając kolejną odpowiedź, zauważamy, że 'filmy.rezyserzyID' również jest niewłaściwe, ponieważ nie jest zgodne z definicją kluczy obcych, które powinny odnosić się do 'rezyserID'. Każda z tych niepoprawnych odpowiedzi nie tylko prowadzi do błędnych wyników, ale także narusza zasady normalizacji bazy danych, co może skutkować problemami z integralnością oraz błędami w analizach danych.

Pytanie 20

Jakiej kwerendy w bazie MariaDB należy użyć, aby wybrać artykuły, których ceny mieszczą się w przedziale domkniętym <10, 20>?

A. SELECT * FROM Artykuly WHERE Cena LIKE 1%, 2%
B. SELECT * FROM Artykuly WHERE Cena BETWEEN 10 AND 20
C. SELECT * FROM Artykuly WHERE Cena IN (10, 20)
D. SELECT * FROM Artykuly WHERE Cena > 10 AND Cena < 20
Odpowiedź 'SELECT * FROM Artykuly WHERE Cena BETWEEN 10 AND 20;' jest prawidłowa, ponieważ wykorzystuje operator BETWEEN, który jest idealny do określenia wartości zawartych w obustronnie domkniętym przedziale. W tym przypadku zapytanie zwróci wszystkie artykuły, których cena jest równa 10 lub 20 oraz wszystkie wartości znajdujące się pomiędzy tymi dwoma wartościami. Operator BETWEEN jest standardowym sposobem na łatwe zapisywanie takich warunków w SQL, co czyni kod bardziej czytelnym i zrozumiałym. Przykład zastosowania to sytuacja, gdy chcemy znaleźć produkty w określonym przedziale cenowym na stronie e-commerce. Tego typu kwerendy są bardzo powszechne w analizie danych i zarządzaniu bazami danych, a ich znajomość jest kluczowa dla efektywnego wykonywania zadań związanych z eksploracją danych. Zastosowanie BETWEEN w praktyce pozwala na automatyzację procesów wyszukiwania i filtrowania danych, co jest zgodne z najlepszymi praktykami w zakresie optymalizacji zapytań w bazach danych.

Pytanie 21

Głównym celem systemu CMS jest oddzielenie treści witryny informacyjnej od jej wyglądu. Jak osiągany jest ten efekt?

A. z bazy danych oraz wyglądu ze zdefiniowanego szablonu
B. ze statycznych plików HTML oraz wyglądu ze zdefiniowanego szablonu
C. ze statycznych plików HTML oraz wyglądu za pomocą technologii FLASH
D. z bazy danych oraz wyglądu za pomocą atrybutów HTML
Podstawowym celem systemu zarządzania treścią (CMS) jest skuteczne oddzielenie treści serwisu od jego prezentacji wizualnej. Właściwe funkcjonowanie CMS opiera się na dynamicznym generowaniu zawartości z bazy danych, co pozwala na łatwe zarządzanie dużymi zbiorami informacji oraz ich aktualizację bez konieczności modyfikowania każdego pliku z osobna. Szablony, które definiują wygląd strony, są kluczowym elementem tej struktury. Dzięki zastosowaniu zdefiniowanych szablonów, różne strony mogą z łatwością przyjąć spójną estetykę wizualną, co jest zgodne z najlepszymi praktykami projektowania stron internetowych. Na przykład, w CMS WordPress, treści publikowane na blogu są przechowywane w bazie danych, a szablon wyświetla je w przyjazny dla użytkownika sposób. Taki podział umożliwia także łatwe wprowadzanie zmian w wyglądzie strony bez wpływu na jej zawartość. Warto pamiętać, że stosowanie bazy danych i szablonów wspiera SEO, ponieważ pozwala na lepsze zarządzanie meta danymi oraz linkami wewnętrznymi.

Pytanie 22

W bazie danych wykonano poniższe polecenia dotyczące uprawnień użytkownika adam:

GRANT ALL PRIVILEGES ON klienci TO adam;
REVOKE SELECT, INSERT, UPDATE ON klienci FROM adam;
Po wykonaniu tych instrukcji użytkownik adam uzyska dostęp do:
A. tworzenia tabeli klienci i modyfikowania w niej danych
B. zmiany danych oraz przeglądania tabeli klienci
C. usunięcia tabeli lub jej rekordów
D. przeglądania tabeli klienci oraz dodawania do niej rekordów
Użytkownik <b>adam</b> rzeczywiście uzyskuje pełne prawa do zarządzania tabelą <b>klienci</b> po wykonaniu polecenia GRANT ALL PRIVILEGES. To polecenie nadaje wszystkie możliwe uprawnienia, w tym SELECT (przeglądanie danych), INSERT (wstawianie nowych rekordów), UPDATE (aktualizowanie istniejących danych) oraz DELETE (usuwanie rekordów). W kontekście praktycznym, posiadanie ALL PRIVILEGES oznacza, że użytkownik ma swobodę w manipulowaniu danymi, co jest kluczowe w pracy z bazami danych. Na przykład, w aplikacji zarządzającej klientami, <b>adam</b> może zaktualizować szczegóły klienta, dodać nowych klientów do bazy oraz usunąć tych, którzy już nie są aktywni. Jednakże, ważne jest, aby przyznawanie takich uprawnień odbywało się zgodnie z zasadami minimalnych uprawnień, aby zredukować ryzyko nieautoryzowanych zmian. Dlatego też praktyki zarządzania użytkownikami w bazach danych powinny obejmować dokładne audyty uprawnień oraz regularne przeglądy przyznanych praw, aby zapewnić bezpieczeństwo danych.

Pytanie 23

Tabela Pacjenci zawiera kolumny: imie, nazwisko, wiek oraz lekarz_id. W celu stworzenia raportu z imionami i nazwiskami pacjentów, którzy mają mniej niż 18 lat i są zapisani do lekarza o id wynoszącym 6, należy zastosować kwerendę SQL

A. SELECT imie, nazwisko WHERE wiek < 18 AND lekarz_id = 6
B. SELECT imie, nazwisko WHERE wiek < 18 OR lekarz_id = 6
C. SELECT imie, nazwisko FROM Pacjenci WHERE wiek < 18 OR lekarz_id = 6
D. SELECT imie, nazwisko FROM Pacjenci WHERE wiek < 18 AND lekarz_id = 6
Odpowiedź 'SELECT imie, nazwisko FROM Pacjenci WHERE wiek < 18 AND lekarz_id = 6' jest poprawna, ponieważ precyzyjnie określa, jakie dane mają zostać zwrócone. Kwerenda ta wykorzystuje klauzulę 'FROM', aby wskazać, z której tabeli mają zostać pobrane dane, oraz 'WHERE', aby nałożyć odpowiednie warunki. W tym przypadku chcemy uzyskać imiona i nazwiska pacjentów, którzy są poniżej 18 roku życia oraz zapisani do lekarza o identyfikatorze 6. Używanie operatora 'AND' jest kluczowe w tym kontekście, ponieważ tylko pacjenci spełniający obydwa warunki będą uwzględniani w wynikach. W praktyce, taka kwerenda jest niezwykle użyteczna w systemach medycznych, gdzie konieczne jest operowanie na danych demograficznych pacjentów oraz ich przypisania do lekarzy. Dobre praktyki w SQL wymagają jasności w określaniu warunków filtracji, co ta kwerenda osiąga, unikając niejednoznaczności, które mogłyby wyniknąć z użycia operatora 'OR'.

Pytanie 24

W języku PHP, przy pracy z bazą MySQL, aby zakończyć sesję z bazą, należy wywołać

A. mysqli_rollback()
B. mysqli_commit()
C. mysqli_exit()
D. mysqli_close()
Odpowiedź mysqli_close() jest prawidłowa, ponieważ ta funkcja jest używana do zamknięcia połączenia z bazą danych MySQL w języku PHP. Po zakończeniu wszystkich operacji na bazie danych, zaleca się wywołanie tej funkcji, aby zwolnić zasoby systemowe oraz zamknąć połączenie, co jest zgodne z dobrymi praktykami programistycznymi. Użycie mysqli_close() jest istotne, ponieważ niezamknięte połączenia mogą prowadzić do wycieków pamięci i wyczerpania dostępnych zasobów, co z kolei może wpłynąć na wydajność aplikacji. W praktyce, jeśli mamy otwarte połączenie z bazą danych, po zakończeniu operacji, takich jak pobieranie lub wstawianie danych, używamy mysqli_close($connection), gdzie $connection to nasza zmienna reprezentująca połączenie. Oprócz tego, pamiętajmy, że dbanie o odpowiednie zarządzanie połączeniami ma kluczowe znaczenie dla bezpieczeństwa i stabilności naszych aplikacji.

Pytanie 25

Aby stworzyć tabelę, należy wykorzystać polecenie

A. CREATE TABLE
B. ALTER TABLE
C. CREATE DATABASE
D. INSERT INTO
Polecenie CREATE TABLE to naprawdę ważna sprawa, jeśli chodzi o budowanie struktury bazy danych w systemach DBMS. Dzięki niemu możemy stworzyć nową tabelę w bazie, nadając jej różne nazwy i typy danych dla kolumn. Na przykład, można użyć takiego zapisu: CREATE TABLE pracownicy (id INT PRIMARY KEY, imie VARCHAR(50), nazwisko VARCHAR(50), data_zatrudnienia DATE); W efekcie mamy tabelę 'pracownicy' z czterema kolumnami, a 'id' to nasz klucz główny. W praktyce, poprawne stworzenie tabeli to podstawa dalszej pracy z danymi, więc warto się postarać, żeby schematy baz danych były dobrze zaprojektowane, w zgodzie z zasadami normalizacji. To zmniejsza zbędne powtarzanie danych i sprawia, że potem łatwiej nimi zarządzać. Pamiętaj, żeby przed użyciem CREATE TABLE dobrze zaplanować strukturę bazy danych, bo to pomoże w wydajności i elastyczności aplikacji. Fajnie jest też dodać różne ograniczenia, jak klucze obce, żeby mieć pewność, że nasze dane są w porządku.

Pytanie 26

Tabela o nazwie naprawy zawiera kolumny klient oraz czyNaprawione. Jakie polecenie należy wykonać, aby usunąć te rekordy, w których wartość w kolumnie czyNaprawione jest prawdziwa?

A. DELETE klient FROM naprawy WHERE czyNaprawione= TRUE;
B. DELETE naprawy WHERE czyNaprawione= TRUE;
C. DELETE FROM naprawy WHERE czyNaprawione= TRUE;
D. DELETE FROM naprawy;
Odpowiedź 'DELETE FROM naprawy WHERE czyNaprawione= TRUE;' jest poprawna, ponieważ precyzyjnie wskazuje, które rekordy mają być usunięte z tabeli 'naprawy'. W SQL, polecenie DELETE jest używane do usuwania rekordów z bazy danych, a klauzula WHERE jest kluczowa, aby ograniczyć operację do tych rekordów, które spełniają określone warunki. W tym przypadku, warunek 'czyNaprawione= TRUE' wskazuje, że chcemy usunąć tylko te rekordy, dla których naprawa została już zakończona. W praktyce, stosowanie klauzuli WHERE jest niezbędne, aby uniknąć usunięcia wszystkich rekordów z danej tabeli, co mogłoby prowadzić do utraty cennych danych. W kontekście dobrych praktyk, zawsze należy być ostrożnym przy używaniu polecenia DELETE i dokładnie weryfikować warunki znajdujące się w klauzuli WHERE. Dodatkowo, przed przeprowadzeniem operacji usuwania, warto wykonać zapytanie SELECT z tymi samymi warunkami, aby upewnić się, które rekordy zostaną usunięte, co pozwala na uniknięcie niezamierzonych skutków.

Pytanie 27

Angielskim tłumaczeniem słowa "zapytanie", używanym w bazach danych SQL jest

A. keyword.
B. select.
C. query.
D. asterisk.
Poprawnie – w kontekście baz danych SQL angielskim odpowiednikiem słowa „zapytanie” jest „query”. W całym ekosystemie bazodanowym, zarówno w dokumentacji technicznej, jak i w praktyce zawodowej, przyjęło się, że query to właśnie żądanie skierowane do silnika bazy danych o zwrócenie, modyfikację lub analizę danych. Może to być zarówno proste zapytanie SELECT, jak i bardziej złożone polecenia typu INSERT, UPDATE, DELETE czy nawet zagnieżdżone podzapytania. Mówiąc, że „piszemy query do bazy”, mamy na myśli kompletne zapytanie SQL, które serwer interpretuje i wykonuje. W praktyce, w narzędziach takich jak phpMyAdmin, SQL Server Management Studio, pgAdmin czy nawet w ORM-ach (np. w Laravelu, Django), wszędzie pojawia się pojęcie „query builder”, „query log”, „query optimization”. To wszystko odnosi się właśnie do zapytań. Warto też kojarzyć, że w literaturze i kursach często rozróżnia się pojęcie „query” (czyli konkretne zapytanie) od „statement” (instrukcja, polecenie w języku SQL), ale w mowie potocznej programistów często się to miesza. Dobrą praktyką jest używanie słowa „query” zawsze wtedy, gdy mówimy o operacji odczytu lub ogólnie o wysłaniu zapytania SQL do bazy, a nie np. o nazwie słowa kluczowego czy znaku specjalnym. W projektach komercyjnych, logach aplikacji, monitoringu wydajności, wszędzie będzie pojawiać się termin „slow queries”, „expensive queries” – i to zawsze oznacza wolno działające zapytania. Moim zdaniem warto się szybko przyzwyczaić do tego terminu, bo jest absolutnie podstawowy w pracy z bazami danych.

Pytanie 28

W tabeli mieszkancy znajdują się dane o osobach z całego kraju. Aby ustalić, ile unikalnych miast występuje w tej tabeli, trzeba zapisać kwerendę

A. SELECT COUNT(miasto) FROM mieszkancy DISTINCT;
B. SELECT DISTINCT miasto FROM mieszkancy;
C. SELECT COUNT(miasto) FROM mieszkancy;
D. SELECT COUNT(DISTINCT miasto) FROM mieszkancy;
Wybór odpowiedzi "SELECT COUNT(DISTINCT miasto) FROM mieszkancy;" jest naprawdę trafny. Używasz funkcji COUNT razem z DISTINCT, co pozwala na zliczenie tylko unikalnych miast w tabeli 'mieszkancy'. Funkcja COUNT liczy wszystkie wiersze, a DISTINCT usuwa duplikaty, dzięki czemu dostajemy dokładną liczbę miast. Fajnie jest to wykorzystać, gdy analizujesz dane demograficzne – wtedy wiesz, jakie masz rozkłady w różnych miastach. W bazach danych to standardowy sposób, bo dzięki temu unikasz powielania danych i masz lepsze analizy. Ważne jest też, żeby pamiętać o wydajności zapytań; połączenie DISTINCT z COUNT może być bardziej efektywne niż próba szukania duplikatów później. No i zasady normalizacji bazy danych? One rzeczywiście pomagają w tym, żeby dane były uporządkowane, co ułatwia ich przetwarzanie i analizowanie.

Pytanie 29

Aby odzyskać bazę danych z kopii zapasowej na serwerze MSSQL, należy użyć polecenia

A. RESTORE DATABASE
B. UNBACKUP DATABASE
C. EXPORT DATABASE
D. BACKUP DATABASE
Aby przywrócić bazę danych z kopii zapasowej na serwerze MSSQL, trzeba użyć polecenia RESTORE DATABASE. To bardzo ważna komenda, bo pozwala nam na odzyskanie danych do stanu sprzed jakiejś awarii czy utraty informacji. Można to robić w różnych sytuacjach, na przykład przywracając bazę z pełnej kopii zapasowej albo jakiejś różnicowej. Przykład użycia wygląda tak: RESTORE DATABASE [NazwaBazyDanych] FROM DISK = 'C:\Backup\KopiaZap.pdf' WITH REPLACE; co zastąpi starą bazę nową. Fajnie też wspomnieć, że standardy jak ISO 27001 pokazują, jak ważne są regularne kopie zapasowe, żeby zachować integralność danych i ciągłość działania. A tak przy okazji, przed przywracaniem warto zablokować dostęp do bazy, żeby nie było żadnych konfliktów.

Pytanie 30

Tabele Osoby i Adresy są połączone relacją jeden do wielu. Które zapytanie SQL należy wykonać, aby korzystając z tej relacji, prawidłowo wyświetlić nazwiska oraz przyporządkowane im miasta?

Ilustracja do pytania
A. SELECT nazwisko, Miasto FROM Osoby.Adresy_id = Adresy.id FROM Osoby, Adresy;
B. SELECT nazwisko, Miasto FROM Osoby, Adresy WHERE Osoby.id = Adresy.id;
C. SELECT nazwisko, Miasto FROM Osoby JOIN Adresy ON Osoby.Adresy_id = Adresy.id;
D. SELECT nazwisko, Miasto FROM Osoby, Adresy;
Poprawne zapytanie korzysta z jawnego złączenia tabel: SELECT nazwisko, Miasto FROM Osoby JOIN Adresy ON Osoby.Adresy_id = Adresy.id;. Kluczowe są tu dwie rzeczy: użycie słowa kluczowego JOIN oraz właściwy warunek ON, który łączy klucz obcy z kluczem głównym. W tabeli Osoby kolumna Adresy_id jest kluczem obcym (FK), który wskazuje na kolumnę id w tabeli Adresy. To dokładnie odzwierciedla relację jeden‑do‑wielu narysowaną na diagramie. Dzięki temu baza danych wie, które miasto przypisać do którego nazwiska. Takie podejście jest zgodne ze standardem SQL i dobrą praktyką w relacyjnych bazach danych. Jawne JOIN-y są czytelne, łatwe do modyfikacji (np. dodanie kolejnych tabel lub warunków filtrowania) i dobrze współpracują z optymalizatorem zapytań. W praktycznych projektach, np. w aplikacjach webowych, właśnie tak buduje się zapytania: łączymy tabelę użytkowników lub klientów z tabelą adresów, zamówień, faktur, logów itp. zawsze po kluczach głównych i obcych, a nie po przypadkowo dobranych kolumnach. Moim zdaniem warto od razu wyrabiać sobie nawyk pisania nazw tabel przy kolumnach, czyli Osoby.nazwisko, Adresy.Miasto – zmniejsza to ryzyko konfliktu nazw i poprawia czytelność kodu SQL. Gdyby w przyszłości w którejś tabeli pojawiła się druga kolumna o nazwie Miasto, zapytanie nadal byłoby jednoznaczne. W większych systemach, gdzie dochodzą dodatkowe warunki (WHERE, ORDER BY, GROUP BY), taka struktura zapytania z JOIN ON jest po prostu dużo łatwiejsza w utrzymaniu i debugowaniu. Warto też pamiętać, że relacja jeden‑do‑wielu oznacza, że jedna osoba może mieć wiele adresów albo jeden adres może być przypisany do wielu osób – dokładne powiązanie zależy od modelu, ale technika złączenia po kluczu obcym pozostaje taka sama.

Pytanie 31

Jak można zweryfikować spójność danych w bazie MySQL?

A. CHECK TABLE
B. REPAIR TABLE
C. mysql
D. mysqldump
Polecenie CHECK TABLE w MySQL służy do sprawdzania integralności danych w tabeli. Umożliwia to identyfikację problemów, takich jak zduplikowane klucze, uszkodzone wskaźniki lub nieprawidłowe struktury danych. Przykładem zastosowania tego polecenia jest sytuacja, gdy administrator bazy danych podejrzewa, że tabela mogła ulec uszkodzeniu na skutek błędów systemowych lub nieprawidłowych operacji użytkownika. W takim przypadku używając CHECK TABLE, można szybko zdiagnozować problemy i podjąć odpowiednie działania, takie jak naprawa za pomocą polecenia REPAIR TABLE, jeśli to konieczne. Dobre praktyki w zakresie zarządzania bazami danych sugerują regularne sprawdzanie integralności tabel, co pozwala na szybsze wykrywanie problemów oraz minimalizację ryzyka utraty danych. Warto również pamiętać, że CHECK TABLE dostarcza szczegółowych informacji o stanie tabeli, co jest szczególnie przydatne w kontekście monitorowania wydajności i stabilności bazy danych. Z tego względu to polecenie jest kluczowym narzędziem w arsenale każdego administratora MySQL.

Pytanie 32

Określ na podstawie diagramu, jaką liczebność należy zdefiniować przy związku pomiędzy encjami Podręcznik i Wydawnictwo zakładając, że dane dotyczące różnych podręczników odpowiadają jednemu wydawnictwu.

Ilustracja do pytania
A. 1-N (1 przy encji Podręcznik, N przy encji Wydawnictwo)
B. N-1 (N przy encji Podręcznik, 1 przy encji Wydawnictwo)
C. M-N (M przy encji Podręcznik, N przy encji Wydawnictwo)
D. 1-1 (1 przy encji Podręcznik, 1 przy encji Wydawnictwo)
Poprawnie wskazana krotność N–1 oznacza, że wiele podręczników może być powiązanych z jednym wydawnictwem, natomiast każdy pojedynczy podręcznik ma dokładnie jedno wydawnictwo. Dokładnie to wynika z treści: „dane dotyczące różnych podręczników odpowiadają jednemu wydawnictwu”. W notacji związków encji mówimy więc o relacji wiele‑do‑jednego z punktu widzenia encji Podręcznik. W praktycznym modelu relacyjnej bazy danych przekłada się to na klucz obcy w tabeli PODRĘCZNIK, który wskazuje na klucz główny (np. id_wydawnictwa) w tabeli WYDAWNICTWO. Dzięki temu nie powielamy danych o wydawnictwie przy każdym rekordzie, tylko przechowujemy je w jednym miejscu, zgodnie z zasadą normalizacji (co najmniej 2. i 3. postać normalna). Moim zdaniem to jest jedno z podstawowych i najczęściej wykorzystywanych powiązań: podobny schemat mamy przy relacji Produkt–Producent, Samochód–Marka, Student–Grupa itp. W takich przypadkach w tabeli „wiele” zawsze ląduje kolumna z kluczem obcym do tabeli „jeden”. Dodatkowo warto zauważyć, że gdybyśmy kiedyś chcieli pozwolić na zmianę nazwy wydawnictwa, to dzięki takiemu modelowi robimy to tylko w jednym wierszu tabeli WYDAWNICTWO, a wszystkie powiązane podręczniki automatycznie „widzą” zaktualizowaną wartość. To jest dokładnie ta dobra praktyka projektowania: minimalizacja redundancji i łatwiejsze utrzymanie spójności danych (integralność referencyjna, klucze obce z ON UPDATE/DELETE). W dobrze zaprojektowanych systemach bibliotecznych czy księgarni internetowych ta relacja N–1 między książką/podręcznikiem a wydawnictwem jest standardem branżowym i praktycznie normą w modelach ER.

Pytanie 33

W systemie baz danych MySQL komenda CREATE USER pozwala na

A. zmianę hasła dla już istniejącego użytkownika
B. stworzenie nowego użytkownika
C. zobaczenie danych o aktualnym użytkowniku
D. stworzenie użytkownika oraz przypisanie mu uprawnień do bazy
Polecenie CREATE USER w bazie danych MySQL jest kluczowym narzędziem do zarządzania użytkownikami w systemie zarządzania bazami danych. Jego podstawowym celem jest utworzenie nowego konta użytkownika, które pozwala na autoryzowany dostęp do różnych zasobów bazy danych. Użycie tego polecenia wiąże się z określeniem nazwy użytkownika oraz hasła, a także opcjonalnymi parametrami, takimi jak host, który określa, z jakiego adresu IP użytkownik może uzyskać dostęp do serwera. Przykładowe polecenie CREATE USER wygląda następująco: CREATE USER 'nazwa_użytkownika'@'host' IDENTIFIED BY 'hasło'; Po utworzeniu użytkownika można przypisać mu odpowiednie uprawnienia za pomocą polecenia GRANT, co pozwala na kontrolowanie, jakie operacje użytkownik może wykonywać na bazie danych. Dobrą praktyką jest regularne przeglądanie i aktualizacja uprawnień użytkowników, aby zapewnić bezpieczeństwo danych. Zgodnie z najlepszymi standardami bezpieczeństwa należy unikać nadawania zbyt szerokich uprawnień, co jest zgodne z zasadą najmniejszych uprawnień (principle of least privilege).

Pytanie 34

Jaką rolę pełni funkcja PHP o nazwie mysql_num_rows()?

A. numeruje rekordy w bazie danych
B. zwraca następny rekord z wynikami zapytania
C. zwraca rekord o numerze podanym w argumencie funkcji
D. zwraca ilość wierszy znajdujących się w rezultacie zapytania
Funkcja mysql_num_rows() jest fundamentalnym narzędziem w interakcji z bazami danych w PHP, służącym do zwrócenia liczby wierszy w zestawie wyników zapytania. W kontekście programowania, jej zastosowanie jest kluczowe, gdy chcemy ocenić, czy zapytanie zwróciło jakiekolwiek dane. Przykładowo, jeśli wykonujemy zapytanie do bazy danych w celu pobrania listy użytkowników i chcemy sprawdzić, czy tabela zawiera jakiekolwiek rekordy, użycie mysql_num_rows() pozwala na łatwą i efektywną weryfikację. W praktyce, często łączy się tę funkcję z innymi, takimi jak mysql_query() w celu uzyskania wyników zapytania, a następnie sprawdzenia ich liczby. W związku z tym, dobre praktyki sugerują, aby po każdym zapytaniu, które może zwrócić wiele wyników, stosować tę funkcję do walidacji wyniku. Należy pamiętać, że mysql_num_rows() działa tylko na wynikach zapytań SELECT i nie jest użyteczna w przypadku innych typów operacji na bazach danych.

Pytanie 35

Z ilustracji można odczytać, że użytkownik bazy danych posiada uprawnienia do:

Ilustracja do pytania
A. wyświetlania, dodawania i aktualizacji danych.
B. wyświetlania, aktualizacji i usuwania danych.
C. wyświetlania, dodawania i usuwania danych.
D. dodawania, aktualizacji i usuwania danych.
Na ilustracji pokazano panel nadawania uprawnień do operacji na danych w bazie. Każda z widocznych opcji odpowiada konkretnemu typowi polecenia SQL: SELECT to odczyt danych, INSERT to wstawianie nowych rekordów, UPDATE to modyfikacja istniejących wierszy, a DELETE to ich usuwanie. Typowym błędem jest mechaniczne kojarzenie „pracy na danych” tylko z dodawaniem i usuwaniem, bez zwrócenia uwagi na to, które pola są naprawdę zaznaczone. Na obrazku INSERT nie jest zaznaczony, więc użytkownik nie może dodawać nowych rekordów. Jeśli ktoś wybrał odpowiedź zawierającą „dodawanie danych”, to prawdopodobnie założył, że skoro użytkownik ma prawo zmieniać i kasować dane, to na pewno może też je dodawać. W praktyce w administracji bazą to tak nie działa – każde z tych uprawnień jest rozdzielone i może być nadawane osobno. Innym typowym nieporozumieniem jest mylenie UPDATE z INSERT. UPDATE nie tworzy nowych wierszy, tylko zmienia pola w rekordach, które już istnieją. To ważne rozróżnienie, bo w wielu systemach biznesowych pracownik ma prawo poprawić dane klienta (UPDATE), ale nie może dodawać nowych klientów (INSERT). Podobnie DELETE, czyli usuwanie danych, często jest ograniczane, bo kasowanie rekordów bywa nieodwracalne albo wymaga dodatkowych procedur. Jeśli odpowiedź sugeruje, że użytkownik może dodawać dane, to stoi to w sprzeczności z tym, co realnie widać na ilustracji – brak zaznaczenia przy INSERT jasno mówi, że wstawianie nowych rekordów jest zablokowane. Warto wyrabiać sobie nawyk dokładnego czytania takiego interfejsu: sprawdzić każdy checkbox i od razu przełożyć go na konkretne operacje SQL. W codziennej pracy z bazami danych poprawne rozumienie różnicy między SELECT, INSERT, UPDATE i DELETE jest absolutną podstawą bezpiecznego projektowania uprawnień i unikania przypadkowych modyfikacji danych.

Pytanie 36

Istnieje tabela o nazwie wycieczki z kolumnami: nazwa, cena oraz miejsca (reprezentujące liczbę dostępnych miejsc). Aby wyświetlić tylko nazwy wycieczek, których cena jest mniejsza od 2000 zł oraz mają co najmniej cztery wolne miejsca, należy użyć zapytania

A. SELECT nazwa FROM wycieczki WHERE cena < 2000 OR miejsca > 4
B. SELECT * FROM wycieczki WHERE cena < 2000 AND miejsca > 4
C. SELECT nazwa FROM wycieczki WHERE cena < 2000 AND miejsca > 3
D. SELECT * FROM wycieczki WHERE cena < 2000 OR miejsca > 3
Twoja odpowiedź jest jak najbardziej na miejscu, bo trafnie wskazuje, jakie warunki trzeba spełnić, żeby uzyskać odpowiednie nazwy wycieczek. W tym zapytaniu SQL 'SELECT nazwa FROM wycieczki WHERE cena < 2000 AND miejsca > 3' użyto operatora AND, co oznacza, że oba warunki muszą być spełnione naraz. Pierwszy mówi, że cena wycieczki musi być mniejsza niż 2000 zł, co pomaga znaleźć tańsze oferty. Drugi warunek wymaga, żeby było przynajmniej cztery wolne miejsca, co jest ważne, gdy ktoś myśli o podróżach z rodziną lub przyjaciółmi. Takie podejście jest zgodne z tym, co powinniśmy stosować, pisząc zapytania SQL, bo powinny być one precyzyjne i skuteczne. Warto też pamiętać o dobrym używaniu operatorów logicznych, żeby uzyskać oczekiwane rezultaty. Dlatego zrozumienie, jak te operatory działają oraz jak je zastosować w kontekście danych, jest kluczowe w pracy z bazami danych.

Pytanie 37

Mamy tabelę firm, która zawiera takie kolumny jak: nazwa, adres, NIP, obrot (obrót w ostatnim miesiącu), rozliczenie, status. Wykonanie zapytania SQL SELECT spowoduje wyświetlenie

SELECT nazwa, NIP FROM firmy WHERE obrot < 4000;
A. tylko nazwę i numer NIP przedsiębiorstw, które w poprzednim miesiącu miały obrót wynoszący przynajmniej 4000 zł
B. tylko nazwę i numer NIP przedsiębiorstw, które w ostatnim miesiącu miały obrót mniejszy niż 4000 zł
C. wszystkie dane o firmach, które w ostatnim miesiącu miały obrót na poziomie co najmniej 4000 zł
D. wszystkie informacje o firmach, które w minionym miesiącu osiągnęły obrót poniżej 4000 zł
W przypadku rozważania niewłaściwych odpowiedzi należy zwrócić uwagę na błędne interpretacje warunków kwerendy SQL i ich wpływ na wynik selekcji Niepoprawne odpowiedzi mogą wynikać z niepełnego zrozumienia struktury zapytań SQL i sposobu działania klauzul SELECT oraz WHERE Jednym z częstych błędów jest założenie że kwerenda zwraca wszystkie dane tabeli gdy faktycznie pobiera jedynie określone kolumny jak w przypadku wybierania tylko nazwy i NIPu Błąd ten może prowadzić do nadmiernego zużycia zasobów bazy danych oraz generować niepotrzebne informacje które utrudnią analizę Kolejny błąd to niewłaściwa interpretacja warunku WHERE który w tym przypadku filtruje rekordy według wartości w kolumnie obrot Zamiast skupić się na wyodrębnieniu tych z obrotem mniejszym niż 4000 można błędnie przyjąć że dotyczy to tylko tych z określoną minimalną wartością co skutkuje wyjściem poza zamierzone kryteria analityczne Wprowadzenie takich błędów może wynikać z braku dokładności w lekturze zapytań lub nieznajomości podstawowych zasad dotyczących pracy z bazami danych Efektywne wykorzystanie SQL wymaga zrozumienia nie tylko składni ale również kontekstu biznesowego w jakim dane operacje są wykonywane co pozwala na prawidłową interpretację wyników i ich praktyczne zastosowanie w różnych analiza

Pytanie 38

Rekordy do raportu mogą pochodzić z

A. innego raportu
B. tabeli
C. makropolecenia
D. zapytania INSERT INTO
Tabela stanowi fundamentalne źródło danych w kontekście raportowania, ponieważ przechowuje zorganizowane informacje w formie wierszy i kolumn. W praktyce, raporty często opierają się na danych zgromadzonych w tabelach, które są częścią bazy danych. Dzięki strukturze tabeli, możliwe jest łatwe filtrowanie, sortowanie i agregowanie danych, co jest kluczowe w procesie tworzenia raportów. Na przykład, w systemach CRM, dane o klientach są przechowywane w tabeli, co pozwala na wygenerowanie raportów dotyczących sprzedaży, aktywności klientów czy trendów rynkowych. W kontekście standardów branżowych, stosowanie tabel w relacyjnych bazach danych jest nie tylko powszechne, ale również zgodne z najlepszymi praktykami, które zalecają utrzymywanie danych w znormalizowanej formie, aby minimalizować redundancję i ułatwiać zarządzanie danymi. Dodatkowo, w przypadku tworzenia raportów, można korzystać z języka SQL, aby dynamicznie wydobywać dane z tabel, co zwiększa elastyczność i precyzję raportowania.

Pytanie 39

Która z funkcji SQL nie wymaga żadnych argumentów?

A. len
B. now
C. year
D. upper
Wybór funkcji, które pobierają argumenty, jak 'len', 'upper' i 'year', wskazuje na brak zrozumienia różnic pomiędzy funkcjami w SQL. Funkcje takie jak 'len', która zwraca długość ciągu znaków, wymagają przynajmniej jednego argumentu - ciągu, którego długość ma być obliczona. Na przykład, użycie 'len(nazwa) zwróci ilość znaków w nazwie', co jest kluczowe w scenariuszach wymagających walidacji danych. Podobnie, 'upper' przekształca wszelkie litery w podanym ciągu na wielkie litery, co również wymaga argumentu, czyli tekstu do przetworzenia. W przypadku 'year', funkcja ta wydobywa rok z daty, co również implikuje konieczność podania argumentu w postaci daty. Wybierając funkcje, które wymagają argumentów, można nieświadomie skomplikować proces, co jest sprzeczne z zasadami efektywnego pisania kodu. Błędem jest także mylenie funkcji bezargumentowych z tymi, które działają na przekazanych wartościach, co może prowadzić do nieefektywnego zarządzania danymi w bazach. Zrozumienie, jak i kiedy używać różnych typów funkcji, jest kluczowe w procesie projektowania i zarządzania bazami danych, co podkreśla znaczenie znajomości standardów SQL oraz najlepszych praktyk w programowaniu.

Pytanie 40

Którą kwerendę należy wykonać, aby zaktualizować wszystkim rekordom z tabeli pracownicy wartość w kolumnie plec na K, przyjmując na potrzeby zadania, że każde imię żeńskie kończy się literą a?

A. UPDATE pracownicy SET plec='K' WHERE imie='%a';
B. ALTER TABLE pracownicy SET plec='K' WHERE imie='%a';
C. UPDATE pracownicy SET plec='K' WHERE imie LIKE '%a';
D. ALTER TABLE pracownicy SET plec='K' WHERE imie LIKE '%a';
Poprawna jest kwerenda: UPDATE pracownicy SET plec='K' WHERE imie LIKE '%a';. Po pierwsze użyty jest właściwy typ polecenia SQL do modyfikacji danych w tabeli. Do zmiany wartości w istniejących rekordach zawsze używamy instrukcji UPDATE, a nie ALTER TABLE. ALTER TABLE służy do zmiany struktury tabeli (np. dodanie kolumny, zmiana typu danych, usunięcie kolumny), a nie do operowania na danych w wierszach. To jest taki podstawowy podział: DDL (Data Definition Language) – np. ALTER TABLE, CREATE, DROP – do definicji struktury; DML (Data Manipulation Language) – np. SELECT, INSERT, UPDATE, DELETE – do pracy na rekordach. W tym zadaniu ewidentnie potrzebna jest operacja DML. Druga ważna rzecz to warunek WHERE imie LIKE '%a'. Operator LIKE służy do porównywania tekstów z wykorzystaniem wzorców. Symbol % oznacza „dowolny ciąg znaków (również pusty)”, więc wzorzec '%a' oznacza: dowolny ciąg znaków zakończony literą „a”. Dokładnie o to chodzi w zadaniu: przyjmujemy założenie, że każde imię żeńskie kończy się na „a”, więc chcemy zaktualizować wszystkie rekordy, gdzie kolumna imie kończy się na „a”. Gdybyśmy chcieli szukać imion zaczynających się na „A”, używalibyśmy 'A%'. Moim zdaniem warto zapamiętać ten schemat, bo w praktyce bardzo często stosuje się LIKE do prostych filtrów tekstowych: wyszukiwanie użytkowników po fragmencie loginu, znajdowanie produktów po części nazwy, filtrowanie adresów e-mail po domenie itp. Przykład: UPDATE klienci SET status='VIP' WHERE nazwisko LIKE 'Nowak%'; – zaktualizuje wszystkich Nowaków. Albo: UPDATE produkty SET promocja=1 WHERE nazwa LIKE '%kabel%'; – zaznaczy jako promocyjne wszystkie produkty, których nazwa zawiera słowo „kabel”. W dobrych praktykach zaleca się uważać z aktualizacjami bez WHERE, bo wtedy zmieniamy wszystkie rekordy w tabeli. Tutaj warunek LIKE '%a' pełni rolę bezpiecznego filtra. W wielu systemach bazodanowych warto też pamiętać, że domyślnie porównania tekstowe mogą być niewrażliwe na wielkość liter (collation), więc 'a' i 'A' mogą być traktowane tak samo, ale to już zależy od konfiguracji bazy. W kontekście egzaminów zawodowych i pracy z SQL-em takie zadanie to klasyk – łączy poprawne użycie UPDATE z właściwym użyciem LIKE i symbolu % jako wieloznakowego wildcarda.