Войти Регистрация

MySQL запросы: простые и сложные mysql запросы


mysql запросы

Эта статья будет полезна как для начинающих пользователей базы данных (БД) mysql, так и для профессионалов. Потому что мы будем рассматривать как простые mysql запросы, так и сложные mysql запросы. Если вы начинающий программист и не знаете, о чем идет речь, в пару словах попытаемся объяснить.

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

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

Простые mysql запросы – запросы в которых участвует одна таблица базы данных.

Сложные mysql запросы – запросы в которых могут участвовать две и более таблиц БД.

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

Очень простые mysql запросы

show databases;

Выведет список всех баз.

show tables in base_name;

Покажет список всех таблиц в базе данных base_name.

Простые mysql запросы

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

Select запросы

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

SELECT count(*) FROM table_name;

Выведет количество всех записей в таблице

SELECT * FROM table_name;

Выбирает все записи из таблицы БД

SELECT * FROM table_name LIMIT 2,3;

Выбирает 3 записи из таблицы, начиная с 2 записи. Этот запрос полезен при создании блока страниц навигации.

Пример mysql запроса

SELECT * FROM person ORDER BY number;

Выберет все записи из таблицы person в порядке возрастания значений поля number.

Пример mysql запроса

SELECT * FROM person ORDER BY number DESC;

Выбирает все записи из person, но уже в порядке убывания (т.е. в обратном порядке).

Пример mysql запроса

SELECT * FROM person ORDER BY number LIMIT 5;

Выбирает 5 записей из таблицы person, в порядке возрастания.

Пример mysql запроса

SELECT * FROM person WHERE name='Anna';

Выбирает все записи из таблицы person, где поле name соответствует значению Anna.

Пример mysql запроса

SELECT * FROM person WHERE name LIKE 'An%';

Выбирает все записи из таблицы person, в которой значения поля nameначинаются с An.

Пример mysql запроса

SELECT * FROM person WHERE name LIKE '%na' ORDER BY number ;

Выбирает все записи из таблицы person, где name заканчивается на na, и упорядочивает записи в порядке возрастания значения number.

Пример mysql запроса

SELECT name, last_name FROM person;

Выбирает все значения полей name и last_name из таблицы person.

Пример mysql запроса

SELECT DISTINCT site FROM table_name;

Выбирает уникальные (DISTINCT) значения поля site из таблицы table_name. Например, при 5 значениях поля site: sitear.ru, sitear.ru, sitear.ru, yaveterinar.ru, wi-korporaciya.ru; выведет только 3 уникальные значения: sitear.ru, yaveterinar.ru, wi-korporaciya.ru;

Пример mysql запроса

SELECT * from person where age in (12,15,18);

Выведет все записи таблицы person в которых значения поля age будет равно 12 или 15 или 18.

Пример mysql запроса

select max(age) from person;

Выберет максимальное значение age из таблицы person.

Пример mysql запроса

select name, min(age) from person;

Выберет минимальное значение age из таблицы person.

Пример mysql запроса

Insert запросы

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

insert into table_name(site, description) values ('sitear.ru', 'SiteAR – создание сайтов')

Вставит в таблицу table_name, а точнее в поля site и description данной таблицы, соответствующие значения.

Update запросы

направлены на изменение уже имеющихся данных в таблице БД.

update table_name set site = 'domain.com' where id = '3'

Изменяет значение поля site на domain.com в таблице table_name где id равен 3.

Delete запросы

удаляют записи из таблицы БД.

delete from table_name where id = '3'

Удаляет запись из table_name где id равен 3.

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

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

SELECT DISTINCT last_name FROM person, address WHERE person.adress_no = address.address_no AND city LIKE 'L%';

или

SELECT DISTINCT last_name FROM person p, address adr WHERE p.adress_no = adr.address_no AND city LIKE 'L%';

Выводит все уникальные фамилии людей (last_name), которые живут в городе с названием на букву L. (предполагаем, что в таблице address есть поля address_no, city).

Данные примеры сложных mysql запросов, выведут один и тот же результат. Запросы не очень то и сложные, нужно только указать имя таблицы БД, а потом, через точку указать поле таблицы. Или же можно, как во втором примере, дать короткие имена таблицам (p для person, adr для address). Результат запросов будет один и тот же.

SELECT heroes.char_name, heroes.count, char_templates.ClassName FROM char_templates, heroes WHERE char_templates.ClassId = heroes.class_id Order by char_templates.ClassName;

 или

SELECT char_name, count, ClassName FROM heroes left join char_templates on heroes.class_id=char_templates.ClassId;

 Берем из таблицы heroes поле char_name, из heroes поле count, из таблицы char_templates поле ClassName, где char_templates.ClassId и heroes.class_id имеют общий идентификатор и сортируем запрос по имени класса героев.

Таким же образом, можно подавать сложные mysql запросы с помощью update, insert, delete и др.

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

69

td69



Дальше: CAPTCHA на PHP: реализация скрипта каптчи на php


Дискуссия по теме    55 Комментариев
Добавить комментарий
epromote 30.12.2016 ? 18:43
Доброго времени суток.С Наступающими праздниками у меня вопрос как зделать запрос на массовое изменение параметра,например зарегестрированных 5-- человек и нужно поменять 1 параметр у всех? заранее благодарю
extr3m 08.11.2016 ? 23:50
Здравствуйте,обнулил таблицу, пользователям id присваивается начиная от 30000 тысяч , подскажите как исправить, чтобы от последнего отталкивалось числа, в ручную 7 пользователей добавил, новые появляются со значением 30000к по порядку
Barik 12.10.2016 ? 19:29
Vlad, я нестал пробовать второй вариант, так как первый работает идеально! Еще раз спасибо!
Barik 11.10.2016 ? 08:55
Спасибо Vlab! Буду пробовать..
Barik 08.10.2016 ? 09:09
Подскажите пожалуйста! Делаю новостную ленту, есть к записям комментарии. Мне нужно вывести последние три комментария в порядке возрастания. Уже весь мозг вывернул с запросами.
Vlad 10.10.2016 ? 20:55
Можно вывести таким запросом: SELECT * FROM (SELECT * FROM comments ORDER BY id_comments DESC LIMIT 3) AS comments ORDER BY id_comments ASC Или таким: SELECT * FROM comments ORDER BY id_comments DESC LIMIT 3 Но при выводе на сайт сделать array_reverse
Евгений 07.12.2015 в 16:18
Здравствуйте. Есть задача по переносу нескольких производителей в другую базу данных. Движок OpenCart, данные о товарах разделены между 3 таблицами 'oc_product', 'oc_product_description' и 'oc_product_to_category', делать выборку научился. В новой базе id товара может повторяться, поэтому мы можем просто очистить эти поля. Но тогда потеряем связь между самими таблицами. Я так понимаю придется задать свой числовой ряд через excel. И каким образом выгружать и заливать эти 3 таблицы. По отдельности?
Юрий 02.12.2015 в 16:18
Помогите с запросом: Выбрать обучаемых, которые решали все задачи, кроме первой.
Карина 01.12.2015 в 18:22
Помогите составить запрос...Есть 3 таблицы. Первая "Testcase" состоит из id,name. Вторая "R", тоже id,name. И третья таблица "RTEST" объединяет эти две по id, id_testcase и id_r. Мне нужно в запросе id_r разделить на id_testcase и умножить это число на 100%. Как правильно записать??
Роман 12.09.2015 в 14:44
Доброго времени суток! Есть две таблицы к примеру адрес_подключен и адрес_перенесен. В них идентичны id, ulic, dom, и kv. Как сформировать запрос, чтобы обе таблицы отображались в одном списке. Заранее спасибо)))
Игорь 08.06.2015 в 09:57
Добрый день!Подскажите пожалуйста, как правильно выполнить условие в одном запросе: if(isset($_POST['string_a'])){$string_b = $string_a} else{$string_b = "%"} $query = mysql_query("SELECT * FROM table WHERE field <= $string_b"); но, если $string_b = "%" , такой запрос будет некорректен, а корректным будет (WHERE field LIKE $string_b). Как правильно оформить это условие именно в одном запросе? Заранее благодарен!
Настя 22.05.2015 в 11:22
Помогите пожалуйста,)Нужно посчитать сумму всех имеющихся значение в CenaYs в таблице Klienti, и вписать сумму в отдельное поле, взяв от нее 40%......
Тарас 23.05.2015 в 00:01
Это нужно реализовать на PHP или только на mysql? Если и то и другое, то можно так: $total_count = 0; $query = 'select CenaYs from Klienti'; while($arr=mysql_fetch_array($query)){ $total_count = $total_count $arr[0]; } mysql_query("update TABLICA_GDE_NADO_SUMU set SUMA = '$total_count'") or die ("Error! query - set"); только проценты сами посчитаете...
Алексей 01.03.2015 в 23:47
Добрый день! Помогите пожалуйста составить запрос. Есть таблица questions в ней поля to_user и from_user в них записаны данные из поля userneme из таблицы user. Сут вопроса нужно заменить эти данные на данные из той же таблицы user только из столбца id а не userneme. Говоря иначе сейчас в to_user записано "admin", а надо сделать "1". На сайте 7000 пользователей и делать 7000 запросов как-то не сложно. Можно ли замутит один большой запрос, что бы он сам сверял данные и заменял на соответствующие? Спасибо!
Роман 02.12.2014 в 13:41
Светлана,вот пример: <style> table{ background : rgba(100,100,100,0.6); border-radius : 5px; } td{ border : 1px solid black; } </style> <? $connect = new PDO("mysql:host=localhost;dbname=school", user, password); $res = $connect->prepare("select * from `math` where `mark`='5'); $res->execute(); echo '<table>'; echo '<tr><td>Ученик</td><td>Дата рождения</td><td>Оценка</td></tr>'; while($result = $res->fetch()) { echo '<tr><td>'.$result['pupil'].'</td>'; echo '<td>'.$result['b_date'].'</td>'; echo '<td>'.$result['mark'].'</td></tr>'; } echo '</table>'; ?>
Светлана 20.11.2014 в 13:27
Здравствуйте, очень нужна помощь! Нужно составить запрос, в котором выводятся фамилии и дни рождения тех учащихся, которые сдали математику на 5. СРОЧНО!
Андрей 19.07.2014 в 10:12
Помогите плиз сделать запрос в My Sql. Найти, Х классы в которых учится хотя бы 1 Петров или Петрова. Вывести номер класса и букву класса.
Сергей 26.05.2014 в 00:06
Задача 1. 0) http://www.php.su/functions/?mysql-fetch-field 1)Построить список всех таблиц в БД в виде элемента <SELECT> 2)Отдельно список таблиц, у которых число полей не более 3 3)При выборе (в элементе SELECT) таблицы вывести число записей в таблице
Чулпан 05.05.2014 в 09:23
Скажите пожалуйста как выглядит запрос, который выводить всю строку через ";". Например, 1;Anna;Moroz;12
Филипп 25.02.2014 в 11:09
Спасибо!
Максим 31.10.2013 в 00:52
Здравствуйте. Возможно ли составить следующий запрос: увеличить значение поля smt на единицу у любой записи, поле smt которой больше определенного числа n? Проще говоря, можно ли в MySQL запрос запихать IF'ы, икременты, и т. п.? Дело в том, что данных много, а БД отвечает достаточно долго (0.0004 мс, для несколько тысяч элементов это непростительно) -- Спасибо автору, отличный блог!
Тарас 01.11.2013 в 14:14
update table_name set smt = smt 1 where smt > n
Тарас 01.11.2013 в 14:15
Система вырезает знак плюса, там должно быть так: update table_name set smt = smt ПЛЮС 1 where smt > n
Евгений 18.10.2013 в 16:25
У вас на этой странице текст сливается в некоторых местах, неудобно читать, а так мне ваш блог очень нравиться
Виталюша 17.09.2013 в 21:34
Уважаемый автор, приведите пожалуйста больше примеров-соответствий как последний пример, затроньте INNER JOIN, FULL OUTER JOIN. Никак не могу проглотить материал, LEFT и RIGHT JOIN, до степени "глянул условие - написал запрос". Может посоветуете материал по этой теме который легко усваивается=))) За-ранее спасибо!
Олег 12.08.2013 в 19:21
Сдается мне, что на запрос:"SELECT DISTINCT last_name FROM person p, address adr ..." Мускл напишет:"Поле last_name is ambigious", так как неясно к какой таблице оно относится
Арт 21.05.2013 в 11:55
Спасибо статья очень классная
Нмколай 29.04.2013 в 15:03
Здраствуйте. Помогите составить сложний запрос. Есть 2 простьіх: SELECT * FROM personal where pid = $lol2" SELECT ukr_name_1 FROM anime where aid = $lol1" пишу так: SELECT * FROM personal left join anime on anime.ukr_name_1=$lol1; не работает.
Николай 29.04.2013 в 17:11
Разобрался сам. SELECT anime.ukr_name_1, personal.ukr_name_f, personal.ukr_name_l FROM anime, personal WHERE anime.aid=$lol1 AND personal.pid=$lol2
Кристина 18.04.2013 в 01:51
Спасибо большое за примеры!=)
Саша 18.02.2013 в 15:00
Спасибо за статью. но как по мне в рез запроса SELECT * FROM table_name LIMIT 2,3; ошибочка. там будут записи с id 2,3,4. И что можете посоветовать почитать по mysql
Тарас 19.02.2013 в 00:08
Документации по mysql вполне хватает, чтобы узнать все что нужно для работы... каких то особых книг не знаю.
Viktor 19.11.2012 в 20:50
Сейчас вывод изображений проходит через вызов ключа {BIGIMAGE} в шаблоне, и этот ключ вставляется в тэге <img src="">, но картинок может быть как одна так 10. у каждого товара есть ID, а картинки хранятся на сервере под именами store_(ID).jpg маленькие картинки и appendix_(ID)_(дополнительная нумерация).jpg большие. У больших картинок одного товара (ID) совпадает, а отличается только (дополнительная нумерация). ТАРАС Смотря как записаны данные в БД. Если только адрес к размещению картинки, то получаем этот адрес и все данные о товаре, после чего генерируем html код слайдера с помощью php. Запрос будет следующим: select * from 'goods' order by date получаем все поля из таблицы goods (товары), сортируем их по полю дата (date), если такое поле имеется... можно сортировать по другому полю имеющемуся в наличии.
Тарас 20.11.2012 в 02:04
$res=mysql_query("select * from goods order by ID"); while($arr=mysql_fetch_array($res)) { echo '<img src="appendix_'.$arr[0].'_'.$poryadkovyj_nomer.'.jpg"/>'; } проходимся циклом по всем товарам и выводим картинки, в массиве $arr хранятся вся информация из БД, соответственно порядку полей. Если первое поле ID, то информация из него в массиве будет под номером 0. и т.д. Только нужно вычислить сколько картинок присвоено товару и вывести порядковые номера... для этого нужно внутри этого цикла while создать еще один цикл, который будет выводить не одну картинку как сейчас, а все (на каждом этапе цикла будет менятся порядковый номер изображения).
Viktor 19.11.2012 в 20:09
Спасибо ТАРАС :) Все таки надо генерировать HTML код уже через PHP в теле страницы
Виктор 14.11.2012 в 12:18
Здравствуйте! Подскажите пожалуйста как использовать в слайдере картинки из базы данных? то есть: есть товар с одной главной картинкой, и каким то количеством дополнительных (информация о этих файлах на сервере хранится в базе данных). хочу их всех показывать через слайдер-карусель.
Тарас 15.11.2012 в 15:53
Смотря как записаны данные в БД. Если только адрес к размещению картинки, то получаем этот адрес и все данные о товаре, после чего генерируем html код слайдера с помощью php. Запрос будет следующим: select * from 'goods' order by date получаем все поля из таблицы goods (товары), сортируем их по полю дата (date), если такое поле имеется... можно сортировать по другому полю имеющемуся в наличии.
Sanya 02.10.2012 в 18:40
Всем привет. Господа, помогите решить следующую задачу: Есть функция, в которой производятся расчеты и она возвращает отрицательные и положительные числа. В запросе мне надо запустить эту функцию и разбить вывод значений данной функции в разные колонки. Например, если значение отрицательное то в колонку А , а положительного в колонку В Я это дел так: select case when x.a < 0 then x.a end as De , case when x.a >= 0 then x.a end as Kr from (select function(user.id) a from users) x также делал этот запрос с max() но результат не радует, слишком долго все отрабатывается ((( Как можно по проще переписать данный запрос, что бы быстрее отрабатывался?
Показать более ранние комментарии (17) →
Добавить комментарий
Просмотров: 204225