Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
3 / 3 / 1
Регистрация: 10.12.2008
Сообщений: 46

База воинской части. Основы выполнения запросов на языке SQL

12.05.2009, 01:27. Показов 2901. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня есть небольшая (почти готовая) работка. Нужно только пройтись по всем пунктикам, собрать сами решения этих заданий и скопировать в Oracle. Мне нужны результаты выполнения этих SQL-запросов. Но у меня не получается получить эти самые результаты, Oracle загрузил. Что дальше - не понимаю. Буду благодарен, если подскажете что делать дальше

1. Создайте таблицу command_post с двумя полями:
[li] id - первичный ключ, целое число не более 4-х разрядов.
[li] name - целое число не более 4-х разрядов, в котором хранится номер воинской части.
На поле name установите ограничения - UNIQUE, NOT NULL.
Решение:
T-SQL
1
2
3
4
 CREATE TABLE command_post(
    id number(4) PRIMARY KEY,
    name number(4) UNIQUE NOT NULL
  );
2. Создайте таблицу persons с полями:
[li]id - первичный ключ, целое число не более 4-х разрядов.
[li]lastname - строка длиной не более 30 символов, в которой хранится фамилия человека, с ограничениями UNIQUE, NOT NULL.
[li]fistname - строка длиной не более 30 символов, в которой хранится имя человека.
[li]middlename - строка длиной не более 30 символов, в которой хранится отчество человека. Поле может иметь неопределенное значение.
[li]birthdate - дата рождения.
[li]sex - пол человека, один символ, может иметь значения либо 'f', либо 'm'.
Решение:
T-SQL
1
2
3
4
5
6
7
8
 CREATE TABLE persons(
    id number(4) PRIMARY KEY,
    lastname varchar2(30) UNIQUE NOT NULL,
    firstname varchar2(30),
    middlename varchar2(30),
    birthdate date NOT NULL,
    sex char(1) CHECK (sex IN ('f','m'))
  );
3. Создайте таблицу department с полями:
[li] id - первичный ключ, целое число не более 4-х разрядов.
[li] name - строка длиной не более 30 символов, со следующими ограничениями UNIQUE, NOT NULL.
[li] root - ссылка на первичный ключ.
Решение:
T-SQL
1
2
3
4
5
CREATE TABLE department(
    id number(4) PRIMARY KEY,
    name varchar2(30) UNIQUE NOT NULL,
    root REFERENCES department(id)
  );
4. Обновите таблицу persons, добавив в нее поле conscription – строка, длиной не более 25 символов с информацией о месте призыва человека, с ограничением – NOT NULL. Установите ограничения для поля firstname – не может быть пустым. Удалите ограничение UNIQUE с поля lastname.
Решение:
T-SQL
1
2
3
ALTER TABLE persons ADD (conscription varchar2(25) NOT NULL);
  ALTER TABLE persons MODIFY (firstname varchar2(30) NOT NULL);
  ALTER TABLE persons DROP UNIQUE (lastname);
5. Создайте таблицу solders с полями:
[li]id - первичный ключ, целое число не более 4-х разрядов.
[li]person - ссылка на первичный ключ таблицы persons.
[li]command_post - хранит значение первичного ключа таблицы command_post.
[li]department - ссылка первичный ключ таблицы department.
[li]salary - число с точностью 6 и масштабом 2, в котором хранится размер заработной платы военнослужащего.
На поле salary установите ограничения - NOT NULL.
Решение:
T-SQL
1
2
3
4
5
6
7
CREATE TABLE solders(
    id number(4) PRIMARY KEY,
    person REFERENCES persons(id),
    command_post REFERENCES command_post(id),
    department REFERENCES department(id),
    salary  number(6,2) NOT NULL
  );
6. Добавьте в таблицу command_post не менее пяти записей.
Решение:
T-SQL
1
2
3
4
INSERT INTO command_post (id, name) VALUES (1, 1345 );
  ...
  INSERT INTO command_post (id, name) VALUES (5, 2020);
  COMMIT;
7. Заполните таблицу department информацией о родах войск и гарнизонах, относящихся к ним. После выполнения операции таблица department должна содержать не менее десяти записей.
Решение:
T-SQL
1
2
3
4
5
6
INSERT INTO department(id, name) VALUES (1, 'ВВС');
  INSERT INTO department(id, name) VALUES (2, 'ВМФ');
  ...
  INSERT INTO department (id, name, root) VALUES (9, 'Саратовский гарнизон', 1);
  INSERT INTO department (id, name, root) VALUES (10, 'Охотский гарнизон', 2);
  COMMIT;
8. Заполните таблицу persons не менее чем 10 строками.
Решение:
T-SQL
1
2
3
4
5
6
INSERT INTO persons (id, lastname, firstname, middlename, birthdate, conscription,sex)
 VALUES (1, 'Борисов', 'Андрей', 'Константинович', to_date('1969.02.13', 'YYYY.MM.DD'),'Самара', 'm');
  ...
  INSERT INTO persons (id, lastname, firstname, middlename, birthdate, conscription,sex)
  VALUES (10, 'Симанина', 'Дарья', 'Владимировна', to_date('1985.05.05', 'YYYY.MM.DD'), 'Волгоград', 'f');
  COMMIT;
