2.3 Создание и управление таблицами. Основные запросы SQL. Sql запрос на создание таблицы


Создание таблиц с помощью SQL-запросов

На данном уроке мы познакомимся еще с одной возможностью создания таблиц - через посылку SQL-запросов. Как Вы, наверное, могли заметить на предыдущем уроке, Database Desktop не обладает всеми возможностями по управлению SQL-серверными базами данных. Поэтому с помощью Database Desktop удобно создавать или локальные базы данных или только простейшие SQL-серверные базы данных, состоящие из небольшого числа таблиц, не очень сильно связанных друг с другом. Если же Вам необходимо создать базу данных, состоящую из большого числа таблиц, имеющих сложные взаимосвязи, можно воспользоваться языком SQL (вообще говоря, для этих целей лучше всего использовать специализированные CASE-средства, которые позволяют в интерактивном режиме сгенерировать всю структуру базы данных и сформировать все связи; описание двух наиболее удачных CASE-средств - System Architect и S-Designor - дано в дополнительных уроках). При этом можно воспользоваться компонентом Query в Delphi, каждый раз посылая по одному SQL-запросу, а можно записать всю последовательность SQL-предложений в один так называемый скрипт и послать его на выполнение, используя, например,

Windows Interactive SQL (WISQL.EXE) - интерактивное средство посылки SQL-запросов к InterBase (в том числе и локальному InterBase), входящее в поставку Delphi. Конечно, для этого нужно хорошо знать язык SQL, но, уверяю Вас, сложного в этом ничего нет! Конкретные реализации языка SQL незначительно отличаются в различных SQL-серверах, однако базовые предложения остаются одинаковыми для всех реализаций. Практика показывает, что если нет необходимости создавать таблицы во время выполнения программы, то лучше воспользоваться WISQL.

Создание таблиц с помощью SQL

Если Вы хотите воспользоваться компонентом TQuery, сначала поместите его на форму. После этого настройте свойство DatabaseName на нужный Вам алиас (если базы данных еще не существует, удобней создать ее в WISQL командой File|Create Database..., а затем уже настроить на нее новый алиас). После этого можно ввести SQL-предложение в свойство SQL. Для выполнения запроса, изменяющего структуру, вставляющего или обновляющего данные на сервере, нужно вызвать метод ExecSQL компонента TQuery. Для выполнения запроса, получающего данные с сервера (т.е. запроса, в котором основным является оператор SELECT), нужно вызвать метод Open компонента TQuery. Это связано с тем, что BDE при посылке запроса типа SELECT открывает так называемый курсор, с помощью которого осуществляется навигация по выборке данных (подробней об этом см. в уроке, посвященном TQuery).

Как показывает опыт, проще воспользоваться утилитой WISQL. Для этого в WISQL выберите команду File|Run an ISQL Script... и выберите файл, в котором записан ваш скрипт, создающий базу данных. После нажатия кнопки "OK" ваш скрипт будет выполнен, и в нижнее окно будет выведен протокол его работы.

Приведем упрощенный синтаксис SQL-предложения для создания таблицы на SQL-сервере InterBase (более полный синтаксис можно посмотреть в online-справочнике по SQL, поставляемом с локальным InterBase):

CREATE TABLE table (<col_def> [, <col_def> | <tconstraint> ...]);

где table - имя создаваемой таблицы, - описание поля, - описание ограничений и/или ключей (квадратные скобки [] означают необязательность, вертикальная черта | означает "или").

Описание поля состоит из наименования поля и типа поля (или домена - см. урок 9), а также дополнительных ограничений, накладываемых на поле:

<col_def> = col {datatype | COMPUTED BY (<expr>) | domain}        [DEFAULT {literal | NULL | USER}]        [NOT NULL] [<col_constraint>]        [COLLATE collation]

Здесьcol - имя поля;datatype - любой правильный тип SQL-сервера (для InterBase такими типами являются - см. урок 11 - SMALLINT, INTEGER, FLOAT, DOUBLE PRECISION, DECIMAL, NUMERIC, DATE, CHAR, VARCHAR, NCHAR, BLOB), символьные типы могут иметь CHARACTER SET - набор символов, определяющий язык страны. Для русского языка следует задать набор символов WIN1251;COMPUTED BY () - определение вычисляемого на уровне сервера поля, где - правильное SQL-выражение, возвращающее единственное значение;domain - имя домена (обобщенного типа), определенного в базе данных;DEFAULT - конструкция, определяющая значение поля по умолчанию;NOT NULL - конструкция, указывающая на то, что поле не может быть пустым;COLLATE - предложение, определяющее порядок сортировки для выбранного набора символов (для поля типа BLOB не применяется). Русский набор символов WIN1251 имеет 2 порядка сортировки - WIN1251 и PXW_CYRL. Для правильной сортировки, включающей большие буквы, следует выбрать порядок PXW_CYRL.

Описание ограничений и/или ключей включает в себя предложения CONSTRAINT или предложения, описывающие уникальные поля, первичные, внешние ключи, а также ограничения CHECK (такие конструкции могут определяться как на уровне поля, так и на уровне таблицы в целом, если они затрагивают несколько полей):

<tconstraint> = [CONSTRAINT constraint<tconstraint_def>]<tconstraint>

Здесь

= {{PRIMARY KEY | UNIQUE} (col[,col...])     | FOREIGN KEY (col [, col ...]) REFERENCES other_table         | CHECK ()}

search_condition ={<val> operator {<val> | (<select_one>)}        | <val> [NOT] BETWEEN <val> AND <val>        | <val> [NOT] LIKE <val> [ESCAPE <val>]        | <val> [NOT] IN (<val> [, <val> ...] |

<val> = {col [array_dim] | <constant> | <expr> | <functiont>         | NULL | USER | RDB$DB_KEY } [COLLATE collation]

<constant> = num | "string" | charsetname "string"

<functiont> = {COUNT (* | [ALL] <val> | DISTINCT <val>)        | SUM ([ALL] <val> | DISTINCT <val>)        | AVG ([ALL] <val> | DISTINCT <val>)        | MAX ([ALL] <val> | DISTINCT <val>)        | MIN ([ALL] <val> | DISTINCT <val>)        | CAST (<val> AS <datatype>)        | UPPER (<val>)        | GEN_ID (generator, <val>)        }

<operator> = {= | < | > |<= |>= | !< | !> | <> | !=}

= выражение SELECT по одному полю, которое возвращает в точности одно значение.

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

Пример A: Простая таблица с конструкцией PRIMARY KEY на уровне поля

CREATE TABLE REGION (        REGION          REGION_NAME NOT NULL PRIMARY KEY,        POPULATION      INTEGER NOT NULL);

Предполагается, что в базе данных определен домен REGION_NAME, например, следующим образом:

CREATE DOMAIN REGION_NAME      AS VARCHAR(40) CHARACTER SET WIN1251 COLLATEPXW_CYRL;

Пример B: Таблица с предложением UNIQUE как на уровне поля, так и на уровне таблицы

CREATE TABLE GOODS (   MODEL        SMALLINT NOT NULL UNIQUE,   NAME           CHAR(10) NOT NULL,   ITEMID          INTEGER NOT NULL, CONSTRAINT MOD_UNIQUEUNIQUE (NAME, ITEMID));

Пример C: Таблица с определением первичного ключа, внешнего ключа и конструкции CHECK, а также символьных массивов

CREATE TABLE JOB        (JOB_CODE              JOBCODE NOT NULL,JOB_GRADE           JOBGRADE NOT NULL,JOB_REGION           REGION_NAME NOT NULL,JOB_TITLE                VARCHAR(25) CHARACTER SET WIN1251COLLATE                                                    PXW_CYRL NOT NULL,MIN_SALARY           SALARY NOT NULL,MAX_SALARY          SALARY NOT NULL,JOB_REQ                   BLOB(400,1) CHARACTER SET WIN1251,LANGUAGE_REQ   VARCHAR(15) [5],PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_REGION),FOREIGN KEY (JOB_REGION) REFERENCES REGION (REGION),CHECK (MIN_SALARY < MAX_SALARY));

Данный пример создает таблицу, содержащую информацию о работах (профессиях). Типы полей основаны на доменах JOBCODE, JOBGRADE, REGION_NAME и SALARY. Определен массив LANGUAGE_REQ, состоящий из 5 элементов типа VARCHAR(15). Кроме того, введено поле JOB_REQ, имеющее тип BLOB с подтипом 1 (текстовый блоб) и размером сегмента 400. Для таблицы определен первичный ключ, состоящий из трех полей JOB_CODE, JOB_GRADE и JOB_REGION. Далее, определен внешний ключ (JOB_REGION), ссылающийся на поле REGION таблицы REGION. И, наконец, включено предложение CHECK, позволяющее производить проверку соотношения для двух полей и вызывать исключительное состояние при нарушении такого соотношения.

Пример D: Таблица с вычисляемым полем

CREATE TABLE SALARY_HISTORY (        EMP_NO                      EMPNO NOT NULL,        CHANGE_DATE       DATE DEFAULT "NOW" NOT NULL,        UPDATER_ID            VARCHAR(20) NOT NULL,        OLD_SALARY            SALARY NOT NULL,        PERC_CHANGE        DOUBLE PRECISION DEFAULT 0 NOT NULL              CHECK (PERC_CHANGE BETWEEN -50 AND 50),        NEW_SALARY COMPUTED BY              (OLD_SALARY + OLD_SALARY * PERC_CHANGE / 100),PRIMARY KEY (EMP_NO, CHANGE_DATE, UPDATER_ID),FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE (EMP_NO));

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

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

Заключение

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

www.delphisite.ru

Как составить сложный SQL запрос на создание таблиц со связями и объединением запросов?

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

Структуру базы описать в виде SQL-скрипта создания нужных таблиц и связей.

Информация о книге

* Название - текст

* Автор - текст

* Статус = [свободна, взята]

* Кем взята, если взята

* Когда взята, если взята - дата

* До какого числа, если взята - дата

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

Информация о читателе

* Имя - текст

* Фамилия - текст

* Служебная информация = [постоянный читатель, редкий читатель, читатель только читального зала]

Информация о взятых книгах

Какой документ был предъявлен при выдаче книги = [Усы, Лапы, Хвост]

Информация о документах

Усы:

* серия документа - 4 цифры, обязательно к заполнению

* номер документа - 6 цифр, обязательно к заполнению

* кем выдан - текст

* когда выдан - дата

Лапы:

* серия документа - набор из цифр и латинских букв длиной от 2 до 5 символов, необязательно к заполнению

* номер документа - набор из цифр и латинских букв длиной от 6 до 8 символов, обязательно к заполнению

* кем выдан - текст

Хвост:

* номер документа - набор из цифр и латинских букв длиной от 6 до 8 символов, обязательно к заполнению

* дата начала срока действия - дата

* дата окончания срока действия – дата

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

UPD.Что получилось самостоятельно на данный момент:

CREATE TABLE books ( book_id int (10) AUTO_INCREMENT NOT NULL, book_name VARCHAR(255) NOT NULL, book_author VARCHAR (255) NOT NULL, book_status ENUM (‘Y’,’N’) NOT NULL default(Y), book_owner INT(11), book_take_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, book_return_date DATETIME NOT NULL, FOREIGN KEY (book_owner) REFERENCES users (user_id))) UNION CREATE TABLE users ( user_id int (10) AUTO_INCREMENT NOT NULL, user_firstname VARCHAR(255) NOT NULL, user_lastname VARCHAR (255) NOT NULL, user_info ENUM(‘regular_reader’, ’rare_reader’ , ’reading_room’) NOT NULL)) UNION CREATE TABLE busy_book ( id int (10) AUTO_INCREMENT NOT NULL, bbook_id INT(11) NOT NULL, bbook_document VARCHAR (255) NOT NULL, user_info ENUM(‘regular_reader’, ’rare_reader’ , ’reading_room’) NOT NULL, FOREIGN KEY (bbook_id) REFERENCES books(book_id)) Дальше понял, что уже все не так :(

toster.ru

2.3 Создание и управление таблицами. Основные запросы SQL. Язык структурированных запросов SQL. Использование SQL в прикладном программировании

Похожие главы из других работ:

Интернет-магазин "Компьютеры и оргтехника"

3.4 SQL запросы на создание таблиц

В phpMyAdmin сформируем экспорт SQL и получаем следующий дамп базы данных в виде структур рассмотренных ранее таблиц: -- БД: `comp` - Структура таблицы `razd` -- CREATE TABLE `razd` ( `id` int(11) NOT NULL auto_increment, `nazv` varchar(50) NOT NULL default , `por` int(11) NOT NULL default 0...

Логистический отдел фирмы

4.2 Назначение отношений между таблицами и создание схемы данных

Создав все таблицы, необходимо установить связи между ними с помощью команды «Схема данных» меню «Сервис» или нажатием кнопки «Схема данных» на панели инструментов. Microsoft Access открывает пустое окно и предлагает добавить необходимые таблицы...

Определение сферы применения MS Access

1.6 Создание связей между таблицами

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

Разработка базы данных "ВУЗ"

2.2.1 Основные запросы

Запрос №1: необходимо вывести информацию о студенте по определенной фамилии, ФИО, дата рождения, форма обучения, наличие задолжностей, закрытие сессии в срок. Данный запрос будет являться запросом с параметром...

Разработка базы данных "Учет зарплаты строительной фирмы"

4.2 Выбор и создание связей между таблицами БД

Во введении мною частично уже было затронуто понятие связей и были рассмотрены их составные типы. MS Access создает реляционные БД. В этой БД пользователь может описывать отношения-связи между несколькими таблицами...

Разработка базы данных безопасности дорожного движения

5. Создание связей между таблицами

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

Разработка базы данных для оценки неполной оплаты отгруженной продукции

4.6 Создание связей между таблицами

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

Разработка базы данных спортклуба

2.2.1 Основные запросы

Запрос №1: необходимо вывести состав команды. Запрос является запросом с параметром, в роли параметра выступает: название команды. Рисунок 2.2.1.1 - Запрос №1 в режиме Конструктора Результат выполнения запроса: Рисунок 2.2.1...

Разработка информационной системы "Спортивный клуб"

4.2 Назначение отношений между таблицами и создание схемы данных

Создав все таблицы, необходимо установить связи между ними с помощью команды «Схема данных» меню «Сервис» или нажатием кнопки «Схема данных» на панели инструментов. Microsoft Access открывает пустое окно и предлагает добавить необходимые таблицы...

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

3.1.1 Создание связей между таблицами

Нажимаем кнопку "Схема данных" на панели инструментов. Автоматически открывается диалоговое окно "Добавление таблицы". Дважды щелкаем на именах таблиц, для которых требуется определить связи, и закрываем окно "Добавление таблицы"...

Создание автоматизированных информационных систем

2.4 Основные запросы к базе данных

Выборка недобросовестных читателей Из естественного соединения таблиц Читатель и Выдача выбрать ФИО, адрес, телефон читателей для которых дата фактического возврата больше даты ожидаемого возврата...

Создание баз данных

3.2 Выбор и создание связей между таблицами БД

Во введении мною частично уже было затронуто понятие связей и были рассмотрены их составные типы. MS Access 2002 создает реляционные БД. В этой БД пользователь может описывать отношения-связи между несколькими таблицами...

Создание базы данных больных в Visual Foxpro 9.0

2.2 Создание отношений между таблицами в многотабличной БД больных в больнице

Применение индексов позволяет решить одну из главных задач, предъявляемых к СУБД, - возможность быстрого поиска необходимой информации. Для создания индексов таблицы используется вкладка Indexes (индексы) окна конструктора Table Designer...

Создание базы данных в Microsoft Access

Создание связей между таблицами

Схема данных является графическим образом БД. Она используется различными объектами Access для определения связей между несколькими таблицами. Например, при создании формы, содержащей данные из нескольких взаимосвязанных таблиц...

Создание полноценного приложения в среде MS ACCESS

3.3 Основные запросы

1. Запрос «Участники конкурсов» показывает в каких конкурсах приняла участие та или иная пара. SQL-запрос: PARAMETERS Команда Value; SELECT [Участия в конкурсах].Команда, [Участия в конкурсах].Конкурс FROM [Участия в конкурсах] WHERE [Участия в конкурсах]...

prog.bobrodobro.ru

sql - SQL-запросы на создание новой таблицы

Изображение показывает структуру моей таблицы. Первая строка означает, что tutorB дает 10 баллов студенту. Вторая строка означает, что tutorE пока не дает никаких оценок студенту.

Как я могу создать следующую таблицу? Я ссылаюсь на другое сообщение в stackoverflow.com. Совместная фильтрация в MySQL? Тем не менее, я все еще довольно смущен.

Из изображения, показанного выше, o рекомендуется средство, значение которого выше или равно 7; x означает, что не рекомендуется, скорость которого меньше 7.

Например, tutorB дает студенту 10 баллов, поэтому из второй строки на изображении мы видим, что в столбце StudentD есть "o". (И другие данные из трех строк просто назначаются случайным образом.)

Теперь, если я хочу рекомендовать ученика для Tutor A. Ранги (или сходство) TutorB, C и D составляют 0,2 и 3 соответственно.

Как я могу сгенерировать SQL, чтобы я мог преобразовать скорость в "o" и "x" и вычислить ранг. И, самое главное, я хочу рекомендовать StudentH для TutorA как из изображения.

Как мне изменить код из предыдущего сообщения? И, если моя идея, упомянутая выше, правильная?

Спасибо.

=============================================== =============================

EDITED

У меня есть следующие данные в базе данных. Первая строка означает, что 10 меток дается tutorA ученику C.

Я преобразую его в качестве другой таблицы для лучшего понимания. v - значение Rate.

create temporary table ub_rank as select similar.NameA,count(*) rank from tbl_rating target join tbl_rating similar on target.NameB= similar.NameB and target.NameA != similar.NameA where target.NameA = "tutorA" group by similar.NameA; select similar.NameB, sum(ub_rank.rank) total_rank from ub_rank join ub similar on ub_rank.NameA = similar.NameA left join ub target on target.NameA = "tutorA" and target.NameB = similar.NameB where target.NameB is null group by similar.NameB order by total_rank desc; select * from ub_rank;

В приведенном выше коде ссылка на Совместная фильтрация в MySQL?. У меня есть несколько вопросов.

  • В SQL есть 2 части. Я могу выбрать * из первой части. Однако, если я введу весь SQL, как показано выше, система предупреждает Table 'mydatabase.ub' doesn't exist Как мне изменить код?

  • Код найдет сходство. Как мне изменить код, чтобы, если метки меньше 7, он изменяется на o, иначе измените на v и подсчитайте сходство данного пользователя?

qaru.site

SQL-запросы для работы с таблицами

Вы здесь: Главная - MySQL - SQL - SQL-запросы для работы с таблицами

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

Начнём с простого запроса на создание новой таблицы:

CREATE TABLE users (id INT AUTO_INCREMENT, login TEXT, pass VARCHAR, PRIMARY KEY (id))

При создании таблицы вначале идёт команда "CREATE TABLE", затем имя таблицы. В скобках идут различные данные, описавающие названия и типы полей. Мы создали поле "id" типа int, а также сделали его AUTO_INCREMENT. Создали поля "login" и "pass" типа varchar. Также поле ID сделали первичным ключом. Как видите, синтаксис не сложный, однако, у него существует много вариаций, но все они интуитивно создаются. В крайнем случае, не забывайте, что всегда SQL-запрос можно посмотреть в PHPMyAdmin.

Теперь давайте разберём SQL-запрос для переименования таблицы базы данных:

ALTER TABLE users RENAME newname

После команды "ALTER TABLE" идёт имя таблицы, которую мы хотим переименовать, затем "RENAME" и то имя, на которое мы хотим изменить название таблицы.

Теперь SQL-запрос на удаление базы данных:

DROP TABLE newname

При удалении таблицы надо отправить название команды "DROP TABLE", а затем имя таблицы, которую требуется удалить.

Теперь переходим к работе с полями (столбцами) таблиц. И начём с добавления новых полей в таблицу:

ALTER TABLE users ADD firstname TEXT

В данном коде мы вставляем в таблицу "users" новое поле с именем "firstname" и типом text.

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

ALTER TABLE users CHANGE pass password VARCHAR, CHANGE firstname firstname VARCHAR

В данном SQL-запросе мы в таблице "users" изменили два поля: имя поля "pass" мы сменили на "password", а у поля "firstname" мы имя оставили прежним, а тип сменили на varchar. Если Вам требуется изменить только одно поле, то тогда достаточно одной команды CHANGE, иначе через запятую перечисляйте все поля, которые требуется изменить.

И, как Вы, наверное, догадались, SQL-запрос на удаление поля из таблицы:

ALTER TABLE users DROP firstname

Синтаксис очень прозрачный, но всё-таки поясню: после команды "ALTER TABLE" идёт имя таблицы, поле в которой мы хотим удалить. Затем идёт команда "DROP", сразу за которой имя удаляемого поля.

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

Полный курс по PHP и MySQL: http://srs.myrusakov.ru/php

  • Создано 16.01.2011 17:43:03
  • Михаил Русаков
Предыдущая статья Следующая статья

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

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

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка: <a href="https://myrusakov.ru" target="_blank"><img src="https://myrusakov.ru//images/button.gif" alt="Как создать свой сайт" /></a>

    Она выглядит вот так:

  2. Текстовая ссылка:<a href="https://myrusakov.ru" target="_blank">Как создать свой сайт</a>

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи): [URL="https://myrusakov.ru"]Как создать свой сайт[/URL]

myrusakov.ru