Создание SQL-запроса (кросс-таблица) - PullRequest
1 голос
/ 10 января 2012

Я готовлюсь к экзамену и немного борюсь с SQL-запросами.

Задача для меня:

написать запрос SQL, чтобы вывести полные имена всех клиентов, которые посещать занятия Аллена Мура в алфавитном порядке фамилии (т.е. Столбец Lname)

Клиент

Cid Fname Lname Fitness
C129 Julie Summer 1
C525 Max Hedrum 3
C628 John Long 3
C772 Warren Peace 2
C829 Anna Heart 2

Программа

Code Title Fitness
AR02 Aerobics 2
EN99 Endurance 3
TU10 Tune-Up 1
UB01 Upper-Body 2
YG02 Yoga 1

Персонал

Sid Fname Lname Position Salary
S09 Jenny Sayer Psychologist 23500
S22 Allen Moore Instructor 21500
S28 Polly Purves Instructor 19000
S35 Jim Shoe Instructor 18000
S55 Mark Spencer Manager 25500

Класс

Code Sid Cid
AR02 S35 C772
EN99 S22 C525
TU10 S35 C129
UB01 S28 C628
YG02 S22 C829
YG02 S22 C12

Это что-то вроде:

SELECT Cliente.Fname, Cliente.Lname
FROM Staff, Class, Cliente
WHERE  Staff.Sid = Class.Sid AND Staff.Fname = "Allen" AND Staff.Lname = "Moore 
AND Class.Cid = Cliente.Cid
GROUP BY Cliente.lName ASC;

Спасибо!

Ответы [ 5 ]

2 голосов
/ 10 января 2012

Использование разных псевдонимов и более популярное соглашение для JOIN, но ваш запрос также должен работать.Кроме того, ORDER BY по возрастанию является значением по умолчанию, поэтому ASC является необязательным ...

SELECT CLNT.Fname, CLNT.Lname
FROM Class AS CLS
     INNER JOIN Client AS CLNT ON CLS.Cid = CLNT.Cid
     INNER JOIN Staff AS S ON CLS.Sid = S.Sid
WHERE S.Fname = 'Allen'
      AND S.Lname = 'Moore'
ORDER BY CLNT.Lname;
2 голосов
/ 10 января 2012
select c.fname + ' ' + c.lname
from Client c
inner join Class cl
on c.cid = cl.cid
inner join Staff s
on s.sid = cl.sid
where s.fname = 'allen'
and s.lname = 'moore'
order by c.lname
1 голос
/ 10 января 2012

Поскольку никакая информация из других таблиц фактически не используется, зачем вообще ПРИСОЕДИНЯТЬСЯ?

 SELECT FName, LName
 FROM Client
 WHERE
    Cid IN (
        SELECT Cid
        FROM Class
        WHERE Sid = (
            SELECT Sid FROM Staff WHERE FName = 'Allen' AND LName = 'Moore'
        )
    )
 ORDER BY LName ASC;
1 голос
/ 10 января 2012

GROUP BY в вашем запросе должен уйти, вам не нужно ничего агрегировать.Я бы предпочел синтаксис SQL92 для объединения:

SELECT 
    Client.Fname, Client.Lname
FROM 
   Staff
INNER JOIN
Class ON Staff.Sid = Class.Sid AND Staff.Fname = "Allen" AND Staff.Lname = "Moore"
INNER JOIN 
Client ON Class.Cid = Cliente.Cid
ORDER BY Cliente.lName ASC;
1 голос
/ 10 января 2012

Попробуйте освежить в памяти использование предложения JOIN ... ON.

http://www.w3schools.com/sql/sql_join_inner.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...