Emrah UYSAL 1

Benzer belgeler
BÖLÜM- 11: BÜYÜK VERİ KÜMELERİ

Emrah UYSAL 1

1. IT bölümünde çalışan tüm çalışanların isimlerini gösteren bir sorgu yazınız.

Emrah UYSAL 1

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

BÖLÜM -2: VERİLERİ SINIRLAMA VE SIRALAMA

BÖLÜM- 13: ALT SORGULAR İLE VERİ İŞLEME

BÖLÜM- 5: BİRDEN FAZLA TABLODAN VERİ GETİRMEK

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

Veritabanı Tasarımı. Çoklu Satır Alt Sorgular

--Tüm personel kayıtlarını seçiniz. SELECT* FROM employees ;

ORACLE DERS 1 SQL E GİRİŞ

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

Veriyi ve Bilgiyi Organize Etmek. Bilgisayar Mühendisliğine Giriş 1

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

Creating Tables in Oracle

Veri Tabanı Hafta Dersi

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

Mysql Veritabanı Komutları

Unutulmuş Özellikler: Oracle Veritabanına Yaptığınız Yatırımı Sonuna Kadar Kullanın

Oracle Database 11g: Introduction to SQL

Laboratuvar 6 TABLOLAR VE KISITLAR

ACCESS PLATFORMUNDA SQL

YAPISAL SORGULAMA DİLİ (SQL)

SQL'e Giriş 2. CREATE TABLE tabloadı (kolon isimleri ve veri türleri) (BOLUM_NO NUMBER, BOLUM_ADI CHAR(10));

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Emrah UYSAL 1

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

Veritabanı Yönetim Sistemleri (Başarım Eniyileme Performance Tuning)

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

VERİTABANI Veritabanı Yönetimi

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

Veritabanı Tasarımı. Tablo Değiştirme

MOBİL UYGULAMA GELİŞTİRME

Veri Tabanı Programlamaya Giriş

2- Total de 8000 byte yer tutup 4000 karakter olarak kullanabildiğimiz tip aşağıdakilerden hangisidir?

Veritabanlarına ve SQL'e Giriş. Devrim GÜNDÜZ. Teknoloji Destek Merkezi --

SQL Kod ile Tablo Oluşturma

PostgreSQL ve PL/pgSQL

SQL Komutları (2) Uzm. Murat YAZICI

Veritabanı Tasarımı. Alt Sorgu Temelleri

Emrah UYSAL 1 TABLESPACE ENCRYPTION ORACLE 11G

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

VERİ TABANI YÖNETİM SİSTEMLERİ I

PostgreSQL ve PL/pgSQL

Veri Tabanı II Alt Sorgular

Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

BMB202. Veritabanı Yönetimi Ders 6. SQL. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

DELPHİDE SQL KULLANIMI Database İlişkisi

BÖLÜM- 3: TEK SATIR FONKSİYONLARI

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Veritabanı Tasarımı. Self-Join ve Hiyerarşik Sorgular

EROL AKGÜL

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

SORGULAR VE ÇEŞİTLERİ II

VERİTABANI. SQL (Structured Query Language)

Oracle da kullanılan veri tipleri:

- Tablo (Table):Veri saklama için temel yapıdır. Bir veya daha fazla sütundan ve sıfir veya daha fazla satırdan oluşur.

Veritabanına Uygulanması

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

VERİ TABANI YÖNETİM SİSTEMLERİ I

Liquibase ile Veri Tabanı Değişiklik Yönetimi

Veritabanı Tasarımı. Join Yantümceleri

SQL TRIGGERS (Tetikleyiciler)

Her Yönüyle SQL Enjeksiyonu. OWASP-Türkiye Bünyamin Demir

Veri Tabanı ve Yönetimi

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

Bölüm 4: DDL Veri Tanımlama Dili

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

Veritabanı Tasarımı. Seriler ile Çalışma

Örnek: HAFTA12B isimli bir kullanıcı tanımlayalım. Bu kullanıcıya gerekli yetkileri verelim.

Aşağıdaki tabloyu inceleyin. Yeni kayıt girme, var olan bir kaydı silme veya güncelleme işlemlerini bu tabloya göre yapacağız.

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Veritabanı Tasarımı. Veritabanı Hareketleri

SQL e Giriş. Uzm. Murat YAZICI

SORGULAR. Öğr.Gör.Volkan Altıntaş

Veritabanı Tasarımı. SQL Deyimi Anatomisi

BÖLÜM- 9: KULLANICI ERİŞİMLERİNİ YÖNETMEK

Veri Tabanı-I 9.Hafta

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

BAŞLAYINIZ DENİLMEDEN SORU KİTAPÇIĞINI AÇMAYINIZ.

Laboratuvar 2 Tek Kayıt Fonksiyonları

VERİTABANI ve YÖNETİMİ

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

Transkript:

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 WHERE salary > (SELECT salary 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 www.emrahuysal.com 1

SQL > SELECT last_name, job_id WHERE job_id = (SELECT job_id WHERE employee_id = 141); SQL > SELECT last_name, job_id, salary WHERE job_id = (SELECT job_id WHERE employee_id = 141) AND salary > (SELECT salary WHERE employee_id = 143); SQL > SELECT last_name, job_id, salary WHERE salary = (SELECT MIN(salary) ); SQL > SELECT department_id, MIN(salary) GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) WHERE department_id = 50); Emrah UYSAL www.emrahuysal.com 2

SQL > SELECT employee_id, last_name WHERE salary = (SELECT MIN(salary) GROUP BY department_id); ERROR at line 4: ORA-01427: single-row subquery returns more than one row SQL > SELECT last_name, job_id WHERE job_id = (SELECT job_id 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 WHERE salary IN (SELECT MIN(salary) GROUP BY department_id); Emrah UYSAL www.emrahuysal.com 3

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 WHERE salary IN (2500, 4200, 4400, 6000, 7000, 8300, 8600, 17000); ANY OPERATÖRÜ SQL > SELECT employee_id, last_name, job_id, salary WHERE salary < ANY (SELECT salary 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 WHERE salary < ALL (SELECT salary 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. Emrah UYSAL www.emrahuysal.com 4

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 emp WHERE emp.employee_id NOT IN (SELECT mgr.manager_id mgr); no rows selected Bu sorunu aşmak istiyorsak; SQL > SELECT last_name WHERE employee_id NOT IN (SELECT manager_id 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...]); Emrah UYSAL www.emrahuysal.com 5

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 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. Emrah UYSAL www.emrahuysal.com 6

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 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 WHERE employee_id = 205), salary = (SELECT salary WHERE employee_id = 205) WHERE employee_id = 114; 1 row updated. SQL > UPDATE copy_emp SET department_id = (SELECT department_id WHERE employee_id = 100) WHERE job_id = (SELECT job_id WHERE employee_id = 200); 1 row updated. Emrah UYSAL www.emrahuysal.com 7

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 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 Emrah UYSAL www.emrahuysal.com 8

INSERT CÜMLECĞİNDE SUBQUERY KULLANIMI SQL > INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id 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 WHERE department_id = 50; CHECK OPTION SQL > INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary 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. Emrah UYSAL www.emrahuysal.com 9

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); Emrah UYSAL www.emrahuysal.com 10

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. Emrah UYSAL www.emrahuysal.com 11

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 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; Emrah UYSAL www.emrahuysal.com 12

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, Emrah UYSAL www.emrahuysal.com 13

İ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İ Emrah UYSAL www.emrahuysal.com 14

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 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]...); Emrah UYSAL www.emrahuysal.com 15

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 Emrah UYSAL www.emrahuysal.com 16

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); Emrah UYSAL www.emrahuysal.com 17

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); Emrah UYSAL www.emrahuysal.com 18