русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Объединение данных в синтаксисе SQL'99


Дата добавления: 2013-12-23; просмотров: 1845; Нарушение авторских прав


ЗАПРОСЫ ПО НЕСКОЛЬКИМ ТАБЛИЦАМ

Комбинация текста, значений поля, и функций

SELECT snum, sname, city, '%', comm * 100

Вставка символов в вывод запроса

SELECT snum, sname, city, comm*100

FROM Salespeople;

 

snum sname city

------ --------- ----------- ---------

1001 Peel London 12.000000

1002 Serres San Jose 13.000000

1004 Motika London 11.000000

1007 Rifkin Barcelona 15.000000

1003 Axelrod New York 10.000000

1 + 2 'A' + 'B'

FROM Salespeople;

 

snum sname city

------ -------- ----------- ---- ---------

1001 Peel London % 12.000000

1002 Serres San Jose % 13.000000

1004 Motika London % 11.000000

1007 Rifkin Barcelona % 15.000000

1003 Axelrod New York % 10.000000

SELECT 'For', odate, ', ' there are ',

COUNT (DISTINCT onum), ' orders '

FROM Orders

GROUP BY odate;

 

odate

------ ---------- --------- ------ -------

For 10/03/1990 , there are 5 orders.

For 10/04/1990 , there are 2 orders.

For 10/05/1990 , there are 1 orders.

For 10/06/1990 , there are 2 orders.

УПОРЯДОЧЕНИЕ ВЫВОДА ПОЛЕЙ

 

ORDER BY

 

ASC - возрастание

DESC - убывание

 

Упорядочение вывода с помощью убывания

 

 

SELECT *

FROM Orders

ORDER BY cnum DESC;

 

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

onum amt odate cnum snum

------ -------- ---------- ----- -----

3001 18.69 10/03/1999 2008 1007

3006 1098.16 10/03/1999 2008 1007

3002 1900.10 10/03/1999 2007 1004

3008 4723.00 10/05/1999 2006 1001

3011 9891.88 10/06/1999 2006 1001

3007 75.75 10/04/1999 2004 1002

3010 1309.95 10/06/1999 2004 1002

3005 5160.45 10/03/1999 2003 1002

3009 1713.23 10/04/1999 2002 1003

3003 767.19 10/03/1999 2001 1001



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

 

Упорядочение с помощью нескольких столбцов

 

 

SELECT *

FROM Orders

ORDER BY cnum DESC, amt DESC;

 

 

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

onum amt odate cnum snum

------ -------- ---------- ----- -----

3006 1098.16 10/03/1999 2008 1007

3001 18.69 10/03/1999 2008 1007

3002 1900.10 10/03/1999 2007 1004

3011 9891.88 10/06/1999 2006 1001

3008 4723.00 10/05/1999 2006 1001

3010 1309.95 10/06/1999 2004 1002

3007 75.75 10/04/1999 2004 1002

3005 5160.45 10/03/1999 2003 1002

3009 1713.23 10/04/1999 2002 1003

3003 767.19 10/03/1999 2001 1001



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

 

УПОРЯДОЧЕНИЕ ГРУПП

 

ORDER BY может использоваться с

GROUP BY для упорядочения групп.

 

 

SELECT snum, odate, MAX (amt)

FROM Orders

GROUP BY snum, odate

ORDER BY snum;

 

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

snum odate amt

----- ---------- --------

1001 10/06/1999 767.19

1001 10/05/1999 4723.00

1001 10/05/1999 9891.88

1002 10/06/1999 5160.45

1002 10/04/1999 75.75

1002 10/03/1999 1309.95

1003 10/04/1999 1713.23

1004 10/03/1999 1900.10

1007 10/03/1999 1098.16

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

 

УПОРЯДОЧЕНИЕ АГРЕГАТНЫХ ГРУПП

 

SELECT snum, odate, MAX (amt)

FROM Orders

GROUP BY snum, odate

ORDER BY snum;

 

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

snum odate amt

----- ---------- --------

1001 10/06/1990 767.19

1001 10/05/1990 4723.00

1001 10/05/1990 9891.88

1002 10/06/1990 5160.45

1002 10/04/1990 75.75

1002 10/03/1990 1309.95

1003 10/04/1990 1713.23

1004 10/03/1990 1900.10

1007 10/03/1990 1098.16

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

 

Þ Вместо имен полей, можно использовать их порядковые номера

 

SELECT sname, comm

FROM Salespeople

ORDER BY 2 DESC;

 

sname comm

-------- --------

Peel 0.17

Serres 0.13

Rifkin 0.15

Упорядочение с помощью столбца вывода

 

SELECT snum, COUNT ( DISTINCT onum )

FROM Orders

GROUP BY snum

ORDER BY 2 DESC;

 

 

snum

----- ----------

1001 3

1002 3

1007 2

1003 1

1004 1

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

 

 

 

ИМЕНА ТАБЛИЦ И СТОЛБЦОВ

 

Salespeople.snum

 

Salespeople.city

 

Orders.odate

 

СОЗДАНИЕ ОБЬЕДИНЕНИЯ

 

 

SELECT Customers.cname, Salespeople.sname,

Salespeople.city

FROM Salespeople, Customers

WHERE Salespeople.city = Customers.city

 

 

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

cname cname city

------- -------- ----

Hoffman Peel London

Liu Serres San Jose

Cisneros Serres San Jose

Hoffman Motika London

Clemens Motika London

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

 

Þ ОБЪЕДИНЕНИЕ ТАБЛИЦ ЧЕРЕЗ СПРАВОЧНУЮ ЦЕЛОСТНОСТЬ

 

SELECT Customers.cname, Salespeople.sname,

FROM Salespeople, Customers

WHERE Salespeople.snum = Customers.snum

 

 

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

cname sname

------- --------

Hoffman Peel

Giovanni Axelrod

Liu Serres

Grass Serres

Clemens Peel

Cisneros Rifkin

Pereira Motika

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

 

 

Þ ОБЪЕДИНЕНИЕ, ОСНОВАННОЕ НА НЕРАВЕНСТВЕ

 

SELECT sname, cname

FROM Salespeople, Customers

WHERE sname < cname AND rating < 200;

 

 

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

sname cname

-------- -------

Peel Pereira

Motika Pereira

Axelrod Hoffman

Axelrod Clemens

Axelrod Pereira

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

 

* ОБЪЕДИНЕНИЕ БОЛЕЕ ДВУХ ТАБЛИЦ

 

SELECT onum, cname, Orders.cnum,

Orders.snum

FROM Salespeople, Customers, Orders

WHERE Customers.city < > Salespeople.city

AND Orders.cnum = Customers.cnum

AND Orders.snum = Salespeople.snum;

 

 

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

onum cname cnum snum

------ ------- ----- -----

3001 Cisneros 2008 1007

3002 Pereira 2007 1004

3006 Cisneros 2008 1007

3009 Giovanni 2002 1003

3007 Grass 2004 1002

3010 Grass 2004 1002

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

 

SELECT имя_таблицы.имя_столбца[, . ..]

FROM {имя-таблицы

[тип-объединения]JOIN имя-таблицы

ON условие-поиска}[, ...]

WHERE условие-поиска;

 

ТИПЫ ОПЕРАТОРА ОБЪЕДИНЕНИЯ:

INNER JOIN (внутреннее объединение),

OUTER JOIN (внешнее объединение),

CROSS JOIN (перекрестное объединение).

Внутреннее объединение

· объединениями по эквивалентности

SELECT onum, amt, cnum, cname

FROM Orders INNER JOIN Customers

ON Orders.cnum = Customers.cnum;

 

· Естественное объединение

SELECT Orders.*, cname

FROM Orders

INNER JOIN Customers

ON Orders.cnum = Customers.cnum;

 

Перекрестные и неограниченные объединения

Декартовое произведение

A B
C D
E F

 

A B
С D
Е F
Д В
С D
Е F
Д В
С D
Е F

 

text или image

 

Старый синтаксис ANSI:

SELECT Orders.onum, Salespeople.snum

FROM Orders, Salespeople

 

Предпочтительный синтаксис ANSI:

SELECT Orders.onum, Salespeople.snum

FROM Orders CROSS JOIN Salespeople

Внешнее объединение

SELECT Custorners. cnum, Orders.onum

FROM Custorners, Orders

WHERE Custorners. cnum *= Orders. cnum

 

SELECT Orders.onum, Custorners. cnum

FROM Orders, Custorners

WHERE Orders. cnum =* Custorners.cnum

*= включает все строки первой таблицы и только сопоставимые строки второй таблицы (левое внешнее объединение).

 

=* включает все строки второй таблицы и только сопоставимые строки первой таблицы (правое внешнее объединение).

 

Стандарт ANSI:

· LEFT OUTER JOIN - Включает все строки первой таблицы и только сопоставимые строки второй таблицы.

· RIGHT OUTER JOIN - Включает все строки второй таблицы и только сопоставимые строки первой таблицы.

· FULL OUTER JOIN - Включает все сопоставимые и несопоставимые строки обеих таблиц.

SELECT Custorners.cnum, Orders.onum

FROM Custorners LEFT OUTER JOIN Orders

ON Custorners.cnum= Orders.cnum

SELECT Custorners.cnum, Orders.onum

FROM Custorners RIGHT OUTER JOIN Orders

ON Custorners.cnum= Orders.cnum

SELECT Custorners.cnum, Orders.onum

FROM Custorners FULL OUTER JOIN Orders

ON Custorners.cnum= Orders.cnum

СУБД Access, MySQL и Sybase.

Самообъединения

SELECT c1.snum, c1.cnum, c1.cnаme

FROM Custorners AS c1, Custorners AS c2

WHERE c1.snum=c2.snum

AND c2.cname= “Clemens”

 

SELECT c1.cnаme, c2.city

FROM Custorners AS c1, Custorners AS c2

WHERE c1.city = c2.city



<== предыдущая лекция | следующая лекция ==>
ORDER ВУ имена столбцов, по которым упорядочивается вывод | Вложенные запросы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.