45
٢٠١٠ Mohamed_Suez Mohamed_Suez Mohamed_Suez Mohamed_Suez & HIS Wife & HIS Wife & HIS Wife & HIS Wife ARABOUG ARABOUG ARABOUG ARABOUG.org .org .org .org إھداء إلى3/3/2010 ) SQL ( .

حل اسئلة الكتاب السعودى فى شرح قواعد البيانات اوراكل

Embed Size (px)

DESCRIPTION

حل اسئلة الكتاب السعودى فى شرح قواعد البيانات اوراكل

Citation preview

٢٠١٠

Mohamed_Suez Mohamed_Suez Mohamed_Suez Mohamed_Suez

& HIS Wife& HIS Wife& HIS Wife& HIS Wife

ARABOUGARABOUGARABOUGARABOUG.org.org.org.orgإھداء إلى

3/3/2010

����� ��)SQL (�� ���� � ������� � ���� ������ ������ ����� �� �!�"# �

��$"���� ��%&��� �'�(��% )*��� )+��.

SQL> desc dept

Name Null? Type

-----------------------------------------

DEPTNO NOT NULL NUMBER(2)

DNAME

LOC VARCHAR2(13)

-------------------------------------------------------------------------------------------

SQL> select *

2 from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

حـــــــلحـــــــلحـــــــلحـــــــل

Name Null? Type

----------------------------------------- -------- ----------------------------

DEPTNO NOT NULL NUMBER(2)

VARCHAR2(14)

LOC VARCHAR2(13)

-------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------

SQL> select empno,ename,job,hiredate

2 from emp;

EMPNO ENAME JOB HIREDATE

---------- ---------- --------- --------

7369 SMITH CLERK 17/12/80

7499 ALLEN SALESMAN 20/02/81

7521 WARD SALESMAN 22/02/81

7566 JONES MANAGER 02/04/81

7654 MARTIN SALESMAN 28/09/81

7698 BLAKE MANAGER 01/05/81

7782 CLARK MANAGER 09/06/81

7788 SCOTT ANALYST 19/04/87

7839 KING PRESIDENT 17/11/81

7844 TURNER SALESMAN 08/09/81

7876 ADAMS CLERK 23/05/87

EMPNO ENAME JOB HIREDATE

---------- ---------- --------- --------

7900 JAMES CLERK 03/12/81

7902 FORD ANALYST 03/12/81

7934 MILLER CLERK 23/01/82

14 rows selected.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select empno,ename,job,hiredate

HIREDATE

--------

7369 SMITH CLERK 17/12/80

7499 ALLEN SALESMAN 20/02/81

7521 WARD SALESMAN 22/02/81

7566 JONES MANAGER 02/04/81

9/81

7698 BLAKE MANAGER 01/05/81

7782 CLARK MANAGER 09/06/81

7788 SCOTT ANALYST 19/04/87

7839 KING PRESIDENT 17/11/81

7844 TURNER SALESMAN 08/09/81

7876 ADAMS CLERK 23/05/87

EMPNO ENAME JOB HIREDATE

--------

7900 JAMES CLERK 03/12/81

7902 FORD ANALYST 03/12/81

7934 MILLER CLERK 23/01/82

SQL> select distinct job

2* from emp;

JOB

---------

CLERK

SALESMAN

PRESIDENT

MANAGER

ANALYST

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select empno employee_no, ename employee_name, job jobs

2* from emp

EMPLOYEE_NO EMPLOYEE_N JOBS

----------- ---------- ---------

7369 SMITH CLERK

7499 ALLEN SALESMAN

7521 WARD SALESMAN

7566 JONES MANAGER

7654 MARTIN SALESMAN

7698 BLAKE MANAGER

7782 CLARK MANAGER

7788 SCOTT ANALYST

7839 KING PRESIDENT

7844 TURNER SALESMAN

7876 ADAMS CLERK

EMPLOYEE_NO EMPLOYEE_N JOBS

----------- ---------- ---------

7900 JAMES CLERK

7902 FORD ANALYST

7934 MILLER CLERK

14 rows selected.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select empno employee_no, ename employee_name, job jobs

أسئلة الفصل الثالث

SQL> select ename,sal

2 from emp

3 where sal>2850

4 order by sal desc;

ENAME SAL

---------- ----------

KING 5000

FORD 3000

SCOTT 3000

JONES 2975

حـــــــلحـــــــلحـــــــلحـــــــل

أسئلة الفصل الثالث

SQL> select ename,sal

٢ from emp

٣ where sal not between 1500 and

ENAME SAL

---------- ----------

SMITH 800

WARD 1250

JONES 2975

MARTIN 1250

SCOTT 3000

KING 5000

ADAMS 1100

JAMES 950

FORD 3000

MILLER 1300

حـــــــلحـــــــلحـــــــلحـــــــل

and 2850؛

SQL> select ename,sal

2 from emp

3 where(deptno=10 or deptno=30

4 order by sal desc;

ENAME SAL

---------- ----------

KING 5000

BLAKE 2850

CLARK 2450

ALLEN 1600

حـــــــلحـــــــلحـــــــلحـــــــل

30) and sal>1500

SQL> select ename,hiredate

2 from emp

3 where hiredate like'%82';

ENAME HIREDATE

---------- --------

MILLER 23/01/82

=================================

SQL> select hiredate

from emp

where ename = 'SCOTT';

HIREDATE

---------

19-APR-87

حـــــــلحـــــــلحـــــــلحـــــــل

وذلك ,ن ملحوظة & تظھر النتيجة كما بالسؤال

ملحوظة & تظھر النتيجة كما بالسؤال

SQL> select ename,sal,comm

2 from emp

3 where comm is not null;

ENAME SAL COMM

---------- ---------- ----------

ALLEN 1600 300

WARD 1250 500

MARTIN 1250 1400

TURNER 1500 0

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select ename

2 from emp

3 where ename like'__A%';

ENAME

----------

BLAKE

CLARK

ADAMS

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select ename

2 from emp

3 where ename like'%LL%';

ENAME

----------

ALLEN

MILLER

حـــــــلحـــــــلحـــــــلحـــــــل

1 SQL> select initcap(ename) EMP_NAME,length(ename)

NUMBER1,substr(ename,0,4) SECTION

2* from emp

EMP_NAME NUMBER1 SECT

---------- ---------- ----

Smith 5 SMIT

Allen 5 ALLE

Ward 4 WARD

Jones 5 JONE

Martin 6 MART

Blake 5 BLAK

Clark 5 CLAR

Scott 5 SCOT

King 4 KING

Turner 6 TURN

Adams 5 ADAM

EMP_NAME NUMBER1 SECT

---------- ---------- ----

James 5 JAME

Ford 4 FORD

Miller 6 MILL

حـــــــلحـــــــلحـــــــلحـــــــل

أسئلة الفصل الرابع

SQL> select initcap(ename) EMP_NAME,length(ename)

) SECTION

1 SQL> select ename || job TITLE

2 from emp

3* where deptno=30

TITLE

-------------------

ALLENSALESMAN

WARDSALESMAN

MARTINSALESMAN

BLAKEMANAGER

TURNERSALESMAN

JAMESCLERK

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select ename || job TITLE

1 SQL> select ename ENAME,round((months_between(sysdate,hiredate)/

2* from emp

ENAME ROUND((MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),0)

---------- ----------------------------------------------

SMITH

ALLEN 29

WARD 29

JONES 29

MARTIN

BLAKE 29

CLARK 29

SCOTT 23

KING 28

TURNER

ADAMS 23

ENAME ROUND((MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),0)

---------- ----------------------------------------------

JAMES

FORD 28

MILLER 28

حـــــــلحـــــــلحـــــــلحـــــــل

select ename ENAME,round((months_between(sysdate,hiredate)/

ENAME ROUND((MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),0)

----------------------------------------------

29

ALLEN 29

WARD 29

JONES 29

MARTIN 28

BLAKE 29

CLARK 29

SCOTT 23

KING 28

28

ADAMS 23

ENAME ROUND((MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),0)

----------------------------------------------

28

FORD 28

MILLER 28

select ename ENAME,round((months_between(sysdate,hiredate)/12),0)

SQL > select TO_CHAR(SYSDATE,'DAY "OF" MM YYYY')

2* from dual

TO_CHAR(SYSDATE,'DAY

--------------------

FRIDAY OF 03 2010

حـــــــلحـــــــلحـــــــلحـــــــل

SQL > select TO_CHAR(SYSDATE,'DAY "OF" MM YYYY')

SQL> Select to_date( ' FEBRUARY

2 From dual;

TO_DATE

---------

22-FEB-04

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> Select to_date( ' FEBRUARY 22, 2004','mm / dd/yyyy')

SQL> select max(sal) MAXIMUM,min(sal) NINIMUM,sum(sal) SUM,round(avg(sal))

AVERAGE

; from emp

MAXIMUM NINIMUM SUM AVERAGE

---------- ---------- ---------- ----------

5000 800 29025 2073

حـــــــلحـــــــلحـــــــلحـــــــل

أسئلة الفصل الخامس

SQL> select max(sal) MAXIMUM,min(sal) NINIMUM,sum(sal) SUM,round(avg(sal))

MAXIMUM NINIMUM SUM AVERAGE

SQL> select max(sal) MAXIMUM,min(sal) NINIMUM,sum(sal) SUM,round(avg(sal))

SQL> select job,max(sal) as MAXIMUM,min(sal) as MINIMUM

from emp

; group by job

JOB MAXIMUM MINIMUM

--------- ---------- ----------

CLERK 1300 800

SALESMAN 1600 1250

PRESIDENT 5000 5000

MANAGER 2975 2450

ANALYST 3000 3000

حـــــــلحـــــــلحـــــــلحـــــــل

ob,max(sal) as MAXIMUM,min(sal) as MINIMUM

SQL> select job,count(job)

from emp

group by job;

JOB COUNT(JOB)

--------- ----------

CLERK 4

SALESMAN 4

PRESIDENT 1

MANAGER 3

ANALYST 2

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select count(distinct mgr) ‘NUMBER

; from emp

NUMBER1 OF MANAGER

------------------

6

حـــــــلحـــــــلحـــــــلحـــــــل

‘NUMBER1 OF MANAGER’

SQL> select e.ename,e.deptno,d.dname

2 from emp e,dept d

3 where e.deptno=d.deptno

4* and e.deptno=30;

ENAME DEPTNO DNAME

---------- ---------- --------------

ALLEN 30 SALES

WARD 30 SALES

MARTIN 30 SALES

BLAKE 30 SALES

TURNER 30 SALES

JAMES 30 SALES

6 rows selected.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select e.ename,e.deptno,d.dname

SQL> select distinct( e.job),d.loc

2 from emp e,dept d

3 where e.deptno=d.deptno

4* and e.deptno=30;

JOB LOC

--------- -------------

SALESMAN CHICAGO

MANAGER CHICAGO

CLERK CHICAGO

حـــــــلحـــــــلحـــــــلحـــــــل

c

SQL> select e.ename,e.job,d.dname

2 from emp e,dept d

3 where e.deptno=d.deptno

4* and d.loc like 'DALLAS'

ENAME JOB DNAME

---------- --------- --------------

SMITH CLERK RESEARCH

JONES MANAGER RESEARCH

SCOTT ANALYST RESEARCH

ADAMS CLERK RESEARCH

FORD ANALYST RESEARCH

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select e.ename,e.job,d.dname

SQL> select e.ename,e.job,d.dname,e.sal,s.grade

2 from emp e,dept d,salgrade s

3 where (e.deptno=d.deptno

4 and e.sal between s.losal and s.hisal)

5 and e.deptno=10

6* order by sal;

ENAME JOB DNAME

---------- --------- -------------- ----------

MILLER CLERK ACCOUNTING 1300 2

CLARK MANAGER ACCOUNTING 2450 4

KING PRESIDENT ACCOUNTING 5

حـــــــلحـــــــلحـــــــلحـــــــل

> select e.ename,e.job,d.dname,e.sal,s.grade

and e.sal between s.losal and s.hisal)

ENAME JOB DNAME SAL GRADE

---------- ----------

MILLER CLERK ACCOUNTING 1300 2

CLARK MANAGER ACCOUNTING 2450 4

KING PRESIDENT ACCOUNTING 5000 5

SQL> select e.empno,e.ename,m.empno,m.ename

2 from emp e,emp m

3 where e.mgr=m.empno

4 and e.deptno=10;

EMPNO ENAME EMPNO ENAME

---------- ---------- ---------- ----------

7782 CLARK 7839 KING

7934 MILLER 7782 CLARK

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select e.empno,e.ename,m.empno,m.ename

----------

SQL> select ename,hiredate

2 from emp

3 where deptno=(select deptno

4 from emp

5 where ename like 'BLAKE');

ENAME HIREDATE

---------- --------

ALLEN 20/02/81

WARD 22/02/81

MARTIN 28/09/81

BLAKE 01/05/81

TURNER 08/09/81

JAMES 03/12/81

6 rows selected.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select empno,ename

2 from emp

3 where sal> all(select avg(sal)

4 from emp)

5* order by sal desc;

EMPNO ENAME

---------- ----------

7839 KING

7902 FORD

7788 SCOTT

7566 JONES

7698 BLAKE

7782 CLARK

6 rows selected.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select ename,deptno,job

2 from emp

3 where deptno=(select deptno

4 from dept

5* where loc like 'DALLAS')

ENAME DEPTNO JOB

---------- ---------- ---------

SMITH 20 CLERK

JONES 20 MANAGER

SCOTT 20 ANALYST

ADAMS 20 CLERK

FORD 20 ANALYST

حـــــــلحـــــــلحـــــــلحـــــــل

* where loc like 'DALLAS');

SQL> select empno,ename,job,sal

2 from emp

3 where sal< all(select sal

4 from emp

5 where job like 'SALESMAN')

6 and job<>'SALESMAN';

EMPNO ENAME JOB SAL

---------- ---------- --------- ----------

7369 SMITH CLERK 800

7876 ADAMS CLERK 1100

7900 JAMES CLERK 950

SQL> select sal

2 from emp

3 where job like 'SALESMAN';

SAL

----------

1600

1250

1250

1500

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select empno,ename,job,sal

where job like 'SALESMAN')

EMPNO ENAME JOB SAL

----------

7369 SMITH CLERK 800

CLERK 1100

7900 JAMES CLERK 950

SQL> select ename,deptno,sal

2 from emp

3 where (sal,deptno) in (select sal,deptno

4 from emp

5 where comm is not null)

6 order by sal;

ENAME DEPTNO SAL

---------- ---------- ----------

MARTIN 30 1250

WARD 30 1250

TURNER 30 1500

ALLEN 30 1600

SQL> spool off

حـــــــلحـــــــلحـــــــلحـــــــل

ere (sal,deptno) in (select sal,deptno

where comm is not null)

ENAME DEPTNO SAL

MARTIN 30 1250

WARD 30 1250

ALLEN 30 1600

SQL> select distinct e.ename,dal.dname ,e.sal

2 from emp e,(select m.sal,m.comm,d.dname

3 from emp m,dept d

4 where m.deptno=d.deptno

5 and d.loc = 'DALLAS')dal

6 where e.sal=dal.sal

7 and nvl(e.comm,0) = nvl(dal.comm,

8 order by sal;

ENAME DNAME SAL

---------- -------------- ----------

SMITH RESEARCH 800

ADAMS RESEARCH 1100

JONES RESEARCH 2975

FORD RESEARCH 3000

SCOTT RESEARCH 3000

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> select distinct e.ename,dal.dname ,e.sal

from emp e,(select m.sal,m.comm,d.dname

where m.deptno=d.deptno

and d.loc = 'DALLAS')dal

) = nvl(dal.comm,0)

SQL> select ename,hiredate,sal

2 from emp

3 where (sal,nvl(comm,0)) in (select sal,nvl(comm,

4 from emp

5 where ename = 'SCOTT')

6 and ename<>'SCOTT';

ENAME HIREDATE SAL

---------- -------- ----------

FORD 03/12/81 3000

SQL> spool off

حـــــــلحـــــــلحـــــــلحـــــــل

)) in (select sal,nvl(comm,0)

ENAME HIREDATE SAL

FORD 03/12/81 3000

SQL>insert into emp

values(1111,'AHMED','ENGENEER',

1 row created.

============================================

commit

--

SQL >update emp

set sal=7000

where ename='AHMED';

1 row updated.

حـــــــلحـــــــلحـــــــلحـــــــل

,'AHMED','ENGENEER',7839,'01-01-2004',5000,200,10);

===============

SQL> update emp

2 set sal = 1000

3 where sal<900;

1 row updated.

SQL>commit

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> delete from emp

2 where empno=1111;

1 row deleted.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> insert into emp

2 values (&empno,&ename,&job,&mgr,&hiredate,&sal,&comm,&deptno);

Enter value for empno: 111

Enter value for ename: 'Moh_Suez'

Enter value for job: 'DBA'

Enter value for mgr: 0

Enter value for hiredate: '01-01-2010

Enter value for sal: 12000

Enter value for comm: 1200

Enter value for deptno: 10

old 2: values (&empno,&ename,&job,&mgr,&hiredate,&sal,&comm,&deptno)

new 2: values (111,'Moh_Suez','DBA',

1 row created.

حـــــــلحـــــــلحـــــــلحـــــــل

values (&empno,&ename,&job,&mgr,&hiredate,&sal,&comm,&deptno);

Enter value for ename: 'Moh_Suez'

2010'

: values (&empno,&ename,&job,&mgr,&hiredate,&sal,&comm,&deptno)

,'Moh_Suez','DBA',0,'01-01-2010',12000,1200,10)

values (&empno,&ename,&job,&mgr,&hiredate,&sal,&comm,&deptno);

: values (&empno,&ename,&job,&mgr,&hiredate,&sal,&comm,&deptno)

SQL> create table department

(Id number(7),Name varchar2(25

حـــــــلحـــــــلحـــــــلحـــــــل

25));

SQL> create table EMPLOYEE

2 (ID number(7),LAST_NAME varchar

number(7));

Table created.

حـــــــلحـــــــلحـــــــلحـــــــل

),LAST_NAME varchar2(25),FIRST_NAME varchar2(2525),DEPT_ID

SQL> alter table employee

2 modify ( 3 LAST_NAME varchar

Table altered.

حـــــــلحـــــــلحـــــــلحـــــــل

LAST_NAME varchar2(50));

SQL> create table employee

2 (ID,LAST_NAME,DEPT_ID)

3 as

4 select empno,ename,deptno

5 from emp;

Table created.******

SQL> select*

2 from employee;

ID LAST_NAME DEPT_ID

---------- ---------- ----------

7369 SMITH 20

7499 ALLEN 30

7521 WARD 30

7566 JONES 20

7654 MARTIN 30

7698 BLAKE 30

7782 CLARK 10

7788 SCOTT 20

7839 KING 10

7844 TURNER 30

7876 ADAMS 20

ID LAST_NAME DEPT_ID

---------- ---------- ----------

7900 JAMES 30

7902 FORD 20

7934 MILLER 10

14 rows selected.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> create table employee

as

4 select empno ID,ename

LAST_NAME,deptno DEPT_ID

5 from emp;

Table created.******

SQL> select *

2 from employee;

ID LAST_NAME DEPT_ID

---------- ---------- ----------

7369 SMITH 20

7499 ALLEN 30

7521 WARD 30

7566 JONES 20

7654 MARTIN 30

7698 BLAKE 30

7782 CLARK 10

7788 SCOTT 20

7839 KING 10

7844 TURNER 30

7876 ADAMS 20

ID LAST_NAME DEPT_ID

---------- ---------- ----------

7900 JAMES 30

7902 FORD 20

7934 MILLER 10

14 rows selected.

SQL> alter table employee2

2 add (FIRST_NAME varchar2(25

Table altered.

SQL> drop table employee;

Table dropped.

SQL> Rename employee2 to employee;

Table renamed.

SQL> alter table employee

drop (last_name);

Table altered

حـــــــلحـــــــلحـــــــلحـــــــل

25));

to employee;

أسئلة الفصل الحادى عشر وا,خير

SQL> create table DEPARTMENT ( deptno number(

varchar2(10),loc varchar2(15));

Table created.

حـــــــلحـــــــلحـــــــلحـــــــل

أسئلة الفصل الحادى عشر وا,خير

SQL> create table DEPARTMENT ( deptno number(3) primary key,dname

) primary key,dname

SQL> create table EMPLOYEE(empno number(

varchar2(10),

2 constraint emp_pk primary key(empno),

3* constraint emp_uk unique(dname) ) ;

Table created.

حـــــــلحـــــــلحـــــــلحـــــــل

SQL> create table EMPLOYEE(empno number(3) ,ename varchar2(10),dname

p_pk primary key(empno),

* constraint emp_uk unique(dname) ) ;

),dname

SQL> alter table employee

add constraint deptno_fk forign key(deptno) references dept(deptno);

Table altered.

SQL> alter table employee

add constraint sal_ck check(sal between

Table altered.

SQL> select constraint_name,column_name

from user_cons_column

where table_name='EMPLOYEE';

XXXXXXXXXXXXXXXXXX

SQL> select constraint-name,constraint_type

from user_constraint

where table_name='EMPLOYEE';

CONSTRAINT_NAME C

------------------------------ -

PK_EMP P

FK_DEPTNO R

حـــــــلحـــــــلحـــــــلحـــــــل

add constraint deptno_fk forign key(deptno) references dept(deptno);

al between 1000 and 5000);

SQL> select constraint_name,column_name

where table_name='EMPLOYEE';

name,constraint_type

where table_name='EMPLOYEE';