Oracle 数据库基础:数据查询与操作

SELECT uname FROM TUser WHERE uname=‘admin’

SELECT 字段名列表 FROM 表名 WHERE 条件;

在Oracle数据库中,对象是属于模式的,每个账户对应一个模式,模式的名称就是用户名称。在表名前面要添加模式的名字,在表的模式名和表名之间用“.”分隔。

我们以不同的账户登录数据库时,就进入了不同的模式,比如登录到STUDENT 账户,就进入了STUDENT模式。

而在STUDENT模式要查询属于SCOTT模式的表,就需要写成: SELECT * FROM SCOTT.EMP;但如果登录用户访问属于用户模式本身的表,那么可以省略表名前面的模式名称。 SELECT * FROM emp。

在查询语句中可以有算术表达式,它将形成一个新列,用于显示计算的结果,通常称为计算列。表达式中可以包含列名、算术运算符和括号。括号用来改变运算的优先次序。常用的算术运算符包括: * +:加法运算符。 * -:减法运算符。 * *:乘法运算符。 * /:除法运算符。

SELECT ename,sal,sal*(1+20/100) FROM emp;

我们可以为表的列起一个别名,它的好处是,可以改变表头的显示。特别是对于计算列,可以为它起一个简单的列别名以代替计算表达式在表头的显示。

SELECT ename AS 名称, sal 工资 FROM emp;

如果在显示结果中存在重复行,可以使用的关键字DISTINCT消除重复显示。

SELECT DISTINCT job FROM emp;

如果要在查询的同时排序显示结果,可以使用如下的语句: SELECT 字段列表 FROM 表名 WHERE 条件 ORDER BY 字段名1 [ASC|DESC][,字段名2 [ASC|DESC]...];

ORDER BY从句后跟要排序的列。ORDER BY 从句出现在SELECT语句的最后。 排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序,默认的排序顺序为升序。如果要降序,必须书写DESC关键字。若省略ASC和DESC,则默认为ASC,即升序排序

降序排序 :SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;

多列排序:可以按多列进行排序,先按第一列,然后按第二列、第三列......。SELECT ename,deptno,hiredate FROM emp ORDER BY deptno,hiredate;

如果要对计算列排序,可以为计算列指定别名,然后按别名排序。select table_name t,tablespace_name s from user_tables order by t

运算的优先顺序是NOT,AND,OR。如果要改变优先顺序,可以使用括号。

 

 

 

 

 

 

 

相等连接有一个问题:如果某个雇员的部门还没有填写,即保留为空,那么该雇员在查询中就不会出现;或者某个部门还没有雇员,该部门在查询中也不会出现。 为了解决这个问题可以用外连,即除了显示满足相等连接条件的记录外,还显示那些不满足连接条件的行,不满足连接条件的行将显示在最后。外连操作符为(+),它可以出现在相等连接条件的左侧或右侧。出现在左侧或右侧的含义不同,这里用如下的例子予以说明。

显示雇员的名称、工资和所在的部门名称及没有任何雇员的部门。 执行以下查询: SELECT ename,sal,dname FROM emp,dept WHERE emp.deptno(+)=dept.deptno; left outer join 即左外连接方式: 

SELECT ename,sal,dname FROM emp left outer join dept on emp.deptno=dept.deptno;

最后是一个自连接的训练实例,自连接就是一个表,同本身进行连接。对于自连接可以想像存在两个相同的表(表和表的副本),可以通过不同的别名区别两个相同的表。

子查询一般出现在SELECT语句的WHERE子句中,Oracle也支持在FROM或HAVING子句中出现子查询。 子查询比主查询先执行,结果作为主查询的条件,在书写上要用圆括号扩起来,并放在比较运算符的右侧。 子查询可以嵌套使用,最里层的查询最先执行

例子:

SELECT ename,sal FROM emp WHERE sal<(SELECT sal FROM emp WHERE empno=7788) AND deptno=(SELECT deptno FROM emp WHERE empno=7788);

如果子查询返回多行的结果,则我们称它为多行子查询。多行子查询要使用不同的比较运算符号,它们是IN、ANY和ALL。

例子:

SELECT * FROM emp WHERE sal < all (SELECT sal FROM emp WHERE job = 'MANAGER');

==SELECT * FROM emp WHERE sal < (select min(sal) from (SELECT sal FROM emp WHERE job = 'MANAGER'));

如果子查询返回多列,则对应的比较条件中也应该出现多列,这种查询称为多列子查询。

例子:

SELECT * FROM emp WHERE (job,deptno) =(SELECT job,deptno FROM emp WHERE empno=7788);

同于上面语句: SELECT * FROM emp WHERE job =(SELECT job FROM emp WHERE empno=7788) and deptno =(SELECT deptno FROM emp WHERE empno=7788) ;

猜你喜欢

转载自www.cnblogs.com/kxykxykxy/p/11877209.html