· Интерфейс определяет поведение объекта и содержит описание поддерживаемых членов. Ими могут быть методы, свойства и события.
· Объект, реализующий некоторый интерфейс, может взаимодействовать с любым другим объектом, которому необходим этот интерфейс.
· За реализацию членов интерфейса отвечает класс или структура, в которой этот интерфейс реализован. В классах, как и в структурах, допускается реализация нескольких интерфейсов.
· Класс или структура, реализующая некоторый интерфейс, должна обеспечить реализацию всех членов, объявленных в этом интерфейсе.
· В С# члены интерфейса реализуются двумя способами:
ü реализация члена с именем, сигнатурой и уровнем доступа, идентичными соответствующему члену интерфейса. Такие члены доступны как через реализующий класс, так и через интерфейс;
ü явная реализация члена интерфейса с указанием его полного имени. Такие члены доступны только через интерфейс.
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
=========================
Þ Вместо имен полей, можно использовать их порядковые номера