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;
Sample Exam Bank -> Section 3. Querying -> 3. Customer City
LINK:
Ясно, да. Ами така е по условие:
" 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 букви.
Ами това не е ли същото:
WHERE (c.last_name LIKE 'Bu%'
OR c.first_name LIKE '%a')
AND LENGTH(ci.city_name) >= 8;