Sql запросы методичка

Добавил:

Upload

Опубликованный материал нарушает ваши авторские права? Сообщите нам.

Вуз:

Предмет:

Файл:

Скачиваний:

22

Добавлен:

18.04.2015

Размер:

585.27 Кб

Скачать

Содержание

СОДЕРЖАНИЕ……………………………………………………………………………………………………………………………………………

3

СТРУКТУРА УЧЕБНОЙ БАЗЫ ДАННЫХ ………………………………………………………………………………………………..

4

ОПРЕДЕЛЕНИЕ ТИПОВ СУЩНОСТЕЙ……………………………………………………………………………………………………………….

4

ОПРЕДЕЛЕНИЕ ТИПОВ СВЯЗЕЙ ………………………………………………………………………………………………………………………

5

ОПРЕДЕЛЕНИЕ АТРИБУТОВ И СВЯЗЫВАНИЕ ИХ С ТИПАМИ СУЩНОСТЕЙ …………………………………………………………….

6

ОПРЕДЕЛЕНИЕ ДОМЕНОВ АТРИБУТОВ ……………………………………………………………………………………………………………

8

ОПРЕДЕЛЕНИЕ ПЕРВИЧНЫХ КЛЮЧЕЙ …………………………………………………………………………………………………………….

8

ОПРЕДЕЛЕНИЕ ВНЕШНИХ КЛЮЧЕЙ………………………………………………………………………………………………………………..

9

СОЗДАНИЕ ДИАГРАММЫ «СУЩНОСТЬСВЯЗЬ» ………………………………………………………………………………………………..

9

СОЗДАНИЕ ТАБЛИЦ ……………………………………………………………………………………………………………………………….

11

НАПОЛНЕНИЕ ТАБЛИЦ ДАННЫМИ…………………………………………………………………………………………………….

15

ДОБАВЛЕНИЕ ДАННЫХ……………………………………………………………………………………………………………………………….

15

МОДИФИКАЦИЯ ДАННЫХ …………………………………………………………………………………………………………………………..

15

УДАЛЕНИЕ ДАННЫХ…………………………………………………………………………………………………………………………………..

15

ПРИМЕР ЗАПОЛНЕНИЯ ТАБЛИЦ УЧЕБНОЙ БАЗЫ ДАННЫХ ………………………………………………………………………………..

16

ПОСТРОЕНИЕ ЗАПРОСОВ ……………………………………………………………………………………………………………………..

18

ЗАПРОСЫ С УСЛОВИЯМИ……………………………………………………………………………………………………………………..

20

СРАВНЕНИЕ………………………………………………………………………………………………………………………………………………

20

ДИАПАЗОН ……………………………………………………………………………………………………………………………………………….

20

ПРИНАДЛЕЖНОСТЬ МНОЖЕСТВУ…………………………………………………………………………………………………………………

21

СООТВЕТСТВИЕ ШАБЛОНУ………………………………………………………………………………………………………………………….

21

ЗНАЧЕНИЕ NULL………………………………………………………………………………………………………………………………………

21

СОРТИРОВКА РЕЗУЛЬТАТОВ ………………………………………………………………………………………………………………………..

22

СОЕДИНЕНИЕ И ОБЪЕДИНЕНИЕ ТАБЛИЦ В ЗАПРОСЕ ……………………………………………………………………

23

ВНУТРЕННЕЕ СОЕДИНЕНИЕ…………………………………………………………………………………………………………………………

24

ВНЕШНЕЕ СОЕДИНЕНИЕ……………………………………………………………………………………………………………………………..

25

ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА UNION……………………………………………………………………………………………..

26

ПОСТРОЕНИЕ ВЫЧИСЛЯЕМЫХ ПОЛЕЙ …………………………………………………………………………………………….

27

ИСПОЛЬЗОВАНИЕ АГРЕГАТНЫХ ФУНКЦИЙ …………………………………………………………………………………….

28

ОГРАНИЧЕНИЯ НА ГРУППИРОВКУ ДАННЫХ……………………………………………………………………………………

30

ПОДЗАПРОСЫ………………………………………………………………………………………………………………………………………….

33

ПОДЗАПРОСЫ, ВОЗВРАЩАЮЩИЕ ЕДИНИЧНЫЕ ЗНАЧЕНИЯ ………………………………………………………………………………

33

ПОДЗАПРОСЫ, ВОЗВРАЩАЮЩИЕ МНОЖЕСТВЕННЫЕ ЗНАЧЕНИЯ………………………………………………………………………

35

3

Структура учебной базы данных

Рассмотрим процесс построения учебной базы данных, которая ляжет в основу большинства примеров. Дадим еѐ вербальное описание.

База данных автомастерская. В базе данных должны учитываться: дата, наименование, стоимость оказанной услуги, мастер, специализация мастера, владелец автомобиля, марка автомобиля, год выпуска автомобиля регистрационный номер автомобиля.

Для разработки структуры БД воспользуемся стандартной процедурой.

Определение типов сущностей

Перечислим все сущности, которые присутствуют в вербальном описании БД. Определим, являются ли эти сущности сильными или слабыми по следующему принципу:

Сильная сущность — независимая сущность. Слабая сущность — зависимая сущность.

В результате для учебной базы данный получим:

дата оказания услуги

(слабая сущность)

наименование услуги

(слабая сущность)

стоимость услуги

(слабая сущность)

мастер

(сильная сущность)

специализация мастера

(слабая сущность)

владелец автомобиля

(сильная сущность)

марка автомобиля

(слабая сущность)

регистрационный номер автомобиля

(слабая сущность)

год выпуска автомобиля

(слабая сущность)

В связи с тем, что в вербальном описании часть сущностей могут присутствовать в неявном виде, проведѐм дополнительный анализ и выявим:

услуга

(сильная сущность)

автомобиль

(сильная сущность)

журнал оказанных услуг

(сильная сущность)

Даже если на данном этапе не будет выявлено ни одной неявной сущности, они будут выявлены позже (если таковые вообще имеются).

Важно отметить, что понятие «сильная» и «слабая» сущность всегда должны рассматриваться в некотором контексте. Скажем, если в вербальном определении речь идет о «владельце автомобиля», то «владелец» — это слабая сущность, так как это одно из свойств автомобиля; автомобиль в данном случае рассматривается как сильная сущность. Но если описание учебной базы данных дополнить фразой «у владельца автомобиля есть номер телефона», то в этом случае «владелец» является сильной сущностью, а «номер телефона» — слабой сущностью, то есть свойством «владельца автомобиля». В этом случае в рамках одной базы данных одна и та же сущность рассматривается и как сильная, и как слабая. Эта сущность должна быть отмечена как сильная.

4

Определение типов связей

Чаще всего рассматриваются только бинарные связи, то есть связи, которые объединяют пары сущностей. Обычно для построения связи используется следующий приѐм: все перечисленные выше сущности связываются между собой каким-нибудь глаголом. При этом не обязательно, что для каждой пары сущностей может быть образована связь.

Связь 1:1 (один к одному) возникает, когда одной родительской сущности соответствует одна дочерняя сущность, и, наоборот: одной дочерней сущности соответствует одна родительская сущность.

Связь 1:М (один ко многим) возникает, когда одной родительской сущности соответствует несколько дочерних сущностей, но не наоборот: одной дочерней сущности соответствует одна родительская сущность.

Связь М:М (много ко многим) возникает, когда одной родительской сущности соответствует несколько дочерних сущностей, и, наоборот: одной дочерней сущности соответствует несколько родительских сущностей.

Выпишем связи, которые образуются в учебной базе данных.

у услуги есть стоимость

(1:1)

у услуги есть название

(1:1)

услуга оказывается владельцу

(М:М)

у мастера есть ФИО

(1:1)

у мастера есть специализация

(1:М)

мастер оказывает услуги

(М:М)

у автомобиля есть цвет

(1:М)

у автомобиля есть марка

(1:М)

у автомобиля есть год выпуска

(1:1)

у автомобиля есть регистрационный номер

(1:1)

у владельца есть ФИО

(1:1)

у владельца есть адрес

(1:1)

у владельца есть номер телефона

(1:1)

у владельца есть дата рождения

(1:1)

При проведении связей могут быть выявлены дополнительные сущности, которые могут сделать разрабатываемую БД более функциональной. Такими сущностями, например, являются: ФИО владельца, дата рождения владельца. Это позволит, скажем, поздравлять клиентов с днем рождения.

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

«у услуги есть название»: у услуги есть одно-единственное название, название соответствует одной-единственной услуге.

«у автомобиля есть марка»: у автомобиля есть одна-единственная марка, но есть много автомобилей той же самой марки.

«услуга оказывается владельцу»: владельцу оказывается много разных услуг, конкретная услуга может оказываться нескольким владельцам.

5

«у автомобиля есть год выпуска». Рассмотрим эту связь подробнее. В принципе, здесь может быть проведена связь «один ко многим» по аналогии с маркой автомобиля, т.к. у автомобиля есть конкретный год выпуска, но есть много автомобилей с этим годом выпуска. Почему же в этом случае организуется связь «один к одному», а не «один ко многим? Дело в том, что марки автомобиля могут и должны быть вынесены в отдельную таблицу. В случае с годом выпуска в организации дополнительной таблицы нет смысла, поэтому используется связь один к одному.

Определение атрибутов и связывание их с типами сущностей

Атрибут — свойство сущности.

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

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

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

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

Составной атрибут может быть разделѐн на отдельные компоненты, которые в свою очередь могут быть рассмотрены как простые атрибуты.

Важно отметить, что составной атрибут является нежелательным при проектировании БД. Дело в том, что при заполнении значений составного атрибута достаточно сложно гарантировать, что пользователь будет строго следовать порядку перечисления компонент. Например, рассмотрим такой составной атрибут, как ФИО. Вполне очевидно, что сначала должна идти фамилия, затем имя и в последнюю очередь отчество. Однако практически невозможно отследить, что человек правильно внесѐт эти данные. В результате нельзя будет, например, правильно отсортировать всех сотрудников по алфавиту. Невозможность контролирования порядка следования составных частей может привести к более серьезной проблеме: в базе данных рано или поздно появится дублирующуюся информация. Другими словами, может получиться несколько строк ссылающихся на один и тот же объект, например, «Иванов Иван Иванович» и «Иван Иванович Иванов». С точки зрения базы данных это два разных человека, а с точки зрения пользователя — один и тот же. Перечисленных проблем легко избежать, если разбить составной атрибут на необходимое количество простых.

Во-вторых, необходимо выделить потенциальные многозначные атрибуты.

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

Многозначный атрибут — это атрибут, содержащий несколько значений для каждого экземпляра сущности.

Многозначные атрибуты является нежелательными — по тем же причинам, что и составные. Ярким примером многозначного атрибута является атрибут «телефонный номер», т.к. номер может быть рабочий, домашний, сотовый. При этом не совсем понятно, каким образом все эти значения могут быть помещены в единственное поле. Самым простым способом устранения многозначного атрибута является разбивание многозначного атрибута на столько однозначных атрибутов, сколько потенциальных значений он может принять.

6

В-третьих, могут быть выделены производные атрибуты, т.е. атрибуты, которые могут быть получены из имеющихся по определѐнному алгоритму. Иногда, если алгоритм вычисления значения производного атрибута является достаточно долгим и дорогостоящим, целесообразно внести некоторую избыточности в структуру базы данных с целью повышения общей производительности.

Теперь определим типы используемых данных. Можно выделить следующие основные типы данных:

строка (символ)

битовый

числа (целые, с фиксированной точкой, с плавающей точкой)

деньги

дата-время

Получим следующее разбиение на таблицы:

владелец

ФИО

(составной)

[строка]

пол

(простой)

[строка]

адрес

(составной)

(многозначный)

[строка]

дата рождения

(составной)

[дата]

телефон

(составной)

(многозначный)

[строка]

услуга

название

(простой)

[строка]

цена

(простой)

[деньги]

специальность

название

(простой)

[строка]

журнал оказанных услуг

дата оказания услуги

(составной)

[дата-время]

время, на оказание услуги

(составной)

[дата-время]

автомобиль

регистрационный номер

(составной)

[строка]

год выпуска

(простой)

[дата]

цвет автомобиля

(простой)

[строка]

марка автомобиля

(простой)

[строка]

марка автомобиля

название

(простой)

[строка]

7

мастер

ФИО

(составной)

[строка]

специальность

(простой)

[строка]

Определение доменов атрибутов

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

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

Приведѐм небольшой пример. Пол человека может быть записан или как «муж»/«жен», или как «м»/«ж». Для того, чтобы обеспечить однозначность написания, определяется домен. При попытке внести значение, которое не включено в домен, будет выдаваться ошибка о невозможности внесения данных.

Для учебной базы данных доменами могут быть выбраны:

пол владельца

дата рождения владельца

год выпуска автомобиля

дата оказания услуги

время, затраченное на оказание услуги

Определение первичных ключей

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

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

Потенциальный ключ обладает двумя свойствами:

уникальность: ключ единственным образом идентифицирует экземпляр сущности;

неприводимость: никакое допустимое подмножество ключа не обладает свойством уникальности.

Примером потенциального ключа могут служить табельный номер или номер паспорта.

Первичным ключом называется некоторый выбранный потенциальный ключ сущности.

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

используйте потенциальный ключ с минимальным набором атрибутов;

используйте тот потенциальный ключ, который имеет минимальную вероятность потери уникальности значений в будущем;

по возможности используйте числовой потенциальный ключ;

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

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

8

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

Перечислим первичные ключи из рассматриваемого примера.

Для владельца это код_владельца

Для автомобиля это регистрационный_номер

Для услуги это код_услуги

Для специальности это код_специальности

Для журнала оказанных услуг это номер_чека

Для марки автомобиля это код_марки

Для мастера это табельный_номер

Определение внешних ключей

Внешний ключ — это атрибут или множество атрибутов внутри сущности, которое соответствует потенциальному ключу некоторой (может быть, той же самой) сущности.

Внешние ключи позволяют определять логическое связывание таблиц. Суть связывания состоит в установлении соответствия полей связи родительской и дочерней таблиц.

Перечислим внешние ключи с указанием таблиц, на которые они ссылаются. В таблице автомобили три внешних ключа:

код_владельца

(таблица владельцы)

код_марки

(таблица марки автомобилей)

код_цвета

(таблица цвета)

В таблице журнал_оказанных_услуг тоже три внешних ключа:

регистрационный_номер

(таблица автомобили)

табельный_номер

(таблица мастера)

код_услуги

(таблица услуги)

И, наконец, в таблице мастера есть один внешний ключ код_специальности, ссылающийся

на таблицу специальности.

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

Создание диаграммы «сущность-связь»

При создании диаграммы «сущность-связь» чаще всего используется какая-либо CASEсреда.

CASE-технология (Computer-Aided Software/System Engineering) представляет собой совокупность методологий анализа, проектирования, разработки и сопровождения сложных систем и поддерживается комплексом взаимосвязанных средств автоматизации.

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

9

область, анализировать ее модель на всех этапах разработки и сопровождения информационной системы и разрабатывать приложения для пользователей.

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

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

На рисунке приведена диаграмма, разработанная средствами MS Visio 2003.

цвета

PK код_цвета

название

владелецы

PK код_владельца

ФИО

пол

адрес дата_рождения телефон

автомобили

PK регистрационный_номер

год_выпуска FK1 код_владельца FK2 код_марки FK3 код_цвета

журнал_оказанных_услуг

PK номер_чека

дата_оказания затраченное время

FK1 регистрационный_номер FK2 табельный_номер

FK3 код_услуги

марки_автомобилей

PK код_марки

название

услуги

PK код_услуги

название

цена

мастера

специальности

PK

табельный_номер

PK

код_специальности

ФИО

название

FK1

код_специальности

Рисунок 1. Диаграмма «сущность-связь» учебной базы данных

10

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

Прежде чем приступить к заполнению таблиц, необходимо их создать. Сделать это можно одним из двух способов.

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

Второй способ заключается в самостоятельном написании запросов по созданию таблиц. Остановимся на этом подробнее.

Один из возможных синтаксисов запроса на создание таблицы выглядит следующим образом:

create table <имя таблицы>

(

<имя столбца 1> <тип данных> <ограничения>, <имя столбца 2> <тип данных> <ограничения>,

…,

<имя столбца n> <тип данных> <ограничения>, <дополнительное ограничение 1>, <дополнительное ограничение 2>,

…,

<дополнительное ограничение n>

)

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

обязательное для заполнения поле (not null);

поле, значение которого должно удовлетворять условию (check);

уникальное поле, значение которого не может повторяться (unique);

ограничение первичного ключа (CONSTRAINT <имя ограничения> PRIMARY KEY

(<название столбца, на который накладывается ограничение>));

ограничение внешнего ключа (CONSTRAINT <имя ограничения> FOREIGN KEY

(<название столбца, на который накладывается ограничение>) REFERENCES <имя таблицы на которую ссылается столбец>).

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

целое число (int)

вещественное число (float)

целое число с фиксированным количеством знаков после запятой (decimal)

деньги (money)

дата и время (datetime)

строка фиксированной длины (char)

строка переменной длины (varchar)

11

Приведѐм примеры использования этого синтаксиса при создании учебной базы данных.

Прежде чем начать, следует обратить внимание на правильный порядок создания таблиц. Например, нельзя создавать таблицу с внешними ключами до того, как будут созданы таблицы, на которые они ссылаются. Запишем запросы на создание таблиц учебной базы данных в нужном порядке.

Таблица владельцы:

create table clients

(

id int not null,

fio varchar(64) not null,

sex char(1) not null check (sex in (‘м’, ‘ж’)), address varchar(64),

phone varchar(16), birth date,

CONSTRAINT clients_pk PRIMARY KEY (id)

)

Таблица цвета:

create table colors

(

id int not null,

title varchar(64) unique not null, CONSTRAINT colors_pk PRIMARY KEY (id)

)

Таблица марки_автомобилей:

create table brands

(

id int not null,

title varchar(64) unique not null, CONSTRAINT brands_pk PRIMARY KEY (id)

)

Таблица услуги:

create table services

(

id int not null,

title varchar(64) unique not null,

price decimal(10, 2) not null check (price>0), CONSTRAINT services_pk PRIMARY KEY (id)

)

12

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

Аббревиатура SQL расшифровывается как «Structured Query Language» — язык структурированных запросов. С помощью этого языка вы можете работать с записями в базах данных.

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

При помощи команд SQL можно создавать и удалять таблицы в базах данных, добавлять в них данные или вносить изменения, искать и быстро находить нужные сведения.

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

Структура базы данных

Прежде чем мы начнем разбирать запросы, нужно, чтобы вы поняли иерархию базы данных.

База данных SQL — это набор взаимосвязанных сведений, хранящихся в таблицах. В каждой таблице есть столбцы, описывающие хранящиеся в них данные, и строки, в которых эти данные хранятся. Поле — это отдельный кусочек данных в строке. Чтобы найти нужные данные, мы должны написать, что именно мы хотим получить.

Возьмем для примера некую компанию, штат которой разбросан по всему миру. Допустим, у этой компании есть много баз данных. Чтобы увидеть их полный список, нужно набрать SHOW DATABASES;

Результат может выглядеть как-то так:

+--------------------+
|     Databases      |
+--------------------+
| mysql              |
| information_schema |
| employees          |
| test               |
| sys                |
+--------------------+

В каждой отдельной базе данных может быть много таблиц. Чтобы увидеть, какие таблицы есть в базе данных employees из нашего примера, нужно набрать SHOW TABLES in employees;. В таблицах могут содержаться данные по разным командам, что отражается в названиях: engineering, product, marketing, sales.

+----------------------+
| Tables_in_employees  |
+----------------------+
| engineering          |
| product              |
| marketing            |
| sales                |
+----------------------+

Все таблицы состоят из различных столбцов, описывающих данные.

Чтобы просмотреть столбцы таблицы Engineering, используйте Describe Engineering;. Каждый столбец этой таблицы может описывать какой-то один атрибут сотрудника, например: employee_id, first_name, last_name, email, country и salary.

Вывод:

+-----------+-------------------+--------------+
| Name      |         Null      |      Type    |  
+-----------+-------------------+--------------+
|EMPLOYEE_ID| NOT NULL          | INT(6)       |  
|FIRST_NAME | NOT NULL          |VARCHAR2(20)  |
|LAST_NAME  | NOT NULL          |VARCHAR2(25)  | 
|EMAIL      | NOT NULL          |VARCHAR2(255) |
|COUNTRY    | NOT NULL          |VARCHAR2(30)  |
|SALARY     | NOT NULL          |DECIMAL(10,2) |
+-----------+-------------------+--------------+

Таблицы также состоят из строк — отдельных записей. В нашем примере в строках будут указаны id, имена, фамилии, email, зарплата и страны проживания сотрудников. Каждая строка будет касаться одного сотрудника, допустим, из команды Engineering.

Базовые запросы SQL

Все операции, которые можно осуществлять с данными, входят в понятие «CRUD».

CRUD расшифровывается как Create, Read, Update и Delete (создать, прочесть, обновить, удалить). Это четыре основных операции, которые мы осуществляем, делая запросы к базе данных.

Мы создаем информацию в базе (CREATE), мы читаем, получаем информацию из базы (READ), мы обновляем данные или осуществляем какие-то манипуляции с ними (UPDATE) и, при желании, можем удалять данные (DELETE).

Для осуществления различных операций с данными в SQL есть специальные ключевые слова (операторы). Ниже мы рассмотрим некоторые простые запросы SQL и их синтаксис.

Ключевые слова в SQL

CREATE DATABASE

Для создания базы данных с именем engineering мы используем следующий код:

CREATE DATABASE engineering;

CREATE TABLE

Синтаксис:

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype
);

Этот запрос создает новую таблицу в базе данных.

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

Что касается типов данных (datatype), они могут быть разными. Самые распространенные — INT, DECIMAL, DATETIME, VARCHAR, NVARCHAR, FLOAT и BIT.

В нашем примере запрос может быть таким:

CREATE TABLE engineering (
employee_id  int(6) NOT NULL,
first_name   varchar(20) NOT NULL,
last_name  varchar(25) NOT NULL,
email  varchar(255) NOT NULL,
country varchar(30),
salary  decimal(10,2) NOT NULL
);

Таблица, созданная по этому запросу, будет выглядеть так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY


ALTER TABLE

После создания таблицы мы можем изменять ее путем добавления столбцов.

Синтаксис:

ALTER TABLE table_name 
ADD column_name datatype;

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

ALTER TABLE engineering
ADD  birthday date;

Теперь таблица выглядит немного иначе:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY BIRTHDAY


INSERT

Это ключевое слово служит для вставки данных в таблицы и создания новых строк. В аббревиатуре CRUD это соответствует букве C.

Синтаксис:

INSERT INTO table_name(column1, column2, column3,..) 
VALUES(value1, 'value2', value3,..);

Этот запрос создает новую запись в таблице, т. е. новую строку.

В части INSERT INTO мы указываем столбцы, которые хотим заполнить информацией. В VALUES указана информация, которую нужно сохранить.

При вставке строковых значений их нужно брать в одинарные кавычки.

Например:

INSERT INTO table_name(employee_id,first_name,last_name,email,country,salary) 
VALUES
(1,'Timmy','Jones','timmy@gmail.com','USA',2500.00);
(2,'Kelly','Smith','ksmith@gmail.com','UK',1300.00);

Теперь таблица будет выглядеть так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00

SELECT

Это ключевое слово служит для выборки данных из базы. В CRUD эта операция соответствует букве R.

Синтаксис:

SELECT  column1,column2
FROM    table_name;

В нашем примере этот запрос будет выглядеть следующим образом:

SELECT first_name,last_name
FROM   engineering;

Результат:

+-----------+----------+
|FirstName  | LastName |
+-----------+----------+
| Timmy     | Jones    |
| Kelly     | Smith    |
+-----------+----------+

Ключевое слово SELECT указывает на конкретный столбец, из которого мы хотим выбрать данные.

В части FROM определяется сама таблица.

Вот еще один пример запроса SELECT:

SELECT * FROM table_name;

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

WHERE

WHERE позволяет составлять более специфичные (конкретные) запросы.

Например, мы можем использовать WHERE, чтобы выбрать из нашей таблицы Engineering сотрудников с определенным уровнем зарплаты.

SELECT employee_id,first_name,last_name,email,country
FROM engineering
WHERE salary > 1500

Таблица из предыдущего примера:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00

Теперь вывод будет такой:

+-----------+----------+----------+----------------+------------+
|employee_id|first_name|last_name |email           |country     |
+-----------+----------+----------+----------------+------------+
|          1| Timmy    |Jones     |timmy@gmail.com | USA        |
+-----------+----------+----------+----------------+------------+

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

Операторы AND, OR, BETWEEN в SQL

Эти операторы позволяют еще больше уточнить запрос. С их помощью можно добавить больше критериев в блоке WHERE.

Оператор AND принимает два условия, причем, чтобы строка попала в результат, оба условия должны быть истинными.

SELECT column_name
FROM table_name
WHERE column1 =value1
    AND column2 = value2;

OR тоже принимает два условия, но чтобы строка попала в результат, достаточно истинности хотя бы одного.

SELECT column_name
FROM table_name
WHERE column_name = value1
    OR column_name = value2;

Оператор BETWEEN отфильтровывает результаты в определенном диапазоне чисел или текста.

SELECT column1,column2
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

Все эти операторы можно комбинировать друг с другом.

Допустим, наша таблица выглядит так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Если мы напишем такой запрос:

SELECT * FROM engineering
WHERE  employee_id BETWEEN 3 AND 7
        AND 
        country = 'Germany';

Мы получим следующий результат:

+------------+-----------+-----------+----------------+--------+--------+
|employee_id | first_name| last_name | email          |country |salary  |
+------------+-----------+-----------+----------------+--------+--------+
|5           |Emilia     |Fischer    |emfis@gmail.com | Germany| 2365.90|
|7           |Louis      |Meyer      |lmey@gmail.com  | Germany| 2145.70|
+------------+-----------+-----------+----------------+--------+--------+

Были выбраны все столбцы, где employee_id от 3 до 7, а страна проживания — Германия.

ORDER BY

Ключевое слово ORDER BY позволяет отсортировать выдачу по столбцам, указанным в SELECT.

Отсортированные результаты выводятся в порядке возрастания или убывания.

По умолчанию сортировка идет по возрастанию. Но мы можем указать желаемый порядок явно — при помощи команды ORDER BY column_name DESC | ASC .

SELECT employee_id, first_name, last_name,salary
FROM engineering
ORDER BY salary DESC;

В этом примере мы отсортировали зарплату сотрудников в команде engineering и представили вывод в порядке убывания числовых значений (DESC — от англ. descending — «нисходящий»).

GROUP BY

Ключевое слово GROUP BY в SQL позволяет комбинировать строки с идентичными и похожими данными.

Это полезно для приведения в порядок дублирующихся данных и записей, которые повторяются в таблице многократно.

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;

Здесь COUNT(*) подсчитывает все строки и возвращает число строк в указанной таблице, группируя строки-дубликаты.

От редакции Techrocks: о COUNT и других агрегатных функциях можно почитать в статье «Агрегатные функции в SQL: объяснение с примерами запросов».

LIMIT

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

Это бывает полезно при работе с большими наборами данных. Если данных много, запрос может обрабатываться слишком долго. Но когда будет достигнут лимит результатов, обработка прекратится.

Синтаксис:

SELECT column1,column2
FROM table_name
LIMIT number;

UPDATE

Ключевое слово UPDATE позволяет обновлять записи в таблице. В CRUD этой операции соответствует буква U.

Синтаксис:

UPDATE table_name 
SET column1 = value1, 
    column2 = value2 
WHERE condition;

В условии WHERE указывается запись, которую нужно отредактировать.

UPDATE engineering
SET    country = 'Spain'
WHERE   employee_id = 1

Прежде наша таблица выглядела так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Теперь, после выполнения запроса, она выглядит так:

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL COUNTRY SALARY
1 Timmy Jones timmy@gmail.com Spain 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Обновилась страна проживания сотрудника с id 1.

Обновить информацию можно и с помощью значений из другой таблицы. Для этого применяется ключевое слово JOIN.

UPDATE table_name
SET table_name1.column_name1 = table_name2.column_name1
    table_name1.column_name2 = table_name2.column2
FROM table_name1
JOIN table_name2 
    ON table_name1.column_name = table_2.column_name;

DELETE

Ключевое слово DELETE служит для удаления записей из таблицы. В CRUD операция удаления представлена буквой D.

Синтаксис:

DELETE FROM table_name 
WHERE condition;

Пример с нашей таблицей:

DELETE FROM engineering
WHERE employee_id = 2;

При выполнении запроса будет удалена запись о сотруднике с id 2 из команды engineering.

DROP COLUMN

Чтобы удалить из таблицы столбец, можно воспользоваться следующим кодом:

ALTER TABLE table_name 
DROP COLUMN column_name;

DROP TABLE

Для удаления всей таблицы выполните следующий запрос:

DROP TABLE table_name;

Итоги

В этой статье мы пробежались по самым базовым запросам, с которых начинают все новички в SQL.

Мы научились создавать таблицы и строки, группировать и обновлять данные и, наконец, удалять их. Попутно мы также разобрали SQL-запросы в привязке к операциям CRUD.


Перевод статьи «Learn SQL Queries – Database Query Tutorial for Beginners».

От редакции Techrocks. Вам также могут быть интересны другие статьи по теме SQL:

  • Топ-30 вопросов по SQL на технических собеседованиях
  • ТОП-10 сайтов, на которых можно потренировать SQL-запросы
  • Порядок выполнения SQL-операций
  • Выражение CASE в SQL: объяснение на примерах

SQL расшифровывается как язык структурированных запросов (Structured Query Language) и является языком, который вы используете для управления данными в базах данных. SQL состоит из команд и декларативных операторов, которые действуют как инструкции для базы данных, чтобы она могла выполнять задачи.

Вы можете использовать команды SQL для создания таблицы в базе данных, для добавления и изменения больших объемов данных, для поиска в ней, чтобы быстро найти что-то конкретное, или для удаления таблицы целиком.

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

Базовая структура базы данных

Прежде чем мы начнем, вы должны понять иерархию базы данных.

База данных SQL — это набор связанной информации, хранящейся в таблицах. В каждой таблице есть столбцы, описывающие данные в них, и строки, содержащие фактические данные. Поле — это отдельный фрагмент данных в строке. 

Например, удаленная компания может иметь несколько баз данных. Чтобы увидеть полный список их баз данных, мы можем ввести SHOW DATABASES; и мы можем подключиться к базе данных сотрудников.

Результат будет выглядеть примерно так:

+--------------------+
|     Databases      |
+--------------------+
| mysql              |
| information_schema |
| employees          |
| test               |
| sys                |
+--------------------+

В одной базе данных может быть несколько таблиц. Взяв пример из вышеупомянутого, чтобы увидеть различные таблицы в базе данных сотрудников, мы можем сделать запрос SHOW TABLES in employees;. Это запрос выведет список всех существующих  таблиц в базе данных employees.

+----------------------+
| Tables_in_employees  |
+----------------------+
| engineering          |
| product              |
| marketing            |
| sales                |
+----------------------+

Каждая таблица состоит из разных наборов столбцов, описывающих данные.

Чтобы увидеть набор  столбцов в таблице, используйте SQL запрос Describe engineering ;. Например, таблица engineering может иметь столбцы, определяющие один атрибут, такие как employee_id, first_name, last_name, email, country и salary.

+-----------+-------------------+--------------+
| Name      |         Null      |      Type    |  
+-----------+-------------------+--------------+
|EMPLOYEE_ID| NOT NULL          | INT(6)       |  
|FIRST_NAME | NOT NULL          |VARCHAR2(20)  |
|LAST_NAME  | NOT NULL          |VARCHAR2(25)  | 
|EMAIL      | NOT NULL          |VARCHAR2(255) |
|COUNTRY    | NOT NULL          |VARCHAR2(30)  |
|SALARY     | NOT NULL          |DECIMAL(10,2) |
+-----------+-------------------+--------------+

Таблицы также состоят из строк, которые представляют собой отдельные записи в таблице. Например, строка будет включать записи под столбцами employee_id, first_name, last_name, e-mail, salary и country. Эти строки будут определять и предоставлять информацию об одном человеке в группе инженеров.

Базовые запросы SQL

Все операции, которые вы можете выполнять с данными, следуют аббревиатуре CRUD.

CRUD обозначает 4 основные операции, которые мы выполняем при запросе базы данных: Create (создание), Read (чтение), Update (обновление) и Delete (удаление).

Ниже мы рассмотрим некоторые базовые запросы SQL вместе с их синтаксисом, необходимые чтобы начать работу с базами данных.

SQL оператор CREATE DATABASE

Чтобы создать базу данных с именем engineering, мы можем использовать следующий код:

CREATE DATABASE engineering;

SQL оператор CREATE TABLE

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype
);

Этот запрос создает новую таблицу внутри базы данных.

Он указываем  имятаблица, и различные столбцы, которые мы хотим, чтобы наша имела таблица.

Мы можем использовать множество типов данных. Вот некоторые из наиболее распространенных: INT, DECIMAL, DATETIME, VARCHAR, NVARCHAR, FLOAT и BIT.

В нашем примере выше это может выглядеть следующим образом:

CREATE TABLE engineering (
employee_id  int(6) NOT NULL,
first_name   varchar(20) NOT NULL,
last_name  varchar(25) NOT NULL,
email  varchar(255) NOT NULL,
country varchar(30),
salary  decimal(10,2) NOT NULL
);

Таблица, которую мы создаем из этих данных, будет выглядеть примерно так:

employee_id first_name last_name email country salary
          

SQL оператор ALTER TABLE

После создания таблицы мы можем изменить ее, добавив к ней еще один столбец.

ALTER TABLE table_name 
ADD column_name datatype;

Например, если бы мы хотели, мы могли бы добавить столбец  birthday в нашу существующую таблицу, набрав:

ALTER TABLE engineering
ADD  birthday date;

Теперь наша таблица будет выглядеть так: 

employee_id first_name last_name email country salary birthday
            

SQL оператор INSERT 

Так мы вставляем данные в таблицы и создаем новые строки. Это часть C(create) в CRUD.

INSERT INTO table_name(column1, column2, column3,..) 
VALUES(value1, 'value2', value3,..);

В запросе  INSERT INTO мы можем указать столбцы, которые мы хотим заполнить информацией. 

Внутри VALUES находится информация, которую мы хотим сохранить. Это создает новую запись в таблице, которая представляет собой новую строку.

Всякий раз, когда мы вставляем строковые значения, они заключаются в одинарные кавычки ».

Например:

INSERT INTO table_name(employee_id,first_name,last_name,email,country,salary) 
VALUES
(1,'Timmy','Jones','timmy@gmail.com','USA',2500.00);
(2,'Kelly','Smith','ksmith@gmail.com','UK',1300.00);

Таблица теперь будет выглядеть так:

employee_id first_name last_name email country salary
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00

SQL оператор SELECT

Этот оператор извлекает данные из базы данных. Это R (read) часть CRUD.

SELECT column1,column2 FROM table_name;

В нашем предыдущем примере это выглядело бы так:

SELECT first_name,last_name
FROM   engineering;

Вывод:

+-----------+----------+
|FirstName  | LastName |
+-----------+----------+
| Timmy     | Jones    |
| Kelly     | Smith    |
+-----------+----------+

Оператор SELECT указывает на конкретный столбец, из которого мы хотим получить данные, которые должны отображаться в результатах.

Часть FROM определяет саму таблицу из которой будетпроисходить выборка.

Вот еще один пример SELECT:

SELECT * FROM table_name;

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

SQL оператор WHERE

WHERE позволяет нам уточнить наши запросы.

Если бы мы хотели отфильтровать нашу таблицу engineering для поиска сотрудников с определенной зарплатой, мы бы использовали WHERE.

SELECT employee_id,first_name,last_name,email,country
FROM engineering
WHERE salary > 1500

Таблица из предыдущего примера:

employee_id first_name last_name email country salary
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00

Результат выполнения запроса:

+-----------+----------+----------+----------------+------------+
|employee_id|first_name|last_name |email           |country     |
+-----------+----------+----------+----------------+------------+
|          1| Timmy    |Jones     |timmy@gmail.com | USA        |
+-----------+----------+----------+----------------+------------+

Это фильтрует и показывает результаты, которые удовлетворяют условию, т. е. отображаются только строки людей с зарплатой более 1500.

SQL операторы AND, OR и BETWEEN

Эти операторы позволяют сделать запрос еще более конкретным, добавив дополнительные критерии в оператор WHERE.

Оператор AND принимает два условия, и оба они должны быть истинными, чтобы строка отображалась в результате.

SELECT column_name
FROM table_name
WHERE column1 =value1
    AND column2 = value2;

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

SELECT column_name
FROM table_name
WHERE column_name = value1
    OR column_name = value2;

Оператор BETWEEN отфильтровывает определенный диапазон чисел или текста.

SELECT column1,column2
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

Мы также можем использовать эти операторы в сочетании друг с другом.

Скажем, наша таблица теперь такая:

employee_id first_name last_name email country salary
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Если бы мы использовали оператор, подобный приведенному ниже:

SELECT * FROM engineering
WHERE  employee_id BETWEEN 3 AND 7
        AND 
        country = 'Germany';

Мы получили бы такой вывод:

+------------+-----------+-----------+----------------+--------+--------+
|employee_id | first_name| last_name | email          |country |salary  |
+------------+-----------+-----------+----------------+--------+--------+
|5           |Emilia     |Fischer    |emfis@gmail.com | Germany| 2365.90|
|7           |Louis      |Meyer      |lmey@gmail.com  | Germany| 2145.70|
+------------+-----------+-----------+----------------+--------+--------+

 Это выбирает все поля, у строк которых есть employee_id от 3 до 7 и указана страна Germany.

SQL Оператор ORDER BY

Оператор ORDER BY сортирует по столбцам, упомянутым в операторе SELECT.

Он сортирует результаты и представляет их в алфавитном или числовом порядке по убыванию или возрастанию (по умолчанию — по возрастанию).

Мы можем указать направление сортировки с помощью команды: ORDER BY имя_столбца DESC | ASC.

SELECT employee_id, first_name, last_name,salary
FROM engineering
ORDER BY salary DESC;

В приведенном выше примере мы сортируем зарплаты сотрудников в команде инженеров и представляем их в порядке убывания числового значения.

SQL оператор GROUP BY

GROUP BY позволяет нам объединять строки с идентичными данными.

Это полезно при аггрегации данных.

SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;

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

SQL оператор  LIMIT

Оператор LIMIT позволяет указать максимальное количество строк, которые должны возвращаться в результатах.

Это полезно при работе с большим набором данных, из-за которого выполнение запросов может занять много времени. Ограничивая получаемые результаты, вы можете сэкономить время.

SELECT column1,column2
FROM table_name
LIMIT number;

SQL оператор UPDATE

Вот как мы обновляем строку в таблице. Это U(update) часть CRUD.

UPDATE table_name 
SET column1 = value1, 
    column2 = value2 
WHERE condition;

 Условие WHERE указывает запись, которую вы хотите отредактировать.

UPDATE engineering
SET    country = 'Spain'
WHERE   employee_id = 1

 Наша таблица до выполнения запроса:

employee_id first_name last_name email country salary
1 Timmy Jones timmy@gmail.com USA 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Теперь будет выглядеть так:

employee_id first_name last_name email country salary
1 Timmy Jones timmy@gmail.com Spain 2500.00
2 Kelly Smith ksmith@gmail.com UK 1300.00
3 Jim White jwhite@gmail.com UK 1200.76
4 José Luis Martìnez jmart@gmail.com Mexico 1275.87
5 Emilia Fischer emfis@gmail.com Germany 2365.90
6 Delphine Lavigne lavigned@gmail.com France 2108.00
7 Louis Meyer lmey@gmail.com Germany 2145.70

Этот запрос обновит столбец country сотрудника с employee_id равное  1.

SQL оператор DELETE

DELETE — это D-часть CRUD. С помощью оператора  DELETE мы удаляем запись из таблицы.

DELETE FROM table_name 
WHERE condition;

Например, удадение из нашей таблицы engineering удаление записи может выглядеть так:

DELETE FROM engineering
WHERE employee_id = 2;

 Этот запрос  удаляет запись сотрудника с идентификатором 2 из таблицы engineering.

SQL оператор DROP COLUMN

Чтобы удалить определенный столбец из таблицы, мы сделаем следующее:

ALTER TABLE table_name 
DROP COLUMN column_name;

 SQL оператор DROP TABLE

Чтобы удалить всю таблицу, мы можем сделать так:

DROP TABLE table_name;

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

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