Изучаем SQL. №11.Изменяем поля. Строковые Функции SQL.

Изучаем SQL
Всем привет, сегодня мы будем учиться вносить изменения в таблицу Базы Данных при выводе с помощью строковых функций.
Функция — Блок действий с название. Она может производить действия, а также возвращать значение на место вызова.
ВНИМАНИЕ! Строковые функции НЕ изменяют данные в самой таблице, а лишь выводят нужный результат, как будто эти изменения произошли.

Существуют такие функции:

RIGHT/LEFT(поле, количество символов) — функция вернет символы в заданном количестве слева/справа от значения в поле.

SUBSTRING_INDEX(поле,’разделитель’, номер разделителя) — функция вернет все символы до разделителя.

UPPER/LOWER(поле) — выводит значения в верхнем/нижнем регистре.

RTRIM/LTRIM(поле) — удалит пробелы справа/слева.

CONCAT(‘Строка1’, ‘Строка2’)  — соединяет строки.

Итак, приступим. Для начала создадим новую базу данных narod, выберем ее и создадим таблицу ludi с полями id, imya, familiya, vozrast.

CREATE DATABASE narod;
USE narod;
CREATE TABLE ludi (id INT PRIMARY KEY AUTO_INCREMENT, imya VARCHAR(30),familiya VARCHAR(30),vozrast INT);
DESCRIBE ludi;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| imya     | varchar(30) | YES  |     | NULL    |                |
| familiya | varchar(30) | YES  |     | NULL    |                |
| vozrast  | int(11)     | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Теперь наполним нашу табличку и проверяем:

INSERT INTO ludi VALUES (NULL,'Иван','Сидоров',40);
INSERT INTO ludi VALUES (NULL,'Виталий','Слюсар',27);
INSERT INTO ludi VALUES (NULL,'Олег','Емелин',22);
INSERT INTO ludi VALUES (NULL,'Афанасий','Поклонский',77);
INSERT INTO ludi VALUES (NULL,'Влад','Тепеш',250);
INSERT INTO ludi VALUES (NULL,'Зинаида','Мельница',18);
INSERT INTO ludi VALUES (NULL,'Оксана','Улыбчивая',63);
select * from ludi;
+----+----------+------------+---------+
| id | imya     | familiya   | vozrast |
+----+----------+------------+---------+
|  1 | Иван     | Сидоров    |      40 |
|  2 | Виталий  | Слюсар     |      27 |
|  3 | Олег     | Емелин     |      22 |
|  4 | Афанасий | Поклонский |      77 |
|  5 | Влад     | Тепеш      |     250 |
|  6 | Зинаида  | Мельница   |      18 |
|  7 | Оксана   | Улыбчивая  |      63 |
+----+----------+------------+---------+

Итак, наша база создана и заполнена. Приступим к работе с функциями.
Для начала выведем на экран все значения столбца imya в верхнем регистре:

SELECT UPPER(imya) FROM ludi;
+-------------+
| UPPER(imya) |
+-------------+
| ИВАН        |
| ВИТАЛИЙ     |
| ОЛЕГ        |
| АФАНАСИЙ    |
| ВЛАД        |
| ЗИНАИДА     |
| ОКСАНА      |
+-------------+

Показать последние 3 символа строк (или 3 символа справа) в столбце familiya:

SELECT RIGHT(familiya,3) FROM ludi;
+-------------------+
| RIGHT(familiya,3) |
+-------------------+
| ров               |
| сар               |
| лин               |
| кий               |
| пеш               |
| ица               |
| вая               |
+-------------------+

Показать первые три символа (или 3 символа слева) первых 4 строк в столбце imya:

SELECT LEFT(imya,3) FROM ludi LIMIT 4;
+--------------+
| LEFT(imya,3) |
+--------------+
| Ива          |
| Вит          |
| Оле          |
| Афа          |
+--------------+

Теперь заполним поле imya последними двумя символами его же значений:

UPDATE ludi SET imya = RIGHT(imya,2);
SELECT * FROM ludi;
+----+------+------------+---------+
| id | imya | familiya   | vozrast |
+----+------+------------+---------+
|  1 | ан   | Сидоров    |      40 |
|  2 | ий   | Слюсар     |      27 |
|  3 | ег   | Емелин     |      22 |
|  4 | ий   | Поклонский |      77 |
|  5 | ад   | Тепеш      |     250 |
|  6 | да   | Мельница   |      18 |
|  7 | на   | Улыбчивая  |      63 |
+----+------+------------+---------+

Теперь поместим туда же первые две буквы столбца familiya:

UPDATE ludi SET imya = LEFT(familiya,2);
SELECT * FROM ludi;
+----+------+------------+---------+
| id | imya | familiya   | vozrast |
+----+------+------------+---------+
|  1 | Си   | Сидоров    |      40 |
|  2 | Сл   | Слюсар     |      27 |
|  3 | Ем   | Емелин     |      22 |
|  4 | По   | Поклонский |      77 |
|  5 | Те   | Тепеш      |     250 |
|  6 | Ме   | Мельница   |      18 |
|  7 | Ул   | Улыбчивая  |      63 |
+----+------+------------+---------+

Удалим столбец imya и добавим столбец fio:

ALTER TABLE ludi DROP COLUMN imya;
ALTER TABLE ludi ADD COLUMN fio varchar(255);
SELECT * FROM ludi;
+----+------------+---------+------+
| id | familiya   | vozrast | fio  |
+----+------------+---------+------+
|  1 | Сидоров    |      40 | NULL |
|  2 | Слюсар     |      27 | NULL |
|  3 | Емелин     |      22 | NULL |
|  4 | Поклонский |      77 | NULL |
|  5 | Тепеш      |     250 | NULL |
|  6 | Мельница   |      18 | NULL |
|  7 | Улыбчивая  |      63 | NULL |
+----+------------+---------+------+

Конкатенацию строк в MYSQL

Теперь перенесем туда столбец familiya с добавлением Имен лишнего пробела в конце. Заодно изучим функцию конкатенацию строк в MYSQL она осущетвляется с помощью функции CONCAT(строка1,строка2). В обчном SQL можно использовать символ || между строками. В разных базах эти значения могут отличаться.
Ну что, приступим:

UPDATE ludi SET fio = CONCAT(familiya, " Иван ") WHERE id =1;
UPDATE ludi SET fio = CONCAT(familiya, " Виталий ") WHERE id =2;
UPDATE ludi SET fio = CONCAT(familiya, " Сергей ") WHERE id =3;
UPDATE ludi SET fio = CONCAT(familiya, " Вадим ") WHERE id =4;
UPDATE ludi SET fio = CONCAT(familiya, " Владик ") WHERE id =5;
UPDATE ludi SET fio = CONCAT(familiya, " Ирина ") WHERE id =6;
UPDATE ludi SET fio = CONCAT(familiya, " Елена ") WHERE id =7;
SELECT * FROM ludi;
+----+------------+---------+-------------------+
| id | familiya   | vozrast | fio               |
+----+------------+---------+-------------------+
|  1 | Сидоров    |      40 | Сидоров Иван      |
|  2 | Слюсар     |      27 | Слюсар Виталий    |
|  3 | Емелин     |      22 | Емелин Сергей     |
|  4 | Поклонский |      77 | Поклонский Вадим  |
|  5 | Тепеш      |     250 | Тепеш Владик      |
|  6 | Мельница   |      18 | Мельница Ирина    |
|  7 | Улыбчивая  |      63 | Улыбчивая Елена   |
+----+------------+---------+-------------------+

Теперь удалим все пробелы справа в колонке fio:

UPDATE ludi SET fio = RTRIM(fio);

Теперь удалим колонку familiya и создадим колонки name и fam:

ALTER TABLE ludi DROP COLUMN familiya;
ALTER TABLE ludi ADD COLUMN name VARCHAR(30), ADD COLUMN fam VARCHAR(30);
SELECT * FROM ludi;
+----+---------+------------------+------+------+
| id | vozrast | fio              | name | fam  |
+----+---------+------------------+------+------+
|  1 |      40 | Сидоров Иван     | NULL | NULL |
|  2 |      27 | Слюсар Виталий   | NULL | NULL |
|  3 |      22 | Емелин Сергей    | NULL | NULL |
|  4 |      77 | Поклонский Вадим | NULL | NULL |
|  5 |     250 | Тепеш Владик     | NULL | NULL |
|  6 |      18 | Мельница Ирина   | NULL | NULL |
|  7 |      63 | Улыбчивая Елена  | NULL | NULL |
+----+---------+------------------+------+------+

Теперь в колонку name перенесем имена из fio, а в колонку fam — фамилии и удалим fio:

UPDATE ludi SET fam = SUBSTRING_INDEX(fio,' ',1);
UPDATE ludi SET name = SUBSTRING_INDEX(fio,' ',-1);
ALTER TABLE ludi DROP COLUMN fio;
 SELECT * FROM ludi;
+----+---------+---------+------------+
| id | vozrast | name    | fam        |
+----+---------+---------+------------+
|  1 |      40 | Иван    | Сидоров    |
|  2 |      27 | Виталий | Слюсар     |
|  3 |      22 | Сергей  | Емелин     |
|  4 |      77 | Вадим   | Поклонский |
|  5 |     250 | Владик  | Тепеш      |
|  6 |      18 | Ирина   | Мельница   |
|  7 |      63 | Елена   | Улыбчивая  |
+----+---------+---------+------------+

на этом все, оставляйте комментарии. Буду рад ответить на вопросы.

Введи свой e-mail:

One thought on “Изучаем SQL. №11.Изменяем поля. Строковые Функции SQL.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *