И.А. Волкова, И.Г. Головин, Л.Н. Кузина, М.Г. Мальковский - Модельный SQL-интерпретатор (1114899), страница 6
Текст из файла (страница 6)
В строке-образце наряду с обычнымисимволами выделены специальные символы. Это:%— обозначает любую последовательность из нуля или более символов;_— обозначает любой одиночный символ;[]— обозначает любой одиночный символ из перечисленных в квадратныхскобках. Например, [abcdef]. В квадратных скобках можно задавать идиапазон допустимых символов. Например, [a-f].[^ ] — обозначает любой одиночный символ, не принадлежащийперечисленным в квадратных скобках. Например, [^abcdef] или [^a-f].Вторая альтернатива WHERE-клаузы — IN-альтернатива — содержит выражениетекстового или целого типа. Роль переменных в этом выражении играют поля строкитаблицы.
IN-альтернатива позволяет выбрать те строки, для которых выражениепринимает (не принимает в случае с NOT) одно из значений, перечисленных в спискеконстант <список констант>. Тип констант из списка должен совпадать с типомвыражения, а, следовательно, и с типом имен полей, в него входящих.Третья альтернатива WHERE-клаузы — BOOL-альтернатива — содержит выражениелогического типа, содержащее, как и в IN-альтернативе, имена полей строки в качествепеременных.
Эта альтернатива позволяет выбрать строки, для которых <логическоевыражение> истинно.Логические операции NOT, AND, OR имеют обычный смысл.24Модельный SQL-интерпретатор. Методическое пособие.Четвертая альтернатива WHERE-клаузы — ALL-альтернатива — говорит о том, чтофильтрацию строк проводить не нужно.4.2. Примеры предложений модельного SQL1. Создать таблицу Students, состоящую из четырех полей: поля First_name типа TEXTдлины 10, поля Surname типа TEXT длины 15, поля Age типа LONG и поля Phone типаTEXT длины 9.CREATE TABLE Students (First_name TEXT (10),Surname TEXT (15),Age LONG,Phone TEXT (9) )В результате создается новая пустая таблица Students с заголовком:First_nameSurnameAgePhoneEё структура фиксируется в начальных зонах файла таблицы.2.
Внести в таблицу Stulents сведения о студентах Иванове, Петрове, Федорове иЗахарове.INSERTINSERTINSERTINSERTINTOINTOINTOINTOStudentsStudentsStudentsStudents(((('Sergey', 'Ivanov', 18, '145-45-45' )'Alexey', 'Petrov', 20, '343-65-45' )'Andrey', 'Fedorov', 23, '123-45−18' )'Alexandre', 'Zaharov', 20, '345- 33-33' )После выполнения этих предложений таблица будет выглядеть так:First_nameSergeyAlexeyAndreyAlexandreSurnameIvanovPetrovFedorovZaharovAge18202320Phone145-45-45343-65-45123-45−18450- 33-333.
Найти имена и фамилии студентов в возрасте от 18 до 29 лет.SELECT First_name, Surname FROM Students WHERE Age IN (18, 19, 20)Результатом выполнения предложения должна быть таблица:First_nameSergeyAlexeyАlexandreSurnameIvanovPetrovZaharov25Волкова И.А., Головин И.Г., Кузина Л.Н., Мальковский М.Г.4. Выбрать всю информацию о студентах, телефоны которых оканчиваются на 45.SELECT * FROM Students WHERE Phone LIKE '%-%-45'Результат выполнения предложения будет такой:First_nameSergeyAlexeySurnameIvanovPetrovAge1820Phone145-45-45343-65-455.
Выбрать всю информацию о студентах, телефоны которых содержат 45.SELECT * FROM Students WHERE Phone LIKE '%45%'В результате будет получена следующая таблица:First_nameSergeyAlexeyAndreyAlexandreSurnameIvanovPetrovFedorovZaharovAge18202320Phone145-45-45343-65-45123-45−18450- 33-336.
Найти телефон студента Иванова.SELECT Phone FROM Students WHERE Surname = 'Ivanov'Результат:Phone145-45-457. Найти фамилии всех студентов.SELECT Surname FROM Students WHERE ALLРезультат получится таким:SurnameIvanovPetrovFedorovZaharov8. Найти информацию о студентах, имена которых начинаются на любую из первыхтрех букв латинского алфавита, вторая буква их имен не совпадает с m, n, o, третьябуква — любая, а четвертая — x.26Модельный SQL-интерпретатор.
Методическое пособие.SELECT * FROM Students WHERE First_name LIKE '[ABC][^mno]_x%'Ответ на такой запрос будет следующим:First_nameAlexeyAlexandreSurnamePetrovZaharovAge2020Phone343-65-45450- 33-339. Найти фамилии и телефоны всех студентов старше 19 лет, фамилии которыхначинаются с букв второй половины латинского алфавита.SELECT Surname, Phone FROM Students WHERE (Age > 19) AND (Surname > 'M')В результате получится следующая таблица:SurnamePetrovZaharovPhone343-65-45450-33-3310. Увеличить значение поля «возраст» у всех студентов на 1.UPDATE StudentsSET Age = Age + 1WHERE ALLРезультат выполнения предложения будет таким:First_nameSergeyAlexeyAndreyAlexandreSurnameIvanovPetrovFedorovZaharovAge19212421Phone145-45-45343-65-45123-45−18450- 33-3311. Удалить таблицу Students из базы данных.DROP TABLE StudentsВ результате таблица Students будет удалена из базы данных, а соответствующий ейфайл — из файловой системы.5.
ПРИЛОЖЕНИЕПример реализации объектно-ориентированного интерфейса для работы с сокетамиФайл sock_wrap.h.27Волкова И.А., Головин И.Г., Кузина Л.Н., Мальковский М.Г.#ifndef __SOCK_WRAP_H__#define __SOCK_WRAP_H__#include#include#include#include#include#include#include<string><iostream><io.h><sys/types.h><sys/socket.h><netinet/in.h><netdb.h>namespace ModelSQL {// Exception --- класс исключений, генерируемых библиотекойclass Exception {protected:intm_ErrCode;public:Exception (int errcode ) : m_ErrCode(errcode) {}voidReport ();virtual std::stringGetMessage() = 0;};// SocketException --- класс исключенийclass SocketException : public Exception {static char * m_Message[];public:enum SocketExceptionCode {ESE_SUCCESS,ESE_SOCKCREATE,ESE_SOCKCONN,ESE_SOCKILLEGAL,ESE_SOCKHOSTNAME,ESE_SOCKSEND,ESE_SOCKRECV,ESE_SOCKBIND,ESE_SOCKLISTEN,ESE_SOCKACCEPT,};SocketException (SocketExceptionCode errcode) :Exception(errcode){}std::string GetMessage();};// SocketAddress --- базовый абстрактный класс для представления// сетевых адресовclass SocketAddress {protected:struct sockaddr * m_pAddr;public:SocketAddress () : m_pAddr(NULL) {}virtual~ SocketAddress () {}virtual intGetLength() = 0;virtualSocketAddress * Clone() = 0;operator struct sockaddr * ();};// UnSocketAddress --- представление адреса семейства AF_UNIX28Модельный SQL-интерпретатор.
Методическое пособие.class UnSocketAddress : public SocketAddress {public:UnSocketAddress (const char * SockName);~ UnSocketAddress ();intGetLength ();SocketAddress * Clone();};// InSocketAddress --- представление адреса семейства AF_INETclass InSocketAddress : public SocketAddress {public:InSocketAddress (const char * HostName, short PortNum)~ InSocketAddress ()intGetLength ()SocketAddress * Clone()};// BaseSocket --- базовый класс для сокетовclass BaseSocket {public:explicit BaseSocket (int sd = −1, SocketAddress * pAddr = NULL):m_Socket(sd), m_pAddr(pAddr) {}virtual~ BaseSocket();voidWrite(void * buf, int len);voidPutChar(int c);voidPutString(const char * str);voidPutString(const std::string& s)intRead (void * buf, int len);intGetChar();std::stringGetString();intGetSockDescriptor();protected:intm_Socket;SocketAddress * m_pAddr;voidCheckSocket()};// ClientSocket --- базовый класс для клиентских сокетовclass ClientSocket: public BaseSocket {public:voidConnect();};// ServerSocket --class ServerSocket:public:BaseSocket *protected:voidvoidvirtual void};базовый класс для серверных сокетовpublic BaseSocket {Accept();Bind();Listen(int BackLog);OnAccept (BaseSocket * pConn) {}// UnClientSocket --- представление клиентского сокета семейства// AF_UNIXclass UnClientSocket: public ClientSocket {public:UnClientSocket(const char * Address)};// InClientSocket --- представление клиентского сокета семейства// AF_INET29Волкова И.А., Головин И.Г., Кузина Л.Н., Мальковский М.Г.class InClientSocket: public ClientSocket {public:InClientSocket(const char * HostName, short PortNum);};// UnServerSocket --- представление серверного сокета семейства// AF_UNIXclass UnServerSocket: public ServerSocket {public:UnServerSocket(const char * Address);};// InServerSocket --- представление серверного сокета семейства// AF_INETclass InServerSocket: public ServerSocket {public:InServerSocket(short PortNum) throw (SocketException);};}; // конец namespace ModelSQL#endif30Модельный SQL-интерпретатор.
Методическое пособие.6. ЛИТЕРАТУРА[1]. Б.Страуструп. Язык программирования С++. Специальное издание. — М.; СПб.:«Издательство БИНОМ» — «Невский Диалект», 2001 г.[2]. И.А. Волкова, Т.В. Руденко. Формальные грамматики и языки. Элементы теориитрансляции. — М.: Изд-во МГУ, 1996.[3]. А. Робачевский. Операционная система UNIX. — СПб.: «БХВ-Петербург», 1997.[4].
К. Дейт. Введение в системы баз данных. — М.: Вильямс, 2001.[5]. М. Грабер. Введение в SQL. — М.: Изд-во ЛОРИ, 1996.31.