9. Внесите в таблицу solders не менее 10 записей.
Решение:
T-SQL
1
2
3
4
INSERT INTO solders(id,person,command_post,department,salary) VALUES (1,1,1,1,8350);
  ...
  INSERT INTO solders(id,person,command_post,department,salary) VALUES (2,10,5,2,9320);
  COMMIT;
10. Получите системную дату при помощи таблицы DUAL и преобразуйте её в формат 'YYYY.MM.DD'.
Решение:
T-SQL
1
SELECT to_char(SYSDATE,'YYYY.MM.DD') FROM DUAL;
11. Посчитайте, сколько записей содержит таблица persons.
Решение:
T-SQL
1
SELECT count(id) FROM persons;
12. Выберите содержимое всех столбцов таблицы command_post.
Решение:
T-SQL
1
SELECT * FROM command_post;
13. Из таблицы persons выберите все записи, в которых значением поля middlename является "Константинович".
Решение:
T-SQL
1
2
SELECT * FROM persons
  WHERE upper(middlename) = upper('Константинович');
14. Создайте запрос, который в таблице persons заменяет значение "Владимировна" поля middlename на "Александровна".
Решение:
T-SQL
1
2
UPDATE persons SET middlename = 'Александровна' WHERE middlename = 'Владимировна';
  COMMIT;
15. Создайте запрос, который удаляет из таблицы persons записи о всеx людях, которые не являются военнослужащими.
Решение:
T-SQL
1
2
3
4
5
 DELETE FROM persons 
  WHERE id NOT IN (
    SELECT person FROM solders
  );
  COMMIT;
16. Создайте запрос на выборку из таблицы persons фамилий и пола военнослужащих, проходящих воинскую службу в войсках ВВС. Отчет должен содержать следующие поля: "Военнослужащий", "Пол", "Род войск".
Решение:
T-SQL
1
2
3
4
5
SELECT p.lastname || ' ' || p.firstname AS "Военнослужащий", p.sex AS "Пол", d.name AS "Род войск" 
  FROM persons p, solders s, department d
  WHERE d.name = 'ВВС'
  AND s.department = d.id
  AND s.person = p.id;
17. Создайте запрос, который выбирает имена и отчества всех военнослужащих с фамилией, начинающейся с буквы "Б" и род войск, в котором они проходят воинскую службу. Отчет должен содержать следующие поля: "Военнослужащий", "Род войск".
Решение:
T-SQL
1
2
3
4
5
SELECT p.firstname || ' ' || p.middlename AS "Военнослужащий", d.name AS "Род войск"
  FROM persons p, solders s, department d
  WHERE lower(p.lastname) LIKE lower('б%') 
  AND p.id=s.person 
  AND s.department=d.id;
18. Создайте запрос на выборку информации обо всех военнослужащих, чье отчество начинается на букву "А" и третья буква в отчестве – "е". Отчет должен содержать следующие поля: "Военнослужащий", "Род войск".
Решение:
T-SQL
1
2
3
4
5
SELECT p.lastname || ' ' || p.firstname || ' ' || p.middlename AS "Военнослужащий", d.name  AS "Род войск"
  FROM persons p, solders s, department d
  WHERE upper(p.middlename) LIKE 'А_Е%' 
  AND p.id=s.person
  AND s.department=d.id;
19. Из таблицы persons выведите в порядке убывания по фамилии имена людей.
Решение:
T-SQL
1
SELECT firstname FROM persons ORDER BY lastname DESC;
20. Постройте запрос, который вычисляет минимальное и среднее значения заработной платы.
Решение:
T-SQL
1
SELECT min(salary), avg(salary) FROM solders;
21. Постройте запрос, который вычисляет количество военнослужащих в каждом роде войск. Отчет должен содержать следующие поля: "Род войск", "Количество военнослужащих".
Решение:
T-SQL
1
2
3
4
SELECT d.name AS "Род войск", count(s.id) AS "Количество военнослужащих" 
  FROM department d, solders s
  WHERE s.department = d.id 
  GROUP BY d.name;
22. Постройте запрос, который вычисляет количество мужчин в каждом роде войск. Отчет должен содержать следующие поля: "Род войск", "Количество мужчин". Установите сортировку по полю "Количество мужчин" в порядке возрастания.
Решение:
T-SQL
1
2
3
4
5
6
7
SELECT d.name AS "Род войск",  count (p.id) AS "Количество мужчин" 
  FROM department d, persons p, solders s
  WHERE p.sex = 'm' 
  AND d.id = s.department
  AND p.id = s.person
  GROUP BY d.name
  ORDER BY "Количество мужчин" ASC;
23. Постройте запрос, который определяет название рода войск с наибольшим количеством военнослужащих и выводит название этого рода войск и количество военнослужащих, проходящих в них службу.
Решение:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT d.name, count(s.id)  
  FROM solders s, department d
  WHERE d.id = s.department
  GROUP BY d.name 
  HAVING count(s.id) = (
    SELECT max(cnt) 
    FROM (
      SELECT count(s.id) AS cnt
      FROM solders s, department d
      WHERE d.id = s.department
      GROUP BY d.name
    )
  );
