завел мой врач издалека.
410013796724260
• Webmoney
R335386147728
Z369087728698
Оператор чтения SELECTОператор SELECT позволяет делать выборки записей из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Для выборки записей можно использовать как отдельную таблицу или представление View, так и совокупность таблиц и представлений. Ниже представлены SQL-запросы с оператором select для выборки всех записей таблицы (table_name) и представления (view_name). select * from <table_name>; select * from <view_name>; Столбцы и строки результирующего набора не упорядочены. Чтобы упорядочить поля результирующего набора, их следует перечислить через запятую в нужном порядке после оператора SELECT. Например : select id, name, price, quantity, photo from <table_name>; 1. SELECT DISTINCTЗаписи таблицы могут хранить в столбцах (полях) повторяющиеся значения. Для чтения неповторяющихся значений следует использовать выражение SELECT DISTINCT. select distinct <col_name1>, <col_name2>, … from <table_name>; 2. Условие WHEREУсловие where следует использовать для получения определенного результирующего набор записей : select <col_name1>, <col_name2>, … from <table_name> where <condition>; В условии condition можно использовать :
2.1. Текстовые условияОператор LIKE
Если проверяемое значение соответствует образцу с учетом символов, то условие истинно TRUE. В таблице приводится несколько примеров определения шаблонов выборки текстовых записей.
Примеры SQL-скриптов использования оператора like : select * from cities where name like '%Rostov%'; select * from users where last_name like 'Golub%'; Если в шаблоне необходимо указать трафаретный символ, то условие следует расширить экранирующим символом с оператором ESCAPE. Этот экранирующий символ будет использоваться в образце перед трафаретным символом, сообщая о том, что последний следует трактовать как обычный символ. Например, если необходимо выбрать все значения, содержащие символ «_», то шаблон '%_%' приведет к тому, что будут возвращены все записи. Или, как выбрать оператором like записи, имеющие значения «75%». Для этих случаев шаблоны условий следует записать следующим образом : -- шаблон чтения записей с символом '_' like '%#_%' ESCAPE '#' -- шаблон чтения записей со значением '75%' like '75|%' ESCAPE '|' В данных примерах оператор LIKE идентифицирует символы '#' и '|' как экранирующие, после которых в шаблоне выборки символ не относится к трафаретным. В конце страницы приводится несколько примеров использования LIKE. Оператор IN select * from users where department IN ('programmer', 'manager', 'saler'); 2.2. Оператор BETWEENОператор BETWEEN используется для выбора записей из определённого диапазона. Синтаксис использования BETWEEN определяет необходимость вставки оператора AND между двумя граничными значениями : select <col_name1>, <col_name2>, … from <table_name> where <col_name2> BETWEEN <value1> AND <value2>; В условии могут быть использованы как числовые значения, так и даты. Например, для выборки автомобилей стоимостью в пределах от 800000 до 1200000 запрос будет иметь следующий вид : select * from autos where price between 800000 and 1200000; Если необходимо выбрать значения, которые не попадают в заданный диапазон, то перед BETWEEN следует установить NOT : select * from <table_name> where <col_name> NOT BETWEEN <value1> AND <value2>; Чтобы выбрать события в период 01.05.2019 по 11.05.2019 условие WHERE в Oracle выглядело бы следующим образом : where <col_date> BETWEEN TO_DATE ('2019-05-01', 'YYYY-MM-DD') AND TO_DATE ('2019-05-11', 'YYYY-MM-DD'); Примечание : каждый провайдер БД использует собственные функции работы с датами. Функция TO_DATE сервера БД Oracle конвертирует текстовое представление даты в значение DATE. В MySQL данное преобразование выполняет функция STR_TO_DATE. 3. Оператор GROUP BYОператор GROUP BY, как правило, используется с агрегатными функциями (COUNT, MAX, MIN, SUM и AVG) для группировки выходных значений. Если в выражении SELECT имеются агрегатные функции и не вошедшие в них наименования столбцов, то все столбцы списка SELECT, не вошедшие в агрегатные функции, должны быть указаны в предложении GROUP BY. В результате такой выборки все выходные строки запроса разбиваются на группы, характеризуемые одинаковыми комбинациями значений в этих столбцах. После чего к каждой группе будут применены агрегатные функции. Необходимо иметь в виду, что все значения NULL трактуются оператором GROUP BY как равные, Т.е при группировке по полю, содержащему NULL-значения, все такие записи попадут в одну группу. Если в предложении SELECT отсутствуют агрегатные функции, но SQL-запрос включает GROUP BY, то сервер вернет по одной строке из каждой группы. Эту возможность, как с ключевым словом DISTINCT, можно использовать для исключения дубликатов значений в результирующем наборе. В следующем запросе для каждой модели авто определяется их количество и средняя стоимость. Все строки с одинаковыми значениями model образуют группу; на выходе SELECT вычисляются количество значений и средняя цена для каждой группы : SELECT model, COUNT(model) AS Cnt_model, AVG(price) AS Avg_price FROM autos GROUP BY model; 4. Оператор HAVINGОператор HAVING не является обязательным и применяется исключительно в связке с GROUP BY. Если условие WHERE с оператором GROUP BY позволяет определить условия выборки и группировки данных, то HAVING содержит условия, касающиеся выбранных данных уже непосредственно в самих группах. Т.е. команда HAVING позволяет фильтровать результат выбранной группировки. В следующем примере представлены 2 запроса. Первый запрос вернет суммы зарплат по подразделениям. А второй запрос вернет подразделения, в которых сумма зарплат выше 500000. -- сумма зарплат по подразделениям SELECT department, SUM(salary) as summa FROM employees GROUP BY department; -- сумма зарплат по подразделениям SELECT department, SUM(salary) as summa FROM employees GROUP BY department HAVING summa > 500000; 5. Оператор ORDER BYПри выборке записей часто бывает важно получить их в определенном упорядоченном виде. Сортировка записей может быть выполнена по любым полям с любым типом данных. Это может быть сортировка по возрастанию или убыванию для числовых полей. Для символьных (текстовых) полей это может быть сортировка в алфавитном порядке, хотя по сути, она также является сортировкой по возрастанию или убыванию. Сортировка символьных полей также может быть выполнена в любых направлениях – от А до Яа..я (A..Za..z) и наоборот. Для выполнения сортировки используется оператор ORDER BY, после которого указывается одно или несколько полей. По умолчанию ORDER BY выполняет сортировку по возрастанию. Чтобы определить направление сортировки необходимо после имени столбца указать ключевое слово ASC (сортировка по возрастанию) или DESC (по убыванию). SELECT <col_name1>, <col_name2>, … FROM <table_name> ORDER BY <col_name1>, <col_name2>, … ASC|DESC; 6. Операторы JOIN, UNIONЧасто бывает необходимо выполнить операции соединения данных из двух наборов в один результирующий набор. Для этого следует использовать рассмотренный на отдельной странице оператор соединения JOIN. Т.е. оператор JOIN позволяет из одного или нескольких наборов данных сделать выборку записей с общими значениями полей. Для объединения результатов двух и более SQL-запросов в единую выборку применяется оператор UNION. Т.е. оператор UNION к одной выборке данных добавляет другие выборки. Формирование результата выборкиИногда «лень» создавать таблицу и «загонять» в неё данные, чтобы получить какие-либо тестовые выборки. Ниже представлен SQL-запрос в БД Oracle, позволяющий без таблицы получить набор записей. После этого можно с данным набором записей выполнять какие-либо манипуляции, связанные с фильтрацией, группированием, сортировкой и т.д. В представленном коде выполняются проверки использования различных условий с оператором LIKE. SELECT * FROM ( SELECT '3%' name from dual UNION ALL SELECT '3%%' from dual UNION ALL SELECT '33' from dual UNION ALL SELECT '4%%' from dual UNION ALL SELECT 'a3%%' from dual UNION ALL SELECT 'xyz' from dual UNION ALL SELECT 'xyz 3% abc' from dual UNION ALL SELECT '3a2b' from dual UNION ALL SELECT 'C23OH' from dual UNION ALL SELECT 'C32OH' from dual ) tbl -- WHERE name LIKE '3%' -- WHERE name LIKE '3#%' ESCAPE '#' WHERE name LIKE '%3|%%' ESCAPE '|' |