Пишем на SQL
1.93K subscribers
38 photos
6 videos
7 files
97 links
Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql
Download Telegram
Имеется таблица CODES из одного столбца:

CODE -------- 0 10 30 50 Какой результат вернёт запрос? SELECT MIN(CODE)   FROM CODES WHERE CODE BETWEEN 15 AND 25
Anonymous Quiz
9%
0
5%
10
18%
15
68%
NULL
👍3
Здравствуйте друзья!
Предлагаю ещё одну небольшую задачу по SQL.

Пусть есть таблица PIN_CODES, имеющая столбец CODE_INT. В таблице всего 4 строчки со следующими целыми значениями в этом столбце: 1, 2, 3 и 4.
Что будет получено в результате выполнения нижеприведённого запроса?
SELECT MIN(CODE_INT), MAX(CODE_INT) FROM PIN_CODES
Anonymous Quiz
0%
Получим значения 1 и 1
4%
Получим значения NULL и NULL
83%
Получим значения 1 и 4
14%
Будет ошибка выполнения запроса
👍4😁2
Здравствуйте, друзья!
Начнём день с разминки по SQL.
Выполнение какой из команд, приведённых ниже, удалит все строки из таблицы Persons, то есть оставит её вообще без строк?
Anonymous Quiz
14%
DELETE FROM Persons WHERE NAME <> NULL
1%
UPDATE Persons SET NAME = NULL
15%
DROP TABLE Persons
69%
TRUNCATE TABLE Persons
🔥5👍2
Очень интересный получился в этот раз разброс голосов за варианты ответов. Чуть позже я объясню правильный вариант. А пока подождём решения остальных 🙂
Подводим итоги сегодняшнего голосования 🤗
Больше половины ответили правильно! 💪
Из перечисленных выше команд SQL только последней удастся очистить таблицу Persons от всех строк в ней.

Команда TRUNCATE TABLE Persons разом опустошит таблицу, она останется совсем без записей.

Команда DELETE написана так, что согласно условию WHERE не найдётся ни одной подходящей записи для удаления. Ни для одной строки не выполнится условие, указанное во WHERE. Результат сравнения с NULL всегда будет отрицательным. Для проверки на NULL можно использовать только IS и IS NOT.

Команда UPDATE не удаляет строки из таблицы. В нашем прмере она заменяет существующее значение в столбце NAME на NULL для всех строк (WHERE-то нет).

А команда DROP вообще удаляет саму таблицу из базы данных😌 вместе с данными конечно. И селектить больше будет неоткуда. Таблицы больше не будет в базе данных🙈

Надеюсь, во всем разобрались и всё теперь точно понятно! 🙂

....

Если Вы изучаете еще только первые уроки нашего курса, не знали некоторых команд SQL и ответили в этом вопросе наугад, то этим вопросом я приоткрыл завесу будущих тем 🙂
🔥3
Здравствуйте, друзья!

Предлагаю решить ещё одну SQL задачу. Каким из этих запросов из таблицы Persons точно бы выбрался сотрудник со значением "Петров Иван Георгиевич" в поле NAME? Для Гуру: в СУБД настроен регистрозависимый поиск.
Anonymous Quiz
18%
SELECT * FROM Persons WHERE UPPER(NAME) LIKE '%Петр%'
36%
SELECT * FROM Persons WHERE NAME LIKE '%Петр__%'
46%
SELECT * FROM Persons WHERE NAME = '%Петров%'
👍1
Завтра дам объяснение правильного ответа.

Только опубликовал викторину, а уже правильный ответ есть!
Спасибо за активное участие! 🙂👍
Самый первый ответ, который я получил от вас по этой задаче был правильный💪
Теперь эта задача лидирует по количеству процентов неправильных ответов😱.
Наверное сказывается конец рабочей недели🙂. Или, на первый взгляд, лёгкость этой задачи😉
Правильный ответ - второй.

Команда:

SELECT * FROM Persons WHERE NAME LIKE '%Петр__%'

выберет строки из таблицы Persons, у которых в столбце NAME значение, похожее на указанный фрагмент: есть фраза "Петр", спереди которой могут быть ещё символы и сзади которой должны быть минимум ещё два символа или больше. Одно нижнее подчеркивание в маске поиска оператора LIKE обозначает один обязательный символ. Маска поиска '%Петр__%' после слова "Петр" имеет два нижних подчеркивания, значит что точно будут отобраны такие строки из таблицы Persons, в которых в столбце NAME есть фраза Петр и после неё есть ещё минимум два символа и после (и перед) возможен(!) ещё текст неопределенной длины - на это указывают знаки процентов.
Команда:

SELECT * FROM Persons WHERE UPPER(NAME) LIKE '%Петр%'

не выберет вообще никого. Так как до сравнения значения из столбца NAME будут преобразованы в верхний регистр (все буквы до сравнения с маской поиска станут большими, то есть ЗАГЛАВНЫМИ), а в самой маске поиска есть символы в нижнем регистре.

Повторю другими словами: ни для какой строки преобразованное к верхнему регистру значение столбца NAME уже не будет подобно маске поиска в которой есть символы в нижнем регистре.
И последняя команда:

SELECT * FROM Persons WHERE NAME = '%Петров%'

выберет только строки, у которых в столбце NAME значение ТОЧНО РАВНОЕ "%Петров%" (в ячейке вписано процент, Петров, процент).

В последней команде нет оператора LIKE 😱
Поиск будет осуществлён не по маске, а по конкретному значению в столбце.
Для сравнения используется символ равенства, а не LIKE.
В деловой и офисной среде обычный разговор или электронное сообщение стало принято заканчивать фразой-пожеланием "Хорошего дня!"․ С недавних пор такую универсальную, всегда подходящую фразу, я стал осторожнее и реже использовать в своём тексте․ Буквально обдумываю теперь каждый раз необходимость её написания․ Виной этому анекдот, который я прочёл в одной из книг Ицхака Пинтосевича:

В Израиле принято на день рождения желать имениннику дожить до ста лет․
И вот очередной день рождения старого еврея․ Гости его поздравляют․․․ 
— Соломон Маркович, здоровья Вам и долгих лет, чтобы Вы дожили до 100 лет! 
— Таки мне сегодня 100! 
— Ну, тогда хорошего Вам дня!

Вобщем, пишу теперь эту фразу только тогда, когда действительно делаю напутствие хорошего дня․

Хорошего дня, уважаемый читатель и отличной рабочей и/или учебной недели!
https://dzen.ru/media/iliahohlov/kak-podniat-sebe-nastroenie-prochitav-obychnoe-elektronnoe-pismo-631ee126f45a45024c0e87e3
😁7
Какая из этих команд, не является командой DML?
Anonymous Quiz
3%
UPDATE
2%
DELETE
68%
TRUNCATE
26%
SELECT
Большинство ответили правильно:
TRUNCATE не является командой DML.

Вот небольшое видео про категории (типы) команд языка SQL:

https://youtu.be/stObQ6ruG40

Если совсем коротко, то:

DML - команды манипуляции данными: чтение, добавление, редактирование и удаление;

DDL - определение данных. Команды для работы с объектами базы данных, с таблицами, например. Прежде, чем данные из какой-то таблицы выбирать или в какую-то таблицу класть, надо сначала создать саму таблицу. Для этого и нужны команды DDL. Создание таблицы, добавление в нее столбцов, удаление таблицы и т.д. Это все команды DDL.

Есть ещё команды работы назначения или снятия привилегий и команды управления транзакциями.
Несмотря на то, что команда TRUNCATE очищает данные из таблицы (удаляет строки), она не является DML. Так как она, чтобы очистить строки из таблицы, удаляет саму таблицу (её временно не будет в базе данных) и потом сразу же создаёт такую же пустую.
Кажется, что раз она очищает строки (то есть удаляет данные из таблицы), то эта команда должна быть командой DML, но она DDL, так как она добивается очистки таблицы путём уничтожения таблицы и созданием её заново! Конечно же она применяется не часто, но иногда бывает нужна.

Обо всем этом мы узнаем на нашем курсе на одном из последних уроков🙂👍
Напишите, пожалуйста, какие моменты тяжелее всего даются в понимании на курсе? Или, может быть, есть свои вопросы по SQL и базам данных, которые Вы бы хотели разобрать.
Напишите, пожалуйста, на почту info@prime-soft.biz.

Отвечу на все присланные вопросы в ближайшем прямом эфире!
Напишите, пожалуйста, также, когда бы Вам было удобнее, чтобы я его провел (день недели и время).
Я выберу время, за которое будет большинство голосов. Буду рад вашему посещению эфира!
Если не получится придти на эфир, то сможете посмотреть его в записи в удобное время😌