24. Постройте запрос, который вычисляет количество военнослужащих, заработная плата которых менее 4000.
Решение:
T-SQL
1
2
3
4
SELECT count(p.id) 
  FROM persons p, solders s 
  WHERE s.salary < 4000  
  AND p.id=s.person;
25. Постройте запрос, который выводит фамилии, инициалы и номер части военнослужащих, заработная плата которых превышает 5540. Отчет должен содержать следующие поля: "Фамилия И.О.", "Номер части", "Сумма".
Решение:
T-SQL
1
2
3
4
5
6
SELECT p.lastname||' '||substr(p.firstname,1,1)|| '.' ||substr(p.middlename,1,1)|| '.' AS "Фамилия И. О.",
 c.name AS "Номер части", s.salary AS "Сумма"
  FROM persons p, solders s, command_post c 
  WHERE p.id=s.person 
  AND s.salary > 5540 
  AND c.id=s.command_post;
26. Создайте запрос на выборку фамилий и имен военнослужащих, заработная плата которых ниже средней. Отчет должен содержать следующие поля: "Фамилия","Имя", "Сумма".
Решение:
T-SQL
1
2
3
4
SELECT p.lastname AS "Фамилия",p.firstname AS "Имя", s1.salary AS "Сумма"
  FROM persons p, solders s1 
  WHERE p.id=s1.person 
  AND s1.salary < (SELECT avg(s2.salary) FROM solders s2);
27. Из таблицы department выберите все гарнизоны. Отчет должен содержать следующие поля: "id", "Название гарнизона".
Решение:
T-SQL
1
2
SELECT d.id AS "id", d.name AS "Название гарнизона" FROM department d 
  WHERE d.root is NOT NULL;
28. Постройте запрос, который для каждого рода войск выводит количество гарнизонов, закрепленных за ним.
Решение:
T-SQL
1
2
3
4
SELECT d1.name, COUNT(d2.id) 
  FROM department d1, department d2 
  WHERE d1.id=d2.root 
  GROUP BY d1.NAME;
29. Для рода войск "ВМФ" выведите информацию о принадлежащих ему гарнизонах.
Решение:
T-SQL
1
2
3
SELECT d. *, level FROM department d 
  WHERE level >1 START WITH d.name='ВМФ' 
  CONNECT BY PRIOR d.id =d.root;
30. Для гарнизона "Саратовский гарнизон" определите род войск.
Решение:
T-SQL
1
2
3
SELECT d.id, d.name 
  FROM department d 
  WHERE d.id=(SELECT d1.root FROM department d1 WHERE d1.name='Саратовский гарнизон');
31. Удалите таблицы solders, department, command_post, persons .
Решение:
T-SQL
1
2
3
4
  DROP TABLE solders CASCADE CONSTRAINT;
  DROP TABLE department CASCADE CONSTRAINT;
  DROP TABLE command_post CASCADE CONSTRAINT;
  DROP TABLE persons CASCADE CONSTRAINT;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2009, 01:27
Ответы с готовыми решениями:

Создание запросов на языке SQL
http://dl2.joxi.net/drive/0001/1288/95496/141125/cb65f86f81.png 1. Посчитать количество товаров, которые отгружались хотя бы раз на...

После выполнения запросов база данных не заполняется
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Расчитать время выполнения запросов к бд sql
Добрый день, хочу провести исследование какой метод доступа к данным будет наиболее быстрым . Но вопрос стоит так - как узнать сколько...

3
11 / 11 / 0
Регистрация: 09.04.2009
Сообщений: 65
14.05.2009, 09:50
если Oracle установили, то поставьте еще программу для написания SQL запросов. например, SQL Navigator или PL/SQL DEveloper.
вот там и можно писать ваши запросы и получать результаты
1
3 / 3 / 1
Регистрация: 10.12.2008
Сообщений: 46
16.05.2009, 08:11  [ТС]
А через SQL Plus можно сделать? Только при входе в эти программы у вылетает ошибка БД. А новая БД у меня не создаётся, ошибка про память в конце установки
0
11 / 11 / 0
Регистрация: 09.04.2009
Сообщений: 65
16.05.2009, 18:32
да, можно и через SQL Plus. Только через него, придется настраивать вывод запросов, а то тот, который там есть, оюсь вас не устроит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2009, 18:32
Помогаю со студенческими работами здесь

Web-интерфейс для выполнения sql-запросов
Простейший web-интерфейс для выполнения sql-запросов.Делать все на flask

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

Не удаётся отображать прогресс выполнения SQL запросов через Recordset
Возможно, тема уже обсуждалась, но ответа на свой вопрос через поиск не нашёл. Прошу помочь, если кто-то сталкивался с аналогичной...

Прогресс бар + SQL база(Ожидание выполнения))
Здраствуйте уважаемые програмеры C#, вошел я в ваши ряды совсем недавно, воэтому вопрос мой может показаться достаточно ламмерским, но все...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru