ORACLE SQL基础1

  • 格式:doc
  • 大小:246.00 KB
  • 文档页数:9

查询出每一位雇员姓名、职位、领导的姓名

 简单查询

SELECT [distinct] * 字段 [别名]

from 表 [别名]

消除重复列:

四则运算:

连接查询字段"||":

查询显示格式:雇员编号:7370,雇员姓名:SMITH,基本工资是:800,职位是:CLERK

 限定查询

SELECT [distinct] * 字段 [别名]

from 表 [别名]

[where 条件(s)]

最常见的条件基本关系运算:>,>=,<,<=,!=(<>),between...and...,like,in,is

null,and,or,not;

关系运算:

查询出工资在1500到3000之间的雇员信息(empno,ename,job,sal,comm)

查询出职位是CLERK或者是SALESMAN的雇员信息

查询出职位是CLERK,或者是SALESMAN的信息,并且要求这些雇员的工资大于1200

查询所有不是CLERK的信息

范围判断:

between 最小值 and 最大值

查询出工资在1500到3000之间的雇员信息

查询出工资不在1500到3000之间的雇员信息

要求查询出在1981年雇佣的全部雇员信息

3、判断是否为空:is (not) null

查询领取奖金的雇员 查询不领取奖金的雇员

4、制定范围的判断:in 操作符(in (null))

查询雇员号为7521,7566,7876,7901的雇员信息

查询雇员号不是7521,7566,7876,7901的雇员信息

5、模糊查询:like子句

要求查询雇员姓名中以字母A开头的雇员信息

要求查询出雇员姓名中第二个字母是A的雇员信息

要求查询出雇员姓名中带有字母A的雇员信息

 数据的排序操作

要求查询出所有的雇员信息,按照工资由高到底排序,如果工资相同,则按照雇佣日期由早到晚排序

 单行函数

单行函数主要分为以下几类:

字符函数、数字函数、转换函数、通用函数

字符函数

主要进行字符串的操作

upper(字符串|列):按照大写返回

lower(字符串|列):按照小写返回

initcap(字符串|列):开头首字母大写

length(字符串|列):求出长度

查询出姓名长度正好是5的雇员信息

replace(字符串|列,'原有','替换为'):进行替换

substr(字符串|列,开始点 [,结束点]):字符串截取:

语法一:SUBSTR(字符串|列,开始点),表示从开始点一直截取到结尾;

语法二:SUBSTR (字符串|列,开始点,截取几个),表示从开始点截取到结束点,截取部分内容; 要求截取每个雇员姓名的后三个字母??

数字函数

round(数字 |列 [,保留小数的位数]):四舍五入的操作;

trunc(数字 |列 [,保留小数的位数]):舍弃指定位置的内容;

MOD(数字1,数字2):取余数;

转换函数

数字(number),字符串(varchar2),日期(date)的相互转换

to_char(字符串|列,格式字符串):将日期或者是数字变为字符串显示;

to_date(字符串|列,格式字符串):将字符串变为date数据显示;

to_char()函数:

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

数字

select to_char(1234567890,'L999,999,999,999,999') from dual;

to_date()函数:

select to_date('1990-1-1', 'yyyy-mm-dd') from dual;

通用函数

通用函数有两个NVL()、DECODE()

NVL()函数

查询出每个雇员的全部年薪

NVL(列,要转换的数字,一般是0)

DECODE()函数

要求显示全部雇员的职位,但是这些职位要求替换为中文显示:

DECODE(数值 | 列,判断值1,显示值1,判断值2,显示值2......)

select empno,ename,decode(job,'CLERK','职员','SALESMAN','销售人员','PRESIDENT','总裁','MANAGER','经理','ANALYST','分析人员') 职位 from

emp;

 多表查询(多表查询效率不高,但是使用的比较多,一般用在表的数据量较小的时 候,我们对于数据量较大的表间查询采用的是子查询的方式) 查询出雇员信息和工作地点

使用SH:sales,costs

注意:表.字段名(使用别名)

 如果select之后的列有歧义,这时候务必标明表.列。

 为表起别名(务必,必须,查询方便)一旦为表起别名,原表明不可再语句中继续使用,通篇使用别名,否则就会报错!

 where后面的关联条件(=)一般为主外键关联,但是其它可用没有错误的关联也可以使用,但不能保证数据的参照完整性!!!

 where后面的关联个数与表的个数有关,N表查询至少有N-1个关联。

 多表查询的过程先出现笛卡儿积,然后根据where条件对笛卡儿积进一步筛选。

查询出每一位雇员的编号、姓名、职位、部门名称、位置

select empno,ename,job,dname,loc

from emp e,dept d

where e.deptno = d.deptno;

查询出每一位雇员姓名、职位、领导的姓名

 多表查询可以来自一张表,为表起别名可以实现这样的功能。

select e.empno,e.ename,e.job,m.ename

from emp e,emp m

where e.mgr = m.empno;

查询出每个雇员的编号、姓名、基本工资、领导的姓名、部门名称和位置

select e.empno,e.ename,e.sal,m.ename,d.dname,d.loc

from emp e,emp m,dept d

where e.mgr = m.empno and e.deptno = d.deptno;

练习:查询出每一个雇员的编号、姓名、工资、领导的姓名、部门名称、工资的等级。

select e.empno,e.ename,e.sal,m.ename,d.dname,s.grade

from emp e,emp m,dept d,salgrade s where e.mgr = m.empno and e.deptno = d.deptno and e.sal between s.losal

and s.hisal;

进一步要求:将每一个工资等级替换成具体的文字信息

例如:1替换成五等工资,2替换成四等工资,3替换成三等工资,4替换成二等工资,5替换成一等工资

select e.empno,e.ename,e.sal,d.dname,decode(s.grade,'1','五等','2','四等','3','三等','4','二等','5','一等') 工资等级

from emp e,dept d,salgrade s

where e.deptno = d.deptno and e.sal between s.losal and s.hisal;

create view cxgy

as

select e.empno,e.ename,e.sal,d.dname,s.grade

from emp e,dept d,salgrade s

where e.deptno = d.deptno and e.sal between s.losal and s.hisal;

 左、右连接(+)

查询出雇员编号,姓名,工资,雇员部门编号,雇员部门名称信息(dept=40)

查询出每一位雇员姓名、职位、领导的姓名(KING)

1、查询出雇员编号,姓名,工资,雇员部门编号,雇员部门名称信息(dept=40)

select empno,ename,sal,d.deptno,dname

from emp e,dept d

where e.deptno = d.deptno;

2、查询出每一位雇员姓名、职位、领导的姓名(KING)

select e.empno,e.ename,e.job,m.ename

from emp e,emp m

where e.mgr = m.empno;

以上都因为where匹配使得数据不全

左右连接

连接方向: 左连接:+ 在右 右连接:+ 在左

1、查询出雇员编号,姓名,工资,雇员部门编号,雇员部门名称信息(dept=40)

select empno,ename,sal,d.deptno,dname

from emp e,dept d

where e.deptno(+) = d.deptno;

2、查询出每一位雇员姓名、职位、领导的姓名(KING)

select e.empno,e.ename,e.job,m.ename

from emp e,emp m

where e.mgr = m.empno(+);

 其他数据库SQL

表连接的SQL语法

SELECT table1.column,table2.column

FROM table1 [CROSS JOIN table2]|

[NATURAL JOIN table2]|

[JOIN table2 USING(column_name)]|

[JOIN table2 ON(table1.column_name = table2.column_name)]|

[LEFT[RIGTH]FULL OUTER JOIN table2 ON(table1.column_name =

table2,column_name)];

1、交叉连接(CROSS JOIN):产生笛卡尔积

select * from emp cross join dept;

2、自然连接(NATURAL JOIN):自动找到匹配的关联字段,消除笛卡尔积(需要通过约束指定)

select * from emp natural join dept;

3、ING子句:指定一个消除笛卡尔积的关联字段

select * from emp join dept using(deptno);

4、JOIN...ON:用户指定一个消除笛卡尔积的条件

select * from emp join dept on(emp.deptno = dept.deptno);

5、连接方向改变