Страница 1 из 1
выборка Select из не скольких таблиц
Добавлено: 20 май 2015, 11:54
mrtsen
Не могу выбрать правильно всех студентов из таблицы Универов с названием МГТУ
Есть таблицы Students
id (идентификационный номер студента),
fio (фио студента),
idu (идентификационный номер Универа),
таблица Universities
idu (идентификационный номер универа),
name (название универа)
Нужно выбрать всех студентов из Универа(Where Universitiies.name=MGTU)
[syntax=sql]Select * FROM Students where idu == MGTU?[/syntax]
благодарю заранее
Re: выборка Select из не скольких таблиц
Добавлено: 20 май 2015, 12:02
doter.ua
mrtsen писал(а):Не могу выбрать правильно всех студентов из таблицы Универов с названием МГТУ
Есть таблицы Students
id (идентификационный номер студента),
fio (фио студента),
idu (идентификационный номер Универа),
таблица Universities
idc (идентификационный номер универа),
name (название универа)
Нужно выбрать всех студентов из Универа(Where Universitiies.name=MGTU)
[syntax=sql]Select * FROM Students where idu == MGTU?[/syntax]
благодарю заранее
SELECT * FROM Students WHERE idu IN (SELECT idc FROM Universities WHERE name='MGTU');
http://www.mysql.ru/docs/man/ANSI_diff_Sub-selects.html
Re: выборка Select из не скольких таблиц
Добавлено: 20 май 2015, 14:52
Foenix
select fio from students left outer join univercities on univercities.idc=students.idu
where univercities.name = 'MGTU'
тот запрос, что дали выше - будет работать намного медленнее.
Re: выборка Select из не скольких таблиц
Добавлено: 20 май 2015, 18:08
doter.ua
Foenix писал(а): left outer join

Re: выборка Select из не скольких таблиц
Добавлено: 20 май 2015, 23:52
Foenix
а ты тока знаешь in?

Re: выборка Select из не скольких таблиц
Добавлено: 21 май 2015, 13:14
mrtsen
Foenix писал(а):select fio from students left outer join univercities on univercities.idc=students.idu
where univercities.name = 'MGTU'
тот запрос, что дали выше - будет работать намного медленнее.
Спасибо за ответ. Не успел исправить, двойку получил))
Так почему запрос выше медленнее работает?
Re: выборка Select из не скольких таблиц
Добавлено: 21 май 2015, 13:47
Foenix
потому, что в запросе с In объединены как бы два запроса, и на каждую строчку из первой выборки (select all) будет производиться еще одна (IN) и сравниваться "в или не в"
правда, для того, чтоб мой запрос работал быстрее - нужно правильно расставить ключи
Кроме того, не знаю для чего ты это делаешь, у тебя неправильные именования полей. Ну это для пятерки.
Re: выборка Select из не скольких таблиц
Добавлено: 22 май 2015, 19:00
mrtsen
Foenix писал(а):потому, что в запросе с In объединены как бы два запроса, и на каждую строчку из первой выборки (select all) будет производиться еще одна (IN) и сравниваться "в или не в"
правда, для того, чтоб мой запрос работал быстрее - нужно правильно расставить ключи
Кроме того, не знаю для чего ты это делаешь, у тебя неправильные именования полей. Ну это для пятерки.
Наименования и задания были сформулированы преподавателем. Я у него спросил, на счет:
[syntax=sql]SELECT * FROM Students WHERE idu == MGTU?[/syntax]
он сказал, это работает, но для больших базы данных есть более оптимальные решения. JOIN лучше использовать в SQL а в ORACLE, с которым, наш преподаватель работает, есть другое решение подытожил, какое не пояснил.
нужно правильно расставить ключи
А как правильно расставить ключи?
Re: выборка Select из не скольких таблиц
Добавлено: 22 май 2015, 19:25
Foenix
оракл не знаю что там и как - не работала, это серьезная такая массивная субд для серьезных целей)),
а термин sql- это сам язык, он sql везде) так что в оракле тоже sql. Только сама база данных устроена везде по-разному и разные и очень огромные различия в них есть. Но есть немного как бы об щих правил "для всех". И язык этот может иметь свои нюансы в разных субд, т.е. они берут за основу общее, а там даже один запрос может быть обработан по-разному в разных субд.
И про ключи, вернее не ключи, а нужно верно проиндексировать таблички. Т.е. допустим в простом запросе с where можно проиндексировать по полю поиска и запрос МОЖЕТ БЫТЬ ускорен. И это очень сложная тема чтоб тут рассказать (да и не умею я рассказывать чтоб было для вашего преподавателя точно) и это нужно смотрнеть в конкретной базе данных.
Индекс - это типа оглавления. Т.е. если искать например студентов по фио -как бы хорош бы иметь оглавление по их фио, правда? но тогда с другой стороны - когда мы добавляем в таблицу строки, то строчка будет добавляться медленнее потому, что нужно еще полезть и добавить в оглавление информацию (особенно если есть куча ключей и составные тоже), т.е. тут важна мера, частота запросов и т.д.
по праймари кей строится всегда индекс по-умолчанию. Зачастую добавляются так же индексирование по ссылочным полям, если настроены foregn key как положено (для этого в sqlite нужно повернуть один выключатель)
Есть какие-то определенные программы для помощи в составлении запросов с рекомендациями по подбору ключей и т.д. Все это громадная тема.
Re: выборка Select из не скольких таблиц
Добавлено: 22 май 2015, 19:45
mrtsen
я бы сказал понял) Но как уже сказали, до "понял"-а еще далеко. Скачал уроки по SQL от специалиста. А вы как начинали учить SQL? Хочу посмотреть уроки, делать запросы, познакомиться с основой SQL, на будущее
Re: выборка Select из не скольких таблиц
Добавлено: 22 май 2015, 20:24
Foenix
специалист - норм, смотри