SQL

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

Как это не печально у нас похоже нашлись копипастеры :( Пока не решили что делать ставлю ссылку похоже на оригинал http://sys.dmitrow.com/node/103

SQL в примерах

SQL это стандартный язык для доступа к базам данных и их управления.

SQL может:

  • выполнять запросы к базе данных;
  • извлекать данные из базы данных
  • добавить записи в базу данных;
  • обновить записи в базе данных;
  • удалить записи из базы данных;
  • создавать новые базы данных;
  • создавать новые таблицы в базе данных;
  • создавать хранимые процедуры в базе данных;
  • настроить разрешения для таблиц.
  • table_name — имя таблицы
  • column_name — колонки(поля) вообщем те столбики которые вертикальные
  • value — значения
  • pattern — шаблон
  • database_name — имя базы данных (БД)

SQL является стандартным, но... Несмотря на то что SQL придерживается ANSI (Американского национального института стандартов) стандарта, есть много различных версий SQL языка. Вместе с тем, чтобы быть совместимым со стандартом ANSI, все они поддерживают, по крайней мере, основные команды (например, SELECT, UPDATE, DELETE, INSERT, WHERE). Большинство из SQL баз данных имеют свои собственные расширения (функций, команд...) в дополнение к SQL стандарту! В данном описании будем рассматривать язык SQL в разрезе MySQL. Чаще всего база данных содержит одну или несколько таблиц. Каждая таблица имеет определенное имя (например, "people" или "cars"). Таблицы содержат поля (строки) с данными. Сейчас забежим немного наперед, то есть создадим сразу БД, табличку и заполним её.

Т.к. я не знал каким образом лучше построить материал, решил что лучший вариант это наглядный, то есть писать в примерах, опираясь на тестовую БД.

Ниже создаем БД(mytest),и в ней таблицу под названием «people»:

mysql> create database mytest;
Query OK, 1 row affected (0.00 sec)

 mysql> use mytest;
 Database changed
 mysql> CREATE TABLE people(id int,Name varchar(255),LastName varchar(255)
     -> addr varchar(255), telnumb int,birthdaydate date);
 Query OK, 0 rows affected (0.03 sec)

 mysql> show fields from people;
 +---------------+--------------+------+-----+---------+-------+
 | Field         | Type         | Null | Key | Default | Extra |
 +---------------+--------------+------+-----+---------+-------+
 | id            | int(11)      | YES  |     | NULL    |       |
 | Name          | varchar(255) | YES  |     | NULL    |       |
 | LastName      | varchar(255) | YES  |     | NULL    |       |
 | addr          | varchar(255) | YES  |     | NULL    |       |
 | telnumb       | int(11)      | YES  |     | NULL    |       |
 | birhthdaydate | date         | YES  |     | NULL    |       |
 +---------------+--------------+------+-----+---------+-------+
 6 rows in set (0.00 sec)

 mysql> insert into people(id,Name,LastName,addr,telnumb,birthdaydate) 
     -> values  (1,'Vasia','Pupkin','selo Slavne','452','1922-10-23');
 Query OK, 1 row affected, 1 warning (0.00 sec)
 ........

 mysql> select * from people;
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+-----------+-------------+---------+--------------+
 4 rows in set (0.00 sec)
 mysql>

Таблица содержит 4 записи и 6 колонок (id, Name, Lastname, addr, telnumb, birthdaydate).

Практически все действия в базе данных осуществляется с помощью SQL запросов. Например, следующий SQL запрос выведет все записи из таблицы «peolple»:

SELECT * from people;

Для SQL не важен регистр символов, заглавные, прописные, все равны (SELECT и select — одно и тоже), также важно помнить что MySQL требует чтобы каждый запрос заканчивался символом «;».

Для более лёгкого запоминания и понимания можно запросы разделить на 3 типа: управление данными (УД), и определение (вид) данных (по другому не придумал как грамотнее выразиться — ОД). И ещё, пожалуй, системные запросы (СЗ).

Управлению данными:

  • SELECT — извлечение(выборка) данных из БД
  • UPDATE — обновление данных в БД
  • DELETE — удаление данных из БД
  • INSERT INTO — вставка(заполнение) новыми данными БД

Определение (вид) данных:

  • CREATE DATABASE — создать новую БД
  • CREATE TABLE — создать новую таблицу
  • ALTER TABLE — изменить таблицу
  • DROP TABLE — удалить таблицу
  • CREATE INDEX — создать индекс (поисковый ключ)

Системные запросы:

  • show processlist; - показать процессы БД
  • show databases; - показать доступные БД
  • use имя_базы; - переключитсья на имя_базы

надо дописать сюда остальное

SELECT

SELECT — используеться для того чтобы делать выборки из БД

синтаксис:

SELECT column_name(s) FROM table_name;

column_names - если необходимо выбрать несколько полей, они должны указываться через запятую, например:

 mysql> SELECT Name, LastName from people;
 +-------+-----------+
 | Name  | LastName  |
 +-------+-----------+
 | Vasia | Pupkin    |
 | Petia | Zatochkin |
 | Semen | Krivoy    |
 | Masha | Zolotaya  |
 +-------+-----------+
 4 rows in set (0.00 sec)
 mysql>

Символ «*» — всё.

SELECT * from people; <pre>

выведет всё(все поля) что есть в таблице people;

Иногда в таблице, некоторые из колонок могут содержать повторяющиеся значения. Это не проблема, т.к. всегда можно сделать выборку лишь тех значений 
которые разнятся между собой (не дублируются). Ключевое слово DISTINCT может быть использовано для этих целей.

<pre>SELECT DISTINCT column_name(s) FROM table_name;

например:

 mysql> SELECT DISTINCT addr FROM people;
 +-------------+
 | addr        |
 +-------------+
 | selo Slavne |
 | g.Zhitomir  |
 | pgt. Pobeda |
 +-------------+
 3 rows in set (0.00 sec)

WHERE

WHERE - используется для получения только тех записей, которые соответствуют определенному критерию.

синтаксис:

SELECT column_name(s) FROM table_name WHERE column_name=value;

Пример:

 mysql> SELECT * FROM people WHERE Name='Vasia';
 +------+-------+----------+-------------+---------+--------------+
 | id   | Name  | LastName | addr        | telnumb | birthdaydate |
 +------+-------+----------+-------------+---------+--------------+
 |    1 | Vasia | Pupkin   | selo Slavne |     452 | 1922-10-23   |
 +------+-------+----------+-------------+---------+--------------+
 1 row in set (0.00 sec)
 mysql>

Здесь также могут использоваться операторы:

  • = равно
  • <> не равно
  • > больше
  • < меньше
  • >= больше либо равно
  • <= меньше либо равно

... здесь еще много чего может быть... см. оффиц сайт либо любую книгу по MySQL

Операторы AND & OR

Оператор AND отображает данные если выполняются оба условия. Оператор OR отображает данные если выполняется хотя бы одно условие.

 mysql> SELECT * FROM people WHERE Name='Vasia' AND LastName='Pupkin';
 +------+-------+----------+-------------+---------+--------------+
 | id   | Name  | LastName | addr        | telnumb | birthdaydate |
 +------+-------+----------+-------------+---------+--------------+
 |    1 | Vasia | Pupkin   | selo Slavne |     452 | 1922-10-23   |
 +------+-------+----------+-------------+---------+--------------+
 1 row in set (0.01 sec)
 mysql>
 mysql> SELECT * FROM people WHERE Name='Semen' OR LastName='Zolotaya';
 +------+-------+----------+-------------+---------+--------------+
 | id   | Name  | LastName | addr        | telnumb | birthdaydate |
 +------+-------+----------+-------------+---------+--------------+
 |    3 | Semen | Krivoy   | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+----------+-------------+---------+--------------+
 2 rows in set (0.00 sec)
 mysql>

Смешивание AND & OR

 mysql> SELECT * FROM people WHERE Name='Petia' AND (LastName='Zatochkin' OR
     ->
     -> LastName='Krivoy');
 +------+-------+-----------+------------+---------+--------------+
 | id   | Name  | LastName  | addr       | telnumb | birthdaydate |
 +------+-------+-----------+------------+---------+--------------+
 |    2 | Petia | Zatochkin | g.Zhitomir |      23 | 1995-04-12   |
 +------+-------+-----------+------------+---------+--------------+
 1 row in set (0.01 sec)
 mysql>

ORDER BY

ORDER BY — оператор сортировки, используется для сортировки результатов, установленных указанной колонки.ORDER BY по умолчанию сортирует записи в возрастающем порядке (ASC). Если вы хотите сортировать записи в (обратном)порядке убывания, вы можете использовать ключевое слово DESC.

синтаксис:

SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC

Пример:

 mysql> SELECT * FROM people ORDER BY Name;
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 +------+-------+-----------+-------------+---------+--------------+
 4 rows in set (0.01 sec)

В обратном порядке

 mysql> SELECT * FROM people ORDER BY Name DESC;
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+-----------+-------------+---------+--------------+
 4 rows in set (0.00 sec)

LIMIT

LIMIT — используеться для вывода определенной группы (кол-ва) данных

синтаксис:

SELECT column_name(s) FROM table_name LIMIT a,b;
  • a — число , с какой позиции выдавать данные
  • b — кол-во выводимых строк

Пример:

mysql> SELECT * from people LIMIT 1,3;
+------+-------+-----------+-------------+---------+--------------+
| id   | Name  | LastName  | addr        | telnumb | birthdaydate |
+------+-------+-----------+-------------+---------+--------------+
|    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
|    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
|    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
+------+-------+-----------+-------------+---------+--------------+
3 rows in set (0.00 sec)

LIKE

LIKE — этот оператор используеться для поиска данных в полях по шаблону.

синтаксис:

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

Пример:

 mysql> SELECT * from people WHERE Name LIKE '%em%';
 +------+-------+----------+-------------+---------+--------------+
 | id   | Name  | LastName | addr        | telnumb | birthdaydate |
 +------+-------+----------+-------------+---------+--------------+
 |    3 | Semen | Krivoy   | pgt. Pobeda |     231 | 1992-02-11   |
 +------+-------+----------+-------------+---------+--------------+
 1 row in set (0.01 sec)

 mysql> SELECT * from people WHERE telnumb LIKE '2%';
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 +------+-------+-----------+-------------+---------+--------------+
 2 rows in set (0.01 sec)
 mysql>

IN

IN — позволяет задавать несколько значений в поиск

синтаксис:

SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..)

