----------------------------------------------------------------------------- insert into Dawn select ename from scott.emp; --插入来自其他表中的记录 -------创建操作-------- --创建表 create table abc(id number , name varchar(20) , password varchar(20)) --将原有的表数据填充到新表中 create table Dawn as select ename from scott.emp where length(ename)<5; --创建序列化 create sequence s_ab; --插入数据 insert into abc values(s_ab.next, 'Dawn','0000'); --创建约束 外键的指针指向主键的指针 *** 从外键开始,其中的某一列去做外键 用主表的主键Id ALTER TABLE OREDES ADD CONSTRAINT FFFF FOREIGN KEY (uID) REFERENCES PERSONSE (uID) --删除约束 ALTER TABLE Orders --更换用户登录 conn; --创建表空间 create tablespace userInfo datafile 'c:/DB' size 5m autoextend on; --创建表空间— --创建用户 create user Dawn identified by pass; --系统权限(操作表) grant connect to Dawn; --对象权限(操作数据库) grant resource to Dawn; --角色(一组相关权限的组合,授予权限给角色在把角色授予用户,简化权限管理) grant create sequence to Dawn; --授权权限给用户操作表 grant select on abc to Dawn; grant update on abc to Dawn; grant insert on abc to Dawn; grant delete on abc to Dawn; --所有操作 grant all on abc to Dawn; --更改和删除用户-- --修改密码 alter user Dawn identified by pass; --删除用户 drop user Dawn cascade; select * from emp; --查找mep表 --------简单操作---------- select * from emp where ename in ('SMITH','ALLEN'); --指定范围查询 select * from emp where ename not in ('SMITH','ALLEN'); --不再指定范围内查询 select * from emp where ename like '_M%'; --第二个字母为M的数据 select * from emp where ename like '%M%'; --数M的据中带 select * from emp order by sal; --排序工资字段 select * from emp where empno between 7369 and 7788; --指定字段在莫个值之间 select * from emp where sal is null; --空操作 select * from emp where sal is not null; --非空操作 select '编号是:' || empno || ',姓名为:' || ename from emp; --连接字符串操作 select ename, sal*2 income from emp; --支持四则运算并起别名 select * from emp where SAL=SAL*0.6; --百分之几的数据 -------对字符串操作------- --返回第一个查询结果中排除第二个查询中出现的行 select ename from Dawn minus select ename from scott.emp; --倒数截取字符 -2 -1 0 (3个字符) Select ename, substr(ename,length(ename)-2) from emp; --负数很难理解-- select ename, substr(ename,-1,1) from scott.emp; --从1开始去一个字符 select ename, substr(ename,1,1) from scott.emp; --非空查询,将空值替换为指定为0 select ename ,nvl(comm,0) from scott.emp; --抛弃数值后面的小数点 select trunc(sal) from scott.emp; --对两个字段进行取模操作 select mod(empno,DEPTNO) from scott.emp; --消除重复值操作 select distinct JOB from emp; --将条件值设置为大写 select ename from emp where ename=upper('smith'); --将字段值设置为小写 select ename from emp where lower(ename)='smith'; --截取2位小数点 select round('1222.22222',2) from dual; --倒置取值 输出100 select round('123.22',-2) from dual; --获取雇员入职的星期数 select ename, round((sysdate-HIREDATE)/7) from emp; ******** round 为四舍五入 select docode(ename, 'SMITH','DD','ALLEN','AA') from scott.emp; --关键字写错了******* 类似与if else操作 -------日期格式--------- select sysdate from dual; --获取当前日期 select ename,to_char(HIREDATE,'YYYY-mm-dd') from scott.emp; --2010-12-12 格式 select ename, to_char(HIREDATE,'fmyyyy-mm-dd') from scott.emp; --2010-2-2 格式 select ename, to_char(SAL,'99,999')from scott.emp; --99.999 价格格式 select add_months(sysdate,2) from dual; --在当前日期的月数加上指定日期 select ename ,round(months_between(sysdate,HIREDATE)) from scott.emp; --获取当前日期与指定日期之间的差距 select mext_date(sysdate,'星期一') from dual; --获取当前日期与下个指定日期的数据??????关键字写错了???????????? select to_number('222222') from dual; --转换可以转换为数值的字符串 select ename,to_char(HIREDATE,'yyyy') yure, 2 to_char(HIREDATE,'mm') manths, 3 to_char(HIREDATE,'day')day 4 from scott.emp; --2010 02 02格式 ----------------查询每个部门最高的工资--------------- select * from emp e join (select DEPTNO,max(sal) sa from emp group by DEPTNO) c on e.DEPTNO=c.DEPTNO and c.sa=e.sal; ---------------------- select a.username as "学生", e.score as "语文", a.score as "数学" from (select username,score from abc where type='语文') e join (select username,score from abc where type='数学') a on e.username = a.username; ------------------------------------------------------ 查询学生数据的选项选择,可以将查找出来的表 select distinct name "学生" , (select score from abc where type='语文' and u.name=name) as "语文", (select score from abc where type='数学' and u.name=name) as "数学" from abc u ------------------------------------------------------- 1. select distinct mydept.name as "部门", (select count(*) from myemp where gender='F' and d_IP=mydept.id) as "女" , (select count(*) from myemp where gender='M' and d_IP=mydept.id)as "男" from mydept /* 消除笛卡尔积:去除没有关联的项,比如部门表中有三个部门名称, 如果没有加上join关联,执行时会根据部门名称去遍历,如果加上join关联, 在指定的部门名称去寻找,减少遍历次序 */ 2. select distinct mydept.name as "部门", (select count(*) from myemp where gender='F' and d_IP = mydept.id) as "女" , (select count(*) from myemp where gender='M' and d_IP = mydept.id)as "男" from myemp join mydept on myemp.id=mydept.id join myemp 第五章 同义词是现有数据库对象的别名 序列号用于生成唯一、连续的序号 视图是基于一个或多个表的虚拟表 索引是与表相关的一个可选结构,用于提高sql语句执行的性能 索引类型有标准索引、唯一索引、反向键索引、位图索引和给予函数的索引 索引组织表基于主键访问数据 %type操作 declare myname emp.ename%type; begin select ename into myname from emp where sal=800; dbms_output.put_line(myname); %rowtype 操作 declare myname emp%rowtype; begin select * into myname from emp where empno=7934; dbms_output.put_line(myname.ename); end; ----------------------------------------------------------- select * from emp; --查找mep表 --------简单操作---------- select * from emp where ename in ('SMITH','ALLEN'); --指定范围查询 select * from emp where ename not in ('SMITH','ALLEN'); --不再指定范围内查询 select * from emp where ename like '_M%'; --第二个字母为M的数据 select * from emp where ename like '%M%'; --数M的据中带 select * from emp order by sal; --排序工资字段 select * from emp where empno between 7369 and 7788; --指定字段在莫个值之间 select * from emp where sal is null; --空与非空操作 select * from emp where sal is not null; select '编号是:' || empno || ',姓名为:' || ename from emp; --连接字符串操作 select ename, sal*2 income from emp; --支持四则运算并起别名 select * from emp where SAL=SAL*0.6; --百分之几的数据 insert into Dawn select ename from scott.emp; --插入来自其他表中的记录 -------创建操作-------- create tablespace userInfo datafile 'c:/DB' size 5m autoextend on; --创建表空间 create table Dawn as select ename from scott.emp where length(ename)<5; --将原有的表数据填充到新表中 -------对字符串操作------- select ename from Dawn minus select ename from scott.emp; --返回第一个查询结果中排除第二个查询中出现的行 Select ename, substr(ename,length(ename)-2) from emp; --倒数截取字符 -2 -1 0 (3个字符) select ename,substr(ename,-1,1) from scott.emp; --????????负数很难理解??????????????? select ename,substr(ename,1,1) from scott.emp; --冲1开始去一个字符 select ename ,nvl(comm,0) from scott.emp; --非空查询,将空值替换为指定为0 select trunc(sal) from scott.emp; --抛弃数值后面的小数点 select mod(empno,DEPTNO) from scott.emp; --对两个字段进行取模操作 select distinct JOB from emp; --消除重复值操作 select ename from emp where ename=upper('smith'); --将条件值设置为大写 select ename from emp where lower(ename)='smith'; --将字段值设置为小写 select round('1222.22222',2) from dual; --截取2位小数点 select round('123.22',-2) from dual; --倒置取值 输出100 select ename, round((sysdate-HIREDATE)/7) from emp; --获取雇员入职的星期数 ******** round 为四舍五入 select docode(ename, 'SMITH','DD','ALLEN','AA') from scott.emp; --关键字写错了******* 类似与if else操作 select concat('010-','88888888')||'转23' from dual; --连接字符串 010-88888888转23 select initcap; select ename ,round(months_between(sysdate,HIREDATE)) from scott.emp; select sysdate from dual; select hiredate from scott.emp; select initcap(’smith’) upp from dual; --获取当前日期与指定日期之间的差距select * from scott.emp; select mext_datedate(sysdate,'星期一') from dual; select initcap(’smith’) upp from dual; ;-???????关键字写错获取当前日期与下个指定日期的数据select to_number('222222') from dual; select to_number('wwww333') from dual; select initcap(’smith’) upp from dual; e select initcap(’smith’) upp from dual; --转换可以转换为数值的字符川select to_date('12313131','yyyy-mm-dd') from dual 1988-26-02; 1999-02-02 ;????????????smith') upp from dual; ; select to_char('1999-02-02','yyyy-mm-dd') from dual; chachar; select to_char(HIREDATE,'yyyy-mm-dd') from scott.emp; select tHIREDATE from scott.emp; select to_char('22222222','yyyy-mm-dd') from dual; select to_char('1980-2-20'),'yyyy-mm-dd'from dual;- dual select * from scott.emp; select docode(ename, 'SMITH','DD',','AA'' from scott.emp; --关键字写错了******* 累世与if elsee --s-------- -------日期格式--------- select sysdate from dual; --获取当前日期 select ename,to_char(HIREDATE,'YYYY-mm-dd') from scott.emp; --2010-12-12 格式 select ename, to_char(HIREDATE,'fmyyyy-mm-dd') from scott.emp; --2010-2-2 格式 select ename, to_char(SAL,'99,999')from scott.emp; --99.999 价格格式 select add_months(sysdate,2) from dual; --在当前日期的月数加上指定日期 select ename ,round(months_between(sysdate,HIREDATE)) from scott.emp; --获取当前日期与指定日期之间的差距 select mext_date(sysdate,'星期一') from dual; --获取当前日期与下个指定日期的数据??????关键字写错了???????????? select to_number('222222') from dual; --转换可以转换为数值的字符串 select ename,to_char(HIREDATE,'yyyy') yure, 2 to_char(HIREDATE,'mm') manths, 3 to_char(HIREDATE,'day')day 4 from scott.emp; --2010 02 02格式