Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Прошу помощи с запросом, уважаемые гуру.  [new]
ValentinDadko
Member

Откуда:
Сообщений: 3
Доброго времени суток. Я только на начале своего пути и на собеседовании мне попалось пару задач, к которым я составлял запросы, реурутеры объяснили, что запросы составлены некорректно, в чём я ошибся? Каким образом должны выглядеть запросы для этих задач!? [img=]

К сообщению приложен файл. Размер - 95Kb
1 ноя 20, 01:29    [22224219]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом, уважаемые гуру.  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1489
ValentinDadko,

А где запросы-то? Или как мы должны оценить «в чем я ошибся»?
1 ноя 20, 05:58    [22224233]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом, уважаемые гуру.  [new]
ValentinDadko
Member

Откуда:
Сообщений: 3
SELECT * FROM Department
WHERE Name = LIKE 'С%'
OR Salary > 30000;
1 ноя 20, 13:38    [22224306]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом, уважаемые гуру.  [new]
ValentinDadko
Member

Откуда:
Сообщений: 3
z

Сообщение было отредактировано: 1 ноя 20, 13:34
1 ноя 20, 13:38    [22224307]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом, уважаемые гуру.  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1489
ValentinDadko
SELECT * FROM Department
WHERE Name = LIKE 'С%'
OR Salary > 30000
;

Странное у вас "начинается на И". Ну и перед like знак "=" - лишний.
1 ноя 20, 14:41    [22224345]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом, уважаемые гуру.  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1091
ValentinDadko
SELECT * FROM Department
WHERE Name = LIKE 'С%'
OR Salary > 30000;
1. = LIKE (знак равно тут не нужен), т.е. ваш запрос просто не исполнится. Это центральная причина. Язык программирования - это очень усеченный человеческий язык. Фактически, вы написали "имя равно подобно С" - билиберда какая-то. А если без "равно", то читаем "имя подобно С" - уже понятно и логично.

2. В условии задачи написано "имя начинается на И", а в решении фигурирует "С", т.е. претендент не различает буквы алфавита. :-)

3. Еще, возможно, имелось в виду, что ваш запрос выведет (если исправить ошибку и в качестве условия всё-таки задать корректное "И") не только "Иван, Инна" и т.д., но и "игорь, ираклий, илона" (если они, допустим, есть в таблице), что в данном примере не так важно, но в каком-то частном случае может быть неприемлемо, т.к. результат выполнения LIKE в общем случае не зависит от регистра (если только обратное не указано в параметрах таблицы). Чтобы принудить MySQL работать с регистрами, надо применять регулярные выражения (их вообще строго рекомендуется освоить, особенно новичкам, это пригодится везде - от вэба до десктопа, независимо от языка и фреймворка).
Например, так:
SELECT * FROM Department
WHERE Name REGEXP BINARY '^И'
В этом случае "игорь, ираклий, илона" выведены не будут, а "Иван, Инна" - будут.
SELECT * FROM Department
WHERE Name REGEXP BINARY '^иИ'
А в этом случае будут выведены "Иван, Инна, игорь, ираклий, илона".

4. Плюс мне кажется, что они имели в виду, что имя = имя + фамилия, т.е. под именем имеется в виду полное имя человека (на это намекает содержимое таблицы). Таким образом, необходимо сравнивать не только Name, но и SureName. Чтобы избегать таких неоднозначных ситуаций, лучше не стесняться задавать уточняющие вопросы.

5. Но так как вы запоролись на п.1, остальные нюансы уже не так важны. :-)

P.S. Используйте кнопку SRC, чтобы оформить код с подсветкой синтаксиса - это облегчает восприятие и радует глаз.

Сообщение было отредактировано: 1 ноя 20, 15:19
1 ноя 20, 15:22    [22224374]     Ответить | Цитировать Сообщить модератору
 Re: Прошу помощи с запросом, уважаемые гуру.  [new]
Gluck99
Member

Откуда: Оттуда
Сообщений: 1091
del

Сообщение было отредактировано: 1 ноя 20, 15:19
1 ноя 20, 15:23    [22224375]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить