class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

основы sql

введение
структура БД
инструментарий
комментарий
идентификаторы
обзор типов данных
интервалы времени
литералы
операции и выражения
обзор функций
преобразование типов
создание таблицы
изменение, удаление таблицы
вставка данных
изменение записей
удаление записей
выбор данных
соединения
агрегатные функции, группировка данных
операции над выборками
добавление итогов
нумерация записей
уникальность первич. ключа
индексы
представления

Dynamic SQL

прочее

Справочник по SQL

Выборка записей

Выбор данных выполняется командой SELECT. Ниже приведен примерный список используемых ею конструкций и ключевых слов, полный же список зависит от реализации СУБД:

Это наверно самая сложная команда, поэтому ее изучение лучше разбить на несколько частей. Здесь рассмотрим эту команду в общем, а соединения, группировку данных и подобное более детально чуть позже. Пусть имеется следующая таблица с указанными данными.


-- создание таблицы
create table tblname (
id integer,
num double precision, 

constraint pk_tblname primary key (id)
);

-- вставка данных
insert into tblname values(1,2.0);
insert into tblname values(2,3.3);
insert into tblname values(3,6.6);
insert into tblname values(4,2.0);
insert into tblname values(5,3.3);
insert into tblname values(6,6.6);
commit;

выборка констант

Для выбора констант может указываться любой источник. Однако, если мы хотим просто подсчитать значение какого-то выражения, то указывать источник имеющий сотню тысяч записей затратно по ресурсам. Поэтому многие СУБД позволяют выбрать константы без указания источника. Oracle не поддерживает синтаксис SELECT без FROM, а для выбора констант используется специальная системная таблица dual.


-- вычисляем три простых выражения
SELECT 2+2, 2*2 , 2/2;
SELECT 2+2, 2*2 , 2/2 FROM dual; -- для Oracle

-- в выборке будет 6 одинаковых записей
SELECT 2+2, 2*2 , 2/2 FROM tblname;

выборка по столбцам таблиц

Если источники данных указаны, то кроме констант можно выбирать столбцы или строить выражения с их использованием. Столбец определяется как имя_источника.имя_столбца. Если источник данных один, то его имя можно опустить. Для выбора всех столбцов всех источников используется символ *. Аналогично можно выбрать все столбцы указанного источника: имя_источника.*. Ниже приведен пример выборки всех записей нашей таблицы.


-- перечисляем столбцы
SELECT tblname.id, tblname.num FROM tblname;
SELECT tblname.num FROM tblname;
SELECT tblname.num*2 FROM tblname;

-- все столбцы указанного источника
SELECT tblname.* FROM tblname;

-- все столбцы всех источников
SELECT * FROM tblname;

синонимы (алиасы)

При выборе данных можно назначать временные синонимы источникам данных и используемым столбцам. А в некоторых случаях необходимо. Например, когда источник подзапрос соединяется с другим источником, именование подзапроса обязательно. Другой пример, это объединение нескольких выборок, имена столбцов которых должны совпадать. Ключевое слово AS как правило необязательно, а в Oracle разрешено только для столбцов.


-- t синоним таблицы tblname
SELECT t.id, t.num 
    FROM tblname AS t; -- не для Oracle
SELECT t.id, t.num 
    FROM tblname t;  -- для всех

-- именование подзапроса, используемого 
-- как источник данных
SELECT * FROM (select num from tblname ) t

-- источник подзапрос соединяется 
-- с другим источником
SELECT t.tid, t2.num 
    FROM (
         select id as tid, num as tnum 
         from tblname 
         ) t, 
         tblname t2 
    WHERE t.tid=t2.id 

-- синоним для столбца
SELECT t.num*2 AS num2 FROM tblname t;

-- "двойное число" русский синоним для столбца
SELECT t.num*2 AS "двойное число" 
    FROM tblname t;
SELECT t.id "ид", t.num*2 AS "двойное число" 
    FROM tblname t;

-- `` расширение MySQL
SELECT t.num*2 AS `двойное число` FROM tblname t; 

уникальные записи

Записи выборки считаются одинаковыми, если значения соответствующих полей одинаковы. Поэтому для демонстрации distinct на нашей таблице нужно исключить первичный ключ (поле id) из выборки.


-- есть одинаковые записи
SELECT t.num FROM tblname t;

-- только уникальные записи
SELECT DISTINCT t.num FROM tblname t;

Конструкция ORDER BY позволяет последовательно отсортировать сразу по нескольким столбцам. Столбцы, по которым происходит сортировка, желательно проиндексировать.


-- сортировка записей по полю num
SELECT * FROM tblname ORDER BY num

-- восходящая сортировка
SELECT * FROM tblname t 
  ORDER BY t.num ASC

-- нисходящая сортировка
SELECT * FROM tblname 
  ORDER BY t.num DESC

выборка по условию

Конструкция WHERE позволяет ограничить множество выбираемых записей. Ниже приведено несколько примеров.


SELECT * FROM tblname t WHERE t.id > 3

-- следующие примеры возвращают одни и те же записи
SELECT * FROM tblname t WHERE t.id=2 or t.id=4;

SELECT * FROM tblname t WHERE t.id in (2,4);

SELECT * FROM tblname t 
  WHERE t.id in(
      -- для Oracle: select 2 as c from dual
      select 2 as c 
      union
       -- для Oracle: select 4 as c from dual
      select 4 as c 
      ); -- для Oracle
      
SELECT t.* FROM
    tblname t,
    (
     -- для Oracle: select 2 as c from dual
     select 2 as c 
     union
     -- для Oracle: select 4 as c from dual
     select 4 as c 
    ) t2
WHERE t.id=t2.c;    

выборка по группам

И напоследок пару примеров группировки данных.


-- группировка по полям num и id
SELECT t.num, t.id FROM tblname t 
  GROUP BY num, id; 

-- первый столбец будет отсортирован по возрастанию
-- второй столбец каждой группы по убыванию 
SELECT t.num, t.id FROM tblname t 
  GROUP BY num, id  
  ORDER BY num ASC, id DESC
  
-- исключаем из выборки группу 3.3
SELECT t.num, t.id FROM tblname t 
  GROUP BY num, id  
  HAVING num!=3.3
  ORDER BY num ASC, id DESC    

Рейтинг@Mail.ru