十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
表的连接是指在一个SQL语句中通过表与表之间的关连 从一个或多个表中检索相关的数据 大体上表与表之间的连接主要可分四种 分别为相等连接 外连接 不等连接和自连接 本文将主要从以下几个典型的例子来分析Oracle表的四种不同连接方式:
为兰溪等地区用户提供了全套网页设计制作服务,及兰溪网站建设行业解决方案。主营业务为成都做网站、网站制作、成都外贸网站建设、兰溪网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
相等连接
通过两个表具有相同意义的列 可以建立相等连接条件
只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中
例 查询员工信息以及对应的员工所在的部门信息;
SELECT * FROM EMP DEPT; SELECT * FROM EMP DEPT WHERE EMP DEPTNO = DEPT DEPTNO;
REM 显示工资超过 的员工信息以及对应的员工的部门名称
外连接
对于外连接 Oracle中可以使用 (+) 来表示 i可以使用LEFT/RIGHT/FULL OUTER JOIN 下面将配合实例一一介绍 除了显示匹配相等连接条件的信息之外 还显示无法匹配相等连接条件的某个表的信息
外连接采用(+)来识别
A) 左条件(+) = 右条件;
代表除了显示匹配相等连接条件的信息之外 还显示右条件所在的表中无法匹配相等连接条件的信息
此时也称为 右外连接 另一种表示方法是:
SELECT FROM 表 RIGHT OUTER JOIN 表 ON 连接条件
B) 左条件 = 右条件(+);
代表除了显示匹配相等连接条件的信息之外 还显示左条件所在的表中无法匹配相等连接条件的信息
此时也称为 左外连接
SELECT FROM 表 LEFT OUTER JOIN 表 ON 连接条件
例 显示员工信息以及所对应的部门信息
无法显示没有部门的员工信息
无法显示没有员工的部门信息
SELECT * FROM EMP DEPT WHERE EMP DEPTNO = DEPT DEPTNO;
直接做相等连接:
SELECT * FROM EMP JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;
REM 显示员工信息以及所对应的部门信息 显示没有员工的部门信息
SELECT * FROM EMP DEPT WHERE EMP DEPTNO(+) = DEPT DEPTNO; SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;
REM 显示员工信息以及所对应的部门信息 显示没有部门的员工信息
SELECT * FROM EMP DEPT WHERE EMP DEPTNO = DEPT DEPTNO(+); SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;
不等连接
两个表中的相关的两列进行不等连接 比较符号一般为 BEEEN AND
REM SALGRADE DESC SALGRADE; SELECT * FROM SALGRADE;
REM 显示员工的编号 姓名 工资 以及工资所对应的级别
SELECT EMPNO ENAME SAL SALGRADE * FROM SALGRADE EMP WHERE EMP SAL BEEEN LOSAL AND HISAL;
REM 显示雇员的编号 姓名 工资 工资级别 所在部门的名称;
SELECT EMPNO ENAME SAL GRADE DNAME FROM EMP DEPT SALGRADE WHERE EMP DEPTNO = DEPT DEPTNO AND EMP SAL BEEEN LOSAL AND HISAL;
自连接
自连接是数据库中经常要用的连接方式 使用自连接可以将自身表的一个镜像当作另一个表来对待 从而能够得到一些特殊的数据 下面介绍一下自连接的方法:
将原表复制一份作为另一个表 两表做笛卡儿相等连接
例 显示雇员的编号 名称 以及该雇员的经理名称
SELECT WORKER ENAME WORKER MGR MANAGER EMPNO MANAGER ENAME FROM EMP WORKER EMP MANAGER
lishixinzhi/Article/program/Oracle/201311/16733
Oracle中SQL语句连接字符串的符号为||
复制代码
代码如下:
select
catstr(tcdm)
||
(',')
from
T_YWCJ_RWCJR
where
cjrjh='009846'
and
rwid='12050'
and
jsdm='CJY'
拼接成一条数据并连接一个","
变量直接写,要连接字符串的话,用 || 这个符号,后面的字符串用单引号引。
变量 V_str 字符串' select emp from table where '
连接后为:' select emp from table where ' || V_str
和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLServer中的加号“+”一样。
比如执行下面的SQL语句:
SELECT '工号为'||FNumber||'的员工姓名为'||FName FROM T_Employee
WHERE FName IS NOT NULL
除了“||”,Oracle还支持使用CONCAT()函数进行字符串拼接,比如执行下面的SQL语句:
SELECT CONCAT('工号:',FNumber) FROM T_Employee
如果CONCAT中连接的值不是字符串,Oracle会尝试将其转换为字符串,比如执行下面的SQL语句:
SELECT CONCAT('年龄:',FAge) FROM T_Employee
与MYSQL的CONCAT()函数不同,Oracle的CONCAT()函数只支持两个参数,不支持两个以上字符串的拼接,比如下面的SQL语句在Oracle中是错误的:
SELECT CONCAT('工号为',FNumber,'的员工姓名为',FName) FROM T_Employee
WHERE FName IS NOT NULL
运行以后Oracle会报出下面的错误信息:
参数个数无效
如果要进行多个字符串的拼接的话,可以使用多个CONCAT()函数嵌套使用,上面的SQL可以如下改写:
代码如下:
SELECT CONCAT(CONCAT(CONCAT('工号为',FNumber),'的员工姓名为'),FName) FROM
T_Employee
WHERE FName IS NOT NULL