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

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


Дискуссия по теме    56 Комментариев
Добавить комментарий
Pavel 30.01.2017 ? 14:53
Помогите пожалуйста составить запросс need to help with creating sql inquiry Show the list of first, last names and ages of the employees whose age is greater than 55. The result should be sorted by last name. I dont have age, but have birth dates
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), если такое поле имеется... можно сортировать по другому полю имеющемуся в наличии.
Показать более ранние комментарии (18) →
Добавить комментарий
Просмотров: 224888