Прежде всего, получить полное понимание объединений. Не только внутренние и левые соединения тоже. Знайте, что делает перекрестное соединение и полное внешнее соединение. Знайте обстоятельства, которые заставили бы вас выбрать определенный тип объединения. Следует понимать, что они не являются взаимозаменяемыми, и тот запрос, который использует левое соединение, может возвращать результаты, отличные от запроса, который использует внутреннее соединение. (Можно было бы подумать, что это будет очевидно, но я прочитал слишком много вопросов, где люди при описании своей проблемы, несколько случайным образом пробуют разные объединения.)
Дальше реально разбираются агрегаты и как они работают. Mysql позволит вам не делать групповой обход стандартным способом. Но имейте дисциплину, чтобы полностью определить группу по предложению должным образом. Это поможет вам понять, что вы делаете, и сделает ваши знания более легко переносимыми в другие базы данных.
Узнайте, что делает заявление случая.
При выполнении сложных запросов учитесь работать кусками. Убедитесь в том, что у вас есть ожидаемые результаты. Например, предположим, что вам нужно написать отчетный запрос по заказам, которые были возвращены за последние 3 месяца, и причину возврата, а также контактную информацию для клиента. Первый шаг - вернуть заказы за последние три месяца. Как только вы узнаете, что у вас есть это твердое тело, вы можете добавить информацию о причине возврата. Получив это твердое тело, вы можете добавить клиента, который его вернул. Получив это твердое тело, добавьте контактную информацию для этого человека. На каждом этапе проверяйте свои результаты и смотрите, имеют ли они смысл. В этом случае я, вероятно, хочу получить только одну запись на возвращенный заказ. Если на каком-либо промежуточном этапе число результатов увеличивается или уменьшается, вы знаете, что у вас возникла проблема с запросом. Иногда в строительных блоках вы захотите увидеть дополнительные поля, чтобы проверить правильность информации. Я помещаю их в отдельную строку и комментирую их, когда прорабатываю следующий шаг (удаляя их в конце, как только узнаю, что я прав), чтобы они были легко доступны для повторного просмотра, если добавление еще одной складки сделало запрос забавным. Вы не можете правильно выполнять сложные запросы, не понимая, как должны выглядеть ваши результаты. Думая, что все выглядит хорошо, потому что он вернул некоторые результаты, почти гарантирует, что вы получите неправильные результаты в течение большей части времени. м) правильно, так что они снова могут легко увидеть, если добавление еще одной складки сделало запрос забавным. Вы не можете правильно выполнять сложные запросы, не понимая, как должны выглядеть ваши результаты. Думая, что все выглядит хорошо, потому что он вернул некоторые результаты, почти гарантирует, что вы получите неправильные результаты в течение большей части времени. м) правильно, так что они снова могут легко увидеть, если добавление еще одной складки сделало запрос забавным. Вы не можете правильно выполнять сложные запросы, не понимая, как должны выглядеть ваши результаты. Думая, что все выглядит хорошо, потому что он вернул некоторые результаты, почти гарантирует, что вы получите неправильные результаты в течение большей части времени.
Вот список некоторых основных вещей, которые вы должны делать в SQL, не задумываясь об этом:
- Сначала прямой выбор без объединений (и без выбора *), но с условиями выбора
- Вы должны знать, как объединить две или более таблицы и получить записи, которые есть во всех таблицах
- Вы должны знать, как объединить две или более таблиц и получить записи, которые есть во всех таблицах, но возвращают только одну запись из таблицы с множеством сторон отношения один-ко-многим
- Вы должны быть в состоянии получить записи в одной таблице, но не в связанной таблице
- Вы должны иметь возможность агрегировать данные для отчета
- Вы должны быть в состоянии вставить одну запись в таблицу
- Вы должны иметь возможность обновить одну запись в таблице
- Вы должны иметь возможность удалить одну запись в таблице
- Вы должны быть в состоянии вставить группу записей в таблицу без курсора
- Вы должны иметь возможность обновлять группу записей в таблице без курсора
- Вы должны быть в состоянии удалить группу записей в таблице без курсора
- Вы должны иметь возможность выполнять несколько действий в одной транзакции и обрабатывать сообщения об ошибках
- Вы должны быть в состоянии создать объединение записей и знать, когда использовать UNION Vice UNION ALL
- Вы должны иметь возможность варьировать данные для одного поля на основе некоторых критериев (используя CASE)
Как только вы освоитесь с базовыми знаниями SQL, познакомьтесь со структурой вашей базы данных. Я могу писать сложные запросы к очень сложным БД, которые я поддерживаю намного быстрее, чем другие люди, потому что я понимаю структуру и не должен думать о том, где хранятся вещи. Если вы понимаете структуру таблицы и отношения внешнего ключа и то, где хранятся значения поиска и что означают столбцы (не только их имя, но и какие данные в них хранятся), вы можете быть экспертом в запросах к этой базе данных. Первое, что я делаю на любой новой работе - это тщательно разбираюсь в структуре БД.