Примеры запросов к базе данных Приведем примеры некоторых простых и многотабличных запросов к базе данных. 1). Данный запрос извлекает все данные из таблицы TARIFF, за исключением идентификатора. Реляционная алгебра: ∏TITLE, PRICE_PER_CONVERSATION_MINUTE, SMS_PRICE (TARIFF) Реляционное исчисление на кортежах: {T.TITLE, T.PRICE_PER_CONFERSATION_MINUTES, T.SMS_PRICE | $(T)(TARIFF(T))} Запрос на язык SQL: SELECT TITLE, PRICE_PER_CONVERSATION_MINUTE, SMS_PRICE FROM TARIFF 2). Данный запрос выводит имена всех клиентов Реляционная алгебра: ∏NAME(CLIENT_INFO) Реляционное исчисление на кортежах: {C.NAME | $(C)(CLIENT_INFO(C))} Запрос на язык SQL: SELECT NAME FROM CLIENT_INFO 3) Данный запрос выводит все зарегистрированные номера телефонов Реляционная алгебра: ∏PHONE_NUMBER (TELEPHONES) Реляционное исчисление на кортежах: {T.PHONE_NUMBER | $(T)(TELEPHONES(T))} Запрос на язык SQL: SELECT PHONE_NUMBER FROM TELEPHONES 4) Данный запрос показывает всех клиентов и их телефонные номера. Реляционная алгебра: ∏PHONE_NUMBER, NAME (TELEPHONES×CLIENT_INFO) Реляционное исчисление на кортежах: {C.NAME,T.PHONE_NUMBER|$(T)(TELEPHINES(T))^$(C)(CLIENT_INFO(C))^C.PASSPORT_NUMBER=T.PASSPORT_NUMBER} Запрос на язык SQL: SELECT T.PHONE_NUMBER, C.NAME FROM TELEPHONES T, CLIENT_INFO C WHERE T.PASSPORT_NUMBER = C.PASSPORT_NUMBER 5) Данный запрос показывает все подключённые услуги у всех клиентов. Реляционная алгебра: ∏TITLE,PHONE_NUMBER(TELEPHONES×(SERVICE×TELEPHONES_SERVICES)) Реляционное исчисление на кортежах: {S.TITLE,T.PHONE_NUMBER|$(S)(SERVICE(S))^$(TS)(TELEPHONE_SERVICES(TS))^ $(T)(TELEPHONES(T))^T.ID_NUM=TS.ID_NUM^TS.ID_SERVICE=S.ID_SERVICE } Запрос на язык SQL SELECT S.TITLE, T.PHONE_NUMBER FROM SERVICE S, TELEPHONES T, TELEPHONES_SERVICES TS WHERE (T.ID_NUM = TS.ID_NUM) AND (TS.ID_SERVICE = S.ID_SERVICE) 6) Данный запрос выводит звонки всех абонентов с ценой потраченной на разговор, отсортированных по дате. Реляционная алгебра: ∏DATE_OF_CALL, PHONE_NUMBER, CALL_PRICE (TELEPHONES × DETAILED_CALLS) Реляционное исчисление на кортежах: {D.DATE_OF_CALL, T.PHONE_NUMVER, D.CALL_PRICE |$(D)(DETAILED_CALLS(D))^$(T)(TELEPHONES (T))^T.ID_NUM=D.ID_NUM} Запрос на язык SQL SELECT D.DATE_OF_CALL, T.PHONE_NUMBER, D.CALL_PRICE FROM DETAILED_CALLS D, TELEPHONES T WHERE T.ID_NUM = D.ID_NUM ORDER BY D.DATE_OF_CALL 7) Данный запрос выводит все операции пополнения баланса, после 01.05.2015 года. Реляционная алгебра: ∏REGARGE_SUM,DATE_RECHARGE(σDATE_RECHARGE>01.05.2015(RECHARGE_BALANCE)) Реляционное исчисление на кортежах: {R.RECHARGE_SUM,R.DATE_RECHARGE|$(R)RECHARGE_BALANCE(R) ^ R.DATE_RECHARGE >01.05.215) } Запрос на язык SQL SELECT RECHARGE_SUM, DATE_RECHARGE FROM RECHARGE_BALANCE WHERE (DATE_RECHARGE > '01.05.2015') 8) Данный запрос выводит ФИО и адрес прописки всех пользователей, обслуживание которых отключено. Реляционная алгебра: ∏NAME, ADRESS(σIS_ACTIVE == true (CLIENT_INFO)) Реляционное исчисление на кортежах: {C.NAME, C.ADRESS |$(C)CLIENT_INFO(C) ^|$(T)TELEPHONES(T) ^ T.IS_ACTIVE =True) } Запрос на язык SQL SELECT C.NAME, C.ADDRESS FROM CLIENT_INFO C, TELEPHONES T WHERE (T.PASSPORT_NUMBER = C.PASSPORT_NUMBER) and ( T.IS_ACTIVE = '0') 9) Данный запрос выводит название самой дешёвой услуги Реляционная алгебра: πtitle(σmin(MONTHLY_PRICE)(SERVICE)) Реляционное исчисление на кортежах: {S.TITLE |$(S)SERVICE(S) ^ MIN(S.MONTHLY_PRICE) } Запрос на язык SQL SELECT TITLE FROM SERVICE WHERE MONTHLY_PRICE = ( SELECT MIN(MONTHLY_PRICE) FROM SERVICE ) 10) Данный запрос выводит ID и номер телефона всех абонентов, чьи услуги подключены на неограниченное время. Реляционная алгебра: ∏ ID_NUM, PHONE_NUMBER (σDATE_DISCTONNECTION <> NULL (TELEPHONES_SERVICES) ×TELEPHONES) Реляционное исчисление на кортежах: {T.ID_NUM, T.PHONE_NUMBER |$(T)TELEPHONES(T) ^ $(TS)(TELEPHONES_SERVICES(TS)) ^ (TS.DATE_DISCONNECTION <> NULL)} Запрос на язык SQL SELECT ID_NUM, PHONE_NUMBER FROM TELEPHONES WHERE ID_NUM IN (SELECT ID_NUM FROM TELEPHONES_SERVICES WHERE DATE_DISCONNECTION IS NOT NULL) 11) Данный запрос выводит историю звонков всех абонентов Реляционная алгебра: ∏ID_DETAIL, CALL_NUMBER, PHONE_NUMBER (TELEPHONES×DETAILED_CALLS) Реляционное исчисление на кортежах: {D.ID_DETAILED, D.CALL_NUMBER, T.PHONE_NUMBER | $(T)(TELEPHINES(T))^ $(D)(DETAILED_CALLS(D))^T.ID_NUM = D.ID_NUM } Запрос на язык SQL SELECT D.ID_DETAIL, D.CALL_NUMBER, T.PHONE_NUMBER FROM TELEPHONES T, DETAILED_CALLS D WHERE T.ID_NUM = D.ID_NUM 12) Данный запрос выводит название тарифа абонента с паспортным номером 5408203000 Реляционная алгебра ∏title(∏((σPASSPORT_NUMBER=5408203000(CLIENT_INFO)×TELEPHONES)×DETAILED_CALLS) Реляционное исчисление на кортежах: {T.TITLE|$(T)(TARIFF(T))^$(TEL)(TELEPHONES(TEL)^$(CI)(CLIENT_INFO(CI) ^ CI.PASSPORT_NUMBER = TEL.PASSPORT_NUM BER ^ CI.PASSPORT_NUMBER = 5408203000} Запрос на язык SQL: SELECT T.TITLE FROM TARIFF T WHERE ID_TARIFF IN (SELECT TEL.ID_TARIFF FROM TELEPHONES TEL, CLIENT_INFO CI WHERE (CI.PASSPORT_NUMBER = 5408203000) AND (CI.PASSPORT_NUMBER = TEL.PASSPORT_NUMBER)) 13) Данный запрос выводит среднюю цену одного звонка среди клиентов женского пола Реляционная алгебра AVG(∏CALL_PRICE(∏(σSEX= ‘Ж’(CLIENT_INFO) × TELEPHONES) ×DETAILED_CALLS) Реляционное исчисление на кортежах: {AVG(D.CALL_PRICE)|$(D)(DETAILED_CALLS(D))^$(T)(TELEPHONES(T)^$(CI)(CLIENT_INFO(CI)^CI.PASSPORT_NUMBER=TEL.PASSPORT_NUM BER ^ CI.SEX = “Ж”} Запрос на язык SQL: SELECT AVG(CALL_PRICE) AS AVERAGE_PRICE FROM DETAILED_CALLS WHERE ID_NUM in (SELECT T.ID_NUM FROM TELEPHONES T, CLIENT_INFO C WHERE (C.SEX = 'Ж') AND (C.PASSPORT_NUMBER = T.PASSPORT_NUMBER)) 14) Данный запрос выводит номера всех клиентов, которые пополняли баланс после '18.04.2015' Реляционная алгебра ∏PHONE_NUMBER(σDATE_RECHARGE>’18.04.2015’(RECHARGE_BALANCE)×TELEPHONES) Реляционное исчисление на кортежах: {T.PHONE_NUMBER|$(T)(TELEPHONES(T))^$(R)(RECHARGE_BALANCE(R)^CI.PASSPORT_NUMBER=TEL.PASSPORT_NUMBER^R.DATE_RECHARGE > “'18.04.2015'”} Запрос на язык SQL: SELECT T.PHONE_NUMBER FROM TELEPHONES T WHERE ID_NUM in ( SELECT ID_NUM FROM RECHARGE_BALANCE WHERE DATE_RECHARGE > '18.04.2015' ) 15) Данный запрос выводит номера телефонов и имена всех абонентов женского пола Реляционная алгебра ∏PHONE_NUMBER,NAME (σSEX=”Ж”(TELEPHONES)×CLIENT_INFO) Реляционное исчисление на кортежах: {T.PHONE_NUMBER,C.NAME|$(T)(TELEPHONES(T))^$(C)(CLIENT_INFO(C)^C.PASSPORT_NUMBER=T.PASSPORT_NUMBER^C.SEX=’Ж} Запрос на язык SQL: SELECT C.NAME, T.PHONE_NUMBER FROM TELEPHONES T, CLIENT_INFO C WHERE (T.PASSPORT_NUMBER = C.PASSPORT_NUMBER) AND (C.SEX = 'Ж') 16) Данный запрос выводит дату отключения, номера телефонов абонентов и название не бесплатных услуг подключённых у каждого из них. Реляционная алгебра ∏TITLE,PHONE_NUBMER,DATE_DISCONNECTION(σMONTHLY_PRICE>0(SERVICE)×TELEPHONES×TELEPHONE_SERVICES) Реляционное исчисление на кортежах: {T.PHONE_NUMBER,C.NAME|$(T)(TELEPHONES(T))^$(C)(CLIENT_INFO(C)^C.PASSPORT_NUMBER=T.PASSPORT_NUMBER^C.SEX=’Ж’} Запрос на язык SQL: SELECT S.TITLE,T.PHONE_NUMBER, TS.DATE_DISCONNECTION FROM SERVICE S, TELEPHONES T, TELEPHONES_SERVICES TS WHERE (S.ID_SERVICE = TS.ID_SERVICE) and ( T.ID_NUM = TS.ID_NUM) and (MONTHLY_PRICE > 0) 17) Данный запрос выводит адреса всех активных пользователей Реляционная алгебра ∏ADRESS,PHONE_NUMBER(σIS_ACTIVE=1(TELEPHONES)×CLIENT_INFO) Реляционное исчисление на кортежах: {T.PHONE_NUMBER,C.ADRESS|$(T)(TELEPHONES(T))^$(C)(CLIENT_INFO(C)^C.PASSPORT_NUMBER=T.PASSPORT_NUMBER^C.IS_ACTIVE=’1’} Запрос на язык SQL: SELECT C.ADDRESS, T.PHONE_NUMBER FROM CLIENT_INFO C, TELEPHONES T WHERE (C.PASSPORT_NUMBER = T.PASSPORT_NUMBER) AND (T.IS_ACTIVE = 1) 18) Данный запрос выводит названия тарифов и названия всех подключённый услуг у каждого абонента. Реляционная алгебра ∏TE.PHONE_NUMBER,TA.TITLE,S.TITLE(TELEPHONES×TARIFF,SERVICE,TELEPHONES_SERVICES) Реляционное исчисление на кортежах: {TE.PHONE_NUMBER,TA.TITLE,S.TITLE|$(TE)(TELEPHONES(TE))^$(TA)(TARIFF(TA)^$(S)(SERVICE(S)^$(TS)(TELEPHONES_SERVICES(TS)^TE.ID_TARIFF=TA.ID_TARIFF^TE.ID_NUM=TS.ID_NUM^S.ID_NUM=TS.ID_SERVICE} Запрос на языке SQL: SELECT TE.PHONE_NUMBER, TA.TITLE, S.TITLE FROM TELEPHONES TE, TARIFF TA, SERVICE S, TELEPHONES_SERVICES TS WHERE (TE.ID_TARIFF = TA.ID_TARIFF) AND (TE.ID_NUM = TS.ID_NUM) AND (S.ID_SERVICE = TS.ID_SERVICE) 19) Данный запрос выводит номера телефонов и услуги подключенные к ним, дата подключения которых находится между 1.06.2015 и 1.07.2015 Реляционная алгебра ∏TITLE,PHONE_NUMBER(σbetween1.06.2015and1.07.2015(DATE_CONNECTION)×TELEPHONES×TELEPHONES_SERVICES) Реляционное исчисление на кортежах: {S.TITLE,T.PHONE_NUMBER|$(T)(TELEPHONES(T)^$(S)(SERVICE(S)^$(TS)(TELEPHONES_SERVICES(TS)^T.ID_NUM=TS.ID_NUM^S.ID_SERVICE=TS.ID_SERVICE^TS.DATE_CONNECTION >’1.06.2015’^TS.DATE_CONNECTION<’1.07.2015’} Запрос на языке SQL: SELECT S.TITLE, T.PHONE_NUMBER FROM SERVICE S, TELEPHONES T, TELEPHONES_SERVICES TS WHERE (S.ID_SERVICE = TS.ID_SERVICE) AND (T.ID_NUM = TS.ID_NUM) AND (TS.DATE_CONNECTION BETWEEN '1.06.2015' AND '1.07.2015') 20) Данный запрос находит когда последний раз была подключена каждая из услуг Реляционная алгебра ∏MAX(DATE_CONNECTION),TELEPHONE_SERVICES(TELEPHONE_SERVICES) Реляционное исчисление на кортежах: {MAX(T.DATE_CONNECTION),ID_TELEPHONE_SERVICES|$(T)(TELEPHONES(T)} Запрос на языке SQL: SELECT MAX(DATE_CONNECTION), ID_TELEPHONE_SERVICES FROM TELEPHONE_SERVICES GROUP BY ID_TELEPHONE_SERVICES |