Шукати в цьому блозі

пʼятницю, 18 листопада 2011 р.

Краткая шпаргалка по запросам в MySQL

Приведу в качестве шпаргалки несколько запросов, которые я часто использую, возможно пригодиться еще кому-то.

Задача 1.
Входные данные:
таблица:
mysql> describe invent_2011_invent;
+-----------+-----------+------+-----+-------------------+-----------------------------+
| Field     | Type      | Null | Key | Default           | Extra                       |
+-----------+-----------+------+-----+-------------------+-----------------------------+
| id        | int(12)   | NO   | PRI | NULL              | auto_increment              |
| sn        | char(255) | NO   |     | NULL              |                             |
| hw_name   | char(255) | NO   |     | NULL              |                             |
| hw_type   | char(255) | NO   |     | NULL              |                             |
| place     | char(255) | NO   |     | NULL              |                             |
| user      | char(255) | NO   |     | NULL              |                             |
| city      | char(255) | NO   |     | NULL              |                             |
| address   | char(255) | NO   |     | NULL              |                             |
| territory | char(255) | NO   |     | NULL              |                             |
| remarks   | char(255) | NO   |     | NULL              |                             |
| tstamp    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-----------+-----------+------+-----+-------------------+-----------------------------+

Задача:
вывести кличество однотипного оборудования, которое встречается больше 1 раза, тип указан в поле hw_type

SELECT hw_type, count(*) AS count_hw FROM invent_2011_invent GROUP BY hw_type HAVING count_hw>1;

результат будет примерно таким:
+-------------+----------+
| hw_type     | count_hw |
+-------------+----------+
| ADAPTER     |        4 |
| BATTERY     |        3 |
| DSTAT       |       15 |
| EXTDROM     |       33 |
| EXTHDD      |       41 |
| INTDROM     |       19 |
| INTHDD      |       15 |
| MFU         |       26 |
| MMODEM      |       17 |
| MODEM       |        6 |
| PPC         |       40 |
| PRINTER     |       32 |
| PRINTSERVER |       95 |
| RAM         |       22 |
| REPLICATOR  |       11 |
| ROUTER      |        7 |
| RSERVER     |       11 |
| SCANNER     |       16 |
| UPS         |       12 |
| USBFLASH    |        5 |
+-------------+----------+


Задача 2.
Входные данные:
таблица:
mysql> describe invent_2011_codes;
+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| ID      | int(11) | NO   | PRI | NULL    | auto_increment |
| CODES   | text    | NO   |     | NULL    |                |
| HW_TYPE | text    | NO   |     | NULL    |                |
+---------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


текущая локаль в кодировке UTF-8
Настройки таблици:
- Character Set UTF-8 Unicode
- Collation utf8_general_ci

Задача: импортировать данные в поля CODES и HW_TYPE из текстового файла (/home/emutant/Documents/invent_2011/Rez/invent_2011_codes.txt)
в кодировке UTF-8, но содержащего кирилицу.
В файле значения разделены "," в качестве закрывающих эллементов используются "".

LOAD DATA LOCAL INFILE '/home/emutant/Documents/invent_2011/Rez/invent_2011_codes.txt' INTO TABLE invent_2011_codes CHARACTER SET LATIN1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (CODES,HW_TYPE);

Задача 3.
Входные данные:
таблица из Задачи 2.

Задача:
- найти в поле CODES символы "S/N: " и вырезать их

UPDATE invent_2011_codes CODES = REPLACE(CODES, "S/N: ", "");



Задача 4.
Входные данные:
таблицы из Задачи 1 и 2.

Задача: Вывести все поля и их значение в таблице invent_2011_codes, для которых значение invent_2011_codes.CODES равны invent_2011_invent.sn в файл
(/tmp/EQ_codes.txt)

В файле значения разделены "," в качестве закрывающих эллементов используются "".

SELECT * FROM invent_2011_codes WHERE CODES IN (SELECT sn FROM invent_2011_invent) INTO OUTFILE '/tmp/EQ_codes.txt' CHARACTER SET LATIN1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';


Задача 5.
Входные данные:
- таблица invent_2011_undef, в которой есть поля SEARCH_REZ и ID_SAP;
- таблица ID_SAP_DEF, в которой есть одноименное поле ID_SAP_DEF;

Задача: Проставить метку "ОК" для поля invent_2011_undef.SEARCH_REZ, для записей в которых поле invent_2011_undef.ID_SAP совпадает с ID_SAP_DEF.ID_SAP_DEF.

UPDATE invent_2011_undef SET SEARCH_REZ="OK" WHERE invent_2011_undef.ID_SAP IN (SELECT ID_SAP_DEF FROM ID_SAP_DEF);

Немає коментарів: