8. MySQL 8 - SELECT - выборка данных

SELECT - оператор выборки данных. Позволяет находить данные из MySQL таблиц (и не только!), выполнять расчёты, выгружать данные во внешний файл, записывать данные в переменную. Вам без него не обойтись!

Пікірлер: 81

  • @user-vf3gw7ik4j
    @user-vf3gw7ik4j2 жыл бұрын

    Это не только самый длинннный урок, еще и самый "заряженный":) Аплодирую стоя!

  • @HtmllabRu

    @HtmllabRu

    2 жыл бұрын

    Андрей, спасибо за поддержку)

  • @ArthasLIO
    @ArthasLIO5 жыл бұрын

    Спасибо большое за твои видео, все понятно и очень качественно снято.

  • @5junkmail
    @5junkmail2 жыл бұрын

    Очень хорошие уроки, смотрю с удовольствием, спасибо большое и моё вам почтение!

  • @HtmllabRu

    @HtmllabRu

    2 жыл бұрын

    Спасибо за классный коментарий!

  • @akoli9888
    @akoli98883 жыл бұрын

    Спасибо, СУПЕР!!! Давай ещё!!!

  • @user-cx4my8fr7z
    @user-cx4my8fr7z4 жыл бұрын

    Здравствуйте. Спасибо Вам за Ваш труд и Ваше время! Шпаргалка для выгрузки данных в файл на Ubuntu (вдруг, кому надо): SHOW VARIABLES LIKE "secure_file_priv"; (в выводе будет папка для сохранения, например, /var/lib/mysql-files), соответственно командля для выгрузки данных в файл: SELECT continent, SUM(population) INTO OUTFILE '/var/lib/mysql-files/query.txt' FROM country GROUP BY 1 HAVING SUM(population) > 400000000;

  • @oleksandrmuravskyi2370
    @oleksandrmuravskyi23704 жыл бұрын

    Доступно, лайк.

  • @natalya.provkova2002
    @natalya.provkova20023 жыл бұрын

    Я просто ВОЮ от кайфа просмотра твоего видео)!!

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    Значит материал хорошо заходит) 👍

  • @natalya.provkova2002

    @natalya.provkova2002

    3 жыл бұрын

    @@HtmllabRu +)

  • @user-rw4cg5ii4t
    @user-rw4cg5ii4t4 жыл бұрын

    круто!

  • @protonik7277
    @protonik72773 жыл бұрын

    Сначала лайк потом просмотр)

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    Спасибо👍)

  • @user-yq2uo5yv9v
    @user-yq2uo5yv9v2 жыл бұрын

    Спасибо!

  • @cirkumflexmu
    @cirkumflexmu4 жыл бұрын

    Спасибо

  • @yakut54
    @yakut544 жыл бұрын

    ЛАЙК!!!

  • @HtmllabRu

    @HtmllabRu

    4 жыл бұрын

    Балуете лайками, спасибо)

  • @user-ly5np1cz6j
    @user-ly5np1cz6j3 жыл бұрын

    Также кому интересно дополню: переменная может хранить 1 столбец, если много будет ошибка.. Пытался закинуть таблицу в переменную:)

  • @andmisul
    @andmisul4 жыл бұрын

    31:30 - выгрузка данных из таблицы в файл

  • @yakut54
    @yakut544 жыл бұрын

    загуглил Adamstown. в самом центре тихого океана.... думал там только акулы живут ))

  • @HtmllabRu

    @HtmllabRu

    4 жыл бұрын

    Вы первый, кто на моих курсах так далеко раскопал материал 😊

  • @yakut54

    @yakut54

    4 жыл бұрын

    @@HtmllabRu Пытливый ум ))

  • @KirillAubekerov
    @KirillAubekerov2 жыл бұрын

    Когда стану разработчиком, с меня донат

  • @alexeicodes
    @alexeicodes3 жыл бұрын

    Спасибо большое за видео! Всё стало понятно, всё очень хорошо объяснено. Единственное что, у меня возникла непонятка с одним из запросов: SELECT continent, region, sum(population) FROM country GROUP BY region, continent WITH ROLLUP; Я его написал сам, работал также с бд world. В итоге вышел "бред", покопавшись и сравнив с вашим запросом понял, что у вас так: > GROUP BY continent, region у меня в этом запросе так: > GROUP BY region, continent То есть смена порядка входных значений при использовании ключевой конструкции GROUP BY имела значение, но как-то сложно осознать каким образом это влияет, при выводе запроса видно, что получается каша в моём случае, но вот каким же образом порядок аргументов в этой конструкции влияет на результат?

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    Дело в том, что в один континент входит много регионов, но одному региону соотвествует один континент. Если взять ваш запрос и переставить местами выбираемые поля (то есть сначала region, потом континент), то запрос SELECT region, continent , sum(population) FROM country GROUP BY region, continent WITH ROLLUP; Сначала сгруппирует регионы, а потом для каждого покажет результат - одна строка 'промежуточная' + одна строка итог. Получится что-то вроде region continent sum(population) Antarctica Antarctica 0 Antarctica NULL 0 Australia and New Zealand Oceania 22753100 Australia and New Zealand NULL 22753100 Baltic Countries Europe 7561900 Baltic Countries NULL 7561900 Потому мы в запросе SELECT continent, region, sum(population) FROM country GROUP BY continent, region WITH ROLLUP указываем сначала то поле, которое более "общее", а затем более "детальные": continent region sum(population) Asia Eastern Asia 1507328000 Asia Middle East 188380700 Asia Southeast Asia 518541000 Asia Southern and Central Asia 1490776000 Asia NULL 3705025700 Так, если бы мы делали запрос к базе с продажами, то в GROUP BY указали сначала поле с годом, потом с месяцами, и так далее

  • @alexeicodes

    @alexeicodes

    3 жыл бұрын

    @@HtmllabRu Всё понял теперь, при использовании 2+ аргументов в GROUP BY первым мы указываем более общий и далее на снижение. Спасибо большое :) И самое главное спасибо за такой замечательный плейлист, ещё и бесплатный! Надеюсь в вашем портфолио этот курс не затеряется:)

  • @user-bx6nd8so7c
    @user-bx6nd8so7c11 ай бұрын

    Решение проблемы secure_file_priv (Урок 8, время 31.23) 1. Задаём команду show variables like "secure_file_priv"; Результат показывает папку в которую и из которой разрешено импортировать и экспортировать файлы, а также путь до неё. У меня - это C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ 2. Перейти в C:\ProgramData. Папка скрыта, поэтому делаем её видимой (Вид - скрытые элементы, ставим галочку. На С: появляется папка ProgramData); 3. В ProgramData\MySQL\MySQL Server 8.0\Uploads идём до последней папки (Uploads) Uploads - именно та папка, куда sql будет выгружать файлы; Копируем весь путь (C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\) и вставляем его в код select continent, sum(population) into outfile "C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\pop.txt" from country group by 1 having sum(population) > 400000000; И ДОБАВЛЯЕМ К КАЖДОМУ СЛЭШУ ЕЩЁ ОДИН СЛЭШ и в конце пути произвольное название файла: select continent, sum(population) into outfile "C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\pop.txt" from country group by 1 having sum(population) > 400000000; Результат: в Uploads появляется файл pop.txt с содержимым North America 482993000 Asia 3705025700 Africa 784475000 Europe 730074600 Внимание! Для работы с файлами в папке Uploads требуются права админа. (На случай, если захочется удалить содержимое Uploads). О том, как изменить папку для выгрузки данных, см видео kzread.info/dash/bejne/Y6et2tF_Y5eveqw.html Там чел всё показывает с комментариями на плохом английском.

  • @xSkyflow
    @xSkyflow4 жыл бұрын

    слешы в скрипте в пути файла отличаются от тех, которые задаются в файле конфига.

  • @denis_galkin

    @denis_galkin

    3 жыл бұрын

    человек, это самый важный комментарий в моей жизни!!!!

  • @user-bo4bc9ts3e
    @user-bo4bc9ts3e4 жыл бұрын

    Здравствуйте, подскажите пожалуйста как решить мою задачу. Сначала через SELECT TaskBase INTO @Base ... Получаю переменную название таблицы. Она воспроизводится - всё хорошо. Потом стоит задача сделать ещё один SELECT, но чтоб FROM являлся переменной. Такое возможно? Выбивает ошибку синтаксиса хотя такая таблица точно существует: SELECT str1 FROM @Base WHERE BStatus=0 ORDER BY RAND() LIMIT 1;

  • @HtmllabRu

    @HtmllabRu

    4 жыл бұрын

    Только через склейку строки запроса и потом подготовленный запрос (prepared statement)

  • @user-bo4bc9ts3e

    @user-bo4bc9ts3e

    4 жыл бұрын

    @@HtmllabRu Спасибо, буду копать в эту сторону!🧐🧐🧐

  • @dasfenster8953
    @dasfenster89532 жыл бұрын

    Здравствуйте, подскажите пожалуйста, как можно получить подробную информацию о типе данных в таблице? Имеется тестовая таблица, в которой заведомо известны типы данных, одна колонка (при создании таблицы) USER_ID INT UNSIGNED AUTO INCREMENT PRIMARY_KEY. И если пользоваться запросом: SELECT data_type FROM information_schema.COLUMNS WHERE table_schema = 'my_database' AND table_name = 'my_table' AND column_name = 'my_users'; отобразит всего-лишь то, что колонка USER_ID имеет тип INT, а часть UNSIGNED пропала, как быть в таком случае в серьезных рабочих ситуациях?

  • @HtmllabRu

    @HtmllabRu

    2 жыл бұрын

    Здравствуйте! Если посмотрите остальные поля SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'my_database' AND table_name = 'my_table' AND column_name = 'my_users'\G там будет COLUMN_TYPE с упоминанием об UNSIGNED

  • @dasfenster8953

    @dasfenster8953

    2 жыл бұрын

    @@HtmllabRu Огромное Вам СПАСИБО!

  • @user-mb5uc5oi4v
    @user-mb5uc5oi4v4 жыл бұрын

    Спасибо большое DESC 54321 и Без DESC 12345 ????

  • @es2367
    @es23673 жыл бұрын

    Вопрос, почему при текущей версии воркбенча и базы world не пашет функция sum? (26-27 и далее минута)

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    пробел не оставили между SUM и круглой скобкой ?

  • @es2367

    @es2367

    3 жыл бұрын

    @@HtmllabRu Пробела не было, другую ошибку нашел. Спасибо

  • @user-ly5np1cz6j
    @user-ly5np1cz6j3 жыл бұрын

    Здраствуйте написал группировки: SELECT continent, region, sum(population) as jojo from country GROUP BY 1, 2; А вот аналог: SELECT continent, region, sum(population) as jojo from country GROUP BY 2 ORDER BY continent, region; Возникает вопрос, в чем смысл двойной группировки, если возвращает оно одно и тоже, и скорость выполнение кода одинаковые.. Заранее спасибо за ответ

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    @Лииар, здраствуйте. Второй SQL-запрос оказался для меня неожиданным, но действительно возвращает такой же результат. Спасибо за вопрос! Единственное, что пока бросается в глаза, это с двойной группирокой сработает WITH ROLLUP: SELECT continent, region, sum(population) as jojo from country GROUP BY 1, 2 WITH ROLLUP;

  • @base-color
    @base-color3 жыл бұрын

    Здраствуйте. есть таблица с сообщениями. в ней хранится поле private = 0 для всех пользователей сообщение. со значением 1 - для отправившего и кому отправили. как составить запрос чтобы выводились все сообщения private = 0 и private = 1 только если это либо получатель, либо отправитель? спасибо.

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    Макс, здравствуйте. Можете показать структуру таблицы, несколько строк данных и пример того, что должно стать результатом?

  • @base-color

    @base-color

    3 жыл бұрын

    @@HtmllabRu CREATE TABLE `test_table` ( `id` int UNSIGNED NOT NULL, `id_who` int NOT NULL, `id_to_whom` int NOT NULL, `private` enum('0','1') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0', `message` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; таблица, а результат необходимого вывода делает этот запрос: $id_user = 3; $sql = "SELECT * FROM `test_table` WHERE (`id_who` = '$id_user' AND private = '0') OR (`id_who` = '$id_user' AND private = '1') OR (`id_who` != '$id_user' AND private = '0') OR (`id_to_whom` = '$id_user' AND private = '1') LIMIT 5" все работает так, как вроде хочется, но нет ли подхода более лаконичного? необходимо выбрать те поля, где приватные сообщения являются отправителем или получателем, а так же те все поля, где приватное значение = 0

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    попробуйте так (могу ошибаться): $id_user = 3; $sql = "SELECT * FROM `test_table` WHERE private = '0' OR (`id_who` = '$id_user' AND private = '1') OR (`id_to_whom` = '$id_user' AND private = '1') LIMIT 5"

  • @base-color

    @base-color

    3 жыл бұрын

    @@HtmllabRu А ВЕДЬ И ВЕРНО! доставать все поля private со значением 0 и только со значение 1 с условием что это автор или получатель. спасибо !

  • @user-is7xy7or4z
    @user-is7xy7or4z3 жыл бұрын

    А как это все в phpmyadmin создавать?

  • @HtmllabRu

    @HtmllabRu

    3 жыл бұрын

    в phpmyadmin есть секция SQL - там можно создавать запросы. Если только начинаете знакомиться, можно тренироваться на локальной сборке типа ospanel.io/ - там удобно запускать и экспериментировать phpMyAdmin

  • @zemzemic96
    @zemzemic96 Жыл бұрын

    А если допустим хочу сделать подобное ... ввод : Пр%^5и%#/5вет*^%"мир^&"...ввывод привет мир.?

  • @HtmllabRu

    @HtmllabRu

    Жыл бұрын

    Неудобно, но можно воспользоваться функцией replace - dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_replace или написать свою функцию для фильтрации на основе replace.

  • @user-os1xg1rh4c
    @user-os1xg1rh4c4 жыл бұрын

    при ошибке --secure-file-priv можно посмотреть куда сохраняются файл в консоли mysql: SELECT @@global.secure_file_priv; и далее прописать при запросе этот путь при сохранении: SELECT continent, SUM(population) INTO OUTFILE 'D:/ProgramData/MySQL/MySQL Server 8.0/Uploads/1.txt' FROM country GROUP BY 1 HAVING SUM(population) > 40000000;

  • @r4m1_l

    @r4m1_l

    4 жыл бұрын

    Странная штука, @@global.secure_file_priv указывает правильный путь, но все равно вылетает ошибка ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti on so it cannot execute this statement

  • @rostlee

    @rostlee

    4 жыл бұрын

    @@r4m1_l такая же ерунда. Вам удалось как-то решить данную проблему?

  • @r4m1_l

    @r4m1_l

    4 жыл бұрын

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

  • @HtmllabRu

    @HtmllabRu

    4 жыл бұрын

    @@rostlee вы меняете значение настройки до запуска сервера? Примечание: динамически, то есть во время работы сервера, изменения не приведут к результату. Ещё место, где спотыкаются на занятиях - слеши, убедитесь что с ними всё норм

  • @rostlee

    @rostlee

    4 жыл бұрын

    htmllab как оказалось перепутал слэши в самой команде 🤦🏻‍♂️. Поменял и все заработало! Спасибо за подсказку!

  • @dr-cary
    @dr-cary4 жыл бұрын

    Файл содержит my.ini [mysqld] basedir=C:/mysqld datadir=C:/mysqld/data secure-file-priv=C:/mysql/shar Запрос SHOW VARIABLES LIKE "secure_file_priv"; Возвращает null

  • @HtmllabRu

    @HtmllabRu

    4 жыл бұрын

    Проверьте в конфиге secure_file_priv (dev.mysql.com/doc/refman/5.7/en/security-options.html)

  • @dr-cary

    @dr-cary

    4 жыл бұрын

    @@HtmllabRu Вы имеете ввиду разделитель сделать через нижнее подчеркивание!?б уже пробовал не помогло

  • @HtmllabRu

    @HtmllabRu

    4 жыл бұрын

    Давайте проверю.

  • @dr-cary

    @dr-cary

    4 жыл бұрын

    @@HtmllabRu Договорились

  • @young_ceaser

    @young_ceaser

    4 жыл бұрын

    РЕШЕНИЕ: ПРОВЕРЬТЕ ФАЙЛ MY.INI. ОН ДОЛЖЕН БЫТЬ ФОРМАТА .INI , А НЕ .TXT И Т.Д ТАК КАК ОН ИГРАЕТ РОЛЬ КОНФИГУРАТОРА, АТО MYQSL НЕ ВИДЕТ ЕГО