Простейшие SQL инструкции…

Итак, сегодня будем обсуждать простейшие SQL инструкции.

Select, Distinct, Order by, Where, Between, Like, проверка неопределенности Null, In All Any Some, Exists…

В качестве инструментов будем использовать

Программу-сервер MySQL, установленную локально

Созданные нами БД и таблицы в программе MySQL WorkBench…

-Delphi XE7 для создания клиента для отправки запросов MySQL. Для простоты, подключаться из программы клиента, будем с помощью технологии DBExpress.

Подготовительные работы

Итак, откроем Delphi и разместим на форме следующие компоненты (я разместил таким образом…). Белое поле справа это DBGrid

1_1

Теперь подключим все компоненты и проверим соединение как это мы делали раньше…

2

 

Если все правильно подключили, видим выбранную таблицу. Я выбрал таблицу Students

3

 

Далее, нам нужно будет в ComboBox добавлять наши запросы, в Memo, соответственно их описывать, а при нажатии на Выполнить – отправлять запрос серверу. Поскольку данных немного и все они статичные – хранить будем прямо в программе.

Программа fm_SimpleSQLRequests 

Для визуализации создал простую программу. Готовый вариант программы fm_SimpleSQLRequests выглядит вот так… (здесь среди компонентов – добавил StatusBar, по ходу дела)

4

Принцип простой – выбираем в Combobox – вид запроса, читаем описание, жмём выполнить и смотрим как работает…

5

 

Основные моменты по программе…

Для удобства, в разделе interface описания типов – создал структуру, запись


type TMySQLRecord=Record

Request:TStringList; // Собственно запрос…
RequestName:TStringList; // Для Combobox…
RequestDescription:TStringList; // Для Memo…
end;


Исходники

42 DB Express Workbench

В “Чистом виде” у Вас программа не заработает, так как в ней настроено подключение к серверу MySQL и базе данных MyDataBase1 и др., но Вы можете создать своё подключение, базу данных и перенастроить. Либо просто просмотреть код…


Не буду останавливаться на коде программы, его можно посмотреть в файле Unit1.pas в исходниках. Остановлюсь на самих SQL запросах… (код из программы, сам SQL запрос жирным шрифтом). Далее пойдут отрывки из кода программы, жирным шрифтом указан сам запрос, остальное, код в Delphi.

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

Select*from TableName, то есть например, select*from Students, в нашем случае. Символ * означает – выбрать все колонки из таблицы. Иными словами этот запрос означает “Покажи мне все колонки из таблицы Студенты”. Итак, далее рассматриваем простейшие запросы в примерах…


///////
// 1 // // Select одной колонки таблицы…
///////
MySQLRecord.RequestName.add(‘Одна колонка Name из таблицы Students’);
MySQLRecord.Request.add(‘Select Name from students‘);
MySQLRecord.RequestDescription.add(
‘Одна колонка Name из таблицы’+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+1]);

//Combobox…
Combobox1.Items.Add(MySQLRecord.RequestName[1]);

6


////////
// 2 /// // Select 2 колонок Name, Family
////////

MySQLRecord.RequestName.add(‘Две колонки Name, Family из таблицы’);
MySQLRecord.Request.add(‘Select Name,Family from students‘);
MySQLRecord.RequestDescription.add(
‘Две колонки Name,Family из таблицы Students’+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+2]);

Combobox1.Items.Add(MySQLRecord.RequestName[2]);

7


////////
// 3 /// // Select без повторяющихся строк, на примере колонки Sex…
////////

MySQLRecord.RequestName.add(‘Sex без повторяющихся строк’);
MySQLRecord.Request.add(‘Select Distinct Sex from students‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[3]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+3]);

Combobox1.Items.Add(MySQLRecord.RequestName[3]);
// Если все нормально, должно остаться Male, Female…

8


////////
// 4 /// // Сортировка OrderBy по возрастанию
////////

MySQLRecord.RequestName.add(‘Сортировка OrderBy (по возрастанию)’);
MySQLRecord.Request.add(‘Select*from students order by family‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[4]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+4]+
#13#10+’По умолчанию, сортировка по возрастанию, но можно добавить ASC, будет тоже самое’);

Combobox1.Items.Add(MySQLRecord.RequestName[4]);

// Тут надо сказать, что полный текст запроса выглядит так Select*from students order by family //asc, но программа понимает и без приставки ask…, то есть по умолчанию, сортирует по ////////////////возрастанию…

9


////////
// 5 /// // Сортировка OrderBy по убыванию
////////

MySQLRecord.RequestName.add(‘Сортировка OrderBy (по убыванию)’);
MySQLRecord.Request.add(‘Select*from students order by family desc‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[5]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+5]);

Combobox1.Items.Add(MySQLRecord.RequestName[5]);

10


////////
// 6 /// // Сравнение where
////////

MySQLRecord.RequestName.add(‘Сравнение where’);
MySQLRecord.Request.add(‘Select*from students where age>=25 and age<=30‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[6]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+6]);

Combobox1.Items.Add(MySQLRecord.RequestName[6]);

11


 

////////
// 7 /// // Диапазон Between
////////

MySQLRecord.RequestName.add(‘Диапазон Between’);
MySQLRecord.Request.add(‘Select*from students where age between 15 and 25‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[7]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+7]);

Combobox1.Items.Add(MySQLRecord.RequestName[7]);

12


////////
// 8 /// // Вхождение, шаблон Like
////////

MySQLRecord.RequestName.add(‘Вхождение, шаблон Like’);
MySQLRecord.Request.add(‘Select*from students where sex like ”%fe%” ‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[8]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+8]+
#13#10+
‘Отобрали записи, содержащие в поле sex, частицу fe’ );

Combobox1.Items.Add(MySQLRecord.RequestName[8]);

13


////////
// 9 /// // НЕ Вхождение, шаблон Like
////////

MySQLRecord.RequestName.add(‘Вхождение, шаблон not Like’);
MySQLRecord.Request.add(‘Select*from students where sex not like ”%fe%” ‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[9]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+9]+
#13#10+
‘Отобрали записи, НЕ содержащие в поле sex, частицу fe’ );

Combobox1.Items.Add(MySQLRecord.RequestName[9]);

14


////////
// 10 /// // Проверка неопределенности NULL
////////

MySQLRecord.RequestName.add(‘Проверка неопределенности NULL’);
MySQLRecord.Request.add(‘Select*from students where sex is null ‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[10]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+10]+
#13#10+
‘Отобрали записи, у которых в поле SEX не NULL, должен показать отсутствие записей, так как неопределенности нет’ );

Combobox1.Items.Add(MySQLRecord.RequestName[10]);

15


 

////////
// 11 /// // Вхождение в множество IN ALL ANY SOME
////////

MySQLRecord.RequestName.add(‘Вхождение в множество IN ALL ANY SOME’);
MySQLRecord.Request.add(‘Select*from students where Family in (”Panteleev”, ”Petrov”) ‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[11]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+11]+
#13#10+
‘Отобрали записи, у которых в поле SEX не NULL, должен показать отсутствие записей, так как неопределенности нет’ );

Combobox1.Items.Add(MySQLRecord.RequestName[11]);

16


 

////////
// 12 /// // Существование EXISTS
////////

MySQLRecord.RequestName.add(‘Существование EXISTS’);
MySQLRecord.Request.add(‘Select*from students where not exists(Select*from students where age=32)‘);

// if exists (Select*from students where Family in (”Panteleev”, ”Petrov”)) then
// select ‘);
MySQLRecord.RequestDescription.add(
MySQLRecord.RequestName[12]+ #13#10+#13#10+
‘Текст запроса’+#13#10+MySQLRecord.Request[Combobox1.ItemIndex+12]+
#13#10+
‘Подзапрос Exists – есть ли студенты с возрастом 32? Если есть тогда внешний запрос ничего не даст’ );

Combobox1.Items.Add(MySQLRecord.RequestName[12]);

17

Итак, мы рассмотрели простейшие SQL запросы… к одной таблице…


[block id=”mysql-first-steps”]

This entry was posted in SQL инструкции, Без рубрики. Bookmark the permalink.