Пример:

 mysql> SELECT * from people WHERE LastName IN('Krivoy','Zolotaya');
 +------+-------+----------+-------------+---------+--------------+
 | id   | Name  | LastName | addr        | telnumb | birthdaydate |
 +------+-------+----------+-------------+---------+--------------+
 |    3 | Semen | Krivoy   | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Masha | Zolotaya | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+----------+-------------+---------+--------------+
 2 rows in set (0.00 sec)

BETWEEN

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

синтаксис:

SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;

Пример:

 mysql> select * from people where id between 1 and 3;
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 +------+-------+-----------+-------------+---------+--------------+
 3 rows in set (0.00 sec)

JOIN, AS

пока что нет описания, примера.


Еще одна таблица cars в той же БД mytest

 +------+----------------+-----------+
 | C_id | Cmodel         | GosNumber |
 +------+----------------+-----------+
 |    1 | GAZ            |      2211 |
 |    2 | Zaporogets     |      4521 |
 |    3 | Volga-supercar |      7711 |
 +------+----------------+-----------+
 mysql> create table cars(C_id int, Cmodel varchar(255), GosNumber int);
 Query OK, 0 rows affected (0.01 sec)

 mysql> show columns from cars;
 +-----------+--------------+------+-----+---------+-------+
 | Field     | Type         | Null | Key | Default | Extra |
 +-----------+--------------+------+-----+---------+-------+
 | C_id      | int(11)      | YES  |     | NULL    |       |
 | Cmodel    | varchar(255) | YES  |     | NULL    |       |
 | GosNumber | int(11)      | YES  |     | NULL    |       |
 +-----------+--------------+------+-----+---------+-------+
 3 rows in set (0.00 sec)
 mysql> insert into cars values(1,'GAZ','2211'),(2,'Zaporogets','4521'),(3,'Volga-supercar','7711');
 Query OK, 3 rows affected (0.01 sec)
 Records: 3  Duplicates: 0  Warnings: 0
 mysql> select * from cars;
 +------+----------------+-----------+
 | C_id | Cmodel         | GosNumber |
 +------+----------------+-----------+
 |    1 | GAZ            |      2211 |
 |    2 | Zaporogets     |      4521 |
 |    3 | Volga-supercar |      7711 |
 +------+----------------+-----------+
 3 rows in set (0.00 sec)

 mysql> show tables;
 +------------------+
 | Tables_in_mytest |
 +------------------+
 | cars             |
 | people           |
 +------------------+
 2 rows in set (0.00 sec)
 mysql>

JOIN

JOIN - используется для запроса(вывода) данных из двух или более таблиц.

 mysql> SELECT * from cars join people;
 +------+----------------+-----------+------+-------+-----------+-------------+--------- +--------------+ 
 | C_id | Cmodel         | GosNumber | id   | Name  | LastName  | addr        | telnumb |  birthdaydate |
 +------+----------------+-----------+------+-------+-----------+-------------+--------- +--------------+
 |    1 | GAZ            |      2211 |    1 | Vasia | Pupkin    | selo Slavne |     452 |  1922-10-23   |
 |    2 | Zaporogets     |      4521 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    3 | Volga-supercar |      7711 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    1 | GAZ            |      2211 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    2 | Zaporogets     |      4521 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Volga-supercar |      7711 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    1 | GAZ            |      2211 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    2 | Zaporogets     |      4521 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    3 | Volga-supercar |      7711 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    1 | GAZ            |      2211 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 |    2 | Zaporogets     |      4521 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 |    3 | Volga-supercar |      7711 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+----------------+-----------+------+-------+-----------+-------------+--------- +--------------+
 12 rows in set (0.00 sec)

UNION

UNION — оператор сочетает вывод двух и более SELECT операторов.

примечание: каждый запрос SELECT в сочетании с UNION должны иметь одинаковое число столбцов. Колонки также должны иметь аналогичные типы данных.

синтаксис:

 SELECT column_name(s) FROM table_name1 UNION
 SELECT column_name(s) FROM table_name2;

делаем доп таблицу cars2

 +------+-----------+--------+
 | id   | model     | number |
 +------+-----------+--------+
 |    1 | Mers      |   3411 |
 |    2 | BMW       |   3317 |
 |    3 | Velosiped |   3456 |
 +------+-----------+--------+
 mysql> SELECT * from cars UNION SELECT * FROM cars2;
 +------+----------------+-----------+
 | C_id | Cmodel         | GosNumber |
 +------+----------------+-----------+
 |    1 | GAZ            |      2211 |
 |    2 | Zaporogets     |      4521 |
 |    3 | Volga-supercar |      7711 |
 |    1 | Mers           |      3411 |
 |    2 | BMW            |      3317 |
 |    3 | Velosiped      |      3456 |
 +------+----------------+-----------+
 6 rows in set (0.00 sec)

=== CREATE TABLE ===

CREATE TABLE - для создания таблиц в БД

синтаксис:

<pre>
 CREATE TABLE table_name
 (
 column_name1 data_type,
 column_name2 data_type,
 column_name3 data_type,
 ....
 );

где:

  • table_name — имя таблицы, column_name1 - имя столбца,
  • data_type — тип данных для этого солбца;

Какие типы данных могут быть в MySQL описано в разделе «Типы данных».

пример создания таблицы cars:

CREATE TABLE cars(C_id int,CModel varchar(255),Gos_Number int);

Создание таблицы people:

CREATE TABLE people(id int,Name varchar(255),LastName varchar(255),
addr varchar(255), telnumb int,birhthdaydate date);

понятно что таблицы будут пустые, и их предстоит заполнить.

CREATE INDEX

Индекс может быть создан для таблицы,это даст возможность более быстро и эффективно работать. Пользователю индекс не виден, он просто используется для ускорения поисков / запросов.

Примечание: Обновление таблицы с индексами занимает больше времени, чем обновление таблицы без (поскольку индексы также нуждаются в обновлении).

Таким образом, индексы стоит создавать только на столбцы (таблицы), по которым будет часто производиться поиск и запросы.

синтаксис:

CREATE INDEX index_name ON table_name (column_name,column_name2,..);

Пример:

mysql> create index indx on people (Name);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

до

 mysql> show columns from people;
 +--------------+--------------+------+-----+---------+-------+
 | Field        | Type         | Null | Key | Default | Extra |
 +--------------+--------------+------+-----+---------+-------+
 | id           | int(11)      | YES  |     | NULL    |       |
 | Name         | varchar(255) | YES  |     | NULL    |       |
 | LastName     | varchar(255) | YES  |     | NULL    |       |
 | addr         | varchar(255) | YES  |     | NULL    |       |
 | telnumb      | int(11)      | YES  |     | NULL    |       |
 | birthdaydate | date         | YES  |     | NULL    |       |
 +--------------+--------------+------+-----+---------+-------+
 6 rows in set (0.01 sec)

после

 mysql> show columns from people;
 +--------------+--------------+------+-----+---------+-------+
 | Field        | Type         | Null | Key | Default | Extra |
 +--------------+--------------+------+-----+---------+-------+
 | id           | int(11)      | YES  |     | NULL    |       |
 | Name         | varchar(255) | YES  | MUL | NULL    |       |
 | LastName     | varchar(255) | YES  |     | NULL    |       |
 | addr         | varchar(255) | YES  |     | NULL    |       |
 | telnumb      | int(11)      | YES  |     | NULL    |       |
 | birthdaydate | date         | YES  |     | NULL    |       |
 +--------------+--------------+------+-----+---------+-------+
 6 rows in set (0.01 sec)

Для создания уникального индекса по таблице. Повторяющиеся значения не допускаются, необходимо:

CREATE UNIQUE INDEX index_name ON table_name (column_name);

DROP INDEX

Удаление индекса.

синтаксис:

DROP INDEX index_name;

Эта команда ничего не делает. Чтобы удалить индекс, Вы должны использовать команду ALTER TABLE.

ALTER TABLE table_name DROP INDEX index_name;<pre>

=== DROP TABLE ===

Удаляет табличку.

синтаксис:
<pre>DROP TABLE table_name;

DROP DATABASE

Удаляет БД.

синтаксис:

DROP DATABASE database_name;

ALTER TABLE

Используется для добавления, удаления или изменения данных в существующих таблицах. Для того чтобы добавить(ADD) колонку в таблицу необходимо выполнить следующее:

синтаксис:

'Добавить'

ALTER TABLE table_name ADD column_name datatype;<pre>

По умолчанию новый столбец вставляется в конец таблицы.
<pre>
 mysql> alter table people add country varchar(255);
 Query OK, 4 rows affected (0.00 sec)
 Records: 4  Duplicates: 0  Warnings: 0

 mysql> select * from people;
 +------+-------+-----------+-------------+---------+--------------+---------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate | country |
 +------+-------+-----------+-------------+---------+--------------+---------+
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   | NULL    |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   | NULL    |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   | NULL    |
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   | NULL    |
 +------+-------+-----------+-------------+---------+--------------+---------+
 4 rows in set (0.00 sec)

Если необходимо, чтобы столбец встал в начало таблицы, нужно после параметров вставляемого столбца написать ключевое слово FIRST:

ALTER TABLE table_name ADD column_name datatype FIRST;
 mysql> alter table people add country varchar(255) FIRST;
 Query OK, 4 rows affected (0.01 sec)
 Records: 4  Duplicates: 0  Warnings: 0

 mysql> select * from people;
 +---------+------+-------+-----------+-------------+---------+--------------+
 | country | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +---------+------+-------+-----------+-------------+---------+--------------+
 | NULL    |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 | NULL    |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 | NULL    |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 | NULL    |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +---------+------+-------+-----------+-------------+---------+--------------+
 4 rows in set (0.01 sec)

Если необходимо, чтобы столбец был вставлен не в начале таблицы, и не в конце, а после определенного столбца, то нужно применить ключевое слово AFTER 'имя столбца', после которого будет установлен новый столбец:

ALTER TABLE table_name ADD column_name datatype AFTER column_name2;

добавит колонку column_name следом за колонкой column_name2

 mysql> alter table people add country varchar(255) after id;
 Query OK, 4 rows affected (0.01 sec)
 Records: 4  Duplicates: 0  Warnings: 0

 mysql> select * from people;
 +------+---------+-------+-----------+-------------+---------+--------------+
 | id   | country | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+---------+-------+-----------+-------------+---------+--------------+
 |    1 | NULL    | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    2 | NULL    | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | NULL    | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | NULL    | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+---------+-------+-----------+-------------+---------+--------------+
 4 rows in set (0.00 sec)

Если нужно дописать к таблице не один, а несколько столбцов, то для каждого столбца нужно ADD column_name datatype записать через запятую:

ALTER TABLE table_name ADD column_name datatype,
ADD column_name2 datatype, ADD column_name3 datatype;
 mysql> alter table people add country varchar(255), add state varchar(255);
 Query OK, 4 rows affected (0.01 sec)
 Records: 4  Duplicates: 0  Warnings: 0

 mysql> select * from people;
 +------+-------+-----------+-------------+---------+--------------+---------+-------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate | country | state |
 +------+-------+-----------+-------------+---------+--------------+---------+-------+
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   | NULL    | NULL  |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   | NULL    | NULL  |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   | NULL    | NULL  |
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   | NULL    | NULL  |
 +------+-------+-----------+-------------+---------+--------------+---------+-------+
 4 rows in set (0.00 sec)

CHANGE

Изменить параметр:

синтаксис:

ALTER TABLE table_name CHANGE column_name_old column_name_new parametrs;

где

  • table_name - имя таблицы, в которой находится изменяемый столбец;
  • column_name_old - имя столбца изменяемого столбца;
  • column_name_new - новое имя изменяемого столбца (должно равняться column_name_old, если мы не хотим поменять имя столбца);
  • parametrs - новые параметры столбца.
 mysql> alter table people CHANGE LastName Familia varchar(255);
 Query OK, 0 rows affected (0.00 sec)
 Records: 0  Duplicates: 0  Warnings: 0

 mysql> select * from people;
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | Familia   | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    1 | Vasia | Pupkin    | selo Slavne |     452 | 1922-10-23   |
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+-----------+-------------+---------+--------------+
 4 rows in set (0.01 sec)

DROP

Для удаления колонки:

синтаксис:

ALTER TABLE table_name DROP column_name;

если необходимо удалить несколько колонок из таблицы - указываем все через запятую.

INSERT

вставка(заполнение) данных в полях таблицы

синтаксис:

INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...);
  • columnN — названия полей в таблице table_name;
  • valueN — значения полей, т.е. содержимое, те данные которые будут в поле.

UPDATE

используется для обновления существующих записей в таблице.

синтаксис:

UPDATE table_name SET column1=value, column2=value2,.. WHERE some_column=some_value;

работать с данной конструкцией надо внимательно т.к. например если указать обновление значений полей без "доп фильтра" можно затереть данные которые вам на самом деле нет нужды трогать.

Например:

UPDATE people SET Name='Vasia', LastName='Mikolich';

приведёт таблицу к такому виду

 mysql> update people set Name='Vasia', LastName='Mikolich';
 Query OK, 4 rows affected (0.00 sec)
 Rows matched: 4  Changed: 4  Warnings: 0

 mysql> select * from people;
 +------+-------+----------+-------------+---------+--------------+
 | id   | Name  | LastName | addr        | telnumb | birthdaydate |
 +------+-------+----------+-------------+---------+--------------+
 |    1 | Vasia | Mikolich | selo Slavne |     452 | 1922-10-23   |
 |    2 | Vasia | Mikolich | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Vasia | Mikolich | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Vasia | Mikolich | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+----------+-------------+---------+--------------+
 4 rows in set (0.01 sec)

т.е. если необходимо обновить только поле где id=1 то нужно писать так:

 mysql> UPDATE people SET Name='Mikola', LastName='Mikolich' WHERE id='1';
 Query OK, 1 row affected (0.00 sec)
 Rows matched: 1  Changed: 1  Warnings: 0

 mysql> select * from people;
 +------+--------+-----------+-------------+---------+--------------+
 | id   | Name   | LastName  | addr        | telnumb | birthdaydate |
 +------+--------+-----------+-------------+---------+--------------+
 |    1 | Mikola | Mikolich  | selo Slavne |     452 | 1922-10-23   |
 |    2 | Petia  | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen  | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Masha  | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+--------+-----------+-------------+---------+--------------+
 4 rows in set (0.00 sec)

т.к. здесь присутствует WHERE соответсвенно можно комбинировать с AND & OR.

DELETE

удаление записей

синтаксис:

DELETE FROM table_name WHERE some_column=some_value;<pre>

<pre>
 mysql> delete from people where id=1;
 Query OK, 1 row affected (0.00 sec)

 mysql> slect * from people;
 ERROR 1064 (42000): You have an error in your SQL syntax; check the 
 manual that corresponds to your MySQL server version for the right
 syntax to use near 'slect * from people' at line 1
 mysql> select * from people;
 +------+-------+-----------+-------------+---------+--------------+
 | id   | Name  | LastName  | addr        | telnumb | birthdaydate |
 +------+-------+-----------+-------------+---------+--------------+
 |    2 | Petia | Zatochkin | g.Zhitomir  |      23 | 1995-04-12   |
 |    3 | Semen | Krivoy    | pgt. Pobeda |     231 | 1992-02-11   |
 |    4 | Masha | Zolotaya  | selo Slavne | 5551232 | 1980-05-05   |
 +------+-------+-----------+-------------+---------+--------------+
 3 rows in set (0.00 sec)

SHOW

используеться для отображения информации о полях, таблицах в БД. Самыми популярными являются:

  • SHOW DATABASES - просмотрет какие есть базы в MySQL сервере
  • SHOW TABLES - показать таблицы Бд
  • SHOW FIELDS(COLUMNS) - показать информацию о том какие поля есть в таблице, каких они типов пример - SHOW columns from people;
  • SHOW KEYS from table_name - вот так и переводиться -) отобразить ключи таблицы вообщем можно посмотреть имя индекса например, и на какое поле он установлен.

Функции

Функции ... какие-то опишу чтобы было базовое понятие за остальным на официал. AVG() возвращает среднее значение Код: Выделить всё

mysql> SELECT AVG(id) FROM people;
+---------+
| AVG(id) |
+---------+
|  2.5000 |
+---------+
1 row in set (0.00 sec)


COUNT() считает что прикажешь SELECT COUNT(column_name) FROM table_name; SELECT COUNT(*) FROM table_name; думаю понятно что делает... MAX() - возвращает максимальное значение пример: SELECT MAX(column_name) FROM table_name; MIN() - возвращает минимальное значение пример: SELECT MIN(column_name) FROM table_name; SUM() - функция суммирования пример: SELECT SUM(column_name) FROM table_name; UCASE() - ковертирует символы в верхний регистр пример: SELECT UCASE(column_name) FROM table_name; Код: Выделить всё

mysql> select ucase(Name) from people;
+-------------+
| ucase(Name) |
+-------------+
| MASHA       |
| PETIA       |
| SEMEN       |
| VASIA       |
+-------------+
4 rows in set (0.00 sec)


LCASE() - конвертирует символы в нижний регистр пример: SELECT LCASE(column_name) FROM table_name; и т.д.

Типы данных

типы данных которые используются в таблице, при их создании (data_type)

Целые числа

  • TINYINT Может хранить числа от -128 до 127
  • SMALLINT Диапазон от -32 768 до 32 767
  • MEDIUMINT Диапазон от -8 388 608 до 8 388 607
  • INT Диапазон от -2 147 483 648 до 2 147 483 647
  • BIGINT Диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

Строки (символьные данные)

  • VARCHAR Может хранить не более 255 символов.
  • TINYTEXT Может хранить не более 255 символов.
  • TEXT Может хранить не более 65 535 символов.
  • MEDIUMTEXT Может хранить не более 16 777 215 символов.
  • LONGTEXT Может хранить не более 4 294 967 295 символов.

Дата и время

  • DATE Дата в формате ГГГГ-ММ-ДД
  • TIME Время в формате ЧЧ:ММ:СС
  • DATETIME Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
  • TIMESTAMP Дата и время в формате ГГГГММДДЧЧММСС

Бинарные данные

Бинарные данные — это почти то же самое, что и данные в формате TEXT, но только при поиске в них учитывается регистр символов.

  • TINYBLOB Может хранить не более 255 символов.
  • BLOB Может хранить не более 65 535 символов.
  • MEDIUMBLOB Может хранить не более 16 777 215 символов.
  • LONGBLOB Может хранить не более 4 294 967 295 символов.

Дробные числа

  • FLOAT Число с плавающей точкой небольшой точности.
  • DOUBLE Число с плавающей точкой двойной точности.
  • REAL Синоним для DOUBLE.
  • DECIMAL Дробное число, хранящееся в виде строки.
  • NUMERIC Синоним для DECIMAL.