Вход/Регистрация
Понимание SQL
вернуться

Грубер Мартин

Шрифт:
РАБОТА С SQL

Обратите внимание: Ответы для этих упражнений написаны в псевдокодах, являющихся английским языком описания логики, которой должна следовать программа. Это сделано для того чтобы помомочь читателям которые могут быть незнакомы с Паскалем(или любым другим языком). Кроме того это лучше сфокусирует ваше внимание на включемых понятиях, опуская частности того или другого языка. Чтобы непротиворечить нашим примерам, стиль псевдокода будет напоминать Паскаль.

Мы опустим из программ все что не относится напрямую к рассматриваемым вопросам, например, определение устройств ввода-вывода, подключение к базе данных, и так далее. Конечно, имеется много способов чтобы выполнять такие упражнения; и совсем не обязательно что представленые варианты решений являются самыми удачными.

* Разработайте простую программу которая выберет все комбинации полей snum и cnum из таблиц Порядков и Заказчиков и выясните, всегда ли предыдущая комбинация такая же как последующая. Если комбинация из таблицы Порядков не найдена в таблице Заказчиков, значение поля snum для этой строки будет изменено на удовлетворяющее условию совпадения. Вы должны помнить, что курсор с подзапросом - модифицируем (ANSI ограничение, также применимо к просмотрам, и что базисная целостность базы данных это не тоже самое что проверка на ошибку(т.е. первичные ключи уникальны, все поля cnums в таблице Порядков правильны, и так далее). Проверьте раздел обьявлений, и убедитесь что там обьявлены все используемые курсоры.

* Предположим, что ваша программа предписывает ANSI запрещение курсоры или просмотры использующие модифицируемые подзапросы. Как вы должны изменить вышеупомянутую программу?

* Разработайте программу которая подсказывает пользователям изменить значения поля city продавца, автоматически увеличивает комиссионные на .01 для продавца переводимого в Барселону и уменьшает их на .01 для продавца переводимого в Сан Хосе. Кроме того, продавец находящийся в Лондоне должен потерять .02 из своих комиссионных, независимо от того меняет он город или нет, в то время как продавец не находящийся в Лондоне должен иметь увеличение комиссионных на .02. Изменение в комиссионных основывающееся на нахождении продавца в Лондоне, может применяться независимо от того куда тот переводится. Выясните могут ли поле city или поле comm содержать NULL значения, и обработайте их, как это делается в SQL. Предупреждение! : эта программа имеет некоторые сокращения.

Приложение A. ОТВЕТЫ ДЛЯ УПРАЖНЕНИЙ

Глава 1.

* cnum

* rating

* Другим словом для строки является - запись. Другим словом для столбца является - поле.

* Потому что строки, по определению, находятся без какого либо определенного упорядочения.

Глава 2.

* Символ (или текст ) и номер

* Нет

* Язык Манипулирования Данными (ЯЗЫК DML)

* Это слово в SQL имеет специальное учебное значение.

Глава 3.

* 1. SELECT onum, amt, odate FROM Orders;

* 2. SELECT * FROM Customers WHERE snum=1001;

* SELECT city, sname, snum, comm FROM Salespeople;

* SELECT rating, cname FROM Customers WHERE city='SanJose';

* SELECT DISTINCT snum FROM Orders;

Глава 4.

* 1. SELECT * FROM Orders WHERE amt > 1000;

* SELECT sname, city FROM Salespeople WHERE city='London' AND comm > .10;

SELECT * FROM Customers WHERE rating > 100 OR city='Rome';

или

SELECT * FROM Customers WHERE NOT rating <=100 OR city ='Rome';

или

SELECT * FROM Customers WHERE NOT (rating <=100 AND city < > 'Rome');

* Могут быть еще другие решения.

onum amt odate cnum snum

3001 18.69 10/03/1990 2008 1007

3003 767.19 10/03/1990 2001 1001

3005 5160.45 10/03/1990 2003 1002

3009 1713.23 10/04/1990 2002 1003

3007 75.75 10/04/1990 2004 1002

3008 4723.00 10/05/1990 2006 1001

3010 1309.95 10/06/1990 2004 1002

* 3011 9891.88 10/06/1990 2006 1001

onum amt odate cnum snum

3001 18.69 10/03/1990 2008 1007

3003 767.19 10/03/1990 2001 1001

3006 1098.16 10/03/1990 2008 1007

3009 1713.23 10/04/1990 2002 1003

3007 75.75 10/04/1990 2004 1002

3008 4723.00 10/05/1990 2006 1001

3010 1309.95 10/06/1990 2004 1002

* 3011 9891.88 10/06/1990 2006 1001

* . SELECT * FROM Salespeople;

Глава 5.

SELECT * FROM Orders WHERE odate IN (10/03/1990,10/04/1990);

и

* SELECT * FROM Orders WHERE odate BETWEEN 10/03/1990 AND 10/04,1990;

* SELECT * FROM Customers WHERE snum IN (1001,1004);

SELECT * FROM Customers WHERE cname BETWEEN 'A' AND 'H';

* ПРИМЕЧАНИЕ: В ASCII базовой системе Hoffman не буде выведен из-за конечных пробелов после H. По той же самой причине воторая граница не может быть G, поскольку она не выведет имена Giovanni и Grass. G может использоваться в сопровождении с Z, так чтобы следовать за другими символами в алфавитном порядке, а не предшествовать им, как это делают пробелы.

  • Читать дальше
  • 1
  • ...
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: