|
Основы SQL. Основы sql основы sql план курса План курса
WHERE имя_поля1 IN (SELECT имя_поля2 FROM имя_табл2 WHERE условие) Коррелируемым подзапросом называется подзапрос, который содержит ссылку на столбцы таблицы внешнего запроса. WHERE имя_поля1 in (SELECT имя_поля2 FROM имя_табл2 WHERE имя_табл1.поле= имя_табл2.поле) select s.aircraft_code, seat_no, fare_conditions from seats s where s.aircraft_code in (select a.aircraft_code from aircrafts_data a where upper(a.model) like 'BO%') order by s.aircraft_code, seat_no, fare_conditions ! Перепишите данный запрос используя простое соединение таблиц. select a.airport_code as code, a.airport_name, a.city from airports_data a where a.city in (select aa.city from airports_data aa group by aa.city having count(*) > 1 order by a.city, a.airport_code; select * from lanit.flights t where trunc(t.date_departure)=to_date('01.09.2017','dd.mm.yyyy') and (select a.range from aircrafts_data a where a.aircraft_code=t.aircraft_code)>8000 order by t.date_departure В языке SQL предикат с квантором существования представляется выражением вида: [NOT] EXISTS (SELECT…FROM…WHERE…), которое следует за фразой WHERE. Такое выражение считается истинным, если подзапрос возвращает непустое множество (существует хотя бы 1 строка, которую возвращает подзапрос). На практике подзапрос всегда будет коррелированным. select a.* from aircrafts_data a where exists (select 1 from flights f where f.aircraft_code=a.aircraft_code and trunc(f.date_departure)='01.09.2017') ! Показать данные по самолетам, у которых есть рейсы 01.09.2017 и в которых больше 150 мест Синтаксис многократного сравнения: проверяемое_выражение = | <> | < | <= | > | >= ANY | ALL вложенный_запрос from ticket_flights tf and tf.amount > all (select t_tf.amount from ticket_flights t_tf from ticket_flights tf and tf.amount = any (select t_tf.amount from ticket_flights t_tf Реляционные операторы Реляционные операторы Теоретико-множественные операторы: - Декартово произведение Cross join
- Объединение Union
- Пересечение Intersect
- Разность Minus
Специальные реляционные операторы: - Выборка where
- Соединение inner join, outer join
- Существование exists
Оператор CASE Оператор CASE Оператор CASE имеет функциональность IF-THEN-ELSE и используется в SQL предложении CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 … WHEN condition_n THEN result_n ELSE result END select t.ticket_no , t.passenger_name , case when t.email is not null then t.email else t.phone end contact from bookings b DECODE( выражение, значение 1, результат 1 [, значение N , результат N]… [, иначе результат] ) select decode(upper(city) , 'MOSCOW', city||' '||airport_name , 'NALCHIK', city , airport_name ) name , city , airport_name from lanit.airports_data; Функция NVL. позволяет заменить значение, когда встречается Null значение. NVL(строка, значение) select t.ticket_no , t.passenger_name , nvl(t.email, t.phone) end contact from bookings b Функция LISTAGG Функция LISTAGG Объединяет значения «выражение» для каждой группы LISTAGG (выражение[, ‘разделитель’]) WITHIN GROUP (order_by колонка1..) Вывести данные о посадочных местах в самолетах select s2.aircraft_code , listagg (s2.fare_conditions ||'('||s2.num||')', ', ') within group (order by fare_conditions) fare_conditions from ( select s.aircraft_code, s.fare_conditions , count(*) as num from seats s group by s.aircraft_code, s.fare_conditions |
|
|