выборка Select из не скольких таблиц

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
mrtsen
Сообщения: 5
Зарегистрирован: 11 май 2015, 20:37

выборка Select из не скольких таблиц

Сообщение mrtsen » 20 май 2015, 11:54

Не могу выбрать правильно всех студентов из таблицы Универов с названием МГТУ
Есть таблицы Students
id (идентификационный номер студента),
fio (фио студента),
idu (идентификационный номер Универа),

таблица Universities
idu (идентификационный номер универа),
name (название универа)

Нужно выбрать всех студентов из Универа(Where Universitiies.name=MGTU)

[syntax=sql]Select * FROM Students where idu == MGTU?[/syntax]
благодарю заранее

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: выборка Select из не скольких таблиц

Сообщение doter.ua » 20 май 2015, 12:02

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
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: выборка Select из не скольких таблиц

Сообщение Foenix » 20 май 2015, 14:52

select fio from students left outer join univercities on univercities.idc=students.idu
where univercities.name = 'MGTU'

тот запрос, что дали выше - будет работать намного медленнее.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: выборка Select из не скольких таблиц

Сообщение doter.ua » 20 май 2015, 18:08

Foenix писал(а): left outer join
Изображение
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: выборка Select из не скольких таблиц

Сообщение Foenix » 20 май 2015, 23:52

а ты тока знаешь in? :-D
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

mrtsen
Сообщения: 5
Зарегистрирован: 11 май 2015, 20:37

Re: выборка Select из не скольких таблиц

Сообщение mrtsen » 21 май 2015, 13:14

Foenix писал(а):select fio from students left outer join univercities on univercities.idc=students.idu
where univercities.name = 'MGTU'

тот запрос, что дали выше - будет работать намного медленнее.
Спасибо за ответ. Не успел исправить, двойку получил))
Так почему запрос выше медленнее работает?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: выборка Select из не скольких таблиц

Сообщение Foenix » 21 май 2015, 13:47

потому, что в запросе с In объединены как бы два запроса, и на каждую строчку из первой выборки (select all) будет производиться еще одна (IN) и сравниваться "в или не в"
правда, для того, чтоб мой запрос работал быстрее - нужно правильно расставить ключи
Кроме того, не знаю для чего ты это делаешь, у тебя неправильные именования полей. Ну это для пятерки.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

mrtsen
Сообщения: 5
Зарегистрирован: 11 май 2015, 20:37

Re: выборка Select из не скольких таблиц

Сообщение mrtsen » 22 май 2015, 19:00

Foenix писал(а):потому, что в запросе с In объединены как бы два запроса, и на каждую строчку из первой выборки (select all) будет производиться еще одна (IN) и сравниваться "в или не в"
правда, для того, чтоб мой запрос работал быстрее - нужно правильно расставить ключи
Кроме того, не знаю для чего ты это делаешь, у тебя неправильные именования полей. Ну это для пятерки.
Наименования и задания были сформулированы преподавателем. Я у него спросил, на счет:
[syntax=sql]SELECT * FROM Students WHERE idu == MGTU?[/syntax]
он сказал, это работает, но для больших базы данных есть более оптимальные решения. JOIN лучше использовать в SQL а в ORACLE, с которым, наш преподаватель работает, есть другое решение подытожил, какое не пояснил.
нужно правильно расставить ключи
А как правильно расставить ключи?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: выборка Select из не скольких таблиц

Сообщение Foenix » 22 май 2015, 19:25

оракл не знаю что там и как - не работала, это серьезная такая массивная субд для серьезных целей)),
а термин sql- это сам язык, он sql везде) так что в оракле тоже sql. Только сама база данных устроена везде по-разному и разные и очень огромные различия в них есть. Но есть немного как бы об щих правил "для всех". И язык этот может иметь свои нюансы в разных субд, т.е. они берут за основу общее, а там даже один запрос может быть обработан по-разному в разных субд.

И про ключи, вернее не ключи, а нужно верно проиндексировать таблички. Т.е. допустим в простом запросе с where можно проиндексировать по полю поиска и запрос МОЖЕТ БЫТЬ ускорен. И это очень сложная тема чтоб тут рассказать (да и не умею я рассказывать чтоб было для вашего преподавателя точно) и это нужно смотрнеть в конкретной базе данных.
Индекс - это типа оглавления. Т.е. если искать например студентов по фио -как бы хорош бы иметь оглавление по их фио, правда? но тогда с другой стороны - когда мы добавляем в таблицу строки, то строчка будет добавляться медленнее потому, что нужно еще полезть и добавить в оглавление информацию (особенно если есть куча ключей и составные тоже), т.е. тут важна мера, частота запросов и т.д.
по праймари кей строится всегда индекс по-умолчанию. Зачастую добавляются так же индексирование по ссылочным полям, если настроены foregn key как положено (для этого в sqlite нужно повернуть один выключатель)
Есть какие-то определенные программы для помощи в составлении запросов с рекомендациями по подбору ключей и т.д. Все это громадная тема.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

mrtsen
Сообщения: 5
Зарегистрирован: 11 май 2015, 20:37

Re: выборка Select из не скольких таблиц

Сообщение mrtsen » 22 май 2015, 19:45

я бы сказал понял) Но как уже сказали, до "понял"-а еще далеко. Скачал уроки по SQL от специалиста. А вы как начинали учить SQL? Хочу посмотреть уроки, делать запросы, познакомиться с основой SQL, на будущее

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: выборка Select из не скольких таблиц

Сообщение Foenix » 22 май 2015, 20:24

специалист - норм, смотри
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить