А вот и он! Первый ролик, при просмотре которого пришла мысль "Нифига не понятно".... когда вы выдаете результаты умозаключений, хорошо бы еще озвучить КАК вы дошли до данного результата. Т.е. анализ действий. Как пример: 7:00.... Как вы дошли до "id=capital", в данном случае, понятно только вам ) Но надо признать, я ждал его раньше. Но ваш уровень объяснения - просто поражает ) Грацио!
Если уже посмотрели 13 роликов, жму руку!👍 🤝 Обычно мы связываем таблицы country и city по полям code и countrycode соответственно. Думаю вы уже разобрались, но на всякий случай добавлю, что в таблице country есть числовое поле capital (столица), которое содержит id номера города из таблицы city. Если сделать объединение на этих полях «id=capital», то найдём все страны с их столицами. А если добавить условие с названием страны, то найдём отдельную страну с её столицей.
@@HtmllabRu Ашо момент... "Если уж пошла такая пьянка", и автор канала отвечает... Не могли бы вы, быть может, в одном ролике рассказать об отличиях MySQL и MariaDB. Вроде одно и то же, но синтаксис иногда выругивается (либо, опять же, я кривой)
В данный раздел для понимания нужно вставить графическую таблицу вариантов JOIN из coderoad.ru/5706437/%D0%9A%D0%B0%D0%BA%D0%B0%D1%8F-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D0%B8%D0%BC-JOIN-%D0%BB%D0%B5%D0%B2%D1%8B%D0%BC-JOIN-%D0%BF%D1%80%D0%B0%D0%B2%D1%8B%D0%BC-JOIN-%D0%B8-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%BC-JOIN
То есть, насколько я понял, различие USING и ON является в том, что при ON мы должны указать(и приравнять ещё) какие 2 столбца в таблицах связаны с друг другом, а при USING - мы выбираем только одно название столбца, только лишь потому, что мы заранее знаем, что и в первой таблице, и во второй - связанные столбцы имеют одно название, верно всё?
ON может содержать двух и более столбцов: ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3 USING тоже, но с условием, что столбцы в таблицах одноимённые: USING (c1, c2, c3)
Нормально джойны зашли, вот пример тройного джойна, который выводит все страны, и их столицы, где русскоговорящее население составляет >10%. : SELECT co.name, ci.name, cl.language, cl.percentage FROM country AS co JOIN city AS ci JOIN countrylanguage AS cl ON co.capital = ci.id AND co.code = cl.countrycode WHERE cl.language = 'Russian' AND cl.percentage > 10 ORDER BY cl.percentage DESC;
@@ЕленаКовалевич-ч2л я новичек, сам смотрю в ютубе и учусь , но очень сложно с джоинами , только сегодня начал учить уже голова болит(( завтра на свежую голову начну, вопрос есть такой что вот интежер и варчар в каких имено моменте надо выписывать, ну эт я понял сто id int, name email vharcar
@@samiraxmedov3394 так у тебя проблемы не с join, а с типами данных. Начни сначала основы основ. Когда конкретно для столбцов применяются те или иные типы данных, а позже уже переходи к объединению таблиц. И не пытайся все в один день понять, разбивай информацию по дням, а лучше одну тему в день , для осмысления. Если я правильно тебя поняла, если нет, то поясни.
Как одним запросом получить 2 таблицы из бд. Как вообще получить просто 2 и более таблицы. Есть у меня 6 таблиц, поля совпадают. Я хотел что бы по клику на сайте я получил все полностью таблицы с разным наполнением и отрисовать их на сайте.
Есть два способа. Первый: создать объединение таблиц - тяжелую операцию с выборкой, где после FROM будет несколько таблиц через запятую, или воспользоваться INNER JOIN (или другими JOINами). При этом задать таблицам псевдонимы и указать эти псевдонимы для каждого поля, чтобы не было конфликтов из-за одноименных полей Второй: Создать SELECT для каждой таблицы, а потом объединить их оператором UNION. Но! Придётся в каждом SELECT сделать одинаковое "количество мест". То есть, если в одном SELECT 7 полей, а во втором 3 поля, то во втором придется дописать 4 раза null или пустую строку
@@HtmllabRu Я пробовал писать типа SELECT t1. *, t2. * FROM t1, t2. Так у меня выводит только 1ю таблицу при чëм каждая строка * на кол-во элементов в t2. Пробовал t1 INNER JOIN t2 вижу только одну таблицу. И вот интересно если даже удасться получить все таблицы это будет массив склеиных таблиц? Ну то есть колонка id будет 1,2,3, 1,2,3,4, ... . Сгруппироватьвообще можно? Просто 6 таблиц 1 запросом. допустим в 1м массиве 1 таблица, во 2м 2я и т. д. По конкретней бы пример. Везде показывают только выборку, но мне куски не нужны, мне полностью как есть все таблицы с разным наполненением.
@@singlebw4065 Вот тут рассказываю о Union ruclips.net/video/4mOdLIsqz9I/видео.html. С его помощью можно реализоваться следующий пример (внимание! При существовании удаляется база db1): drop database if exists db1; create database db1; use db1; create table tbl1(id integer, title varchar(100)); insert into tbl1(id, title) values(1, "Hello"); insert into tbl1(id, title) values(2, "world"); select * from tbl1; create table tbl2(id integer, title varchar(100), price decimal(6,2)); insert into tbl2(id, title, price) values(1, "Привет", 1000.50); insert into tbl2(id, title, price) values(2, "MySQL", 2300); insert into tbl2(id, title, price) values(3, "!", 456.78); select * from tbl2; #Через UNION select id 'Идентификатор', title 'Название', price 'Цена' from tbl2 union all select id, title, 0 from tbl1; #Через UNION с указанием таблиц select id 'Идентификатор', title 'Название', price 'Цена', 'tbl2' as 'Таблица' from tbl2 union all select id, title, 0, 'tbl1' from tbl1; #Через JOIN select id 'Идентификатор', title 'Название', price 'Цена' from tbl2 union all select id, title, 0 from tbl1; Но мне кажется вы хотите не объединение таблиц через JOIN, и даже не объединение запросов, а что-то вроде процедуры, которая бы выводила в консоли отдельные таблицы (тут нужно заметить, что результат SELECT всегда одна таблица, потому такая процедура будет содержать несколько операторов SELECT). Поправьте, если я не понял ваш вопрос. Вот пример функции (видео по функциям есть тут ruclips.net/video/bMLOgmsp588/видео.html): use db1; delimiter // drop procedure if exists showDataTables // create procedure showDataTables() begin select id, title from tbl1; select id, title, price from tbl2; end // delimiter ; call showDataTables(); Можно было бы поработать с параметрами или затронуть курсоры, но для меня было важно написать максимально простой пример, который, как мне кажется, вам мог бы помочь
@@HtmllabRu Если более детально описать то вот что я задумал. Что бы на сайте не держать таблицы я решил сохранить их в бд. В таблицах описаны услуги электромонтажа. Кстате заголовки я тоже решил сохранить там что бы ориентироваться и клиенту если что можно было в базе изменить имя а не лазить по коду. Уж не знаю насколько грамотно, на грабли самому приходиться наступать. Придёт время ошибки мои вылезут. 1. таблица black_work id services unit price 1 Монтаж под ключ (черновой этап) NULL NULL 2 Точка без гофротрубы вывод 250 3 Точка с гофротрубой вывод 300 4 Подрозетники (ГКЛ) шт. 100 ........... и не известно сколько там ещё будет 2. таблица clean_work id services unit price 1 Монтаж под ключ (чистовой этап) NULL NULL 2 Фурнитура в подрозетники шт. 100 3 Фурнитура накладная шт. 300 ........... и не известно сколько там ещё будет ....... 6. таблица pipe_install id services unit price 1 Монтаж трубы NULL NULL 2 Гофротруба до Ø32 мм м.п. 15
........... и не известно сколько там ещё будет Вот UNION то что впринципе надо. На php $tables = ["black_work", "clean_work", "cable_laying", "low_volt_system", "retro_wiring", "pipe_install"]; $queryStr = ""; foreach ($tables as $item) { if($item == $tables[count($tables) - 1]){ $queryStr .= "SELECT * FROM $item"; break; } $queryStr .= "SELECT * FROM $item UNION "; } Вообщем это вот такой запрос SELECT * FROM black_work UNION SELECT * FROM clean_work UNION SELECT * FROM cable_laying UNION SELECT * FROM low_volt_system UNION SELECT * FROM retro_wiring UNION SELECT * FROM pipe_install Таблицы не объединяю вместе т.к. разные виды работ. И получаю 0: {id: 1, services: "Монтаж под ключ (черновой этап)", price: null, unit: null} 1: {id: 2, services: "Точка без гофротрубы", price: 250, unit: "вывод"} 2: {id: 3, services: "Точка с гофротрубой", price: 300, unit: "вывод"} 3: {id: 4, services: "Подрозетники (ГКЛ)", price: 100, unit: "шт"} 4: {id: 5, services: "Подрозетники (кирпич)", price: 150, unit: "шт"} 5: {id: 6, services: "Подрозетники (бетон)", price: 250, unit: "шт"} 6: {id: 7, services: "Штроба (кирпич)", price: 120, unit: "шт"} 7: {id: 8, services: "Штроба (бетон)", price: 180, unit: "шт"} 8: {id: 9, services: "Распред/коробка (сварка)", price: 300, unit: "шт"} 9: {id: 10, services: "Распред/коробка (опресовка)", price: 350, unit: "шт"} 10: {id: 11, services: "Ниша под встр/щит", price: 1000, unit: "от"} 11: {id: 12, services: "Отверстия проходные до Ø32 мм", price: 200, unit: "шт"} 12: {id: 13, services: "Лоток (метал)", price: 300, unit: "м.п"} 13: {id: 1, services: "Монтаж под ключ (чистовой этап) ", price: null, unit: null} 14: {id: 2, services: "Фурнитура в подрозетники", price: 100, unit: "шт"} 15: {id: 3, services: "Фурнитура накладная", price: 200, unit: "шт"} 16: {id: 4, services: "Точечные светильники в ГКЛ", price: 150, unit: "шт"} 17: {id: 5, services: "Светильники настенные (Бра)", price: 250, unit: "шт"} 18: {id: 6, services: "Люстра", price: 500, unit: "от"} 19: {id: 7, services: "Светодиодная лента", price: 150, unit: "п.м"} .............. 39: {id: 4, services: "Фурнитура (с рамками)", price: 200, unit: "шт"} 40: {id: 5, services: "Распред/коробка (на клемах)", price: 350, unit: "шт"} 41: {id: 1, services: "Монтаж трубы", price: null, unit: null} 42: {id: 2, services: "Гофротруба до Ø32 мм", price: 15, unit: "м.п."} 43: {id: 3, services: "Гофротруба Ø50 мм", price: 25, unit: "м.п."} 44: {id: 4, services: "Труба ПНД/ПВХ до Ø32 мм", price: 40, unit: "м.п."} 45: {id: 5, services: "Труба ПНД/ПВХ Ø50 мм", price: 60, unit: "м.п."} 46: {id: 6, services: "Металлорукав до Ø32 мм", price: 40, unit: "м.п."} Существует ли что-нибудь в sql что бы получить данные 0: [ массив 1й таблицы ] 1: [ массив 2й таблицы ] .... 1: [ массив 6й таблицы ] Щас сижу про JSON в MariaDB почитываю на всякий пожарный. Ещё кстате пытался заносить данные из консоли, так сказать научиться и потренироваться. оказалось там и показывает кракозябры хотя в графической таблице нормально всё. Еле нашёл причину. Оказывается в файле mariaDB.conf нужно было default-character-set = cp866 ставить.
@@HtmllabRu Также мне пришлось таблицы переписывать что бы заголовок вставить в 1й id каждой таблицы. Я на тот момент подумал, а нет ли способа запросом сдвинуть все строки таблицы на +1 по id что бы 1я ячейка освободилась и в неё можно было что либо положить.
@@pavelgrigorov1296 тут t2 таблица с двумя полями из t1 и t3. INNER JOIN все соответствия строк из одной таблицы строкам из другой LEFT JOIN показывает все записи из левой таблицы, и какие есть соответствия из правой
Не все смотрят ваши видео подряд за раз, как я. Наверно, хорошо бы дать на старте пояснения кратко, как открыть схему, с которой вы начинаете. Или хотя бы ссылку на урок, где это раскрыто - урок 7.
Пробовал посчитать сколько человек говорят на том или ином языке в каждом регионе. В итоге MySQL результат выдал, но результат был не точный (некоторые значения проверял - там явные откланения на +/- 100 человек). Вроде переполнение BigInt не должно быть... Хотя маленькие значения считает неплохо.
@@HtmllabRu Ну возьмем такой код : SELECT co.Name, cl.Language, co.Population, cl.Percentage, (co.Population*cl.Percentage) AS 'POPxPerc' FROM country co INNER JOIN countrylanguage cl ON Code = CountryCode WHERE co.Code = 'TUR'; Тут тысячи умножаются на проценты (с 1 запятой, на 100 не делю) в конце должны получаться нули, но их там нету.. (выдает для арабского языка 93227398.4) При этом проверка данных для арабского языка считает сама по себе нормально: select 66591000*1.4 \G; выдает 66591000*1.4: 93227400.0
Там в каждой таблице есть столбец с кодом страны, потому пример может показаться несколько искусственным. Допустим нужно узнать в какой стране находится город Moscow и какие языки в этой стране используются (другими словами, что авторы world поместили в базу) SELECT city.name 'город', country.name 'страна', count(language) 'кол-во языков' FROM city INNER JOIN country INNER JOIN countrylanguage ON country.code = city.countrycode AND countrylanguage.countrycode = country.code WHERE city.name = 'Moscow' GROUP BY 1,2; +--------+--------------------+---------------+ | город | страна | кол-во языков | +--------+--------------------+---------------+ | Moscow | Russian Federation | 12 | +--------+--------------------+---------------+
*ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(idor der)... PRIMARY KEY Без нижнего подчеркивания оказалось ! Моя ошибка
Если ищем страну и ее столицу, вот так вроде как по-чище и читается проще: SELECT country.name AS country, city.name AS capital FROM country INNER JOIN city ON country.capital = city.id WHERE country.name = 'Turkey';
Ок. Попробуем так: - есть таблица пользователей user с полями iduser и name - и таблица статей articles с полями idarticles, content и user_iduser. Таблицы связаны отношением один ко многим (один пользователь пишет много статей, не рассматриваем вариант с многоавторскими статьями) Чтобы выбрать из таблиц всех пользователей с их статьями, нужно написать запрос SELECT name, content FROM user INNER JOIN articles ON iduser = user_iduser; Будут показаны все имена пользователей и статья, которые они написали. То есть будет найдено однозначное соответствие записей второй таблице записям в другой. Фрагмент ON iduser = user_iduser в запросе с INNER JOIN отвечает за такое однозначное соответствие одних записей другим. Без этого фрагмента, записям одной таблице будут сопоставлены все (любые) записи другой таблицы (а общее количество полученных записей будет равно произведению количества строк одной и другой таблицы).
@@HtmllabRu А RIGHT JOIN выводит все из правой, а там где, где нет пары выставляет NULL. А LEFT JOIN выводит все из левой таблицы (которая слева от оператора), а там, где нет пары выставляет NULL. Верно?)
Ну тебя штормит! У меня к концу ролика морская болезнь разыгралась/видео лайк
про JOINы очень туманно рассказано, с учетом оговорок и повторных импортов таблиц тяжеловато переваривать )
просто надо больше практиковаться. например, "на котиках")
Прописал первый запрос тот что был у автора, в ответе получил страну, в которой живу )))))
А вот и он! Первый ролик, при просмотре которого пришла мысль "Нифига не понятно".... когда вы выдаете результаты умозаключений, хорошо бы еще озвучить КАК вы дошли до данного результата. Т.е. анализ действий. Как пример: 7:00.... Как вы дошли до "id=capital", в данном случае, понятно только вам ) Но надо признать, я ждал его раньше. Но ваш уровень объяснения - просто поражает ) Грацио!
Если уже посмотрели 13 роликов, жму руку!👍 🤝
Обычно мы связываем таблицы country и city по полям code и countrycode соответственно. Думаю вы уже разобрались, но на всякий случай добавлю, что в таблице country есть числовое поле capital (столица), которое содержит id номера города из таблицы city.
Если сделать объединение на этих полях «id=capital», то найдём все страны с их столицами. А если добавить условие с названием страны, то найдём отдельную страну с её столицей.
@@HtmllabRu На что только не пойдешь, когда горит задача, решение которой зависит от того, о чем вы рассказывайте! Жму вам руку !
@@HtmllabRu Ашо момент... "Если уж пошла такая пьянка", и автор канала отвечает... Не могли бы вы, быть может, в одном ролике рассказать об отличиях MySQL и MariaDB. Вроде одно и то же, но синтаксис иногда выругивается (либо, опять же, я кривой)
16:10 создаю таблицы, 19:39 забываем что только что их создали, и говорим что ни как не могли этого сделать.
hahaha
та да , шиза ? или возможно он это видео записывал в два захода и забыл
В данный раздел для понимания нужно вставить графическую таблицу вариантов JOIN из coderoad.ru/5706437/%D0%9A%D0%B0%D0%BA%D0%B0%D1%8F-%D1%80%D0%B0%D0%B7%D0%BD%D0%B8%D1%86%D0%B0-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D0%B8%D0%BC-JOIN-%D0%BB%D0%B5%D0%B2%D1%8B%D0%BC-JOIN-%D0%BF%D1%80%D0%B0%D0%B2%D1%8B%D0%BC-JOIN-%D0%B8-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%BC-JOIN
Мне нравится эта схема 👍
То есть, насколько я понял, различие USING и ON является в том, что
при ON мы должны указать(и приравнять ещё) какие 2 столбца в таблицах связаны с друг другом,
а при USING - мы выбираем только одно название столбца, только лишь потому, что мы
заранее знаем, что и в первой таблице, и во второй - связанные столбцы имеют одно название, верно всё?
ON может содержать двух и более столбцов: ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3
USING тоже, но с условием, что столбцы в таблицах одноимённые: USING (c1, c2, c3)
Нормально джойны зашли, вот пример тройного джойна, который выводит все страны, и их столицы, где русскоговорящее население составляет >10%. :
SELECT co.name, ci.name, cl.language, cl.percentage
FROM country AS co
JOIN city AS ci JOIN countrylanguage AS cl
ON co.capital = ci.id AND co.code = cl.countrycode
WHERE cl.language = 'Russian' AND cl.percentage > 10
ORDER BY cl.percentage DESC;
Будут видео с триггерами, функциями, процедурами и транзакциями?
Да, после некоторой паузы
А существует разница в порядке таблиц до и после INNER JOIN?
То есть разница между
таблица1 INNER JOIN таблица2 и
таблица2 INNER JOIN таблица1
только в порядке столбцов в результирующей выборке
оч исчерпывающе и антологично; видно автор на теме не один комплект коронок сгрыз, но просматривать приходится на скорости 1,75.
Vladyck, 👍
Круто! Спасибо! :)
Что круто я не понял дудуш
@@samiraxmedov3394 что конкретно?
@@ЕленаКовалевич-ч2л я новичек, сам смотрю в ютубе и учусь , но очень сложно с джоинами , только сегодня начал учить уже голова болит(( завтра на свежую голову начну, вопрос есть такой что вот интежер и варчар в каких имено моменте надо выписывать, ну эт я понял сто id int, name email vharcar
@@samiraxmedov3394 так у тебя проблемы не с join, а с типами данных. Начни сначала основы основ. Когда конкретно для столбцов применяются те или иные типы данных, а позже уже переходи к объединению таблиц.
И не пытайся все в один день понять, разбивай информацию по дням, а лучше одну тему в день , для осмысления.
Если я правильно тебя поняла, если нет, то поясни.
@@ЕленаКовалевич-ч2л спасибо, но реально желание есть выучить🙏🏼
Как одним запросом получить 2 таблицы из бд. Как вообще получить просто 2 и более таблицы. Есть у меня 6 таблиц, поля совпадают. Я хотел что бы по клику на сайте я получил все полностью таблицы с разным наполнением и отрисовать их на сайте.
Есть два способа.
Первый: создать объединение таблиц - тяжелую операцию с выборкой, где после FROM будет несколько таблиц через запятую, или воспользоваться INNER JOIN (или другими JOINами). При этом задать таблицам псевдонимы и указать эти псевдонимы для каждого поля, чтобы не было конфликтов из-за одноименных полей
Второй: Создать SELECT для каждой таблицы, а потом объединить их оператором UNION. Но! Придётся в каждом SELECT сделать одинаковое "количество мест". То есть, если в одном SELECT 7 полей, а во втором 3 поля, то во втором придется дописать 4 раза null или пустую строку
@@HtmllabRu Я пробовал писать типа SELECT t1. *, t2. * FROM t1, t2. Так у меня выводит только 1ю таблицу при чëм каждая строка * на кол-во элементов в t2. Пробовал t1 INNER JOIN t2 вижу только одну таблицу. И вот интересно если даже удасться получить все таблицы это будет массив склеиных таблиц? Ну то есть колонка id будет 1,2,3, 1,2,3,4, ... . Сгруппироватьвообще можно? Просто 6 таблиц 1 запросом. допустим в 1м массиве 1 таблица, во 2м 2я и т. д. По конкретней бы пример. Везде показывают только выборку, но мне куски не нужны, мне полностью как есть все таблицы с разным наполненением.
@@singlebw4065 Вот тут рассказываю о Union ruclips.net/video/4mOdLIsqz9I/видео.html. С его помощью можно реализоваться следующий пример (внимание! При существовании удаляется база db1):
drop database if exists db1;
create database db1;
use db1;
create table tbl1(id integer, title varchar(100));
insert into tbl1(id, title) values(1, "Hello");
insert into tbl1(id, title) values(2, "world");
select * from tbl1;
create table tbl2(id integer, title varchar(100), price decimal(6,2));
insert into tbl2(id, title, price) values(1, "Привет", 1000.50);
insert into tbl2(id, title, price) values(2, "MySQL", 2300);
insert into tbl2(id, title, price) values(3, "!", 456.78);
select * from tbl2;
#Через UNION
select id 'Идентификатор', title 'Название', price 'Цена' from tbl2
union all
select id, title, 0 from tbl1;
#Через UNION с указанием таблиц
select id 'Идентификатор', title 'Название', price 'Цена', 'tbl2' as 'Таблица' from tbl2
union all
select id, title, 0, 'tbl1' from tbl1;
#Через JOIN
select id 'Идентификатор', title 'Название', price 'Цена' from tbl2
union all
select id, title, 0 from tbl1;
Но мне кажется вы хотите не объединение таблиц через JOIN, и даже не объединение запросов, а что-то вроде процедуры, которая бы выводила в консоли отдельные таблицы (тут нужно заметить, что результат SELECT всегда одна таблица, потому такая процедура будет содержать несколько операторов SELECT). Поправьте, если я не понял ваш вопрос. Вот пример функции (видео по функциям есть тут ruclips.net/video/bMLOgmsp588/видео.html):
use db1;
delimiter //
drop procedure if exists showDataTables //
create procedure showDataTables()
begin
select id, title from tbl1;
select id, title, price from tbl2;
end //
delimiter ;
call showDataTables();
Можно было бы поработать с параметрами или затронуть курсоры, но для меня было важно написать максимально простой пример, который, как мне кажется, вам мог бы помочь
@@HtmllabRu Если более детально описать то вот что я задумал. Что бы на сайте не держать таблицы я решил сохранить их в бд. В таблицах описаны услуги электромонтажа. Кстате заголовки я тоже решил сохранить там что бы ориентироваться и клиенту если что можно было в базе изменить имя а не лазить по коду. Уж не знаю насколько грамотно, на грабли самому приходиться наступать. Придёт время ошибки мои вылезут.
1. таблица black_work
id
services unit price
1 Монтаж под ключ (черновой этап) NULL NULL
2 Точка без гофротрубы вывод 250
3 Точка с гофротрубой вывод 300
4 Подрозетники (ГКЛ) шт. 100
........... и не известно сколько там ещё будет
2. таблица
clean_work
id
services unit price
1 Монтаж под ключ (чистовой этап) NULL NULL
2 Фурнитура в подрозетники шт. 100
3 Фурнитура накладная шт. 300
........... и не известно сколько там ещё будет
.......
6. таблица
pipe_install
id
services unit price
1 Монтаж трубы NULL NULL
2 Гофротруба до Ø32 мм м.п. 15
........... и не известно сколько там ещё будет
Вот UNION то что впринципе надо.
На php
$tables = ["black_work", "clean_work", "cable_laying", "low_volt_system", "retro_wiring", "pipe_install"];
$queryStr = "";
foreach ($tables as $item) {
if($item == $tables[count($tables) - 1]){
$queryStr .= "SELECT * FROM $item";
break;
}
$queryStr .= "SELECT * FROM $item UNION ";
}
Вообщем это вот такой запрос
SELECT * FROM black_work UNION SELECT * FROM clean_work UNION SELECT * FROM cable_laying UNION SELECT * FROM low_volt_system UNION SELECT * FROM retro_wiring UNION SELECT * FROM pipe_install
Таблицы не объединяю вместе т.к. разные виды работ.
И получаю
0: {id: 1, services: "Монтаж под ключ (черновой этап)", price: null, unit: null}
1: {id: 2, services: "Точка без гофротрубы", price: 250, unit: "вывод"}
2: {id: 3, services: "Точка с гофротрубой", price: 300, unit: "вывод"}
3: {id: 4, services: "Подрозетники (ГКЛ)", price: 100, unit: "шт"}
4: {id: 5, services: "Подрозетники (кирпич)", price: 150, unit: "шт"}
5: {id: 6, services: "Подрозетники (бетон)", price: 250, unit: "шт"}
6: {id: 7, services: "Штроба (кирпич)", price: 120, unit: "шт"}
7: {id: 8, services: "Штроба (бетон)", price: 180, unit: "шт"}
8: {id: 9, services: "Распред/коробка (сварка)", price: 300, unit: "шт"}
9: {id: 10, services: "Распред/коробка (опресовка)", price: 350, unit: "шт"}
10: {id: 11, services: "Ниша под встр/щит", price: 1000, unit: "от"}
11: {id: 12, services: "Отверстия проходные до Ø32 мм", price: 200, unit: "шт"}
12: {id: 13, services: "Лоток (метал)", price: 300, unit: "м.п"}
13: {id: 1, services: "Монтаж под ключ (чистовой этап) ", price: null, unit: null}
14: {id: 2, services: "Фурнитура в подрозетники", price: 100, unit: "шт"}
15: {id: 3, services: "Фурнитура накладная", price: 200, unit: "шт"}
16: {id: 4, services: "Точечные светильники в ГКЛ", price: 150, unit: "шт"}
17: {id: 5, services: "Светильники настенные (Бра)", price: 250, unit: "шт"}
18: {id: 6, services: "Люстра", price: 500, unit: "от"}
19: {id: 7, services: "Светодиодная лента", price: 150, unit: "п.м"}
..............
39: {id: 4, services: "Фурнитура (с рамками)", price: 200, unit: "шт"}
40: {id: 5, services: "Распред/коробка (на клемах)", price: 350, unit: "шт"}
41: {id: 1, services: "Монтаж трубы", price: null, unit: null}
42: {id: 2, services: "Гофротруба до Ø32 мм", price: 15, unit: "м.п."}
43: {id: 3, services: "Гофротруба Ø50 мм", price: 25, unit: "м.п."}
44: {id: 4, services: "Труба ПНД/ПВХ до Ø32 мм", price: 40, unit: "м.п."}
45: {id: 5, services: "Труба ПНД/ПВХ Ø50 мм", price: 60, unit: "м.п."}
46: {id: 6, services: "Металлорукав до Ø32 мм", price: 40, unit: "м.п."}
Существует ли что-нибудь в sql что бы получить данные
0: [ массив 1й таблицы ]
1: [ массив 2й таблицы ]
....
1: [ массив 6й таблицы ]
Щас сижу про JSON в MariaDB почитываю на всякий пожарный.
Ещё кстате пытался заносить данные из консоли, так сказать научиться и потренироваться. оказалось там и показывает кракозябры хотя в графической таблице нормально всё. Еле нашёл причину. Оказывается в файле mariaDB.conf нужно было default-character-set = cp866 ставить.
@@HtmllabRu Также мне пришлось таблицы переписывать что бы заголовок вставить в 1й id каждой таблицы. Я на тот момент подумал, а нет ли способа запросом сдвинуть все строки таблицы на +1 по id что бы 1я ячейка освободилась и в неё можно было что либо положить.
помогите пожалуйста , есть две таблицы связанные отношением многие к многим, как получить поле первой таблицы, по конкретному ид второй таблицы?
SELECT t1.field FROM t1 LEFT JOIN (t2, t3)
ON (t2.a = t1.a AND t3.b = t2.b)
@@HtmllabRu благодарю!!!!!
@@HtmllabRu я сделал так же, только через INNER JOIN результат одинаковый , не понимаю в чем разница
@@HtmllabRu t3 - это таблица со сложенным ключем, я правильно понял?
@@pavelgrigorov1296 тут t2 таблица с двумя полями из t1 и t3.
INNER JOIN все соответствия строк из одной таблицы строкам из другой
LEFT JOIN показывает все записи из левой таблицы, и какие есть соответствия из правой
Не все смотрят ваши видео подряд за раз, как я. Наверно, хорошо бы дать на старте пояснения кратко, как открыть схему, с которой вы начинаете. Или хотя бы ссылку на урок, где это раскрыто - урок 7.
Спасибо)
Пробовал посчитать сколько человек говорят на том или ином языке в каждом регионе. В итоге MySQL результат выдал, но результат был не точный (некоторые значения проверял - там явные откланения на +/- 100 человек). Вроде переполнение BigInt не должно быть... Хотя маленькие значения считает неплохо.
Покажете ваш SELECT?
@@HtmllabRu Ну возьмем такой код :
SELECT co.Name, cl.Language, co.Population, cl.Percentage, (co.Population*cl.Percentage) AS 'POPxPerc'
FROM country co INNER JOIN countrylanguage cl ON Code = CountryCode
WHERE co.Code = 'TUR';
Тут тысячи умножаются на проценты (с 1 запятой, на 100 не делю) в конце должны получаться нули, но их там нету.. (выдает для арабского языка 93227398.4)
При этом проверка данных для арабского языка считает сама по себе нормально:
select 66591000*1.4 \G;
выдает 66591000*1.4: 93227400.0
А можно пример связи 3 таблиц с inner join из world ?
Там в каждой таблице есть столбец с кодом страны, потому пример может показаться несколько искусственным. Допустим нужно узнать в какой стране находится город Moscow и какие языки в этой стране используются (другими словами, что авторы world поместили в базу)
SELECT city.name 'город', country.name 'страна', count(language) 'кол-во языков'
FROM city INNER JOIN country INNER JOIN countrylanguage
ON country.code = city.countrycode AND countrylanguage.countrycode = country.code
WHERE city.name = 'Moscow'
GROUP BY 1,2;
+--------+--------------------+---------------+
| город | страна | кол-во языков |
+--------+--------------------+---------------+
| Moscow | Russian Federation | 12 |
+--------+--------------------+---------------+
Жесть у меня рандом сразу Турцию выдал
*ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '(idor
der)... PRIMARY KEY Без нижнего подчеркивания оказалось ! Моя ошибка
Если ищем страну и ее столицу, вот так вроде как по-чище и читается проще:
SELECT country.name AS country, city.name AS capital
FROM country
INNER JOIN city
ON country.capital = city.id
WHERE country.name = 'Turkey';
Извините конечно.. Но про JOINы, мало, что понятно(
Ок. Попробуем так:
- есть таблица пользователей user с полями iduser и name
- и таблица статей articles с полями idarticles, content и user_iduser.
Таблицы связаны отношением один ко многим (один пользователь пишет много статей, не рассматриваем вариант с многоавторскими статьями)
Чтобы выбрать из таблиц всех пользователей с их статьями, нужно написать запрос
SELECT name, content
FROM user INNER JOIN articles
ON iduser = user_iduser;
Будут показаны все имена пользователей и статья, которые они написали. То есть будет найдено однозначное соответствие записей второй таблице записям в другой.
Фрагмент ON iduser = user_iduser в запросе с INNER JOIN отвечает за такое однозначное соответствие одних записей другим. Без этого фрагмента, записям одной таблице будут сопоставлены все (любые) записи другой таблицы (а общее количество полученных записей будет равно произведению количества строк одной и другой таблицы).
@@HtmllabRu А RIGHT JOIN выводит все из правой, а там где, где нет пары выставляет NULL.
А LEFT JOIN выводит все из левой таблицы (которая слева от оператора),
а там, где нет пары выставляет NULL.
Верно?)
Точно 👍
Уважаемый автор. Пожалуйста подготавливайте материал более конкретней без всяких, а да работает, а нет неправильно.
JOIN нафиг не нужны, нормальные программисты их не используют, после применения потом жалуются, типо у меня запросы тормозят, у меня база виснет и тп.
22:40 SELECT *
FROM customer
LEFT JOIN `order`
ON customer.idcustomer = `order`.customer_id;