Главная / Базы данных /
Введение в Oracle SQL / Тест 8
Введение в Oracle SQL - тест 8
Упражнение 1:
Номер 1
Даны таблицы:
ANIMALSFAMILY | NAME |
---|
mammal | dog |
mammal | lion |
fish | guppy |
bird | eagle |
fish | bass |
bird | pelican |
insect | beetle |
BLOOD_TYPESFAMILY | BLOOD_TYPE |
---|
mammal | warm_blooded |
fish | cold_blooded |
bird | cold_blooded |
Запрос SQL:
SELECT a.family, a.name
FROM animals a INNER JOIN blood_types t ON (a.family = t.family)
WHERE a.family NOT IN ('fish', 'bird');
Количество строк, возвращенных запросом, = ...
Ответ:
 (1) 1 
 (2) 2 
 (3) 3 
 (4) 4 
 (5) 5 
Номер 2
Дана таблица:
ANIMALSID | FAMILY | ANIMAL | COLOR |
---|
1 | mammal | dog | brown |
2 | mammal | zebra | black,white |
3 | fish | shark | gray |
4 | bird | gull | white |
5 | bird | pelican | white |
6 | fish | trout | gray |
Запрос SQL:
SELECT a1.animal, a2.animal, a1.color
FROM animals a1, animals a2
WHERE a1.color = a2.color AND a1.animal <> a2.animal;
Количество строк, возвращенных запросом, = ...
Ответ:
 (1) 0 
 (2) 1 
 (3) 2 
 (4) 3 
 (5) 4 
Номер 3
Даны таблицы:
ANIMALSFAMILY | NAME |
---|
mammal | dog |
mammal | lion |
fish | guppy |
bird | eagle |
fish | guppy |
bird | pelican |
reptile | snake |
BLOOD_TYPESFAMILY | BLOOD_TYPE |
---|
mammal | warm_blooded |
fish | cold_blooded |
bird | cold_blooded |
Запрос SQL:
SELECT DISTINCT a.name
FROM animals a, blood_types t
WHERE a.family = t.family;
Количество строк, возвращенных запросом, = ...
Ответ:
 (1) 0 
 (2) 1 
 (3) 3 
 (4) 5 
 (5) 6 
Упражнение 2:
Номер 1
В базе данных существуют таблицы AUTHORS (авторы) и EMPLOYEES (сотрудники). Запросы SQL, возвращающие список фамилий (столбец NAME) всех авторов и сотрудников:
Ответ:
 (1) Select distinct NAME From AUTHORS, EMPLOYEES;
 
 (2) Select NAME From AUTHORS union Select NAME From EMPLOYEES
 
 (3) Select NAME From AUTHORS inner join EMPLOYEES
 
 (4) Select NAME From AUTHORS Where NAME in (Select NAME From EMPLOYEES)
 
Номер 2
Запрос SQL: SELECT a.lname, a.fname FROM a, b
WHERE a.lname = b.lname AND b.sex = 'male';Выборку, эквивалентную результату запроса, возвращает команда:
Ответ:
 (1) SELECT a.lname, a.fname FROM a, b WHERE b.sex = 'male';
 
 (2) SELECT lname, fname FROM a WHERE lname IN (SELECT lname FROM b);
 
 (3) SELECT lname, fname FROM a WHERE lname IN (SELECT lname FROM b WHERE b.sex = 'male');
 
 (4) SELECT lname, fname FROM a;
 
Номер 3
Ситуация, в которых логично использовать соединение таблицы EMPLOYEE
и REGION
с собой:
Ответ:
 (1) таблицы EMPLOYEE
и REGION
имеют соответствующие друг другу столбцы 
 (2) таблицы EMPLOYEE
и REGION
не имеют соответствующих друг другу столбцов 
 (3) таблица EMPLOYEE
имеет 2 столбца, соответствующих друг другу 
 (4) столбец таблицы EMPLOYEE
, соответствующий стобцу таблицы REGION
, содержит пустые значения в строках, которые должны войти в результат выборки 
Упражнение 3:
Номер 1
Синтаксически корректные запросы SQL:
Ответ:
 (1) SELECT i.product, i.qty
FROM inventory i JOIN RIGHT sales s ON i.id = s.prod_id
WHERE s.sales > 10000; 
 (2) SELECT g.description, AVG(b.price)
FROM books b
WHERE b.book_id = genre.id AND b.author_id = 5
GROUP BY g.description; 
 (3) SELECT e.last_name, e.first_name
FROM employees e, payroll p
WHERE e.salary_id(+) = p.id AND last_name like 'A%'; 
 (4) SELECT s.title, MIN(start_time)
FROM shows s, networks n
WHERE s.net_id = n.id AND n.name = 'NBC'
GROUP BY s.title; 
 (5) SELECT s.id, SUM(credit_hrs)
FROM students s, classes c
WHERE s.id(+) = c.student_id(+) AND c.active = 'Y'
GROUP BY s.id; 
Номер 2
Запрос SQL:SELECT t.city, t.name
FROM teams t, payroll p
WHERE t.id = p.team_id
AND p.total_amt > 5000000
AND t.country = 'Canada';
Выборку, эквивалентную результату запроса, возвращает команда:
Ответ:
 (1) SELECT city, name FROM payroll
WHERE total_amt > (SELECT SUM(amount) FROM teams
WHERE t.country = 'Canada'
GROUP BY 1
HAVING SUM(amount) > 5000000); 
 (2) SELECT city, name FROM teams
WHERE total_amt > 5000000
AND country IN (SELECT * FROM payroll
WHERE country = 'Canada'); 
 (3) SELECT t.city, t.name FROM teams t, payroll p
WHERE t.id = p.id
AND p.total_amt = 5000000
AND country = 'Canada'); 
 (4) SELECT t.city, t.name FROM teams t, payroll p
WHERE t.id = p.team_id
AND p.total_amt > 5000000
AND country <> 'Canada'); 
 (5) SELECT city, name FROM teams
WHERE country = 'Canada'
AND EXISTS (SELECT * FROM payroll
WHERE team_id = teams.id
AND total_amt > 5000000); 
Номер 3
Даны таблицы:
PEOPLENAME | PERSON_ID |
---|
Bill | 1 |
Ted | 2 |
Al | 3 |
JOBSJOB_ID | DESCRIPTION |
---|
100 | Assistant |
200 | Developer |
300 | Team Leader |
EMPLOYEESPERSON_ID | EMP_ID | JOB_ID |
---|
1 | 10 | 100 |
2 | 20 | 200 |
3 | 30 | 300 |
Начало запроса SQL:
SELECT p.name, e.emp_id, j.description
Необходимо выполнить эквисоединение между таблицами PEOPLE, EMPLOYEES и JOBS. Корректными вариантами продолжения запроса являются:
Ответ:
 (1) FROM employees e, people p, jobs j
WHERE e.person_id = p.person_id
AND e.job_id = j.job_id 
 (2) FROM employees e
WHERE e.person_id = p.person_id
AND e.job_id = j.job_id 
 (3) FROM employees e, people p, jobs j
WHERE e.person_id(+) = p.person_id
AND e.job_id = j.job_id(+) 
 (4) FROM employees e JOIN ON people p AS e.person_id = p.person_id
JOIN ON jobs AS e.job_id = j.job_id 
 (5) FROM employees, people, jobs
WHERE e.person_id = p.person_id
AND e.job_id = j.job_id 
Упражнение 4:
Номер 1
Минимальное количество условий соединения, необходимых для избежания декартова произведения в запросе с соединением таблиц, составляет ...
Ответ:
 (1) ни одного 
 (2) количество таблиц + 1 
 (3) количество таблиц - 1 
 (4) количество столбцов + 1 
 (5) количество столбцов - 1 
Номер 2
Запрос SQL: SELECT a.ln, b.zip, c.city
FROM a, b, c
WHERE a.ln = b.ln;
Каждая из таблиц «a», «b» и «c» содержит по 100 строк; первичным ключом для таблиц «a» и «b» является столбец «ln». Максимальное количество строк, которое может возвратить данный запрос, = ...
Ответ:
 (1) 1 
 (2) 100 
 (3) 10000 
 (4) 100000 
 (5) 1000000 
Номер 3
Необходимо выполнить запрос к базе данных, состоящей из 4 таблиц - A, B, C и D; таблица D связана с таблицей А, таблица В связана с таблицей С, таблица D связана с таблицей В. Кроме того, требуется задать условия: значения в столбце, общем для таблиц B и С, должно быть равным 'SESSION'; значения в столбце, общем для таблиц B и D, должно быть равным 981301. Количество условий в предложении WHERE (включая условия соединения) для корректного выполнения запроса к описанной базе данных, должно быть равно...
Ответ:
 (1) 2 
 (2) 3 
 (3) 4 
 (4) 5 
 (5) Выполнение требуемой выборки невозможно 
Упражнение 5:
Номер 1
Необходимо написать запрос SQL с использованием правого внешнего соединения (RIGHT OUTER JOIN). При отсутствии соответствий между значениями в таблицах ...
Ответ:
 (1) будут возвращены все строки правой таблицы 
 (2) будут возвращены все строки левой таблицы 
 (3) вместо значений левой таблицы будут возвращены пустые значения 
 (4) вместо значений правой таблицы будут возвращены пустые значения 
 (5) вместо значений обеих таблиц будут возвращены пустые значения 
Номер 2
Необходимо создать запрос SQL для выборки всех строк из левой таблицы вне зависимости от того, есть ли соответствующие значения в правой таблице. Выполнить поставленную задачу позволит оператор ...
Ответ:
 (1) NATURAL JOIN 
 (2) RIGHT OUTER JOIN 
 (3) LEFT OUTER JOIN 
 (4) FULL OUTER JOIN 
 (5) CROSS JOIN 
Номер 3
Имеются 3 подготовленных предложения SELECT с одинаковыми столбцами в списке выборки; Вам необходимо написать запрос, возвращающий результат, тождественный комбинации результатов имеющихся запросов. Тип соединения, необходимый для получения требуемого результата:
Ответ:
 (1) INNER JOIN 
 (2) UNION ALL 
 (3) CROSS JOIN 
 (4) FULL JOIN 
 (5) OUTER JOIN 
Упражнение 6:
Номер 1
Эквисоединениями таблиц являются команды:
Ответ:
 (1) SELECT region.region_name, employees
FROM region, employees
WHERE region.id = employee.region_no; 
 (2) SELECT region.region_name, employees
FROM region, employees
WHERE region.id = employee.region_no(+); 
 (3) SELECT region.region_name, employees
FROM region, employees
WHERE employee.salary BETWEEN region.avg_salary AND region.max_salary; 
 (4) SELECT region.region_name, employees
FROM region FULL OUTER JOIN employees
ON region.id = employee.region_no; 
Номер 2
Открытыми соединениями таблиц являются команды:
Ответ:
 (1) SELECT region.region_name, employee.salary
FROM region, employees
WHERE region.id = employee.region_no; 
 (2) SELECT region.region_name, employee.salary
FROM region, employees
WHERE region.id = employee.region_no(+); 
 (3) SELECT region.region_name, employee.salary
FROM region, employees
WHERE employee.salary BETWEEN region.avg_salary AND region.max_salary; 
 (4) SELECT region.region_name, employee.salary
FROM region FULL OUTER JOIN employees
ON region.id = employee.region_no; 
Номер 3
Тетасоединениями таблиц являются команды:
Ответ:
 (1) SELECT region.region_name, employee.salary
FROM region, employees
WHERE region.id = employee.region_no; 
 (2) SELECT region.region_name, employee.salary
FROM region, employees
WHERE region.id = employee.region_no(+); 
 (3) SELECT region.region_name, employee.salary
FROM region, employees
WHERE employee.salary BETWEEN region.avg_salary AND region.max_salary; 
 (4) SELECT region.region_name, employee.salary
FROM region FULL OUTER JOIN employees
ON region.id = employee.region_no; 
Упражнение 7:
Номер 1
Запрос SQL:SELECT name, salary, dept_no
FROM employee
WHERE salary > (SELECT AVG(salary)
FROM employee;
WHERE dept_no = (SELECT dept_no
FROM employee
WHERE last_name = (SELECT last_name
FROM employee
WHERE salary > 50000)));Команда, результат действия которой будет вычислен в последнюю очередь:
Ответ:
 (1) SELECT name, salary, dept_no ...
 
 (2) SELECT AVG(salary) ...
 
 (3) SELECT dept_no ...
 
 (4) SELECT last_name ...
 
Номер 2
Запрос SQL:SELECT name, salary, dept_no
FROM employee
WHERE salary > (SELECT AVG(salary)
FROM employee;
WHERE dept_no = (SELECT dept_no
FROM employee
WHERE last_name = (SELECT last_name
FROM employee
WHERE salary > 50000)));Команда, результат действия которой будет вычислен в первую очередь:
Ответ:
 (1) SELECT name, salary, dept_no ...
 
 (2) SELECT AVG(salary) ...
 
 (3) SELECT dept_no ...
 
 (4) SELECT last_name ...
 
Номер 3
Запрос SQL:SELECT name, salary, dept_no
FROM employee
WHERE salary > (SELECT AVG(salary)
FROM employee;
WHERE last_name = (SELECT last_name
FROM employee
WHERE dept_no IN (SELECT dept_no
FROM employee
WHERE salary > 50000)));Команда, результат действия которой будет вычислен в первую очередь:
Ответ:
 (1) SELECT name, salary, dept_no ...
 
 (2) SELECT AVG(salary) ...
 
 (3) SELECT dept_no ...
 
 (4) SELECT last_name ...
 
Упражнение 8:
Номер 1
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Рекурсивные запросы SQL Oracle 11g:
Ответ:
 (1) SELECT LEVEL, RPAD(last_name, LEVEL,'_') "Level of subordination"
FROM s_emp
CONNECT BY PRIOR id = manager_id
START WITH manager_id IS NULL
ORDER SIBLINGS BY last_name; 
 (2) SELECT w.last_name||', '||w.title||' works for '||m.last_name||', '||m.title "Level of subordination"
FROM s_emp w INNER JOIN s_emp m
ON m.id = w.manager_id
ORDER m.title; 
 (3) WITH subordination (id, job) AS
(SELECT id, title FROM s_emp
WHERE title = 'President'
UNION ALL
SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s
ON s.id = e.manager_id)
SELECT job FROM subordination; 
 (4) DECLARE
v_title s_emp.title%TYPE;
v_id s_emp.id%TYPE;
v_job VARCHAR2(200)
BEGIN
SELECT id, title INTO v_id, v_title FROM s_emp
WHERE title = 'President';
FOR i IN (SELECT * FROM s_emp WHERE manager_id = v_id) LOOP
v_job := v_job||' -> '||i.title;
DBMS_OUTPUT.PUT_LINE(v_job);
END LOOP; END; 
Номер 2
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Запросы SQL Oracle 11g, НЕ выполняющие РЕКУРСИВНОЕ построение структуры подчиненности сотрудников компании:
Ответ:
 (1) SELECT LEVEL, RPAD(last_name, LEVEL,'_') "Level of subordination"
FROM s_emp
CONNECT BY PRIOR id = manager_id
START WITH manager_id IS NULL
ORDER SIBLINGS BY last_name; 
 (2) SELECT w.last_name||', '||w.title||' works for '||m.last_name||', '||m.title "Level of subordination"
FROM s_emp w INNER JOIN s_emp m
ON m.id = w.manager_id
ORDER m.title; 
 (3) WITH subordination (id, job) AS
(SELECT id, title FROM s_emp
WHERE title = 'President'
UNION ALL
SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s
ON s.id = e.manager_id)
SELECT job FROM subordination; 
 (4) DECLARE
v_title s_emp.title%TYPE;
v_id s_emp.id%TYPE;
v_job VARCHAR2(200)
BEGIN
SELECT id, title INTO v_id, v_title FROM s_emp
WHERE title = 'President';
FOR i IN (SELECT * FROM s_emp WHERE manager_id = v_id) LOOP
v_job := v_job||' -> '||i.title;
DBMS_OUTPUT.PUT_LINE(v_job);
END LOOP; END; 
Номер 3
Дана таблица S_EMP, в которой содержится информация о сотрудниках компании:
ID | Номер сотрудника | PRIMARY KEY |
LAST_NAME | Фамилия | NOT NULL |
TITLE | Должность | NOT NULL |
MANAGER_ID | Номер начальника | |
SALARY | Зарплата | NOT NULL |
START_DATE | Дата начала работы | NOT NULL |
Запросы SQL Oracle 11g, выполняющие построение иерархической структуры подчиненности сотрудников компании, но не являющиеся рекурсивными:
Ответ:
 (1) SELECT LEVEL, RPAD(last_name, LEVEL,'_') "Level of subordination"
