Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Основы запросов / 7 сообщений из 7, страница 1 из 1
19.04.2014, 18:27:19
    #38619567
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
Здравствуйте. Я уже 2 года, как пытаюсь работать с сайтами. Но за все это время, к моему же удивлению, я пользуюсь обыкновенными запросами: mysql insert, select, delete, update и т.д.
Когда вижу сайты, которые делают веб программисты, не понимаю ничего в их запросах. Посидев, и полистав темы на этом форуме, вообще остался в шоке, от того, что может делать мускул (их принци работы не знаю, но все же ооочень много нового).
Я например не в курсе, как объединять запросы, ключевые слова AS, IN, JOIN и т.д.
Поэтому хотелось бы попросить на источник, где расписано более подробно, как ими пользоваться, в каких ситуациях и т.д.
Для быстрой работы сайта, многие знают, что нужно следить за одним из самых главных факторов - количество и сложность запросов. Хотелось бы научиться многому, но поискав в гугле, ничего подробного не нашел. (уж извините меня, до меня не доходит все быстро)
...
Рейтинг: 0 / 0
19.04.2014, 21:29:24
    #38619646
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
...
Рейтинг: 0 / 0
20.04.2014, 13:54:10
    #38619788
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
SQL-EX.RU (справа выбрать из списка СУБД - MySQL)
...
Рейтинг: 0 / 0
20.04.2014, 18:36:04
    #38619841
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
Cygapb-007, спасибо, то что нужно.
----
Дабы не создавать новых тем, хочу спросить у вас. Остановился на 6м задании. первые пять сделал сразу, т.к. были простые операции. 6 задание связано с join' ами.
Условие:
---
Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
Printer(code, model, color, type, price)
Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость - speed (процессора в мегагерцах), объем памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах), скорость считывающего устройства - cd (например, '4x') и цена - price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена - price.
---
А вот сама задача:
---------
Найти производителя, номер модели и цену каждого компьютера, имеющегося в базе данных:
----------
Далее дается ему решение:
---
SELECT maker, Product.model AS model_1,
PC.model AS model_2, price
FROM Product INNER JOIN
PC ON PC.model = Product.model
ORDER BY maker, model_2
---
Читаю бесконца одни и те же строки, НУ НИКАК не могу понять работу этих join'ов.
Скажите пожалуйста, что и как это понять ? Читал я мануал на разных сайтах. Никак не могу понять их работу. Вот как я понял:
maker, Product.model AS model_1 - maker переименовываем в model_1 и добавляем поле Product.model
PC.model AS model_2, price - PC.model переименовываем в model_2. А price то откуда берет значение, если в таблице product нет этого поля ??? Читал я мануал с этого сайта: http://www.sql-tutorial.ru/ru/book_explicit_join_operations.html
...
Рейтинг: 0 / 0
20.04.2014, 19:55:53
    #38619859
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
AllReady ,

к сожалению, согласно подписанным вами правилам сайта SQL-EX.RU, обсуждение задач где-нибудь, кроме форума сайта, запрещено.

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

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

PS. в моей версии сайта задание имеет другую формулировку... №6 Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска не менее 10 Гбайт, найти скорости таких ПК-блокнотов.

№7 Найдите номера моделей и цены всех продуктов (любого типа), выпущенных производителем B (латинская буква).
PPS. Ввиду малой сложности задачи - мой (плохой) вариант "влопп" и "абыкак" (в обсуждениях есть варианты поизящнее)
select distinct * from(
select model, price from pc
union all
select model, price from laptop
union all
select model, price from printer
)u
where model in(select model from product where maker= 'b')
...
Рейтинг: 0 / 0
20.04.2014, 22:34:54
    #38619920
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
AllReady,

Все просто, волшебные слова — Мартин Грабер Введение в SQL.
...
Рейтинг: 0 / 0
21.04.2014, 05:03:18
    #38619986
biwed.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы запросов
AllReady,
Добрый день.
AllReadyprice то откуда берет значение, если в таблице product нет этого поля ???
Если повнимательней посмотреть то из таблицы PC.
AllReady
Код: sql
1.
2.
3.
4.
5.
SELECT maker, Product.model AS model_1,
PC.model AS model_2, price
FROM Product INNER JOIN
PC ON PC.model = Product.model
ORDER BY maker, model_2



Данный запрос эквивалентен такому:
Код: sql
1.
2.
3.
4.
5.
SELECT maker, Product.model AS model_1,
PC.model AS model_2, price
FROM Product, PC
WHERE PC.model = Product.model 
ORDER BY maker, model_2


Может так будет понятнее. Просто условие из WHERE "переехало" в FROM.
Left, Right и Full используются для случаев, когда одно из множеств больше и вас это интересует. К примеру множество ключей PC.model может быть меньше или больше Product.model. Вот тогда и надо использовать Left Right и Full.
Используем INNER JOIN для того, что бы не использовать in(select .....), так как через INNER JOIN запрос будет гораздо быстрее работать (на многих СУБД).
Надо больше практиковаться и чаше спрашивать. Про очень многие вопросы в книгах не пишут (поэтому не удивительно, что вы и не разобрались в примере).

PS. Причины не понимания состоят еще в том, что вы пытаетесь работать на таблицах без ER схемы БД. Там наглядно изображаются связи, далее станет понятно как объединять.

С уважением,
biwed.ru
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Основы запросов / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]