Loading...
vancho avatar vancho 430 Точки

JAVA DB Fundametals: SAMPLE EXAM 11.10.2016 - Problems

Защо в judge не минава горната заявка, при която изхода е един и същ с долната заявка, която е на лектора. А трябва да гъдаем по какъв начин иска judge-a да му я подадеш! П.с. това не е единичен случай от SAMPLE EXAM-а.

SELECT c.customer_id,
              c.first_name,
              c.last_name,
              c.gender,
              ci.city_name
  FROM customers AS c
 INNER JOIN cities AS ci
    ON c.city_id = ci.city_id
 WHERE (c.last_name LIKE 'Bu%'
     OR c.first_name LIKE '%a')
   AND LENGTH(ci.city_name) >= 8;

 

SELECT c.customer_id,
               c.first_name,
               c.last_name,
               c.gender,
               ci.city_name
  FROM customers AS c
 INNER JOIN cities AS ci
     ON c.city_id = ci.city_id
 WHERE (LEFT(c.last_name, 2) = 'Bu'
     OR RIGHT(c.first_name, 1) = 'a')
    AND LENGTH(ci.city_name) > 7;

Тагове:
1
Module: Java DB 12/10/2016 15:59:16
RoYaL avatar RoYaL Trainer 6849 Точки

Може ли да кажеш и коя задача е (т.е. да видим условието). Защото аз на пръв поглед виждам огромна разлика между двете заявки. В едната се казва "Нещо булево ИЛИ нещо булево И нещо булево" а в другата "(Нещо булево ИЛИ нещо булево) И нещо булево". Изглежда ми като да не е въпрос на догадки, а по-скоро на логическа проверка.

0
12/10/2016 16:03:29
vancho avatar vancho 430 Точки

Sample Exam Bank -> Section 3. Querying -> 3. Customer City

LINK

1
12/10/2016 16:06:43
RoYaL avatar RoYaL Trainer 6849 Точки

Ясно, да. Ами така е по условие:

" all customers whose last name starts with ‘Bu’ or first name ends with ‘a’ ":

- Т.е. клиентите трябва да отговарят на едно от двете условия. Когато някой клиент отговаря на едно от двете условия, чак тогава трябва да отговаря И на трето:

" for those customers the length of the city name should at least 8 letters "

Т.е. логиката е

(започва с 'Bu' или завършва на 'a') И /ако първото в скобите е дало true/ градът му е с поне 8 букви

Ако ти няма скобите, лявата асоциативност ще даде:

започва с 'Bu' ИЛИ завършва на 'a' И градът му е с поне 8 букви

Съответно ако някой започва с 'Bu' без значение дали дясната част е невярна, то Вярно ИЛИ Невярно ще даде Вярно ;) Та query-то без скобите дава един допълнителен резултат - "Annie Burns от град Bromma" - както може да се видим, градът не е с 8 букви.

0
12/10/2016 16:13:49
vancho avatar vancho 430 Точки

Ами това не е ли същото:

WHERE (c.last_name LIKE 'Bu%'
     OR c.first_name LIKE '%a')
   AND LENGTH(ci.city_name) >= 8;

1
RoYaL avatar RoYaL Trainer 6849 Точки

Да, така изглежда същото (оригинално в поста ги няма скобите). И така ли не работи?

0
vancho avatar vancho 430 Точки

Със и без скобите дава два резултата, които са едни и същи. Само не разбрах

ТОВА:

 WHERE (c.last_name LIKE 'Bu%'
     OR c.first_name LIKE '%a')
   AND LENGTH(ci.city_name) >= 8;

И ТОВА:

 WHERE (LEFT(c.last_name, 2) = 'Bu'
     OR RIGHT(c.first_name, 1) = 'a')
    AND LENGTH(ci.city_name) > 7;

 

НЕ Е ЛИ ЕДНО И СЪЩО? Т.е. LIKE не е като LEFT или RIGHT?

2
12/10/2016 16:22:58
vancho avatar vancho 430 Точки

Не, не работи!

1
RoYaL avatar RoYaL Trainer 6849 Точки

Има разлика дали ще ги има скобите или не - обяснението е по-горе.

Последното нещо, което си попитал обаче си прав - еднакви са нещата. Ще разгледам защо в judge дават различни резултати. Т.е. знам защо дават различни - няма ORDER BY (дори и по условие) и съответно DB Engine-а сортира двата резултсета по различен начин заради функцията LIKE и RIGHT/LEFT. Защо обаче не се вижда като се тества в HieidSQL това нямам идея. Ще допроуча нещата и ще пиша отново в темата.

За редовния изпит ще поставим ORDER BY в такива ситуации.

2
vancho avatar vancho 430 Точки

Ок, благодаря. Не ползвам Heidi, ако е от значение, а DBeaver има повече функционалности.

2
RoYaL avatar RoYaL Trainer 6849 Точки

Проверих го.

Ще въведем корекция в условието, да има ORDER BY, защото наистина това е проблемът. DB Engine-а връща произволни резултати при различните функции, когато не напишеш ORDER BY. Малко по-късно ще се коригира условието и съответно и теста (в момента тестът е невъзможен за уцелване, наистина, на първо място излиза резултат с ID=39, после ID=16 а после ID=28...)

2
vancho avatar vancho 430 Точки

yes

2
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.