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

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

12.05.2009, 01:27. Показов 2876. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru