Курсовая работа (т): Язык структурированных запросов SQL. Использование SQL в прикладном программировании

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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

В третьей части работы были продемонстрированы возможности работы с SQL в различных языках программирования высокого уровня. Для сравнения были взяты три языка - каждый в своей среде разработки, - и изучено подключение к базам данных и использование SQL-запросов. В случае первых двух языков (Pascal и C++) были созданы тестовые приложения, листинг которых находится в соответствующих приложениях. В случае третьего языка (ABAP) за неимением возможности разработать отдельное приложение был продемонстрирован существующий код.

Из трех языков наиболее удобным в использовании видится Pascal под управлением Lazarus; C++, как и в случае с другими аспектами этого языка - не только подключением к базам данных - обладает широкими возможностями, но сложен на практике; в ABAP наиболее естественно интегрирован SQL, но возможности самого языка программирования несколько ограничены. В процессе выполнения курсовой работы были выполнены следующие задачи:

) даны определения баз данных и СУБД, перечислены и раскрыты важнейшие их особенности; составлена классификация баз данных и, соответственно, систем управления базами данных по различным признакам;

) описаны различные модели данных, перечислены характеристики БД (базы данных) и СУБД (отношения, операции, ключи и так далее). Дано краткое описание языка UML (Unified Modeling Language), использующегося для проектирования реляционной БД, а также описан процесс проектирования базы данных;

) дана характеристика языка SQL; перечислены его особенности в рамках теории; дано поэтапное описание (с примерами) создания базы данных и таблицы, перечислены основные операторы языка; указаны особенности использования SQL в различных СУБД;

) изучена теоретическая возможность использования SQL в прикладном программировании; перечислены достоинства и недостатки такой концепции;

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

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. ГОСТ Р ИСО/МЭК ТО 10032-2007. Эталонная модель управления данными [Текст]. - Введ. 27.12.2007. - М.: Стандартинформ, 2009. - 40 с.

. Баженова И.Ю. Разработка распределенных приложений баз данных: Курс лекций. - М.: МГУ им. М.В. Ломоносова, 2006. - 203 с.

. Баканов В.М. Введение в язык SQL запросов к базам данных: Учебное пособие. - М.: МГАПИ, 2002. - 61 с.: ил.

. Бураков П.В., Петров В.Ю. Введение в системы баз данных: Учебное пособие. - СПб: СПбГУ ИТМО, 2010. - 128 с.

. Гудов А.М., Шмакова Л.Е. Введение в язык структурированных запросов SQL: Учебное пособие. - Кемерово, Кемеровский госуниверситет, 2001. - 118 с.

. Дьяков И.А. Базы данных. Язык SQL: Учебное пособие. - Тамбов: ТГТУ, 2004. - 80 с.

. Зиборов В.В. MS Visual C++ 2010 в среде .NET. Библиотека программиста. - Спб.: Питер, 2012. - 320 с.: ил.

. Кетков Ю.Л., Кетков А.Ю. Свободное программное обеспечение. FREE PASCAL для студентов и школьников. - СПб.: БХВ-Петербург, 2011. - 384 с.: ил.

. Копейкин М.В., Спиридонов В.В., Шумова Е.О. Базы данных. Основы SQL реляционных баз данных: Учебное пособие. - СПб.: СЗТУ, 2005. - 160 с.

. Э.В. Сысоев, Е.В. Бурцева. Базы данных: лекции к курсу. - Тамбов : Изд-во Тамб. гос. техн. ун-та, 2007. - 48 с.

. Токмаков Г. П. Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML: учебное пособие / Г. П. Токмаков. - Ульяновск: УлГТУ, 2010. − 192 с.

. Токмаков Г. П. Базы данных и знаний. Проектирование баз данных по технологии «клиент-сервер» и разработка клиентских приложений: Учебное пособие / Г.П. Токмаков. - Ульяновск; УлГТУ, 2005. - 143 с.

. Фаро С., Паскаль Л. Рефакторинг SQL-приложений. - Пер. с англ. - СПб: Символ-Плюс, 2009. - 336 с.: ил.

. Шварц Б., Зайцев П., Ткаченко В., Заводны Дж., Ленц А., Бэллинг Д. MySQL. Оптимизация производительности, 2-е издание. - Пер. с англ. - Спб.: Символ-Плюс, 2010. - 832 с.: ил.

. Michael Alexander, Richard Kusleika. Access 2013 Bible. - New Jersey: Wiley, 2013 - 1296 p.

. Grant Allen, Mike Owens. The Definitive Guide to SQLite, Second Edition. - New York: Apress, 2010. - 368 p.

. Donald Bales. Beginning Oracle PL/SQL. Second edition. - New York: Apress, 2015. - 492 p.

. Alan Beaulieu. Learning SQL, Second Edition. - California: O’Reilly Media, Inc., 2009. - 338 p.

. Paul DuBois. MySQL (5th Edition) (Developer's Library). - Massachusetts: Addison-Wesley Professional, 2013. - 1176 p.

. Ken Greenwood. Sams Teach Yourself ABAP/4 in 21 Days. - Indiana: Sams, 1998. - 752 p.

. Ken Jones. Microsoft® SQL Server® 2008 T-SQL Fundamentals. - Washington: Microsoft Press, 2008. - 688 p.

. Bjarne Stroustrup. Programming: principles and practice using C++. Second edition. - Massachusetts: Addison-Wesley Professional, 2014. - 1312 p.

. James Wood. Object-Oriented Programming with ABAP Objects. 2nd, updated and revised edition 2016. - Massachusetts: SAP Press, 2015 - 470 p.

24. Базы данных URL: <http://www.site-do.ru/db/db1.php>, свободный доступ.

. Википедия - свободная энциклопедия [Электронный ресурс]. - URL: <https://ru.wikipedia.org/wiki/Данные>, свободный доступ.

. CIT Forum URL: <http://citforum.ru/>, свободный доступ.

. Википедия - свободная энциклопедия [Электронный ресурс]. - URL: <https://ru.wikipedia.org/wiki/SQL>, свободный доступ.

ПРИЛОЖЕНИЯ

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

DATABASE Test_SQL_1 CHARACTER SET utf8 COLLATE utf8_general_ci;USE Test_SQL_1;TABLE person

(person_id SMALLINT UNSIGNED,VARCHAR(20),VARCHAR(20),CHAR(1),_date DATE,VARCHAR(30),VARCHAR(20),VARCHAR(20),VARCHAR(20),_code VARCHAR(20),pk_person PRIMARY KEY (person_id)

);ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;ALTER TABLE person MODIFY gender enum('M','F');INTO person

(person_id, fname, lname, gender, birth_date)(null, 'William','Turner', 'M', '1972-05-27');INTO person

(person_id, fname, lname, gender, birth_date,, city, state, country, postal_code)(null, 'Susan','Smith', 'F', '1975-11-02',

'23 Maple St.', 'Arlington', 'VA', 'USA', '20220');TABLE favorite_food

(person_id SMALLINT UNSIGNED,VARCHAR(20),pk_favorite_food PRIMARY KEY (person_id, food),fk_fav_food_person_id FOREIGN KEY (person_id)person (person_id)

);INTO favorite_food (person_id, food)(1, 'pizza');INTO favorite_food (person_id, food)(1, 'cookies');INTO favorite_food (person_id, food)(1, 'nachos');person_id, fname, lname, birth_datepersonperson_id = 1;foodfavorite_foodperson_id = 1BY food;

Приложение Б

Список основных операторов и служебных слов SQL

Оператор

Назначение

CREATE

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

ALTER TABLE

Изменение полей таблицы

DROP

Удаление базы данных или таблицы

SELECT

Выборка из таблицы или таблицы

INSERT

Добавить строку в таблицу

UPDATE

Изменить данные некоторой строки

DELETE

Удалить строки или таблицу


Служебное слово

FROM

Указывает таблицу-источник выборки

WHERE

Указывает условие по некоторому полю

ORDER BY

Упорядочивает по некоторому полю

GROUP BY

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

HAVING

Схож с WHERE, но используется с агрегатными данными

BETWEEN

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

IN

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

LIKE

Производит поиск строки по маске

ALL

Сравнивает значение поля со всеми значениями столбца

DISTINCT

Удаляет повторяющиеся записи из выборки


Приложение В. Листинг тестовой программы, разработанной в Lazarus

unit Unit1;

{$mode objfpc}{$H+}

Classes, SysUtils, mysql56conn, mysql50conn, sqldb, db, FileUtil, Forms,

Controls, Graphics, Dialogs, StdCtrls, ComCtrls, DbCtrls, DBGrids, Grids;

{ TMySQLtest }

TMySQLtest = class(TForm)

ButtonExecute: TButton;

ButtonConnect: TButton;

ButtonExit: TButton;

DataSource1: TDataSource;

EditHost: TEdit;

EditName: TEdit;

EditPassword: TEdit;

Host: TLabel;

Memo1: TMemo;

EditSQLCommand: TMemo;

MySQL50Connection1: TMySQL50Connection;

SQLCommand: TLabel;

SQLQuery1: TSQLQuery;

SQLTransaction1: TSQLTransaction;

StatusBar1: TStatusBar;

UserName: TLabel;

Password: TLabel;

procedure ButtonConnectClick(Sender: TObject);

procedure ButtonExecuteClick(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

MySQLtest: TMySQLtest;

{$R *.lfm}

{ TMySQLtest }PrepareMemo;

//Глобальная процедура для подготовки Memo1 (очистка строк и заполнение заголовков полей)

i: integer;

TempString: String;

MySQLtest.SQLQuery1.Open;

TempString := '';

i := 0;

MySQLtest.Memo1.Clear;

MySQLtest.Memo1.Lines[0] := inttostr(MySQLtest.SQLQuery1.FieldCount);

While i < MySQLtest.SQLQuery1.FieldCount-1 do

begin

TempString := TempString + MySQLtest.SQLQuery1.Fields[i].FieldName + '.......';

inc(i);

end;

TempString := TempString + MySQLtest.SQLQuery1.Fields[i].FieldName;

i:=0;

MySQLtest.Memo1.Lines[0] := TempString;

for i := 1 to length(TempString) do

begin

MySQLtest.Memo1.Lines[1] := MySQLtest.Memo1.Lines[1] + '_'

end;

//Конец процедуры;PutResultToMemo;

//Глобальная процедура для заполнения Memo1 результатами выборки из SQLQuery1

i, j: integer;

FieldName, TempString: String;

MySQLtest.SQLQuery1.Open;

i := 0;

while not MySQLtest.SQLQuery1.EOF do

begin

j := 0;

TempString := '';

while j <= MySQLtest.SQLQuery1.FieldCount-1 do

begin

FieldName := MySQLtest.SQLQuery1.Fields[j].FieldName;

If MySQLtest.SQLQuery1.FieldByName(FieldName).AsString <> '' then

TempString := +MySQLtest.SQLQuery1.FieldByName(FieldName).AsString+'....'

else

TempString := TempString+'[nil]....';

inc(j)

end;

MySQLtest.SQLQuery1.Next;

MySQLtest.Memo1.Lines[i+2] := TempString;

inc(i)

end;

//Конец процедуры;ExecuteQuery;

try

//Начало соединения

MySQLtest.SQLQuery1.Active:=false;

MySQLtest.SQLQuery1.SQL.Clear;

MySQLtest.SQLQuery1.sql.add('SET character_set_client='+#39+'utf8'+#39+', character_set_connection='+#39+'cp1251'+#39+',character_set_results='+#39+'utf8'+#39+';');

MySQLtest.SQLQuery1.ExecSQL;

MySQLtest.SQLQuery1.SQL.Clear;.SQLQuery1.sql.AddStrings(MySQLtest.EditSQLCommand.lines);

//Соединение удачно

//Подготавливаем Memo1

PrepareMemo;

//Записываем результат в Memo1

PutResultToMemo;

except

ShowMessage('Ошибка при выполнении запроса');

exit;;TMySQLtest.ButtonConnectClick(Sender: TObject);

//Эта процедура выполняет подключение к MySQL, основываясь на данных из //3 полей Edit: EditHost, EditName, EditPassword

//Также выполняется первая выборка, основанная на тексте в EditSQLCommand

MySQL50Connection1.HostName := EditHost.Text;

MySQL50Connection1.UserName := EditName.Text;

MySQL50Connection1.Password := EditPassword.Text;

try

MySQL50Connection1.Connected := true

except

ShowMessage('Невозможно подключиться к базе данных');

exit;

end;

try

SQLTransaction1.Active:=true;

except

ShowMessage('Невозможно создать транзакцию');

exit;

end;

ExecuteQuery;

if MySQL50Connection1.Connected = true then

StatusBar1.SimpleText := 'Соединение установлено';TMySQLtest.ButtonExecuteClick(Sender: TObject);

ExecuteQuery.

Приложение Г. Листинг тестовой программы, разработанной в Visual Studio

// TestSQL.cpp: определяет точку входа для консольного приложения.

//

#include <windows.h>

#include <winsock.h>

#include <mysql.h>

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdlib.h>namespace std;_tmain(int argc, _TCHAR* argv[])

{("cls");*conn;_RES *res;_ROW row;i = 0;

// Получение дексриптора соединения= mysql_init(NULL);(conn == NULL)

{(stderr, "Ошибка: невозможно создать дескриптор\n");

}

// Подключение к серверу(!mysql_real_connect(conn, "localhost", "root", "admin", "test", NULL, NULL, 0))

{(stderr, "Ошибка: невозможно подключиться к базе данных\n", mysql_error(conn));

}

{(stdout, "Подключение установлено\n");

}query;<< "Введите SQL-запрос\n";>> query;char* query_char = query.c_str();_set_character_set(conn, "utf8"); //Изменение кодировки запросов_query(conn, query_char); //Отправление запроса, введенного ранее

if (res = mysql_store_result(conn)) {(row = mysql_fetch_row(res)) {(i = 0; i <mysql_num_fields(res); i++) {::cout << row[i] << "\n"; //Циклический вывод данных, полученных из БД

}

}

} else fprintf(stderr, "%s\n", mysql_error(conn));

// Закрытие соединения_close(conn);("Pause");

}

Источник: https://www.bibliofond.ru/detail.aspx?id=862505