create table dept(dname char(7),loc char(4),id number(7) primary key);//建表

desc dept;//查找表所具有的属性
alter table dept add ddate date;//修改table表 dept 增加名为当ddate属性为date的属性组
select * from dept;//选择所有表元素
alter table dept drop column ddate;//删除dept 中在ddate列
insert into dept (dname,loc,ddate)values('12','23',23);//向dept中插入元组
insert into dept (deptno,dname,loc) values(77,'11','1321');
alter table dept add constraint first primary key (deptno);//将dept中的deptno设成主码
alter table dept add constraint uni primary key (deptno);

delete  from dept where deptno='7';//删除dept表中deptno='7'的元组

create table emp as select * from scott.emp;///从事scott用户下把emp表拷到自己用户下

(一)   包括排序、分组的单表查询

emp表



EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

8888

 

 

 

 

 

 

 

30

SMITH

CLERK

7902

17-12月-80

800

 

20

7499

ALLEN

SALESMAN

7698

20-2月 -81

1600

300

30

7521

WARD

SALESMAN

7698

22-2月 -81

1250

500

30

7566

JONES

MANAGER

7839

02-4月 -81

2975

 

20

7654

MARTIN

SALESMAN

7698

28-9月 -81

1250

1400

30

7698

BLAKE

MANAGER

7839

01-5月 -81

2850

 

30

7782

CLARK

MANAGER

7839

09-6月 -81

1000

 

10

7788

SCOTT

ANALYST

7566

19-4月 -87

3000

 

20

7839

KING

PRESIDENT

 

17-11月-81

1000

 

10

7844

TURNER

SALESMAN

7698

08-9月 -81

1500

0

30

7876

ADAMS

CLERK

7788

23-5月 -87

1100

 

20

7900

JAMES

CLERK

7698

03-12月-81

950

 

30

7902

FORD

ANALYST

7566

03-12月-81

3000

 

20

7934

MILLER

CLERK

7782

23-1月 -82

1900

 

10

 

1)查询EMP全部列

select * from emp;

2)如果现在只要查询出雇员的编号、姓名、工作.

select empno,ename,job from emp;

3)为查询的结果列指定一个别名.

select count(*) num from emp

4)查询所有的工作(去掉重复的工作) distinct

select distinct job from emp;

5)查询出工资大于1500的所有雇员

select * from emp
where sal>1500;

6)例:查询出在1981年入职的全部雇员的信息

select * from emp where to_char(hiredate) like '%81';
7)例:查询出雇员号不是7369, 7499 , 7521 的雇员的具体信息

select * from emp
where empno not in(7369,7499 , 7521);

8)例:查询出雇员姓名第二个字母为”L”的雇员信息

select * from emp
where ename like'_L%';

9)例:按工资升序对雇员信息进行排序

select * from emp
order by sal asc;

10)检索出部门号为30的雇员信息,并按工资降序,工资相同则按入职日期升序排列

select * from emp
where empno in(
select empno from emp
where deptno=20
)
order by sal desc,hiredate asc;

11)查询没有得到奖金的员工的信息。

select * from emp
where comm is null;

 

(二) 多表连接查询

DEPTNO

DNAME

LOC

77

jhk

 

89

lll

 

10

ACCOUNTING

NEW YORK

20

RESEARCH

DALLAS

30

SALES

CHICAGO

40

OPERATIONS

BOSTON

45

 

 

1)查询出雇员的编号,雇员姓名,部门编号,部门名称以及部门的位置

select emp.empno,emp.ename,dept.deptno,dept.dname,dept.loc from emp,dept
where emp.deptno=dept.deptno;

2)以部门为主体,利用emp和dept做一个连接查询,查询结果包括雇员编号,雇员姓名,部门编号,部门名称,部门所在位置(利用外连接)

select emp.empno,emp.ename,dept.deptno,dept.dname,dept.loc from emp,dept
where emp.deptno=dept.deptno(+);

3)统计获得奖金的人数

 

4)求所雇员的最低工资

5)统计出每个部门的人数

6)查询出每个部门的部门名称,及每个部门的雇员人数

7)求部门号为20且工资小于3000的员工编号及其所属部门名称

8)查询某个员工的直接领导

 

用户授权

grant select on emp to machuan;

权限回收

revoke select on emp from machuan;