Sorğularla bağlı problem
Məsələni həll etmək üçün siz bəzi sorğuları icra edə bilən sadələşdirilmiş bir SQL serveri yaratmalısınız. Giriş faylı sorğulardan ibarət olacaq və bu sorğular aşağıdakı üç növdən birinə aid olacaq: CREATE TABLE, INSERT, SELECT.
Sorğuların formatı belədir:
- CREATE TABLE <cədvəl adı> (<sahə adlarının siyahısı>); - INSERT INTO <cədvəl adı> VALUES (<sabitlər siyahısı>); - SELECT <ixtisaslaşdırılmış sahə adlarının siyahısı> FROM <cədvəllərin siyahısı> WHERE <məntiqi ifadə>;
Qeyd edək ki, sorğuların formatı dəqiq bu şəkildə olacaq (məsələn, SELECT sorğusunda WHERE hissəsi mütləq olmalıdır). Dilin açar sözləri böyük-kiçik hərf fərqinə həssas deyil.
Cədvəl və sahə adları latın əlifbasının kiçik hərflərindən ibarət boş olmayan ardıcıllıqlardır. Sabitlər isə tək dırnaq içində yazılan sətir sabitləridir, məsələn: 'constant'. Sabitlər, cədvəl və sahə adları kiçik latın hərflərindən ibarətdir. Cədvəl, sütun adları və sabit dəyərlər 30 simvoldan uzun olmayacaq. Heç bir cədvəl və ya sütun adı dilin açar sözlərindən biri ilə eyni olmayacaq: CREATE, TABLE, INSERT, INTO, VALUES, SELECT, FROM, WHERE.
Yuxarıda göstərilən yazıda siyahı, elementlərin vergüllə ayrıldığı bir siyahıdır (giriş faylının nümunəsinə baxın).
İxtisaslaşdırılmış sahə adı <cədvəl adı>.<cədvəl sahəsinin adı> şəklində yazılır.
Məntiqi ifadə bir və ya bir neçə müqayisədən (bərabərlik yoxlaması) ibarətdir və cədvəllərdən seçilən sahələr ixtisaslaşdırılmış sahə adları ilə verilir, AND və ya OR məntiqi əməliyyat işarələri ilə ayrılır. Məntiqi ifadəni hesablamaq üçün bu əməliyyatların prioritetini nəzərə almaq lazımdır (AND daha yüksək prioritetə malikdir). Giriş məlumatlarının formatını izah etmək üçün giriş faylının nümunəsinə baxın.
Sizin vəzifəniz hər bir SELECT tipli sorğu üçün nəticə cədvəlini çıxarmaqdır, belə ki, onun sətirləri leksikoqrafik ardıcıllıqla sıralanmalıdır. Bir sətirin belə bir cədvəldə leksikoqrafik olaraq digər sətirdən kiçik olduğunu deyəcəyik, əgər bu sətirlərdəki ilk bir neçə sütunda eyni dəyərlər varsa və növbəti sütunda birinci sətirdəki dəyər ikinci sətirdəki dəyərdən kiçikdirsə (sətirlərin leksikoqrafik müqayisəsi nəzərdə tutulur).
Bütün sorğuların düzgün olduğu, yəni yuxarıda təsvir olunan qaydalara uyğun olduğu, həmçinin sorğularda istifadə olunan bütün cədvəl, sahə adları və ixtisaslaşdırılmış sahə adlarının istifadə olunacaqları sorğudan əvvəl CREATE TABLE tipli sorğu ilə müəyyən ediləcəyi təmin edilir. Eyni adla cədvəllər yaradılmayacaq. Hər bir cədvəl ən azı bir sahə ehtiva edir.
Giriş verilənləri
Giriş faylı şərtdə təsvir olunan sadələşdirilmiş SQL dilinin sorğular ardıcıllığını ehtiva edəcək. Hər bir sorğu ayrı bir sətirdə olacaq və hər bir sətir bir sorğu ehtiva edəcək. Heç bir cədvələ INSERT əmri ilə 20 sətirdən çox əlavə edilməyəcək. Hər bir SELECT tipli sorğu üçdən çox cədvələ müraciət etməyəcək və belə bir sorğu daxilində cədvəllərin siyahısında eyni cədvəl iki dəfə rast gəlinməyəcək.
Çıxış verilənləri
Hər bir SELECT tipli sorğu üçün nəticə cədvəlini çıxarmaq lazımdır. Nəticə cədvəlinin hər bir sətri çıxış faylının ayrı bir sətrində yerləşməli və SELECT sorğusunun ilk hissəsində sadalanan sahə dəyərlərindən ibarət olmalıdır, bir boşluqla ayrılmış. Hər bir cədvəldən sonra üç simvol '-' (yəni '—') ehtiva edən bir sətir çıxarılmalıdır.