数据库的多表查询

多表查询:

         就是在一条查询语句中,从多张表中一起取出所需要的数据,如果要想进行多表查询,直接在FROM字句之后跟上多个表即可,此时的句法:

         SELECT[DISTINCT]*|列名称[AS][列别名],列名称[AS][列别名]。。。。。FROM 表名称1[表别名],表名称2[表别名2]。。。

          [WHERE 条件]

         [ORDERBY排序的字段1 AS ASC|DESC, 排序的字段2  AS ASC|DESC];

在多表查询中先确定数据量:使用函数COUNT()函数来统计:SELECT COUNT(*) FROM emp;

笛卡尔积:进行多表查询的时候,由于数据库内部的处理机制,会产生无用的数据,这些数据被称为笛卡尔积;

消除笛卡尔积:消除笛卡尔积使用的是关联字段。虽然可以消除掉所有显示的笛卡尔积,但是数据库的原理机制就表示笛卡尔积会永远存在。

如何切换到sh用户:

1.      打开sqlplus:sqlplus/nolog

2.      连接到超级管理员数据库:conn sys/change_on_install AS SYSDBA

3.      切换到pdbmldn数据库:ALTER SESSION CONTAINER=pdbmldn;

4.      打开pdbmldn数据库:ALTER DATEBASE pdbmldn OPEN

注:由于有多张表,可能会有重名字段,所以在进行重名字段查询的时候,前面需要加上表名称,采用“表名.字段”的方式;

范例:

1.       查询所有雇员和部门的全部信息:

SELECT *

FROM emp,dept;

2.       消除笛卡尔积:

SELECT *

FROMemp,dept

WHERE emp.deptno = dept.deptno;

3.       查询每个雇员的编号,姓名,职位,基本工资,部门名称,部门位置信息:

SELECTemp.empno,emp.ename,emp.job,emp.sal,dept.dname,dept.loc

FROM emp,dept

WHERE emp.deptno=dept.deptno;

         第一步:确定需要的数据表;

         第二步:确定关联的字段

         编写按照:FROMWHER SELECT .

注:在多表查询的时候为了方便,为数据表定义别名;

4.       查询出每个雇员的编号,姓名,雇拥日期,基本工资,工资等级

分析:基本工资和工资等级字段关联;

SELECTe.empno,e.ename,e.hiredate,e.sal,s.grade

FROM empe, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

         为了更加清楚的显示出工资等级的信息,现在希望可以按ABCDE的格式显示:

         SELECTe.empno,e.ename,e.hiredate,e.sal,

DECODE(s.grade,1,'E等工资',2,'D等工资',3,'C等工资',4,'B等工资',5,'A等工资')

FROM emp e, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

5.       查询出每个雇员的姓名,职位,基本工资,部门名称,工资所在公司的工资等级:

SELECTe.ename,e.job,e.sal,d.dname,

DECODE(s.grade,1,'E等工资',2,'D等工资',3,'C等工资',4,'B等工资',5,'A等工资') 工资等级

FROM empe, salgrade s,dept d

WHERE e.deptno = d.deptno AND e.sal BETWEEN s.losal ANDs.hisal;

注:如果出现多个消除笛卡尔积的条件,那么往往使用and将这些条件连接起来;每当增加一个关联表都需要设置消除笛卡尔积的条件;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值