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;