FROM s_emp
CONNECT BY PRIOR id = manager_id
START WITH manager_id IS NULL
ORDER SIBLINGS BY last_name; 
 (2) SELECT w.last_name||', '||w.title||' works for '||m.last_name||', '||m.title "Level of subordination"
FROM s_emp w INNER JOIN s_emp m
ON m.id = w.manager_id
ORDER m.title; 
 (3) WITH subordination (id, job) AS
(SELECT id, title FROM s_emp
WHERE title = 'President'
UNION ALL
SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s
ON s.id = e.manager_id)
SELECT job FROM subordination; 
 (4) DECLARE
v_title s_emp.title%TYPE;
v_id s_emp.id%TYPE;
v_job VARCHAR2(200)
BEGIN
SELECT id, title INTO v_id, v_title FROM s_emp
WHERE title = 'President';
FOR i IN (SELECT * FROM s_emp WHERE manager_id = v_id) LOOP
v_job := v_job||' -> '||i.title;
DBMS_OUTPUT.PUT_LINE(v_job);
END LOOP; END; 
Упражнение 9:
Номер 1
Запрос SQL: WITH subordination (id, job) AS
(SELECT id, title FROM s_emp
WHERE title = 'President'
UNION ALL
SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s
ON s.id = e.manager_id)
SELECT job FROM subordination;Рекурсивным членом запроса является выражение:
Ответ:
 (1) WITH subordination (id, job) 
 (2) SELECT id, title FROM s_emp WHERE title = 'President' 
 (3) SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s ON s.id = e.manager_id 
 (4) SELECT job FROM subordination 
Номер 2
Запрос SQL: WITH subordination (id, job) AS
(SELECT id, title FROM s_emp
WHERE title = 'President'
UNION ALL
SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s
ON s.id = e.manager_id)
SELECT job FROM subordination;Опорным членом запроса является выражение:
Ответ:
 (1) WITH subordination (id, job) 
 (2) SELECT id, title FROM s_emp WHERE title = 'President' 
 (3) SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s ON s.id = e.manager_id 
 (4) SELECT job FROM subordination 
Номер 3
Запрос SQL: WITH subordination (id, job) AS
(SELECT id, title FROM s_emp
WHERE title = 'President'
UNION ALL
SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s
ON s.id = e.manager_id)
SELECT job FROM subordination;Основным запросом является выражение:
Ответ:
 (1) WITH subordination (id, job) 
 (2) SELECT id, title FROM s_emp WHERE title = 'President' 
 (3) SELECT s.job||' -> '||e.title
FROM s_emp e INNER JOIN subordination s ON s.id = e.manager_id 
 (4) SELECT job FROM subordination 
Упражнение 10:
Номер 1
Предложение CYCLE в рекурсивном запросе SQL Oracle 11g предназначено для ...
Ответ:
 (1) создания циклов  
 (2) предупреждения зацикливания  
 (3) предотвращения бесконечного выполнения  
 (4) создания добавочного множества  
Номер 2
Для получения добавочного множества строк рекурсивного запроса в SQL Oracle 11g используются ...
Ответ:
 (1) соединения (JOIN) 
 (2) иерархические запросы 
 (3) подзапросы 
 (4) операторы множеств 
Номер 3
Предложение SEARCH в рекурсивном запросе SQL Oracle 11g предназначено для ...
Ответ:
 (1) определения порядка сортировки выборки, возвращенной запросом 
 (2) задания критерия соответствия для строк итоговой выборки  
 (3) объединения опорного и добавочного множеств  
 (4) задания критерия определения опорного множества 
Упражнение 11:
Номер 1
Запрос SQL:Область видимости запроса SELECT name, salary, dept_id ...
:
Ответ:
 (1) A 
 (2) B 
 (3) C 
 (4) D 
Номер 2
Запрос SQL:Область видимости запроса SELECT last_name FROM employee ...
:
Ответ:
 (1) A 
 (2) B 
 (3) C 
 (4) D 
Номер 3
Запрос SQL:Область видимости запроса SELECT AVG(salary) FROM employee ...
:
Ответ:
 (1) A 
 (2) B 
 (3) C 
 (4) D 
Упражнение 12:
Номер 1
Дана таблица:
ANIMALSID | FAMILY | ANIMAL | COLOR |
---|
1 | mammal | dog | brown |
2 | mammal | zebra | black,white |
3 | fish | shark | gray |
4 | bird | gull | white |
5 | bird | pelican | white |
6 | fish | trout | gray |
Запрос SQL:
SELECT a1.animal, a2.animal, a1.color
FROM animals a1, animals a2
WHERE a1.color = a2.color AND a1.animal <> a2.animal;Выборки, эквивалентные результату запроса, возвращают команды:
Ответ:
 (1) SELECT a1.animal, a2.animal, a1.color
FROM animals a1 NATURAL INNER JOIN animals a2
WHERE a1.animal <> a2.animal;  
 (2) SELECT a1.animal, a2.animal, a1.color
FROM animals a1 INNER JOIN animals a2 ON a1.color = a2.color
WHERE a1.animal <> a2.animal;  
 (3) SELECT a1.animal, a2.animal, a1.color
FROM animals a1 FULL JOIN animals a2 USING (color)
WHERE a1.animal <> a2.animal;  
 (4) SELECT a1.animal, a2.animal, a1.color
FROM animals a1 CROSS JOIN animals a2
WHERE a1.animal <> a2.animal;  
Номер 2
Даны таблицы:
ANIMALSFAMILY | NAME |
---|
mammal | dog |
mammal | lion |
fish | guppy |
bird | eagle |
fish | bass |
bird | pelican |
insect | beetle |
BLOOD_TYPESFAMILY | BLOOD_TYPE |
---|
mammal | warm_blooded |
fish | cold_blooded |
bird | cold_blooded |
Запрос SQL:
SELECT a.family, a.name
FROM animals a, blood_types t
WHERE a.family(+) = t.family AND a.family NOT IN ('fish', 'bird');Выборки, эквивалентные результату запроса, возвращают команды:
Ответ:
 (1) SELECT a.family, a.name
FROM animals a LEFT OUTER JOIN blood_types t ON (a.family = t.family)
WHERE a.family NOT IN ('fish', 'bird'); 
 (2) SELECT a.family, a.name
FROM animals a RIGHT OUTER JOIN blood_types t ON (a.family = t.family)
WHERE a.family NOT IN ('fish', 'bird'); 
 (3) SELECT a.family, a.name
FROM animals a FULL OUTER JOIN blood_types t ON (a.family = t.family)
WHERE a.family NOT IN ('fish', 'bird'); 
 (4) SELECT family, name
FROM animals NATURAL LEFT OUTER JOIN blood_types
WHERE family NOT IN ('fish', 'bird'); 
Номер 3
Даны таблицы:
ANIMALSFAMILY | NAME |
---|
mammal | dog |
mammal | lion |
fish | guppy |
bird | eagle |
fish | bass |
bird | pelican |
insect | beetle |
BLOOD_TYPESFAMILY | BLOOD_TYPE |
---|
mammal | warm_blooded |
fish | cold_blooded |
bird | cold_blooded |
Запрос SQL:
SELECT a.family, a.name
FROM animals a, blood_types t
WHERE a.family = t.family AND a.family NOT IN ('fish', 'bird');Выборки, эквивалентные результату запроса, возвращают команды:
Ответ:
 (1) SELECT family, name
FROM animals CROSS JOIN blood_types
WHERE family NOT IN ('fish', 'bird'); 
 (2) SELECT family, name
FROM animals
WHERE family NOT IN ('fish', 'bird') AND family IN (SELECT family
FROM blood_types); 
 (3) SELECT family, name
FROM animals
WHERE family NOT IN ('fish', 'bird') AND EXISTS (SELECT family
FROM blood_types
WHERE family = animals.family); 
 (4) SELECT family, name
FROM animals NATURAL INNER JOIN blood_types
WHERE family NOT IN ('fish', 'bird');