Database
 sql >> база данни >  >> RDS >> Database

SQL освен

В SQL вероятно използваме клаузата JOIN, за да получим комбинирания резултат от една или повече от една таблица. Но понякога искаме резултат, който съдържа данни от една таблица, а записът не трябва да е наличен в другата таблица. В този случай SQL има концептуалното име SQL Except.

За да пречистим данните от повече от една таблица, използвахме SQL освен. SQL Except е същият като оператора минус, който правим в математиката. SQL Except първо обединява двата или повече от два оператора SELECT в заявката и връща данните от първия оператор SELECT. Не сме налични в друг резултат от израза SELECT.

SQL ОСВЕН правила

Трябва да разберем всички правила и разпоредби, преди да използваме заявката ОСВЕН в SQL:

  • Броят и редът на колоните в дадената таблица трябва да са еднакви в цялата заявка SELECT.
  • Типът данни на колоната трябва да е същият или съвместим.

Синтаксисът за SQL ОСВЕН

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Table1 и Table2 ще бъдат имената на таблиците.

Пример:

Да приемем, че имаме две таблици с еднакъв брой колони и ред на колоните.

  • Таблица 1:T1, Брой колони:3, Данни:A, B, C, D
  • Таблица 2:T2, Брой колони:3, Данни:B, D, F, G

Всеки път, когато изпълним заявката EXCEPT върху тези две таблици, ще получим A и C, защото тези две данни не присъстват в таблица T2, B и D са общи и в двете таблици, които се отхвърлят.

Нека разберем концепцията на SQL ОСВЕН с примери. Разгледайте следните таблици заедно с дадените записи.

Таблица 1:Изп.

ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ FIRST_NAME LAST_NAME ЗАПЛАТА ГРАД ОТДЕЛ MANAGERID
1001 VAIBHAVI МИШРА 65 000 ПУНА ORACLE 1
1002 VAIBHAV ШАРМА 60 000 NOIDA ORACLE 1
1003 НИХИЛ VANI 50 000 ДЖАЙПУР FMW 2
2001 PRACHI ШАРМА 55500 ЧАНДИГАР ORACLE 1
2002 BHAVESH ДЖЕЙН 65500 ПУНА FMW 2
2003 РУЧИКА ДЖЕЙН 50 000 МУМБАЙ ТЕСТВАНЕ 4
3001 PRANOTI ШЕНДЕ 55500 ПУНА JAVA 3
3002 ANUJA КЪДЕ 50500 ДЖАЙПУР FMW 2
3003 DEEPAM ДЖАУХАРИ 58500 МУМБАЙ JAVA 3
4001 РАДЖЕШ GOUD 60500 МУМБАЙ ТЕСТВАНЕ 4

Таблица2:Служител

ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ FIRST_NAME LAST_NAME ЗАПЛАТА ГРАД ОТДЕЛ MANAGERID
1001 Вайбхав Шарма 65 000 ПУНА ORACLE 1
1002 Нихил Вани 60 000 NOIDA ORACLE 1
1003 Вайбхави Мишра 50 000 ДЖАЙПУР FMW 2
2001 Ручика Джайн 55500 ЧАНДИГАР ORACLE 1
2002 Прачи Шарма 65500 ПУНА FMW 2
2003 Бхавеш Джайн 50 000 МУМБАЙ ТЕСТВАНЕ 4
3001 Дийпам Джаухари 55500 ПУНА JAVA 3
3002 ANUJA КЪДЕ 50500 ДЖАЙПУР FMW 2
3003 Праноти Шенде 58500 МУМБАЙ JAVA 3
4001 РАДЖЕШ GOUD 60500 МУМБАЙ ТЕСТВАНЕ 4

Таблица3:Мениджър

Managerid име_на_мениджър мениджърски отдел
1 Снехдип Каур ORACLE
2 Кирти Киртане FMW
3 Абхишек Маниш JAVA
4 Анупам Мишра ТЕСТВАНЕ

Таблица4:Мениджър1

Managerid име_на_мениджър мениджърски отдел
1 Ишита Агравал ORACLE
2 Кирти Киртане FMW
3 Абхишек Маниш JAVA
4 Пол Оукип ТЕСТВАНЕ

Пример 1: Да предположим, че искаме да обединим горните две таблици Emp и Employee в нашата заявка SELECT с помощта на оператор EXCEPT.

SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID;

Използваме клаузата INNER JOIN между таблицата Emp и Employee, където показваме идентификатор на служител, име, град, отдел, идентификатор на мениджър и име на мениджър с помощта на оператор EXCEPT. Горната заявка ще покаже само тези уникални стойности между двете таблици.

Горната заявка дава следния изход:

Ако наблюдаваме данните от таблиците, има две общи данни между двете таблици Emp table и Employee table, т.е. идентификатор на служител 3002 и 4001. Показват се подробности за идентификатора на служителите 4001 с изключение на 3002. Тъй като идентификаторът на служител 3002 името на мениджъра е едно и също и в двете таблици Мениджър и Мениджър1, но идентификатор на служител 4001 Имената на мениджъра са различни и в двете таблици, показват се подробности за идентификатор на служител 4002.

Пример 2: Да предположим, че искаме да обединим горните две таблици Emp и Employee в нашата заявка SELECT с помощта на оператор EXCEPT и да сортираме резултатния набор по тяхната заплата в низходящ ред. Ще използваме клаузата ORDER BY, за да сортираме резултатния набор в SQL заявката.

SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID ORDER BY SALARY;

Горната заявка показва следния изход:

Пример 3: Да предположим, че искаме да се присъединим към горните две таблици Emp и Employee в нашата заявка SELECT, използвайки оператор EXCEPT, където заплатата на служителите, по-голяма от 55 000 от таблицата Emp и града на служителя, включва „Pune“, „Mumbai“, „Jaipur“ от Employee table.

SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');   

Горната заявка за първи оператор SELECT извлича всички подробности за тези служители, чиято заплата е по-голяма от 55 000 от таблицата Emp. Вторият оператор SELECT извлича всички подробности за тези служители, чиито градове включват Пуна, Мумбай, Джайпур от таблицата на служителите. Тогава между таблицата Emp и таблицата Employee ще се изпълни оператор EXCEPT.

Това дава следния изход:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверите дали T-SQL UDF е свързан със схема (дори когато е криптиран)

  2. SQL SELECT INTO Инструкция

  3. SQL SELECT AND оператор

  4. Ограничаване на гъвкавостта на данните в NoSQL база данни

  5. 4 начина да получите дефиницията на съхранена процедура с помощта на Transact-SQL