КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Упорядочение выходных полейТаблицы в общем случае являются надпорядоченными множествами. Для упорядочивания применяется команда ORDER BY, которая упорядочивает записи в соответствии со значениями одного или нескольких выбранных столбцов. Множество столбцов упорядочиваются одно внутри другого как и в случае GROUP BY, и можно задать возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию- возрастающая. Например, таблица заявок (Orders), упорядоченная по номеру заявки. SELECT * FROM Orders ORDER BY cnum DESC; Внутри этого порядка можно задать упорядочивание еще по другому столбцу: ORDER BY cnum DESC, amt DESC; Так для любого количества столбцов. Требование стандарта, что столбцы, которые указаны в ORDER BY должны быть в числе выбранных (в SELECT). ORDER BY может использоваться с GROUP BY для упорядочивания групп. ORDER BY выполняется последней. Применим к примеру из начала лекции.
SELECT snum, odate, MAX (amt) FROM Orders GROUP BY snum, odate ORDER BY snum; вместо имени столбца в ORDER BY допустимо задавать номер поля в порядке их следования в SELECT: SELECT sname, comm FROM Sales people ORDER BY 2 DESC;
Особенно необходим этот метод в случае выходных столбцов, полученных агрегированием:
FROM Orders GROUP BY snum ORDER BY 2 DESC
Использование множества таблиц в одном запросе До этого момента рассматривалась техника запросов SQL, базирующаяся на одной таблице, однако основные преимущества запросов заключаются в том, что они могут базироваться на нескольких связанных таблицах- объединениях. При операции соединения (join) таблицы перечисляются в предложении запроса FROM через запятую. Предикат запроса может ссылаться на любой столбец из соединяемых таблиц (обычно WHERE). Имена таблиц предшествуют через точку именам полей.
SELECT Customers.cname, Sales people.sname, Sales people.city FROM Sales people, Customers WHERE Sales people. city = Customers.city;
Это типичный пример, когда префиксы действительно необходимы (и в одной и в другой таблице поле- city). В дальнейшем префиксы используем по необходимости. В запросе для каждого продавца из Sales people проводится проверка предиката. Операция соединения таблиц посредством ссылочной целостности Допустим, что между таблицами существует связь по полю snum- номер продавца (за каждым покупателем закреплен продавец). Здесь операция соединения может извлечь данные в терминах связи: показать соответствие имен покупателей именами продавцов, их обслуживающих:
SELECT Customers cname, Salespeople.sname FROM Customers, Salespeople WHERE Salespeople.snum = Customers.snum;
Поля snum не представлены в выходных данных, поскольку они не существенны как результаты. Подобным образом могут быть построены объединения нескольких таблиц (>2). Иногда требуется построить запрос по двум копиям одной таблицы. Здесь возникает проблема с именами. У копии должны быть другие имена. Проблема решается определением временных имен- алиасов в предложении FROM. Рассмотрим пример поиска пар продавцов, имеющих одинаковый рейтинг: SELECT first.sname, second.sname, first.rating FROM Salespeople first, Salespeople second WHERE first.rating = second.rating; SQL не делает копии реально, но внешне это выглядит так, что Salespeople распадается на две копии с именами first и second. После выполнения запроса алиасы утрачивают силу. Выходные данные примера будут включать каждую комбинацию значений дважды из-за симметрии предиката (подставьте реальные имена и увидите). Кроме того, каждая запись присоединяется к себе самой. Есть простой способ исключить трехкратные повторения- сделать предикат асимметричным. SELECT first.sname, first.rating FROM Salespeople first, Salespeople second WHERE first.rating = second.rating; AND first.sname < second.sname; Это уже полезный прием для работы. Алиасы используют не только для копий запросов, но и просто при замене длинных имен короткими.
Дата добавления: 2014-01-06; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |