emp

oracle sql优化

笑着哭i 提交于 2020-01-11 07:16:29
整理一下网上所看到sql优化方法 1 、 使用大写字母书写sql,因为oracle解释器会先将sql语句转换成大写后再解释 2 减少访问数据库的次数,多数情况下一条sql可以达到目的的,就不要使用多条sql。 当执行每条SQL语句时,ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等等。由此可见,减少访问数据的次数,就能实际上减少ORACLE的工作量。 例如: 以下有三种方法可以检索出雇员号等于0342或0291的职员。 方法1(最低效) SELECT EMP_NAME,SALARY,GRADE FROM EMP WHERE EMP_NO=342; SELECT EMP_NAME,SALARY,GRADE FROM EMP WHERE EMP_NO=29; 方法2(高效) SELECT A.EMP_NAME,A.SALARY,A.GRADE, B.EMP_NAME,B.SALARY,B.GRADE FORM EMP A,EMP B WHERE A.EMP_NO=342 AND B.EMP_NO=29 3 减少对表的查询 在含有子查询的SQL语句中,要特别注意减少对表的查询。例如: 低效 SELECT TAB_NAME FROM TABLES WHERE TAB_NAME=(SELECT TAB_NAME FROM TAB_COLUMNS

第7章:子查询

给你一囗甜甜゛ 提交于 2020-01-11 06:31:19
ALL:表示大于子查询结果集中的所有行,即大于最大值。 查询部门编号不为10,且工资比10部门所有员工工资高的员工编号,姓名,职位,工资。 select empno,ename,job,sal from emp where sal>all(select sal from emp where deptno=10) and deptno<>10; = ALL :表示等于子查询结果集中的所有行,即等于所有值,通常无意义。 查询部门编号不为10,且工资和10部门所有员工工资相等的员工编号,姓名,职位,工资。 select empno,ename,job,sal from emp where sal=all(select sal from emp where deptno=10) and deptno<>10; ---------------------练习1 单行子查询------------------------------------------------------ 1.查询入职日期最早的员工姓名,入职日期 select ename,hiredate from emp where hiredate=(select min(hiredate) from emp ) 2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称 select e.ename

Mysql基本练习

六眼飞鱼酱① 提交于 2020-01-11 05:37:01
SELECT DATABASE(); use mybase; //创建表 create TABLE exam ( id INT(11) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), English INT, Chinese INT, Math INT ); SHOW TABLES; //查看表结构 DESC exam; //向表中添加一列 ALTER TABLE exam ADD History INT NOT NULL; //修改列的数据类型 ALTER TABLE exam MODIFY History DOUBLE(7,2); //修改表的列名 ALTER TABLE exam CHANGE History Physics INT NOT NULL; //修改表名 RENAME TABLE exam TO score; desc score; //修改表的字符集 ALTER TABLE score CHARACTER SET GBK; //删除列 ALTER TABLE score DROP Physics; //插入部分列 INSERT into score(id,NAME,English,Chinese,Math) VALUE(1,‘hudie’,90,90,90); INSERT INTO score(id,NAME

第8章:集合运算

别说谁变了你拦得住时间么 提交于 2020-01-10 23:33:46
集合运算:是用来把两个或多个查询的结果集做并、交、差的集合运算,包含集合运算的查询称为复合查询。 注意: 1.多个集合运算符,没有括号,那么从左到右的顺序计算 2.注:INTERSECT (相交) 和 MINUS (相减) 运算不是 ANSI SQL-99 兼容的,他们是 Oracle 特定的。 =============== 联合查询的特点: 1.返回由任一查询结果集包含的行,并且去除重复行,并且按照查询结果集的第一列升序排序。 2.默认安照第一列升序排序 3.两个集合列数和数据类型对应,列的名字可以不一样 例子: select empno,ename from emp union select deptno,dname from dept; 为演示案例,复制如下语句,并执行: 1.创建员工历史岗位表 emp_jobhistory: CREATE TABLE emp_jobhistory( id NUMBER,–流水号 empno NUMBER,–员工编号 job VARCHAR2(9),–岗位 begindate DATE,–开始日期 sal Number(7,2)–在该岗位时工资 ) 2.插入如下数据: INSERT INTO emp_jobhistory VALUES(1,7839,‘TRAINEE’,‘17-11月-81’,500); INSERT INTO emp

Oracle单表查询

点点圈 提交于 2020-01-10 00:10:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 创建和管理表(DDL) --创建表 CREATE TABLE emp1( ID NUMBER(4) NOT NULL, NAME VARCHAR2(20), salary NUMBER(5,2), hire_date DATE ) --修改表 -|增加新列 ALTER TABLE emp1 ADD (birthday DATE)--括号内不要加逗号 -|修改现有的列 ALTER TABLE emp1 MODIFY (birthday VARCHAR2(20)) -|重命名列名 ALTER TABLE emp1 RENAME COLUMN salary TO sal -|删除现有的列 ALTER TABLE emp1 DROP COLUMN birthday -|清空表中数据 TRUNCATE TABLE emp1 --重命名表 RENAME emp1 TO emp2 --删除表 DROP TABLE emp1 -------------------------------------------------------------------------------------- 数据处理 DML --增 -|插入数据 INSERT INTO emp2(NAME, sal, ID, hire_date)

pl/sql编程/存储过程/存储函数/触发器

回眸只為那壹抹淺笑 提交于 2020-01-08 02:16:36
pl/sql编程语言 pl/sql编程语言是对sql语言的扩展,使得sql语言具有过程化编程的特性。 pl/sql编程语言比一般的过程化编程语言,更加灵活高效。 pl/sql编程语言主要用来编写存储过程和存储函数等。 结构: declare --变量声明区域 begin --逻辑操作区域 end ; --可以把整个结构理解为java中的main方法 实例 ---声明方法 ---赋值操作可以使用:=也可以使用into查询语句赋值 declare --变量声明区域 i number ( 2 ) : = 10 ; s varchar2 ( 10 ) : = '小明' ; ena emp . ename % type ; ---引用型变量 emprow emp % rowtype ; ---记录型变量 begin dbms_output . put_line ( i ) ; --类似与控制台输出 dbms_output . put_line ( s ) ; select ename into ena from emp where empno = 7788 ; --将查询到的数据通过into赋值到ena dbms_output . put_line ( ena ) ; select * into emprow from emp where empno = 7788 ; dbms_output

SQL语句——11、子查询

一世执手 提交于 2020-01-06 21:52:47
子查询指嵌入在其他SQL中的select语句,也称嵌套查询. 按照子查询返回结果,可将子查询分为: 单行单列 单行多列 多行单列 多行多列 特点: 优先执行子查询,主查询再使用子查询的结果 子查询返回的列数和类型要匹配 子查询要用括号括起来 子查询返回多行要用多行关系运算符 单行子查询 子查询返回一行记录。 例如:查询和scott在同一部门的员工 select deptno,ename,sal from emp where deptno=(select deptno from emp where ename='SCOTT'); DEPTNO ENAME SAL ---------- ---------- ---------- 20 SMITH 800 20 JONES 2975 20 SCOTT 3000 20 ADAMS 1100 20 FORD 3000 也可以把子查询结果当成一列 select deptno,ename,(select deptno from emp where ename='SCOTT') AA from emp where deptno=10; DEPTNO ENAME AA ---------- ---------- ---------- 10 CLARK 20 10 KING 20 10 MILLER 20 多行子查询

orcale入门基础

江枫思渺然 提交于 2020-01-06 15:30:43
好长时间没写博客了,莫名其妙的就堕落了一波,从今天开始要加油了!!!!! –创建表空间 create tablespace demo --表空间名 datafile 'c:\demo.dbf' --将表空间创建到此地址(注意表空间后缀名为.dbf) size 100 m --表空间初始大小为100m autoextend on --如果表空间被填满允许自动增长 next 10 m ; --表空间每次自动增长的容量 –删除表空间 drop tablespace demo ; –创建用户 create user msg --用户名 identified by msg --用户密码 default tablespace demo ; --此用户绑定的表空间 –给用户授权 –oracle数据库中常用角色 connect–连接角色,基本角色 resource–开发者角色 dba–超级管理员角色 --给msg用户授予dba角色 grant dba to msg ; –用户切换 --切换到msg用户下 conn msg / msg —创建一个person表 create table person ( pid number ( 20 ) , pname varchar2 ( 10 ) ) ; —对表的操作 ---添加一列 alter table person add ( gender number

hibernate中一对多关系的映射

不羁岁月 提交于 2020-01-02 03:53:58
  昨天初次接触hibernate,仅仅弄懂了一对一关系的映射。今天学习了一天又有了新的收获,弄懂了一对多之间关系的映射。 一、一对多的关系映射   建立一对多关系关系的表的原则是将一的一方的主键加入到多的一方的表作为外键。这里以员工和部门为例子来演示。以前不用hibernate时建立pojo类要在员工类Emp中加入一个属性,即部门编号deptid.使用hibernate则不同了,需要在“一”的一方类中加入一个set集合,里面存放“多”的一方的对象。而在“多”的一方的类中需要加入一个“一”方的对象。也就是说在Dept类中需要加入一个set集合,存放Emp对象,因为一个部门里面对应多个员工,所以用一个集合来表示。而每一个员工只能属于一个部门,所以员工类Emp里面需要加入一个Depe类对象,表示所属部门。部门类和员工类的代码如下  1 public class Dept implements Serializable { 2 private int deptId; 3 private String deptName; 4 private Set<Emp> emps = new HashSet<Emp>(); 5 public int getDeptId() { 6 return deptId; 7 } 8 public void setDeptId(int deptId) { 9

study Python 14day(mysql学习)

回眸只為那壹抹淺笑 提交于 2020-01-01 17:24:47
倒数第三个员工信息 SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1; LIMIT m,n : 表示从第m+1条开始,取n条数据; LIMIT n : 表示从第0条开始,取n条数据,是limit(0,n)的缩写 薪资涨15次以上的 SELECT emp_no, COUNT(emp_no) AS t FROM salaries GROUP BY emp_no HAVING t > 15 去重当前薪资 SELECT DISTINCT salary FROM salaries WHERE to_date = '9999-01-01' ORDER BY salary DESC 不是经理的员工 SELECT emp_no FROM employees WHERE emp_no NOT IN (SELECT emp_no FROM dept_manager) title进行分组,显示大于2的组 SELECT title, COUNT(title) AS t FROM titles GROUP BY title HAVING t >= 2 同上,忽略重复的emp_no SELECT title, COUNT(DISTINCT emp_no) AS t FROM titles GROUP BY title HAVING t >= 2