Искусство в построении запросов с использованием Structured Query Language (язык структурированных запросов) заключается в создании правильных, эффективных  вопросов и команд для базы данных. В запросах SELECT можно использовать ключевые слова  JOIN, WHERE и HAVING для уточнения результатов, GROUP BY для комбинирования результатов в легко анализируемые блоки, и UNION для комбинирования результатов нескольких запросов. Команды INSERT, DELETE и UPDATE могут использовать JOIN. Запрос INSERT … SELECT вставляет результаты в другую таблицу. В запросах DELETE и UPDATE можно использовать ключевое слово WHERE, чтобы указать область действия.

Ниже приводятся 6 запросов для MySQL.

1. Возраст в годах

Если у вас в таблице хранится дата рождения и нужно вычислить возраст, то можно использовать следующий запрос. @dateofbirth — дата рождения:

1SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

2. Разница между двумя датами

Находим разницу между двумя датами, выраженную в секундах, минутах, часах или днях. Если dt1 и dt2 значения дат в формате ‘yyyy-mm-dd hh:mm:ss’, то количество секунд между dt1 и dt2 вычисляется:

1UNIX_TIMESTAMP( dt2 ) - UNIX_TIMESTAMP( dt1 )

Чтобы получить количество минут, делим вычисленное значение на 60, для вычисления количества часов — делим на 3600, а для определения количества дней — делим на 3600*24.

3. Выводим значение, которое встречается в столбце N раз

1SELECT id
2FROM tbl
3GROUP BY id
4HAVING COUNT(*) = N;

4. Вычисляем количество рабочих дней между двумя датами

Простейшим способом вычислить количество рабочих дней между двумя датами является использование таблицы календаря calendar со столбцами даты d и логического флага праздников holiday  для всех дней во всех возможных годах. Затем используется соответствующий запрос, который возвращает количество рабочих дней между двумя датами Start и Stop включительно:

1SELECT COUNT(*)
2FROM calendar
3WHERE BETWEEN Start AND Stop
4AND DAYOFWEEK(d) NOT IN(1,7)
5AND holiday=0;

5. Находим основной ключ для таблицы

1SELECT k.column_name
2FROM information_schema.table_constraints t
3JOIN information_schema.key_column_usage k
4USING (constraint_name,table_schema,table_name)
5WHERE t.constraint_type='PRIMARY KEY'
6AND t.table_schema='db'
7AND t.table_name='tbl'

6. Определяем, насколько велика таблица

1SELECT
2table_schema AS 'Db Name',
3Round( Sum( data_length + index_length ) / 1024 / 1024, 3 ) AS 'Db Size (MB)',
4Round( Sum( data_free ) / 1024 / 1024, 3 ) AS 'Free Space (MB)'
5FROM information_schema.tables
6GROUP BY table_schema ;

Источник перевода ruseller.com
Оригинал: www.codeforest.net/6-useful-mysql-queries

0 0 vote
Article Rating