Изучение SQL
Здравствуйте многоуважаемые обитатели реактора.Помогите с направлением как изучить SQL.
Сам являюсь офисным работником, из инструментов неплохо овладел Excel - макросы помогают в автоматизации многочисленных отчетов. Освободившегося времени хватает читать все новые посты и комментарии на реакторе. Но хочу расти дальше. Знаю, что есть хранилище данных, и многие тянут инфу из него напрямую посредством SQL. Имеется время и желание изучить эту тему. Но ролики на ютуб (во всяком случае те, что нашел) изначально дают какую-то муть. Подскажите какую-нибудь книгу/ресурс/курс, не обязательно бесплатные для начального, а потом и продвинутого освоения предмета. Уверен, что это поможет освободить еще больше времени для дальнейшей деградации и тотального чтения еще и бездны.
Купон от 2-D прилагается.
Еще на тему
на втором нужна регистрация
Впринципе, за пару дней сам понял что да как
для начала должно хватить
Когда на работу устраивался их и посоветовали
После решения сложных задач еще советую форум читать, чтобы смотреть как другие решали.
А если серьезно, то читай сначала про реляционные базы в целом. Что такое таблицы, транзакции и вот это вот все. А то изучать язык запросов к базам не зная что такое база будет опытом на любителя. Углубляться в конкретные СУБД вначале смысла не много, но желательно все таки выбрать конкретную, так как sql для них будет не совсем одинаковый и есть шанс окончательно запутаться. выбери Oracle или Postgres и ищи уроки по ним.
Нормализация нужна для OLTP систем, где важно оптимальное хранение данные, а также быстрые CRUD операции, чтобы приложение не тормозило (ну и плюс минимальный локинг строк и таблиц)
А если мы говорим про репортинговые системы, то там денормализация это абсолютно нормальное явление, потому как она ускоряет считывание и анализ данных - запрос обращающийся к одной таблице практически всегда быстрее аналогичного запроса обращающегося к нескольким таблицам и делаюшего джоин.
Если человек хочет работать с хранилищами данных, то нормализация там как раз-таки не особо нужна, хотя понимать что это такое тоже важно.
SQL - это не для офисных сотрудников. Никакой нормальный админ не даст тебе забирать инфу прямиком из базы.
Несмотря на кажущуюся общность с Exсel (шо там шо там таблицы с данными), SQL - это совершенно другая плоскость, напрямую относящаяся к разработке ПО.
Больше того, я так понял что ты планируешь что-то рассчитывать через SQL. Это реально плохая идея, потому как сервера баз данных рассчитаны на хранение информации, а не её обработку.
Я нашим манагерам например в офисе сделал локальный мускуль куда каждое утро дамп накатывается с аналитическими данными и они их гоняют как им вздумается. Даже если что-то навернут то ничего страшного не случится.
Вместе с SQL нужно учить еще, например, Питон.
Да, такая база специально делается программистами для доступа к ней только из скрипта.
Посмотрев на нее в каком-нибудь DBeaver ничего толком не поймешь, не для этого писалась. При этом очень эффективная, все для консистентности.
Кроме того, SQL Server Analysis Services занимается как раз обработкой, чтобы на запросы репортов "сколько пылесосов продали магазины сети в прошлом квартале по каждому из регионов" сервак не считал итоги, а выдавал готовые результаты из OLAP куба.
насчет SQL и разработки, вспомнилась шутка про "паралимпиаду по программированию". Я много лет работал MSSQL DBA в аутсорсе, писал скрипты, до того писал на Паскале и VBA, но нихуя не мог понять классы и объекты и ООП в целом, засыпал на первых же страницах на фразе "абстракция, инкапсуляция, наследование, полиморфизм".
2) Рекомендую накатить DBeaver CE, мне он больше всего нравится из клиентов sql https://dbeaver.io/download/
3) Официальная дока https://dev.mysql.com/doc/refman/8.0/en/tutorial.html
После того как установил рекомендую начать с простых селектов из бд, просто выбрать записи из одной таблицы( select * from sample_table;). Поиграйся с лимитами выборки и сортировкой (limit 100, offset 200, order by id asc). Потом дополни это дело фильтрами(where amount > 1000)
Дальше дополни это дело джоинами, присоединением выборки из одной таблицы к другой по ключам (join another_table on sample_table.id = another_table.sample_table_id)
После этого учи агрегирующие функции и группировки данных ( sum(price), count(id) )
Последнее из обязательного это подзапросы, Например выбрать связанные записи из нескольких таблиц, результат. Например select * from (select id, name from sample_table) as data.
По курсам хз, в основном дают вещи, которые условным манагерам не нужны, а если тебе нужно просто данные проанализировать не дергая программистов то ты быстрее сам всему научишься.
https://rutracker.org/forum/viewtopic.php?t=149614
https://rutracker.org/forum/viewtopic.php?t=2113895
https://rutracker.org/forum/viewtopic.php?t=5286777
Когда-то давно на MS Access некоторые фирмы себе делали что-то вроде бух.учёта или складского учёта.
Интерактивный туториал с нарастающей сложностью, с SELECT * до множественных JOIN с несколькими вложениями с ориентировкой по схеме.
Если лень морочиться и хочется просто попробовать, то возьми какой-нибудь фиддлер, например http://sqlfiddle.com/
Там наверху кнопочка есть "View sample fiddle", она тебе пример подгрузит. Слева формируется схема, справа пишешь запросы, вывод данных внизу
Половины книги хватит.
Чистейший синтаксис без привязок к какой-либо БД. Куча примеров, всё доступно.
Ребята выше как будто SQL изучать начали уже зная SQl, грузите хернёй человека, схемами, реляционностью, книгами, все лекции на английском, вы ебанулись ?
Ему то надо SELECT * FROM, INSERT да ORDER BY и другие простые вещи, основы нужны, а не полный курс администратора баз данных.
Ниже кинул ссылки на лекции и БД.
Из минусов придётся развернуть у себя SQL Server, SSMS и раскатать бэкап учебной БД в нём, но это тоже опыт.
Возьми лекции отсюда, тут лекции по которым я когда то учился, для начального уровня тебе sql1_day1 хватит, а дальше уже по необходимости: https://drive.google.com/drive/folders/19_Kk8XuFL6esI_FnUmDYy-oMerJH2wYo?usp=sharing
Тут скачаешь учебную БД и инструкции по "установке", версию SSMS и БД лучше взять как в лекции, но можешь взять и всё новое, никто не осудит, а язык запросов в SQL не помню что бы менялся: https://docs.microsoft.com/ru-ru/sql/samples/adventureworks-install-configure?view=sql-server-ver15&tabs=ssms
Развернёшь и всё, можно начинать учиться.
https://sql-academy.org/ru/guide тут прям основы основы. И небольшое количество задач.
https://schoolsw3.com/sql/sql_select_into.php здесь уже большее обширно с бОльшим количеством задач.
Ну и учебник: https://careers.epam.by/content/dam/epam/by/book_epam_by/database_book.pdf
"Работа с MYSQL, MS SQL SERVER и ORACLE в примерах. Как видно из названия тут сравнивается три вида баз. Смотришь примеры только на MYSQL остальное игноришь. НО тут просто сотни примеров и задачек ( часть с решением). Учебник сам по себе очень мощный в плане практики но и сложный. Начиная со второй трети уже мозг начинает кипеть.
Я бы тебе посоветовал попробовать PowerQuery прям в Экселе. Оно может не хуже, а то и лучше, обрабатывать твои эксельные данные. Понравится, освоишься - переходи на Power BI для обработки и визуализации. Освоишься, понравится - вот тогда и строй подключения к серверам через SQL и ещё как, и тогда будешь тру-аналитик-паралитик
При этом самих SQL дофигища вариантов - и майкрософтовский, и постгрес, и оракл, и вертика, и майскл и все они по-разному живут, разному ворочаются и возможности разные, поэтому лучше именно основы понять и простить, а остальное тебе только практика подарит
Если говорить про локальную базу, которую можно поставить для упражнения, то я ставил себе много чего и рекомендую MariaDB. Ставится минут за 5, в отличие от Ораклов и МС Сиквел Серверов и не пожирает память.
Если не хочешь засирать комп, а оперативки много - можно скачать Oracle DEV VM. На виртуалке сразу линукс + оракловая база, они очень часто требуются в паре на должностях, связанных с ДБ.
Лекций накидали выше кучу, пробуй что больше зайдёт. По своему опыту лучше непросто чтиво или лекции, а именно упражнения.
Еще советую начать свой локальный проект дома. Я так делал когда-то учет расходов, их категоризацию и прочее. Знакомый делал учет музыки и фильмов (когда это все еще хранилось локально). В общем, на что хватит фантазии.
Сначала ты должен разобраться что из себя представляют SELECT и INSERT.
Переходишь к ORDER BY и понимаешь, что эта операция жрёт дофига при работе с большим количеством записей, и переходишь к ознакомлению с фильтрации (DISTINCT/WHERE/OR/AND/BETWEEN/LIKE/IN).
На этом этапе у тебя появляется уже несколько рабочих таблиц и пришло время к знакомству с JOIN (все его вариации, в особенности CROSS JOIN и SELF JOIN).
Теперь твои запросы превращаются в сложно читабельную лапшу и желательно ознакомиться с CTE (common table expression).
На этом этапе забиваешь на рекурсивные запросы. Рано ещё.
Пришло время подзапросов и желательно знать/уметь использовать HAVING/GROUP BY/UNION/UNION ALL/EXISTS/.
Встретил в мануалах PIVOT? Шикарно, но теперь повтори PIVOT но только с использованием SUM/MIN/MAX.
Вот теперь можешь попробовать рекурсивные запросы.
Потому советую параллельно с обучением попробовать базовые вещи в Airtable. Там есть бесплатный ограниченный пакет, а дальше уже пакеты с продвинутыми возможностями. По виду сначала кажется что это как Google Sheets, только хуже, но с красивостями. Однако суть в том, что там, в отличие от рядов и столцов из ячеек, данные хранятся именно так, как в реляционной базе - таблица это группа записей, состоящих из полей определенного типа. Связи между таблицами там создаются визуальными способами, выгребание сложных запросов осуществляется довольно просто. Сортировка, группировка, сложные виды фильтров - все это очень просто и интуитивно понятно визуально. Проработав перед этим несколько лет MSSQL DBA, попутно сдав 4 экзамена в Microsoft на сертификат, я только уже в другой конторе, администрируя Airtable понял зачем использовать VIEWS в SQL
Теперь я не использую 70-80% знаний DBA, нет высоконагруженности, не нужно заниматься серверной частью и base maintenance, зато начал пописывать на js, может еще в девелоперы свичнусь на старости лет )) по деньгам оно даже поменьше будет, учитывая разницу уровней, но удовольствие от работы vs повинность - для меня этот фактор давно перевесил финансовый.