--先创建一个包含下面信息的表,并添加一些数据,待用 --EMPLOYEE_ID NOT NULL NUMBER(6) --FIRST_NAME VARCHAR2(20) --LAST_NAME NOT NULL VARCHAR2(25) --EMAIL NOT NULL VARCHAR2(25) --PHONE_NUMBER VARCHAR2(20) --HIRE_DATE NOT NULL DATE --JOB_ID NOT NULL VARCHAR2(10) --SALARY NUMBER(8,2) --COMMISSION_PCT NUMBER(2,2) --MANAGER_ID NUMBER(6) --DEPARTMENT_ID NUMBER(4) --SELECT employee_id as id,CONCAT(first_name,last_name) as --name from employees SELECT * FROM employees; --AS 可以改变标题样式,相当于使用别名 --WHERE 限制查询条件,数字可以不用单引号,字符串和日期等都需要单引号 --查询条件可以使用若是苏子可以使用四则运算,日期可以叫做加减操作表示加减天数 select *from employees where salary = 9000; -- WHERE 条件中可以使用< , > , <= , >= , = , !=, -- AND且 ,OR或,可有多个条件 --LIKE模糊查询 SELECT *FROM EMPLOYEES WHERE SALARY<9000; SELECT *FROM employees WHERE SALARY !=9000; SELECT *FROM EMPLOYEES WHERE SALARY<9000 AND HIRE_DATE<'1997-06-21'; --LIKE模糊查询 %:表示0到多个字符;_:表示单个字符 SELECT *FROM employees WHERE first_name LIKE 'Al%y%'; --IN ,NOT IN SELECT *FROM EMPLOYEES WHERE SALARY IN(9000,8000) ;--相当于或的作用,不表示范围,选出salary为9000和8000的 SELECT *FROM EMPLOYEES WHERE SALARY NOT IN(9000,8000); --BETWEEN...AND...筛选符合某个取值范围内的数据 SELECT *FROM EMPLOYEES WHERE SALARY BETWEEN 8000 AND 9000; --IS NULL, IS NOT NULL SELECT *FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL AND SALARY BETWEEN 8000 AND 9000; SELECT *FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL AND SALARY BETWEEN 8000 AND 9000; --ANY,ALL -- >ANY大于最小 , <ANY 小于最大 -- >ALL 大于最大, <ALL 小于最小 SELECT *FROM EMPLOYEES WHERE SALARY >ANY(3500,4000,4500); SELECT *FROM EMPLOYEES WHERE SALARY >ALL(3500,4000,9000); --DISTINCT 过滤掉重复值 SELECT DISTINCT SALARY FROM EMPLOYEES --ORDER BY 排序;默认是asc升序; ASC升序; DESC降序 SELECT *FROM EMPLOYEES WHERE SALARY >ALL(3500,4000,9000) ORDER BY SALARY DESC; --多条件排序,若第一列数据形同,再以第二列排序,以此类推,每一列都需要设置排序 SELECT *FROM EMPLOYEES WHERE SALARY >ALL(3500,4000,9000) ORDER BY SALARY ASC,first_name ASC; --聚合函数分组函数/多行函数/集合函数 :主要完成一些数据统计等工作,例如算平均值、统计部门人数等 --统计最大值 SELECT MAX(SALARY) max_sal,MIN(salary) min_sal FROM employees --AVG 用来计算表达式的平均值 ;SUM 用来计算和值 SELECT AVG(SALARY) avg_sal,SUM(SALARY) sum_sal FROM EMPLOYEES; --统计记录条数 SELECT COUNT(SALARY) TOTAL_NUM FROM EMPLOYEES WHERE SALARY >8000 --聚合函数忽略NULL值,当某一列包含NULL值时,比较下面两条语句 SELECT AVG(commission_pct) avg_commission_pct FROM employees; --null值会忽略 SELECT AVG(NVL(commission_pct,0)) avg_commission_pct FROM employees; --把null值转换成了0计算 --GROUP BY 把记录划分若干小组 --HAVING 对分组后的数据进一步限制 SELECT salary ,MAX(salary) max_sal FROM employees GROUP BY salary HAVING MAX(salary)>8000 ORDER BY salary; --查询语句的执行顺序,可以提高查询效率 --FROM:执行顺序为 从后往前,从右往左,数据量较少的表尽量放在后面; --WHERE:执行顺序 自下而上,从右往左,最大的过滤条件写在最后面; --GROUP BY:执行顺序从左往右分组 --HAVING :尽量避免使用,having会在检索后才对结果进行过滤,需要排序等操作,消耗资源;尽量把过滤条件放在WHERE中; --SELECT: 少用 * ,尽量用字段名称,消耗时间; --ORDER BY :执行顺序 从左往右,消耗资源 --关联查询 --实际应用中根据需要,一般需要查询两个或两个以上的表或视图,这种查询叫做 连接查询; --连接查询一般建立在存在互相关系的的父子表之间; --笛卡尔积:关联操作的每一个表的每一行都和其他表的每一行组合; --例如一个表X条数据,另一个表Y条数据,则两个表的查询结果会返回X*Y条数据; --等值连接 --创建连个表待用 CREATE TABLE animal( name VARCHAR2(20), leg NUMBER(2) ) INSERT INTO animal(name,leg) VALUES('CAT',4); INSERT INTO animal(name,leg) VALUES('MONKEY',4); INSERT INTO animal(name,leg) VALUES('MEN',2); ALTER TABLE animal ADD( id NUMBER(2)) INSERT INTO animal(name,leg,id) VALUES('MEN',2,3); DELETE FROM animal WHERE NAME = 'MEN' AND ID IS NULL; UPDATE animal SET ID=1 WHERE NAME = 'CAT' UPDATE animal SET ID=2 WHERE NAME = 'MONKEY' SELECT *FROM animal; CREATE TABLE local( place VARCHAR2(20) ) INSERT INTO local(place) VALUES('南京'); INSERT INTO local(place) VALUES('四川'); ALTER TABLE local ADD(ID NUMBER(2)) UPDATE local SET ID = 1 WHERE place ='南京'; UPDATE local SET ID = 2 WHERE place ='四川'; SELECT *FROM local; --内连接:返回满足连接条件的数据记录 SELECT animal.name,local.place FROM animal ,local; --出现笛卡尔集,通常没什么意义,数量大时还容易溢出,大部分需要添加关联条件 --要避免笛卡尔集,n张表就需要n-1个连接条件 SELECT ani.name,loc.place FROM animal ani ,local loc; --给表添加别名可以简化SELECT语句复杂度 SELECT ani.name,loc.place FROM animal ani ,local loc WHERE ani.id=loc.ID; SELECT ani.name,loc.place FROM animal ani JOIN local loc ON (ani.ID =loc.id); --外连接:不仅能返回满足连接条件的记录,还将返回不满足条件的记录 --左外连接 --右外连接 --全外连接:除了返回满足连接条件的记录,还会返回不满足条件的所有其他行,是 左外连接和右外连接 查询结果的综合 --自连接是一种特殊的连接查询,数据的来源是一个表,即关联关系来自单表中的多个列; --自连接是通过将表用别名虚拟成两个表的方式实现,可以是等值或不等值连接;
Oracle Day03(SQL)
猜你喜欢
转载自www.cnblogs.com/kwinwei/p/10584142.html
今日推荐
周排行