1.数据库原理
1.1文件存储
对数据的存储需求一直存在。数据保存的方式,经历了手工管理、文件管理,数据库管理阶段。
文件存储方式保存数据的弊端:
1.缺乏对数据的整体管理,数据不便修改;
2.不利于数据分析和共享;
3.数据量急剧增长,大量数据不可能长期保存在文件中。
4.数据库应运而生,是人们存放数据、访问数据、操作数据的存储仓库。
1.2关系数据库
关系数据库使用关系模型把数据组织到表中,包括Oracle、SQL Server、MySQL等数据库产品。
2.Oracle数据库基础查询
2.1基本查询语句
2.1.1FROM子句
SQL查询语句的语法如下:
SELECT FROM table;
其中:SELECT用于指定要查询的列,FROM指定要从哪个表中查询。如果要查询所有列,可以在SELECT后面使用*号,如果只查询特定的列,可以直接在SELECT后面指定列名,列名之间用逗号隔开。例句如下,查询dept表中的所有记录:SELECT * FROMdept;
2.1.2.使用别名
在SQL语句中可以通过使用列的别名改变标题的显示样式,或者表示计算结果的含义,使用语法是列的别名跟在列名后,中间可以加或不加一个“AS”关键字。例如:
SELECT empno AS id ,ename "Name", sal * 12 "Annual Salary" FROM emp;
别名可以直接写,不必用双引号引起来。但是如果希望别名中区分大小写字符,或者别名中包含字符或空格,则必须用双引号引起来。
2.1.3WHERE子句
在SELECT语句中,可以在WHERE子句中使用比较操作符限制查询结果,是可选的。
当查询条件中和数字比较,可以使用单引号引起,也可以不用,当和字符及日期类型的数据比较,则必须用单引号引起。例如查询部门10下的员工信息:
SELECT * FROM empWHERE deptno = 10;
查询职员表中职位是’SALESMAN’的职员:
SELECT ename, sal, job FROM emp WHERE job = ‘SALESMAN‘;
2.1.4 SELECT子句
如果只查询表的部分列,需要在SELECT后指定列名,例如:SELECTempno, ename, sal, job FROMemp;
2.2查询条件
2.2.1.使用>, =, <=, !=, <>, =
在WHERE子句中的查询条件,可以使用比较运算符来做查询。比如:查询职员表中薪水低于2000元的职员信息:
SELECT ename, sal FROM emp WHERE sal< 2000;
查询职员表中不属于部门10的员工信息(!=等价于<>):
SELECT ename, sal, job FROM emp WHERE deptno != 10;
查询职员表中在2002年1月1号以后入职的职员信息,比较日期类型数据:
SELECT ename, sal, hiredate FROM emp
WHERE hiredate>to_date(‘2002-1-1‘,‘YYYY-MM-DD‘);
2.2.2 使用AND,OR关键字
在SQL操作中,如果希望返回的结果必须满足多个条件,应该使用AND逻辑操作符连接这些条件,如果希望返回的结果满足多个条件之一即可,应该使用OR逻辑操作符连接这些条件。例如:查询薪水大于1000并且职位是’CLERK’的职员信息:
SELECT ename, sal, job FROM emp
WHERE sal> 1000 AND job = ‘CLERK‘;
查询薪水大于1000或者职位是’CLERK’的职员信息:
SELECT ename, sal, job FROM emp
WHERE sal> 1000 OR job = ‘CLERK‘;
2.2.3使用LIKE模糊查询
当用户在执行查询时,不能完全确定某些信息的查询条件,或者只知道信息的一部分,可以借助LIKE来实现模糊查询。LIKE需要借助两个通配符:
%:表示0到多个字符
_:标识单个字符
这两个通配符可以配合使用,构造灵活的匹配条件。例如查询职员姓名中第二个字符是‘A’的员工信息:
SELECT ename, job FROM emp WHERE ename LIKE ‘_A%‘;
2.2.4使用IN和NOT IN
在WHERE子句中可以用比较操作符IN(list)来取出符合列表范围中的数据。其中的参数list表示值列表,当列或表达式匹配于列表中的任何一个值时,条件为TRUE,该条记录则被显示出来。
IN页可以理解为一个范围比较操作符,只不过这个范围是一个指定的值列表,NOT IN(list) 取出不符合此列表中的数据记录。例如查询职位是MANAGER或者CLERK的员工:
SELECT ename, job FROM emp WHERE job IN (‘MANAGER‘, ‘CLERK‘);
查询不是部门10或20的员工:
SELECT ename, job FROM emp WHERE deptno NOT IN (10, 20);
2.2.5BETWEEN…AND…
BETWEEN…AND…操作符用来查询符合某个值域范围条件的数据,最常见的是使用在数字类型的数据范围上,但对字符类型和日期类型数据也同样适用。例如查询薪水在1500-3000之间的职员信息:
SELECT ename, sal FROM emp
WHERE sal BETWEEN 1500 AND 3000;
2.2.6使用IS NULL和IS NOT NULL
空值NULL是一个特殊的值,比较的时候不能使用”=”号,必须使用IS NULL,否则不能得到正确的结果。例如查询哪些职员的奖金数据为NULL:
SELECT ename, sal, comm FROM emp
WHERE comm IS NULL;
2.2.7使用ANY和ALL条件
在比较运算符中,可以出现ALL和ANY,表示“全部”和“任一”,但是ALL和ANY不能单独使用,需要配合单行比较操作符>、>=、
> ANY : 大于最小
< ANY:小于最大
> ALL:大于最大
< ALL:小于最小
例如,查询薪水比职位是“SALESMAN”的人高的员工信息,比任意一个SALESMAN高都行:
SELECT empno, ename, job, sal, deptno
FROM emp
WHERE sal> ANY (
SELECT sal FROM emp WHERE job = ‘SALESMAN‘);
2.2.8查询条件中使用表达式和函数
当查询需要对选出的字段进行进一步计算,可以在数字列上使用算术表达式(+、-、*、/)。表达式符合四则运算的默认优先级,如果要改变优先级可以使用括号。
算术运算主要是针对数字类型的数据,对日期类型的数据可以做加减操作,表示在一个日期值上加或减一个天数。
查询条件中使用字符串函数UPPER,将条件中的字符串变大写后再参与比较:
SELECT ename, sal, job FROMempWHERE ename = UPPER(‘rose‘);
查询条件中使用算数表达式,查询年薪大于10w元的员工记录:
SELECT ename, sal, job FROM empWHERE sal * 12 >100000;
2.2.9使用DISTINCT过滤重复
数据表中有可能存储相同数据的行,当执行查询操作时,默认情况会显示所有行,不管查询结果是否有重复的数据。当重复数据没有实际意义,经常会需要去掉重复值,使用DISTINCT实现。例如查询员工的部门编码,包含所有重复值:
SELECT deptno FROM emp;
查询员工的部门编码,去掉重复值:
SELECT DISTINCT deptno FROM emp;
DISTINCT后面的列可以组合查询,下例查询每个部门的职位,去掉重复值。注意是deptno和job联合起来不重复:
SELECT DISTINCT deptno, job FROM emp;
原文:https://www.cnblogs.com/qiujiabao/p/10022872.html