多表查询(学习笔记)

语法:

SELECT [DISTINCT] * | 列名称 [AS]别名,........
FROM 表名称1 [别名1],表名称2 [别名2],...
[WHERE 条件(s)]
[ORDER BY 排序的字段 1,ASC| DESC,排序的字段2 ASC| DESC,....] 
  • 示例一 查询所有员工的信息和部门信息

   

SELECT * FROM EMP,DEPT;

查询结果可以看到有56条记录,而emp表只有14条,dept表只有4条,很多重复记录,这就是多表查询所产生的笛卡尔积

消除笛卡尔积,在where中加入条件来消除

  • 示例二 查询所有员工的信息和部门信息
SELECT * FROM emp e,dept d
WHERE e.deptno=d.deptno;

这样结果就正常了

  •    示例三 查询每个员工的编号、姓名、职位、基本工资、部门名称、部门位置
SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno=d.deptno;
  • 示例四 查询出每个员工的编号、姓名、入职日期、基本工资、工资等级

此时要想进行等级查询就要用要salgrade表,但是salgrade表中并没有字段与emp表中字段相对应,但是在salgrade表中有losal(最低工资)、hisal(最高工资)用于表示一个工资等级的范围,所以,可以通过BETWEEN...AND进行笛卡尔积的消除

SELECT e.empno,e.ename,e.hiredate,e.sal,s.grade
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
  • 示例五 示例四中的工资等级替换 1显示为E等级工资,2显示为D等级工资3显示为C等级工资,4显示为B等工资,5显示为A等工资
SELECT e.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;
  • 示例六 查询每个员工的姓名、职位、基本工资、部门名称、工资等级

数据在3张表中emp,dept,salgrade

SELECT e.ename,e.sal,d.dname,
DECODE(s.grade,1,‘E等工资‘,
                2,‘D等工资‘,
                3,‘C等工资‘,
                4,‘B等工资‘,
                5,‘A等工资‘
) 工资等级
FROM emp e,dept d,salgrade s
WHERE e.deptno=d.deptno
    AND e.sal BETWEEN s.losal AND s.hisal;
时间: 2024-10-07 06:13:27

多表查询(学习笔记)的相关文章

分组统计查询(学习笔记)

查询出公司每个月支出的工资总和 --查询出公司每个月支出的工资总和 SELECT SUM(sal) FROM emp; 查询出公司的最高工资,最低工资和平均工资 --查询出公司的最高工资,最低工资和平均工资 SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp; 统计出公司最早雇佣和最晚雇佣的雇佣日期 --统计出公司最早雇佣和最晚雇佣的雇佣日期 SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期

精通SQL结构化查询---学习笔记1

1.数据库体系结构的三级模式为:外模式.概念模式.内模式. 内模式又称存储模式,是对数据的物理结构和存储方式的描述.内模式是由数据库系统提供的数据定义语言定义的. 概念模式又称数据库模式,是数据库中全部数据的逻辑结构的描述.概念模式以某种数据模型为基础,并用模式定义语言定义这些内容.概念模式可以看作是现实世界中的实体在具体数据库系统中的实现. 外模式又称用户模式或子模式,通常由概念模式导出,是概念模式的子集.其主要功能是定义了允许用户操作的数据.可以将外模式理解为用户看到的数据视图. 2.一个完

精通SQL结构化查询---学习笔记2

1. SQL中表的规定: * 每张表的表名必须以字母开头,最大长度为30个字符. * 一张表可以由若干列组成.同一张表中,列名惟一,列名也称为属性名或字段. * 同一列的数据必须有相同的数据类型. * 表中的每一列值必须是不可分割的基本数据项. * 表中的一行称为一个元组,相当于一条记录.2. SQL数据类型2.1.字符类型:包括固定长度和可变长字符变量,固定长度字符变量少于定义的长度时,数据库会自动在字符右边以空格填补到20个字符:可变长字符串可以存储任意长度的字符(其最大存储长度取决于采用的

MySQL 多表查询 学习与练习

一.介绍 首先先准备表 员工表和部门表 #建表 create table department( id int, name varchar(20) ); create table employee1( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); #插入数据 insert into depa

PHP 文件上传表单 ~~学习笔记

PHP文件上传 通过PHP,可以把文件上传到服务器. ------------------------------------------------------------------------------------------------------------------- 创建一个文件上传表单:允许用户从表单上传文件时非常有用的: 下面是一个供上传文件的html表单: <html> <body> <form action="upload_file.php

精通SQL结构化查询---学习笔记3

对于汉字的排序,是按首字母的顺序来排序的.使用DISTINCT是要要付出代价的:因为要去掉重复值,必须对结果关系进行排序,相同的元组排列在一起,只有按这种方法对元组进行分组才能去掉重复值,而这一工作甚至比查询本身还费时间. 使用'*'通配符时要慎重,在不需要查询所有列时,尽量采用前面介绍的单列查询或多列查询,以免占用过多的资源. ORDERBY子句一定要放在所有子句的最后,默认是ASC(递增排序):ORDER BY后面可 以采用1.2.3--进行排序,1.2.3--代表了SELECT后面列的次序

0006-css引入内联和内部和外联样式表-前端学习笔记

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>css样式</title> <!--次选推荐:引入内部样式表--> <!-- <style type="text/css"> p{ color:blue; font-size:15px; } </style> --> <!-

oracle的多表插入学习笔记

----------------------------multitable  insert------------------------------------------------insert all----------------------------------------------------select * from emp ; create table sal_history (empid NUMBER(4),hiredate date, SAL number(7,2) )

Hibernate单表映射学习笔记之一——hibernalnate开发环境配置

1.什么是ORM? Object/Relationship Mapping:对象/关系映射 2.写SQL语句不好之处: (1)不同数据库使用的SQL语法不同(PL/SQL.T/SQL) (2)同样的功能在不同的数据库中有不同的实现方式(分页SQL) (3)过分依赖SQL语句对程序的移植和拓展不利 3.Hibernate (1)ORM框架技术 (2)对JDBC进行了非常轻量的对象封装 4.其他ORM框架技术 (1)Mybatis(前身为iBatis) (2)Toplink(现为Oracle As