18
Emrah UYSAL www.emrahuysal.com 1 ORACLE DERS 3 SUBQUERIES(ALT SORGULAR) Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur. Alt sorgular bize şu durumlarda lazım olur,örneğin x isimli bir personelin maaşından daha yüksek maaşlı bir personelin bilgini bulmada,ortalama değerin altında yada üstündeki değerleri bulmada…. Syntax: SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); Alt sorgu mantığında ilk önce alt sorgu çalışır daha sonra üst sorgu çalışır. SQL > SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = ’Abel’); Yukarıdaki sorgu Abel’in maşından daha yüksek maaşlı personelin soyadlarını listelemektedir. Single Row Subquery Bu tür subquerylerde alt sorgudan tek kayıt döner ve karşılaştırma olarak aşağıdaki operatörler kullanılır.

Emrah UYSAL 1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

  • Upload
    vutram

  • View
    218

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 1

ORACLE DERS 3 SUBQUERIES(ALT SORGULAR) Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur. Alt sorgular bize şu durumlarda lazım olur,örneğin x isimli bir personelin maaşından daha yüksek maaşlı bir personelin bilgini bulmada,ortalama değerin altında yada üstündeki değerleri bulmada…. Syntax: SELECT select_list FROM table WHERE expr operator

(SELECT select_list FROM table);

Alt sorgu mantığında ilk önce alt sorgu çalışır daha sonra üst sorgu çalışır. SQL > SELECT last_name FROM employees WHERE salary >

(SELECT salary FROM employees WHERE last_name = ’Abel’);

Yukarıdaki sorgu Abel’in maşından daha yüksek maaşlı personelin soyadlarını listelemektedir.

Single Row Subquery Bu tür subquerylerde alt sorgudan tek kayıt döner ve karşılaştırma olarak aşağıdaki operatörler kullanılır.

Page 2: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 2

SQL > SELECT last_name, job_id FROM employees WHERE job_id =

(SELECT job_id FROM employees WHERE employee_id = 141);

SQL > SELECT last_name, job_id, salary FROM employees WHERE job_id =

(SELECT job_id FROM employees WHERE employee_id = 141)

AND salary > (SELECT salary FROM employees WHERE employee_id = 143);

SQL > SELECT last_name, job_id, salary FROM employees WHERE salary =

(SELECT MIN(salary) FROM employees);

SQL > SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) >

(SELECT MIN(salary) FROM employees WHERE department_id = 50);

Page 3: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 3

SQL > SELECT employee_id, last_name FROM employees WHERE salary =

(SELECT MIN(salary) FROM employees GROUP BY department_id);

ERROR at line 4: ORA-01427: single-row subquery returns more than one row SQL > SELECT last_name, job_id FROM employees WHERE job_id =

(SELECT job_id FROM employees WHERE last_name = ’Haas’);

no rows selected MULTIPLE ROW SUBQUERY Bu tür sorgular ise subqueryden dönen birden fazla kaydın üst sorgu atarfından yorumlanması ile oluşur.Bu tür sorgularda aşağıdaki operatörler kullanılır.

SQL > SELECT last_name, salary, department_id FROM employees WHERE salary IN

(SELECT MIN(salary) FROM employees GROUP BY department_id);

Page 4: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 4

Aşağıdaki sorgu aslında mantık olarak yukarıdaki sorgu ile aynı işlevi görür,ama yukarıdaki sorguyu kullanmak daha akıllıcadır. SQL > SELECT last_name, salary, department_id FROM employees WHERE salary IN (2500, 4200, 4400, 6000, 7000, 8300, 8600, 17000); ANY OPERATÖRÜ SQL > SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ANY

(SELECT salary FROM employees WHERE job_id = ’IT_PROG’) AND job_id <> ’IT_PROG’;

<ANY’nin anlamı maximumdan daha düşük >ANY’nin anlamı minimumdan daha büyük. ALL OPERATÖRÜ SQL > SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ALL

(SELECT salary FROM employees WHERE job_id = ’IT_PROG’) AND job_id <> ’IT_PROG’;

>ALL’nin anlamı maximumdan daha büyük <ALL’nin anlamı minimumdan daha düşük.

Page 5: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 5

ALT SORGULARDAKİ NULL OPERATÖRÜ Eğer alt sorgulardan null dönüyorsa üst tarafı negatif olarak etkileyeceği için bazen olumsuz sonuçlar alabilemkteyiz. SQL > SELECT emp.last_name FROM employees emp WHERE emp.employee_id NOT IN

(SELECT mgr.manager_id FROM employees mgr);

no rows selected Bu sorunu aşmak istiyorsak; SQL > SELECT last_name FROM employees WHERE employee_id NOT IN

(SELECT manager_id FROM employees WHERE manager_id IS NOT NULL);

TABLO MANİPLASYONLARI İNSERT OPERATÖRÜ İnsert operatörü genellikle tabloya yeni kayıt eklemek için kullanılmaktadır. SYNTAX: INSERT INTO table [(column [, column...])] VALUES (value [, value...]);

Page 6: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 6

SQL > INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, ’Public Relations’, 100, 1700); 1 row created. SQL > INSERT INTO departments (department_id, department_name ) VALUES (30, ’Purchasing’); 1 row created. SQL > INSERT INTO departments VALUES (100, ’Finance’, NULL, NULL); 1 row created. Yukarıdaki örnekte görüeleceği gibi eğer tablonun bütün alanları için kayıt eklenecekse tablo için kolon isimlerini yazmaya gerek yoktur. SQL > INSERT INTO employees (employee_id,

first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)

VALUES (113, ’Louis’, ’Popp’, ’LPOPP’, ’515.124.4567’, SYSDATE, ’AC_ACCOUNT’, 6900, NULL, 205, 100);

1 row created. SQL > SELECT employee_id, last_name, job_id, hire_date, commission_pct FROM employees WHERE employee_id = 113;

SQL > INSERT INTO employees VALUES (114,

’Den’, ’Raphealy’, ’DRAPHEAL’, ’515.127.4561’, TO_DATE(’FEB 3, 1999’, ’MON DD, YYYY’), ’AC_ACCOUNT’, 11000, NULL, 100, 30);

1 row created.

Page 7: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 7

BAŞKA BİR TABLODAN VERİ ÇEKMEK Eğer başka bir tablodan veri almak istiyorsak aşağıdaki gibi sql cümlelerini yazmak yeterlidir. SQL > INSERT INTO sales_reps(id, name, salary, commission_pct)

SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE ’%REP%’;

4 rows created. UPDATE OPERATÖRÜ Update operatörü bir tablodaki kayıtları güncellemek yani yenileri ile değiştirmek için kullanılır. SYNTAX: UPDATE table SET column = value [, column = value, ...] [WHERE condition]; SQL > UPDATE employees SET department_id = 70 WHERE employee_id = 113; 1 row updated. SQL > UPDATE copy_emp SET department_id = 110; 22 rows updated. SQL > UPDATE employees SET job_id = (SELECT job_id

FROM employees WHERE employee_id = 205),

salary = (SELECT salary FROM employees WHERE employee_id = 205) WHERE employee_id = 114;

1 row updated. SQL > UPDATE copy_emp SET department_id = (SELECT department_id

FROM employees WHERE employee_id = 100) WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 200);

1 row updated.

Page 8: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 8

Bazen iki tablo arasında constrant ilişkisi varsa sistem bu durumlara kızabilir.Bu durumlara dikkat etmek gereklidir. SQL > UPDATE employees SET department_id = 55 WHERE department_id = 110; UPDATE employees * ERROR at line 1: ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found DELETE OPERATÖRÜ Delete operatörü ise tablodan kayıt silmek için kullanılmaktadır. SYNTAX: DELETE [FROM] table [WHERE condition]; SQL > DELETE FROM departments WHERE department_name = ’Finance’; 1 row deleted. SQL > DELETE FROM copy_emp; 22 rows deleted. SQL > DELETE FROM departments WHERE department_id IN (30, 40); 2 rows deleted. SQL > DELETE FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE ’%Public%’); 1 row deleted. Update cümleciğinde olduğu gibi delete cümleciğinde de constraintler sorunlu olabilir. SQL > DELETE FROM departments WHERE department_id = 60; DELETE FROM departments * ERROR at line 1: ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found

Page 9: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 9

INSERT CÜMLECĞİNDE SUBQUERY KULLANIMI SQL > INSERT INTO

(SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees WHERE department_id = 50)

VALUES (99999, ’Taylor’, ’DTAYLOR’, TO_DATE(’07-JUN-99’, ’DD-MON-RR’), ’ST_CLERK’, 5000, 50);

1 row created. SQL > Select employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees WHERE department_id = 50;

CHECK OPTION SQL > INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary FROM employees WHERE department_id = 50 WITH CHECK OPTION) VALUES (99998, ’Smith’, ’JSMITH’, TO_DATE(’07-JUN-99’, ’DD-MON-RR’), ’ST_CLERK’, 5000); INSERT INTO * ERROR at line 1: ORA-01402: view WITH CHECK OPTION where-clause violation Yukarıdaki sorguda dikkat ederseniz department_id = 50 ve with check option kullanıldığı için subqery dönen sonuçlar vardır fakat select listesinde department_id yoktur bu durumda department_id değeri Null oalrak dönebilir.Bu durumu engellemek için kullanılır.Hemde department_id değeri olsa bile değeri muhakka 50 olmalıdır.

Page 10: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 10

DEFAULT OPERATÖRÜ Tabloyu yaratırken bazı alanlar için default bir değer verilir.Tabloya her kayıt girildiğinde bu değer kullanılsın istenebilir. Böyle bir durumu kullanmak istiyorsak; SQL > INSERT INTO departments (department_id, department_name, manager_id) VALUES (300, ’Engineering’, DEFAULT); SQL > UPDATE departments SET manager_id = DEFAULT WHERE department_id = 10; MERGE OPERATÖRÜ Merge operatörüde kullanışlı operatörlerden biridir.Bir tablo update’inde eklenecek kayıt tabloda varsa update eder,yoksa insert eder.Yani update ve insert işlemini bir arada yapar. SYNTAX: MERGE INTO table_name table_alias USING (table|view|sub_query) alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = col_val1, col2 = col2_val WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values); SQL > MERGE INTO copy_emp c

USING employees e ON (c.employee_id = e.employee_id)

WHEN MATCHED THEN UPDATE SET

c.first_name = e.first_name, c.last_name = e.last_name, c.email = e.email, c.phone_number = e.phone_number, c.hire_date = e.hire_date, c.job_id = e.job_id, c.salary = e.salary, c.commission_pct = e.commission_pct, c.manager_id = e.manager_id, c.department_id = e.department_id

WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name,

e.email, e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id);

Page 11: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 11

SQL > SELECT * FROM COPY_EMP; no rows selected SQL > MERGE INTO copy_emp c

USING employees e ON (c.employee_id = e.employee_id)

WHEN MATCHED THEN UPDATE SET ...

WHEN NOT MATCHED THEN INSERT VALUES...;

SQL > SELECT * FROM COPY_EMP; 20 rows selected. DATABASE TRANSACTIONS Database transactionsları commi yada rollback olarak adlandırılır.Yaptığımız işlemlerin kalıcı yada yanlışlıkla yapılan ilemlerin geri alınması için kullanılır.Aynı şekilde save point mantığı kullanılarakta yapılan işlemlerin belli sırada saklanması öngörülebilir.

UPDATE... SAVEPOINT update_done; Savepoint created. INSERT... ROLLBACK TO update_done; Rollback complete.

Page 12: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 12

ROLLBACK VE COMMİT ÖNCESİ

• Kullanıcı yaptığı değişiklikleri görebilir fakat diğer kullanıcılar yapılan değişiklikleri göremeyecektir.

• Yapılan değişiklikler tabloda Lock oluşturacaktır.Başka kullancılar bu tablo üzerinde değişiklik yapmak istediklerinde Lock Error alacaklardır

COMMİT SONRASI

• Kullanıcının yaptığı değişiklikleri tüm kullancıılar görebileceklerdir. • Tablo üzerinde bulunan lock kalkacaktır. • Bütün savepointler silinecektir.

SQL > DELETE FROM employees WHERE employee_id = 99999; 1 row deleted. SQL > INSERT INTO departments VALUES (290, ’Corporate Tax’, NULL, 1700); 1 row inserted. SQL > COMMIT; Commit complete. SQL > DELETE FROM departments WHERE department_id IN (290, 300); 2 rows deleted. SQL > UPDATE copy_emp SET department_id = 80 WHERE employee_id = 206; 1 row updated. SQL > COMMIT; Commit Complete. ROLLBACK SONRASI

• Kullanıcının yaptığı değişiklikleri tüm kullancıılar görebileceklerdir.Yani aslında data değişiklikleri geri alınacaktır.

• Tablo üzerinde bulunan lock kalkacaktır. SQL > DELETE FROM copy_emp; 22 rows deleted. SQL > ROLLBACK; Rollback complete. SQL > DELETE FROM test;

Page 13: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 13

25,000 rows deleted. SQL > ROLLBACK; Rollback complete. SQL > DELETE FROM test WHERE id = 100; 1 row deleted. SQL > SELECT * FROM test WHERE id = 100; No rows selected. SQL > COMMIT; Commit complete. CREATE TABLE KOMUTU Syntax: CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]); SQL > CREATE TABLE dept

(deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13));

Table created. SQL > DESCRIBE dept;

SQL > CREATE TABLE hr.admin_emp ( empno NUMBER(5) PRIMARY KEY, ename VARCHAR2(15) NOT NULL, ssn NUMBER(9) ENCRYPT, job VARCHAR2(10), mgr NUMBER(5), hiredate DATE DEFAULT (sysdate), photo BLOB, sal NUMBER(7,2), hrly_rate NUMBER(7,2) GENERATED ALWAYS AS (sal/2080),//11 G Virtual column comm NUMBER(7,2), deptno NUMBER(3) NOT NULL CONSTRAINT admin_dept_fkey REFERENCES hr.departments (department_id)); Oracle ‘da table yapıları 2 şekilde olmaktadır,

Page 14: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 14

İlk olarak kullanıcya ait olan “User Tables”,bu tablo yapısı kullanıcıya ait olan verileri depolar,ikinci olarak ise “Data Dictionary” ler mevcuttur bunlar ise oracle ilk kurulduğunda oluşan sistem ve kullanıcılar hakkıda işlevsel anlamda bize bilgi veren tablolardır. Data dictionary viewları aşağıdaki gibidir.

SQL > SELECT table_name FROM user_tables ; SQL > SELECT DISTINCT object_type FROM user_objects ; SQL > SELECT * FROM user_catalog ; VERİ TİPLERİ

Page 15: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 15

• Long alanlar tablo eğer subquery ile yaratıldıysa kopyalamazlar, • Long kolonlar group by ve order by yapısında kullanımazlar, • Her tabloda ancak 1 tane long alan kullanılabilir, • Long kolonlar için constraint tanımlanmaz, SUBQUERY İLE TABLO YARATMAK Syntax:

CREATE TABLE table [(column, column...)] AS subquery; SQL > CREATE TABLE dept80 AS

SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;

Table created. SQL > DESCRIBE dept80;

ALTER TABLE STATEMENT

• Tabloya yeni bir kolon eklemek için, • Mevcut bir kolonu modifiye etmek için, • Yeni bir kolon için default value atamak için, • Kolon silmek için,

Kullanılabilmektedir. ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...);

Page 16: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 16

ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype]...); ALTER TABLE table DROP (column); SQL > ALTER TABLE dept80 ADD (job_id VARCHAR2(9)); Table altered. SQL > ALTER TABLE dept80 MODIFY (last_name VARCHAR2(30)); Table altered. SQL > ALTER TABLE dept80 DROP COLUMN job_id; Table altered. ALTER TABLE table SET UNUSED (column); Yada ALTER TABLE table SET UNUSED COLUMN column; ALTER TABLE table DROP UNUSED COLUMNS; SQL > ALTER TABLE dept80 SET UNUSED (last_name); Table altered. SQL > ALTER TABLE dept80 DROP UNUSED COLUMNS; Table altered. TABLO DROP

• Tablo içindeki tüm datalar ve tablonun structer’ı drop edilir, • Bekleyen tüm transactionlar commit edilir, • İlgili indexler drop olur, • Drop table statementtan rollback yapılamaz,

SQL > DROP TABLE dept80; SQL > DROP TABLE dept80 CASCADE CONSTRAINTS; SQL > DROP TABLE admin_emp_dept PURGE; //Tablo çöp kutusuna atılmaz

Page 17: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 17

Table dropped. RENAME TABLE

• ilgili objelerin isimlerini değiştirmek için kullanılır, • bunu yapabilmek için tablonun sahibi olmak gerekir,

SQL > RENAME dept TO detail_dept; SQL > ALTER TABLE test1 RENAME TO test; Table renamed. SQL > ALTER TABLE test RENAME COLUMN col2 TO description; TABLE TRUNCATE

• Tablodaki tüm kayıtlar hızlı bir şekilde silinir, • Tabloda kullanılan alan serbest bırakılır, • Rollback yapılamaz,

SQL > TRUNCATE TABLE detail_dept; SQL > TRUNCATE CLUSTER detail_dept REUSE STORAGE; Table truncated. TABLE COMMENT Tablolar için ileriki zamanlarda bu tablo ne işe yarıyordu düşüncesiyle yapılan işlemdir, Syntax: COMMENT ON TABLE table | COLUMN table.column IS 'text'; SQL > COMMENT ON TABLE employees IS ’Employee Information’ ; Comment created. ÖRNEK UYGULAMALAR SORU ? Maaşı en fazla olan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz. SQL > SELECT EMSANNO, AD, SOYAD, MAAS FROM PERSONEL WHERE MAAS = (SELECT MAX (MAAS) FROM PERSONEL); SORU ? Her departmanda en az maaş alan personelin emsanno, ad, soyad ve maaş alanlarını listeleyiniz. SQL > SELECT DEPARTMAN, EMSANNO, AD, SOYAD, MAAS FROM PERSONEL WHERE MAAS IN (SELECT MIN(MAAS) FROM PERSONEL GROUP BY DEPARTMAN);

Page 18: Emrah UYSAL  1 · Alt sorgular yani subqueries bir alt sorgudan dönen sonuçların üst tarafta bulunan sql cümlesine referans olması ile oluşur

Emrah UYSAL www.emrahuysal.com 18

SORU ? 400 numaralı departmanda çalışan personelin ortalama maaşından daha fazla ortalama maaşı olan departmanları listeleyiniz. SQL > SELECT DEPARTMAN, AVG (MAAS) FROM PERSONEL GROUP BY DEPARTMAN HAVING AVG(MAAS) > (SELECT AVG (MAAS) FROM PERSONEL WHERE DEPARTMAN = 400); SORU ? 100 numaralı departmanda çalışan herhangi bir personelden daha fazla maaş alan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz. SQL > SELECT EMSANNO, AD, SOYAD, MAAS FROM PERSONEL WHERE MAAS > SOME (SELECT DISTINCT MAAS FROM PERSONEL WHERE DEPARTMAN = 100); SORU ? 100 numaralı departmanda çalışan her bir personelden daha fazla maaş alan personelin emsanno, ad, soyad ve maas alanlarını listeleyiniz. SQL > SELECT EMSANNO, AD, SOYAD, MAAS FROM PERSONEL WHERE MAAS > ALL (SELECT DISTINCT MAAS FROM PERSONEL WHERE DEPARTMAN = 100); Yada SQL > SELECT EMSANNO, AD, SOYAD, MAAS FROM PERSONEL WHERE MAAS > (SELECT MAX(MAAS) FROM PERSONEL WHERE DEPARTMAN = 100);