Главная страница
Навигация по странице:

  • Ограничения на запросы с группировкой

  • Условие поиска групп, предложение HAVING

  • Ограничение на условие поиска GROUP

  • Вложенным или подчиненным запросом называют запрос, содержащийся в предложении WHERE или HAVING

  • Условие поиска во вложенном запросе

  • Сравнение с результатом вложенного запроса

  • Проверка на принадлежность результатам вложенного запроса

  • Проверка на существование

  • ALL – больше всех

  • Связанные вложенные запросы

  • Внешние объединения таблиц

  • Методы Join Существуют различные типы соединений MySQL MySQL JOINS

  • INNER JOIN

  • INNER JOIN (простое соединение)

  • При этом порядок нам не важен SELECT Cname, заказ.Odate FROM Клиенты INNER JOIN заказ ON Клиенты.Cnum=Заказ.Cnum;Вывели клиентов и дату заказаLEFT OUTER JOIN

  • Многотабличный оператор UPDATE

  • Как посмотреть права доступа в MySQL

  • шшш. шпаргалка. Сортировка результатов запроса order by ставится в самом конце


    Скачать 232.95 Kb.
    НазваниеСортировка результатов запроса order by ставится в самом конце
    Дата23.06.2022
    Размер232.95 Kb.
    Формат файлаdocx
    Имя файлашпаргалка.docx
    ТипДокументы
    #611716

    Сортировка результатов запроса

    ORDER BY – ставится в самом конце

    ASС – используется по умолчанию. Сортирует по возрастанию от меньшего к большему

    DESС – сортировка по убыванию

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

    SELECT Cname, City, Rating FROM клиенты ORDER BY City, Rating

    В данном случае важно написать первым именно город, так как в первую очередь вы осуществляем сортировку внутри города

    Можно не указывать название, а порядковый номер в запросе

    SELECT Cname, City, Rating FROM клиенты ORDER BY 2,3

    Многотабличные запросы на чтение

    Поставить в соответствие продавцу заказчиков, проживающих в том же городе

    SELECT продавцы.Sname, клиенты.Cname, продавцы.City From продавцы, клиенты WHERE клиенты.City=продавцы.City

    Вывести все комбинации имени продавца и имени заказчика так, что первый предшествует последнему в алфавитном порядке, а последний имеет рейтинг менее 200

    SELECT Sname, Cname FROM продавцыклиенты WHERE SnameAND Rating<200

    Запросы с использованием отношения предок-потомок

    Вывести список всех клиентов назначенных каждому продавцу

    SELECT продавцы.Snum, Sname, Cname FROM клиенты, продавцы WHERE продавцы.Snum=клиенты.Snum

    Запросы на чтение к 3 таблицами
    Вывести список заказов стоимостью выше 2000, включая имя продавца и клиента, сделавшего заказ


    SELECT Sname, Cname, Onum, Amt FROM продавцы, клиенты, заказ WHERE Amt>2000 AND заказ.Cnum=клиенты.Cnum AND заказ.Snum=продавцы.Snum

    Вывести список заказов, стоимостью выше 2000, включая имена клиентов сделавших заказ и имя продавца, закрепленного за эти клиентом

    Вывести все пары заказчиков, имеющих один и тот же рейтинг

    SELECT first.Cname, second.Cname, first.Rating FROM клиенты first, клиенты second WHERE first.Rating=second.Rating

    SELECT first.Cname, second.Cname, first.Rating FROM клиенты first, клиенты second WHERE first.Rating=second.Rating AND first.Cname.Cname

    Проверка ошибок

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

    SELECT first.Onum, first.Cnum, first.Snum, Second.Onum, second.Cnum, second.Snum FROM Заказ first, Заказ second

    WHERE first.Cnum = second.Cnum

    AND first.Snum < > second.Snum;

    Хотя объединение таблицы с собой — это первая ситуация, когда понятно, что псевдонимы необходимы, мы не ограничены в их использовании. Можно создавать псевдонимы в любое время, когда мы хотим создать альтернативные имена для наших таблиц в базе данных. Например, если таблицы имеют длинные и сложные имена, можно определить односимвольные псевдонимы типа a и b и использовать их вместо имен таблиц в предложении SELECT и в предикате.

    Итоговые запросы на чтение (Агрегатные функции)

    GROUP BY

    HAVING

    SUM() – вычисляет сумму всех значений, содержащихся в столбце. Столбец должен иметь числовой тип данных

    Результат, возвращаемый этой функцией имеет тот же тип данных, что и столбец, однако точность результата может быть выше

    SELECT SUM(Amt) FROM Заказ

    AVG() – вычисляет среднее всех значений, содержащихся в столбце

    Данные также должны иметь числовой тип

    Возвращаемый результат может иметь не такой тип данных как столбец

    Найти среднюю стоимость всех заказов

    SELECT AVG(Amt) FROM заказ

    MIN() – находит наименьшее среди всех значений, содержащихся в столбце

    MAX() – находит наибольшее среди всех значений, содержащихся в столбце

    Для числовых данных сравнение идет по арифметическим правилам, сравнение дат происходит последовательно, сравнение интервалов выполняется на основании их продолжительностин

    COUNT() – подсчитывает кол-во значений, содержащихся в столбце

    Тип данных может быть любым. Всегда возвращает целое число
    COUNT(*) – количество строк в таблице результатов запроса

    Подсчитывает строки, а не значения данных

    Агрегатная функция не может быть аргументом для другой агрегатной функции

    В списке возвращаемых столбцов нельзя одновременно использовать агрегатные функции и обычные имена столбцов

    Если какие-либо из значений, содержащихся в столбце равны NULL, то они исключаются

    • если какие-либо из значений, содержащихся в столбце, равны NULL,, при вычислении результата функции они исключаются;

    •  если все значения в столбце равны NULL,, то функции SUM( ), AVG(), MIN( ) и MAX( ) возвращают значение NULL; функция COUNT( ) возвращает ноль;

    •  если в столбце нет значений (столбец пустой), то функции SUM( ), AVG( ), MIN() и MAX( ) возвращают значение NULL ; функция COUNT( ) возвращает ноль;

    •  функция COUNT(*) подсчитывает количество строк и не зависит от наличия или отсутствия в столбце значения NULL,; если строк в таблице нет, эта функция возвращает ноль. Коммерческие СУБД могут выдавать результаты, отличающиеся от стандарта.

    Вывести наибольшую сумму заказа сделанную каждым продавцом

    Ограничения на запросы с группировкой

    Столбцы должны представлять собой реальные столбцы таблиц перечисленные в предлжении FROM

    Нельзя группировать строки на основе значений вычисляемого выражения

    Кроме того, существуют ограничения на элементы списка возвращаемых столбцов

    Все элементы списка должны иметь одно значения для каждой возвращаемой группы строк

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

    Два значения NULL в предложении GROUP BY равны

    Условие поиска групп, предложение HAVING

    Показать наибольшие заказы для продавцов

    SELECT Snum, MAX(Amt) FROM Заказ GROUP BY Snum HAVING Snum IN (1002, 1007)

    SQL запрос на чтение

    1. Сформировать произведение таблиц, перечисленных в предложении FROM

    2. Если имеется предложение WHERE, применить заданное в нем условие поиска к каждой строке таблице произведений и оставить в ней только те строки, для которых это условие выполняется

    3. Если имеется предложение GROUP BY разделить строки, оставшиеся в таблице произведения таким образом, чтобы в каждой группе строки имели одинаковое значение во всех столбцах группировки

    4. Если имеется предложение HAVING, применить заданное в нём условие поиска к каждой группе строк и оставить в таблице произведения только те группы, для которых это условие выполняется

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

    6. Если указано ключевое слово DISTINCT удалить из таблицы результатов запроса все повторяющиеся строки

    7. Если имеется предложение ORDER BY

    Ограничение на условие поиска GROUP

    В условиях поиска может входить константа, агрегатная функция, столбец группировки, выражении включающее в себя все эти элементы

    Вложенным или подчиненным запросом называют запрос, содержащийся в предложении WHERE или HAVING

    SELECT*FROM заказ WHERE

    На вложенный запрос накладываются следующие ограничения:

    1. Таблица результатов вложенного запроса всегда состоит из одного столбца

    2. Во вложенный запрос не может входить предложение ORDER BY

    3. Вложенный запрос не может запросом на объединение нескольких операторов SELECT

    4. Имена столбцов во вложенном запросе могут являться ссылками на столбцы таблиц главного запроса

    Условие поиска во вложенном запросе

    1. Сравнение с результатом вложенного запроса.

    Сравнивает значение выражения с одним значением, возвращённым вложенным запросом

    1. Проверка на принадлежность результатам вложенного запроса

    Проверяет значение выражения на равенство с одним из элементов множества, возвращённым вложенным запросом

    1. Проверка на существование

    Проверяет наличие строк в таблице результатов вложенного запроса

    1. Многократное сравнение

    Сравнивает значение выражения с каждым из значений множества, возвращённого вложенным запросом

    Сравнение с результатом вложенного запроса

    В операции сравнения с результатом вложенного запроса можно использовать те же шесть операторов сравнения запроса (=, < >, <, <=, >, >=), что и при простом сравнении.

    Вложенный запрос, участвующий в операции сравнения, должен возвращать в качестве результата одну строку. Если результатом вложенного запроса являются несколько строк, то сравнение не имеет смысла и SQL выдаст сообщение об ошибке.

    Если в результате выполнения вложенного запроса не будет получено ни одной строки или будет получено значение NULL, то операция сравнения возвращает NULL. Вложенный запрос в операции сравнения может стоять только справа от оператора сравнения. Это не ограничивает возможности операции сравнения, поскольку знак любого неравенства всегда можно «перевернуть». Один тип функций, который автоматически может производить одиночное значение для любого числа строк, конечно же — агрегатная функция. Любой запрос, использующий функцию агрегата без предложения GROUP BY, будет выдавать одно значение для использования в основном предикате.
    Вывести сведения о заказах, имеющих сумму приобретений выше
    средней на 10-е апреля

    SELECT *
    FROM Заказ
    WHERE Amt > (SELECT AVG(Amt) FROM Заказ WHERE Odate = '1999-04-10');

    Проверка на принадлежность результатам вложенного запроса является видоизмененной формой простой проверки на членство в множестве. Одно значение сравнивается со столбцом данных, возвращенных вложенным запросом, и если это значение равно одному из значений в столбце, проверка возвращает TRUE. Данная проверка используется, когда необходимо сравнить значение из проверяемой строки со множеством значений, возвращенных вложенным запросом.
    Вывести сведения о заказах продавцов из Лондона

    SELECT *
    FROM Заказ
    WHERE Snum IN (SELECT Snum FROM Продавцы WHERE City = ‘London’):



    Этот запрос более прост для пользователя, чтобы понимать его, и более прост для компьютера, чтобы его выполнить, чем если бы мы использовали объединение:

    SELECT Onum, Amt, Odate, Cnum, Заказ.Snum FROM 3akas.Продавцы
    WHERE Заказ.Snum = Продавцы.Snum
    AND Продавцы.City = ‘London’;

    Хотя этот запрос и произведет тот же самый вывод, что и в примере с подзапросом SQL должен будет просмотреть каждую возможную комбинацию строк из двух таблиц и проверить их по составному предикату. Проще и эффективнее извлечь из таблицы Продавцов значения поля Snum, где City = ‘London’, и затем искать эти значения в таблице Заказ, как это делается в варианте с подзапросом. Внутренний запрос даст нам Snum = 1001 и Snum = 1004. Внешний запрос даст нам строки из таблицы Заказов, где эти поля найдены.
    Ключевое слово IN можно использовать, даже если есть уверенность, что подзапрос произведет одиночное значение.

    Проверка на существование

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

    Вывести данные о заказчиках, которые сделали заказ на сумму больше 1500.00

    SELECT * FROM Клиенты WHERE EXISTS (SELECT * FROM Заказ WHERE Клиенты.Cnum = Заказ.Cnum AND Amt > 1500.00):



    Условие поиска EXISTS не использует результаты вложенного запроса, а проверяется только наличие результатов. Поэтому во вложенном запросе проверки EXIXTS допускается использование формы SELECT *.
    Отметим, что приведенный пример содержит ссылку на столбец таблицы из главного запроса. На практике во вложенном запросе проверки EXISTS всегда имеется внешняя ссылка, связывающая вложенный запрос со строкой, проверяемой в настоящий момент главным запросом.

    Многократное сравнение

    В проверке ANY используется один из шести операторов сравнения (=, < >, <, <=, >, >=) для того, чтобы сравнить одно проверяемое значение со столбцом данных, возвращаемых вложенным запросом. Проверяемое значение поочередно сравнивается с каждым значением, содержащимся в столбце. Если любое из этих сравнений дает результат TRUE, то проверка ANY возвращает TRUE.
    Вывести сведения о продавцах, проживающих в одном городе с
    заказчиками

    SELECT *
    FROM Продавцы
    WHERE City = ANY (SELECT City FROM Клиенты);



    ANY берет все значения, выведенные подзапросом (в этом случае — все значения City в таблице Клиенты), и оценивает их как верные, если любой (ANY) из них равняется значению города текущей строки внешнего запроса. В приведенном примере можно использовать ключевое слово IN, чтобы создать запрос аналогичный предыдущему:

    SELECT *
    FROM Продавцы
    WHERE City IN (SELECT City FROM Клиенты);

    Однако ANY может использовать другие реляционные операторы кроме равняется (=) и, таким образом, делать сравнения, которые являются выше возможностей IN. Например, можно получить сведения о продавцах, которые предшествуют заказчикам в алфавитном порядке:

    SELECT *
    FROM Продавцы
    WHERE Sname < ANY (SELECT Cname FROM Клиенты):



    Были выбраны все строки, за исключением строк для Serres и Rifkin потому что нет заказчиков, чьи имена следовали бы за ними в алфавитном порядке. Запрос с поверкой ANY всегда можно преобразовать в запрос с проверкой EXISTS, перенося операцию сравнения внутрь условия поиска вложенного запроса. Вот альтернативная форма предыдущего запроса с проверкой EXISTS:

    SELECT * FROM Продавцы WHERE EXISTS (SELECT * FROM Клиенты WHERE Sname < Cname);

    На практике проверка ANY иногда может приводить к ошибкам, которые трудно выявить. Если мы создаем запрос, чтобы выбрать заказчиков, которые имеют больший рейтинг, чем любой заказчик в Риме, мы можем получить результат, который несколько отличался бы от того что мы ожидали:

    SELECT *
    FROM Клиенты WHERE Rating > ANY (SELECT Rating FROM Клиенты WHERE City = Rome);



    В разговорном языке способ, которым обычно склонны интерпретировать оценку «больше чем любой (где City = Rome)», должен сообщить, что это значение оценки должно быть выше в каждом случае, где значение City = Rome. Однако это не так в случае с ANY, используемом в SQL. ANY оценивает как верно, если подзапрос находит любое значение, которое делает условие верным.
    Если мы оценим ANY обычным способом, то только заказчики с рейтингом выше 300 будут превышать Giovanni, который находится в Риме и имеет рейтинг 200. Однако подзапрос находит также и Pereira в Риме с рейтингом 100. Так как все заказчики с рейтингом 200 были выше Pereira, то они тоже были выбраны.
    Простой способ запомнить, что < ANY - значение меньшее, чем наибольшее выбранное значение, а > ANY — значение большее, чем наименьшее выбранное значение.
    Проверка ALL

    В проверке ALL, как и в проверке ANY, используется один из шести операторов (=, < >, <, <=, >, >=) для сравнения одного проверяемого значения со столбцом всех данных, возвращенных вложенным запросом. Проверяемое значение поочередно сравнивается с каждым значением, содержащимся в столбце. Если все сравнения дают результат TRUE, то проверка ALL возвращает значение TRUE.

    Вывести сведения о заказчиках, чьи рейтинги выше, чем у каждого заказчика в Риме

    SELECT *
    FROM Клиенты
    WHERE Rating > ALL (SELECT Rating FROM Клиенты WHERE City = Rome):

    • ALL – больше всех



    Этот оператор проверяет значение рейтинга у всех заказчиков в Риме. Самая высокая оценка в Риме — у Giovanni (200). Затем выбираются заказчики с рейтингом выше 200.

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

    Связанные вложенные запросы

    Вложенный запрос выполняется многократно — один раз для каждой строки произведения таблиц из главного запроса.

    Однако во многих случаях вложенный запрос возвращает один и тот же результат для всех строк или группы строк как в примере, когда мы выводили заказы, имеющие сумму приобретений выше средней на 10-е апреля. В подобных случаях неразумно выполнять вложенный запрос несколько раз.

    Следовало бы один раз найти эту среднюю сумму и вставить ее в главный запрос:

    SELECT * FROM Заказ WHERE Amt >894.49;

    В коммерческих СУБД это упрощение используется всякий раз, когда есть такая возможность, чтобы уменьшить объем работы, необходимой для выполнения запроса.

    Но когда вложенный запрос содержит внешнюю ссылку, данное упрощение применять нельзя, как показано на следующем примере:
    Найти всех заказчиков с заказами на 10-е марта

    SELECT * FROM Клиенты outer WHERE 10.03.99 IN (SELECT Odate FROM Заказ inner WHERE outer. Cnum = inner.Cnum);

    SELECT * FROM Клиенты outer1 WHERE '10.03.99' IN (SELECT Odate FROM Заказ inner1 WHERE outer1. Cnum = inner1.Cnum);

    SELECT * FROM Клиенты outer1 WHERE '99-03-10' IN (SELECT Odate FROM Заказ inner1 WHERE outer1. Cnum = inner1.Cnum);



    В этом примере псевдонимы «внутренний» (inner) и «внешний» (outer) выбраны для большей ясности; они отсылают к значениям внутренних и внешних запросов, соответственно.

    Так как значение поля Cnum внешнего запроса меняется, внутренний запрос должен выполняться отдельно для каждой строки внешнего запроса. Вложенный запрос, содержащий внешнюю ссылку, называется связанным вложенным запросом, т.к. его результаты связаны с отдельной строкой таблицы в главном запросе.


    Вложенный запрос может иметь ссылку на таблицу в предложении FROM любого запроса, который содержит данный вложенный запрос, независимо от его уровня вложенности.

    При этом велика вероятность неоднозначных ссылок на имена столбцов.

    В SQL всегда предполагается, что ссылка на столбец во вложенном запросе относится к ближайшему возможному предложению FROM. Чтобы исключить неоднозначность, необходимо использовать псевдонимы таблиц, как в рассмотренном примере.
    Вывести номера и имена продавцов, имеющих более одного заказчика

    SELECT Snum, Sname FROM Продавцы main WHERE 1 < (SELECT COUNT(*) FROM Клиенты WHERE Snum = main.Snum):



    Обратим внимание, что предложение FROM подзапроса в этом примере не использует псевдоним. При отсутствии имени таблицы или префикса псевдонима, SQL может для начала принять, что любое поле выводится из таблицы с именем, указанным в предложении FROM текущего запроса. Если поле с этим именем отсутствует в этой таблице, SQL будет проверять внешние запросы. Именно поэтому префикс имени таблицы обычно необходим в соотнесенных подзапросах — для отмены этого предположения. Псевдонимы также часто запрашиваются, чтобы давать возможность ссылаться к той же самой таблице во внутреннем и внешнем запросе без какой-либо неоднозначности.

    Запросы могут быть разработаны таким образом, чтобы находить ошибки. Следующий запрос не должен производить никакого вывода. Он просматривает таблицу Заказов, чтобы видеть, совпадают ли поля Snum и Cnum в каждой строчке таблицы Клиентов, и выводит каждую строчку, где этого совпадения нет. Другими словами, запрос выясняет, тот ли продавец кредитовал каждую продажу (он воспринимает поле Спит как первичный ключ таблицы Клиентов, который не будет иметь никаких двойных значений в этой таблице).

    Выяснить, тот ли продавец, что закреплён за клиентом кредитовал продажу этого клиента

    SELECT * FROM Заказ main WHERE NOT Snum = (SELECT Snum FROM Клиенты WHERE Cnum = main.Cnum);

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

    Вложенные запросы в предложении HAVING

    Предложение HAVING может использовать только агрегатные функции, которые указаны в их предложении SELECT, или поля, используемые в их предложении GROUP BY. Поэтому только они являются внешними ссылками, которые можно делать.

    Все это потому, что предикат предложения HAVING оценивается для каждой группы из внешнего запроса, а не для каждой строки. Следовательно, и подзапрос будет выполняться один раз для каждой группы, выведенной из внешнего запроса, а не для каждой строки.


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

    SELECT Odate, SUM(Amt) AS SUM

    FROM Заказ a

    GROUP BY Odate HAVING SUM(Amt) > (SELECT 2000.00 +MAX(Amt) FROM Заказ b

    WHERE a.Odate = b.Odate);



    Подзапрос вычисляет значение MAX для всех строк с той же самой датой, что и у текущей агрегатной группы основного запроса. Сам подзапрос не должен использовать предложения GROUP BY или HAVING.

    Внешние объединения таблиц

    Получить список всех продавцов и заказчиков, размещённых в Лондоне

    SELECT Snum, Sname FROM Продавцы WHERE City='London' UNION SELECT Cnum, Cname FROM Клиенты WHERE City='London';

    Когда два или более запроса подвергаются объединению, их столбцы вывода должны быть совместимы для определений. Числовые поля должны иметь одинаковый тип и размер

    Другое ограничение на совместимость, это когда пустые значения (null) запрещены в каком-то из столбцов объединения, эти значения необходимо запретить и для всех соответствующих столбцов в других запросах объединения

    Нельзя использовать UNION в подзапросах

    Также нельзя использовать агрегатные функции в предложении SELECT запроса в объединении

    Методы Join

    Существуют различные типы соединений MySQL

    MySQL JOINS используются для извлечения данных из нескольких таблиц. JOIN выполняется всякий раз, когда две или более таблиц объединяются в SQL предложении.

    Существуют различные типы соединений MySQL:

    • MySQL INNER JOIN (или иногда называют простое соединение)

    • MySQL LEFT OUTER JOIN (илииногданазывают LEFT JOIN)

    • MySQL RIGHT OUTER JOIN (илииногданазывают RIGHT JOIN)

    Рассмотрим синтаксис MySQL JOIN, а также изучим примеры MySQL JOIN.

    INNER JOIN (простое соединение)

    Скорее всего, вы уже писали запросы в которых используются MySQL INNER JOIN. Это наиболее распространенный тип соединения. MySQL INNER JOINS возвращает все строки из нескольких таблиц, где выполняется условия соединения.

    Выведет только те позиции, которым есть соответствие

    Синтаксис

    Синтаксис INNER JOIN в MySQL:

    SELECT columns
    FROM table1
    INNER JOIN table2
    ON table1.column = table2.column;

    В этом рисунке, MySQL INNER JOIN возвращает затененную область:


    MySQL INNER JOIN будет возвращать записи, где table1 и table2 будут пересекаться.

    При этом порядок нам не важен

    SELECT Cname, заказ.Odate FROM Клиенты INNER JOIN заказ ON Клиенты.Cnum=Заказ.Cnum;

    Вывели клиентов и дату заказа

    LEFT OUTER JOIN

    Другой тип соединения называется MySQL LEFT OUTER JOIN. Этот тип соединения возвращает все строки из таблиц с левосторонним соединением, указанным в условии ON, и только те строки из другой таблицы, где объединяемые поля равны.

    Синтаксис

    Синтаксис для LEFT OUTER JOIN в MySQL:

    SELECT columns
    FROM table1
    LEFT JOIN table2
    ON table1.column = table2.column;

    В некоторых базах данных LEFT OUTER JOIN заменяется на LEFT JOIN.

    На этом рисунке, MySQL LEFT OUTER JOIN возвращает затененную область:



    MySQL LEFT OUTER JOIN возвратит все записи из table1 и только те записи из table2, которые пересекаются с table1.

    SELECT Cname,клиенты.City, заказ.Odate FROM клиенты LEFT JOIN заказ ON Клиенты.Cnum = заказ.Cnum;

    RIGHT OUTER JOIN

    Другой тип соединения называется MySQL RIGHT OUTER JOIN. Этот тип соединения возвращает все строки из таблиц с правосторонним соединением, указанным в условии ON, и только те строки из другой таблицы, где объединяемые поля равны.

    Синтаксис

    СинтаксиRIGHT OUTER JOIN в MySQL:

    SELECT columns
    FROM table1
    RIGHT [OUTER] JOIN table2
    ON table1.column = table2.column;

    В некоторых базах данных, RIGHT OUTER JOIN заменяется на RIGHT JOIN.

    На этом рисунке, MySQL RIGHT OUTER JOIN возвращает затененную область:



    MySQL RIGHT OUTER JOIN возвратит все записи из table2 и только те записи из table1, которые пересекаются с table2.

    SELECT Cname,клиенты.City, заказ.Odate FROM клиенты RIGHT JOIN заказ ON Клиенты.Cnum = заказ.Cnum;

    Для удаления записи из таблиц предусмотрены два оператора:

    DELETE

    TRUNCATE TABLE

    При использовании многотабличных запросов при помощи оператора DELETE допустимы две формы:

    DELETE products (отсюда удаляем) FROM products, catalogs(с этим работаем) WHERE условие

    DELETE FROM products (отсюда удаляем) USING products, catalogs(с этим работаем) WHERE условие

    Записи касаются только в таблицах, перечисленных. В данном случае записи касаются только таблицы products, удаление производится лишь из таблиц перечисленных после DELETE в первой форме запроса и после ключевого слова FROM во второй

    Обновление данных

    Операция обновления позволяет менять значения полей в уже существующих записях

    UPDATE – позволяет обновлять отдельные поля в уже существующих записях

    REPLACE – работает аналогично INSERT, за исключением того, что если старая запись в данной таблице имеет те же значения индекса UNIQUE и PRIMARY KEY, что и новое, то старая запись перед занесением новой будет удалена

    UPDATE [IGNORE] таблица SET столбец1=значение и т.д.

    За один SQL-запрос UPDATE обновлению может подвергаться несколько столбцов таблицы

    Если указывается необязательное ключевое слово IGNORE, то команда обновления не будет прервана даже если при обновлении возникнет ошибка дублирования ключей

    Строки, из-за которых возникают конфликтные ситуации обновлены не будут

    Многотабличный оператор UPDATE

    Использование многотабличного оператора UPDATE сходно с использованием оператора DELETE имена таблиц, которые подвергаются изменению перечисляются после ключевого слова UPDATE через запятую

    Добавление столбца:

    ALTER TABLE таблица, в которую AND нужный столбец ТИП AFTER id_catalog

    Оператор SELECT

    Используется для построения SQL запросов. Запрос – команда, которая даётся СУБД, чтобы она вывела определённую информацию из таблиц в памяти

    SELECT Sname, City FROM Продавцы

    SELECT Sname, ‘Ratung’, Rating FROM Клинты

    SELECT Sname, Comm+(.03) AS New_Comm FROM Продавцы – увеличиваем комиссию на три процента

    SELECT Amt, day(Odate) AS date, month(Odate) AS month, year(Odate) AS year FROM Заказ – Разбиваем дату на день, месяц и год по отдельности

    Ключевое слово DISTINCT

    SELECT DISTINCT Rating FROM клиенты – убрать повторяющиеся строки

    Чтобы указать какие строки требуется отобрать следует использовать предложение WHERE, за которым следует условие поиска, определяющее, какие именно строки требуется прочитать

    Для каждой из строк условие поиска может иметь одно из трёх значений: TRUE – будет включена в результаты запроса , FALSE – строка исключается из результатов поиска, NULL – пустое значение

    В SQL используется множество условий поиска:

    1. Сравнение

    При сравнении SQL вычисляет и сравнивает значения двух выражений для каждой строки данных

    Вывести номера заказчиков и даты заказов сделанным до апреля 99-го года

    Вывести имена и расположение продавцом НЕ проивающих в Лондоне

    1. Проверка на принадлежность диапазону значений

    Найти все заказы сделанные в апреле и в мае

    SELECT*FROM заказ WHERE month(Odate) BETWEEN 4 AND 5
    Найти все заказы, которые не приналежать диапазону от 1000 до 3000

    SELECT*FROM заказ WHERE Amt NOT BETWEEN 1000 AND 3000

    1. Проверка на членство в множестве

    2. Проверка на соответствие шаблону

    3. Проверка на равенство значению NULL

    Выбрать заказчиков, чьи именна попали в определённый диапазон

    SELECT*FROM клиенты WHERE Cname BETWEEN 'A' and 'G'

    Нужно брать на букву больше

    Вывести сведения о клиентах, проживающих в Лондоне или в Риме

    SELECT*FROM клиенты WHERE City IN ('Rome', 'London')

    Проверка на соответствие шаблону

    SELECT * FROM `клиенты` WHERE Cname LIKE 'Gi%'

    % - неизвестно сколько знаков

    _ Известно
    Вывести имена и местоположения клиентов в фамилиях которых первая буква C, а пятам E

    SELECT Cname, City FROM `клиентыWHERE Cname LIKE 'C___e%'

    Составные условия поиска
    Если с помощью операции AND, OR или NOT объединяется более двух условий поиска, то операция NOT имеет наивысший приоритет. За ней следует END и потом OR
    Порядок можно определить при помощи скобок

    /////////////////

    Если вы подключаетесь к серверу по SSH, то этот способ для вас. Нам потребуется выполнить несколько команд:

    Первым дело активируем сервер базы данных:

    mysql

    Создадим нового пользователя:

    CREATE USER 'user'@'localhost' IDENTIFIED BY 'pswrd';

    В кавычках потребуется изменить следующие данные: user – имя пользователя, pswrd – пароль.

    Пока что пользователь не имеет разрешений, а значит, не может получить доступ к MySQL. Для решения такой проблемы пропишем еще одну строчку кода:

    GRANT ALL PRIVILEGES ON * . * TO 'user'@'localhost';

    Мы выдали указанному пользователю все доступные права. Осталось сохранить внесенные изменения с помощью команды:

    FLUSH PRIVILEGES;

    Готово! Теперь вы знаете, как создать нового пользователя в MySQL с правами доступа root.

    Права доступа 

    В MySQL выделяют следующие права доступа:

    • ALL PRIVILEGES – предоставляет полный доступ к выбранной БД;

    • CREATE – разрешает пользователям создавать новые БД;

    • SELECT – разрешает делать выборку данных;

    • INSERT – позволяет вносить новые записи в таблицы;

    • UPDATE – разрешает менять ранее созданные записи в таблицах;

    • DELETE – разрешает удалять записи из таблиц;

    • DROP – дает возможность удалять записи в БД;

    • GRANT OPTION – позволяет пользователю предоставлять или отзывать права других пользователей.

    ////////////////

    В данном случае нам потребуется всего несколько команд. Если требуется изменить права доступа для выбранного пользователя MySQL, то необходимо выполнить следующее:

    GRANT [права] ON [наименование БД].[наименование таблицы] TO ‘user’@'localhost’;

    Значения внутри скобок необходимо заменить:

    • наименование БД – указываем базу данных;

    • наименование таблицы – указываем имена таблиц, к которым необходимо выдать доступ, прописываем .*, чтобы разрешить доступ ко всем таблицам;

    • права — указываем тип прав, рассмотренный ранее;

    • user – имя пользователя.

    Если нужно указать несколько прав, то их необходимо прописать через запятую:

    GRANT [права], [права] ON *.* TO ‘user’@'localhost’;

    Если нужно удалить права у выбранного пользователя:

    REVOKE [права] ON [наименование БД].[ наименование таблицы] FROM ‘username’@'localhost’;

    Забрать все права:

    REVOKE ALL PRIVILEGES ON *.* FROM ‘user @'localhost’;

    Полностью удалить пользователя можно командой:

    DROP USER ‘user @'localhost’;

    Как посмотреть права доступа в MySQL

    Для того чтобы посмотреть, какие права доступа выданы пользователю MySQL, достаточно в консоли прописать команду:

    SHOW GRANTS FOR 'user'@'localhost';


    написать администратору сайта