数据库的查询和视图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018/5/11
先乘除后加减。 在表达式中同一优先级的运算符计算次序是 从左到右。 如果使用了括号,括号中的运算优先。 如果有多重括号嵌套,内存括号中的运算优 先。
查询所有列
查询单个表中所有列 查询多个表中所有列
2018/5/11
select [ distinct | * | 列名称 [AS][列别名],列名称[AS][列别名],…from 表名称 [表别名];
第4章 数据库的查询和视 图
01
选择、投影和连接
02
数据库的查询
03
数据库视图
1
选择、投影和连接
主要内容
01
选择
投影
02
03
连接
选择
——查询满足条件的行
学生表
学号 104215 104211 104210 姓名 王敏 李晓林 胡小平 男 女 男 性别 74 82 88 平均成绩
选择性别为女且平 均成绩在80分以上 的行
列名 AS 列别名 使用列别名 ename as 员工姓名
列名 列别名
2018/5/11
empno 员工编号
1.检索emp表员工的编号、姓名和年基本工资、日基本工资信息, 并为查询结果设置列别名
select empno as "员工编号",ename as "员工名称",sal*12 as "年基本工资",sal/30 as "日基本 工资" from emp; 2.检索emp表的指定列(empno、ename、job),不使用任何 关键字而直接为这些列指定中文的别名
LIKE运算符可以使用以下两个通配符“%”和“_”。其中: “%”:代表0个或多个字符。 “_”:代表一个且只能是一个字符。
选择行
3.范围比较
IN关键字
用于范围比较 的关键字
BETWEEN关键字
选择行
4.空值比较
空值(NULL)从技术上来说就是未知的、不确定的值, 但空值与空字符串不同,因为空值是不存在的值,而空 字符串是长度为0的字符串。
在emp表中,查询出既不是最高工资,也不是最低工资的员工信息 SQL> select empno,ename,sal from emp where sal > (select min(sal) from emp) and sal < (select max(sal) from emp);
选择行
(2)多行子查询 多行子查询是指返回多行数据的子查询语句。当在 WHERE子句中使用多行子查询时,必须使用多行比较符(IN、ANY、ALL)。
选择后的结果
学号 104211 姓名 李晓林 女 性别 82 平均成绩
投影
——查询满足条件的列
学生表
学号 104215 104211 104210 姓名 王敏 李晓林 胡小平 男 女 男 性别 74 82 88 平均成绩
选择后的结果 对“学号”和“平 均成绩”投影
学号 104215 104211 104210 平均成绩 74 82 88
连接后的表
T3 C2 C2 T4 10 0 T5 A2 A2 T6 C2 D1
10
5 20
A1
A1 D2
B1
C2 C2
自然连接
5 20
2
数据库的查询
主要内容
01
选择列
连接
02
选择行
统计
03
04
05
排序
பைடு நூலகம்
为列指定别名
不使用列别名 使用列别名
2018/5/11
看下面这两种查询结果,哪 个看着比较顺眼呢?
常用的伪列
rowid和rownum
rowid rownum
2018/5/11
数据库中的每一行都有一个行地址,rowid伪列返回该行地址。可以 使用rowid值来定位表中的一行,通常情况下,rowid值可以唯一地标 识数据库的一行。 对于一个查询返回的每一行,rownum伪列返回一个数值代表的次序。 返回第一行的rownum值为1,第二行的rownum值为2,以此类推。 通过使用rownum伪列,用户可以限制查询返回的行数
查询特定列 伪列
2018/5/11
如果想查找单个数据怎么办?
2018/5/11
买 雪地鞋,手套 从 百货大楼
查询特定列
SELECT子句后面可以加想要查询的列名,用“,”隔开
语法
SELECT column_name1,column_name2,column_name3,column_name FROM 表名称;
连接
3.外连接
外连接通常有以下三种:
左外连接:关键字为LEFT OUTER JOIN或LEFT JOIN。 右外连接:关键字为RIGHT OUTER JOIN 或RIGHT JOIN。 完全外连接:关键字为FULL OUTER JOIN或FULL JOIN。
2018/5/11
在SCOTT模式下,同时查询dept和salgrade表中的所 有数据 分析:
要想“同时查询dept和salgrade表中的所有数据”
就在from子句中指定两个数据表dept和salgrade
查询语句:
select * from dept, salgrade;
2018/5/11
查询特定列
1.查询emp表的rowid列
select rowid from emp;
2.从emp表中查询前5条数据
select * from emp where rownum < 6;
2018/5/11
选择行
1.表达式比较
比较运算符的格式为: expression { = | < | <= | > | >= | <> | != }expression
查询emp表中没有奖金的员工信息
SQL> select empno,ename,sal,comm from emp where comm is null;
选择行
5.子查询
(1)单行子查询 单行子查询是指返回一行数据的子查询语句。当 在WHERE子句中引用单行子查询时,可以使用单行比较运算符(=、>、<、 >=、<=和<>)。
2018/5/11
带有表达式的SELECT子句
在使用SELECT语句时,对于数字数据和日期数据都可 以使用算术表达式。在SELECT语句中可以使用算术运 算符,包括(+)、减(-)、乘(*)、除(/)和括号。
算术运算符是有优先级
检索emp表的sal列,把其值调整 为原来的1.1倍
select ename, sal , sal*(1+0.1) from emp;
在emp表中,查询不是销售部门(SALES)的员工信息 SQL> select empno,ename,job from emp where deptno in (select deptno from dept where dname<>'SALES');
选择行
(3)关联子查询 在一些特殊需求的子查询中,内查询的执行需要 借助于外查询,而外查询的执行又离不开内查询的执行,这时,内查询 和外查询是相互关联的,这种子查询就被称为关联子查询。
2018/5/11
查询单个表中所有列
要查询表中所有列
在SELECT子句后面使用星号(*)来实现
2018/5/11
在SCOTT模式下,在SELECT语句中使用星号(*) 来检索dept表中所有的数据 第一步: 连接SCOTT模式
connect scott/tiger
第二步: 查询dept表中所有的数据
使用简短的表别名就可以替代原有较长的表名称,这样就可以 大大缩减语句的长度。
通过DEPTNO(部门号)列来关联emp表和dept表,并检索这两个表中相关 字段的信息。
SQL> select e.empno as 员工编号, e.ename as 员工名称, d.dname as 部门 from emp e,dept d where e.deptno=d.deptno and e.job='MANAGER';
2018/5/11
查询结果中排除重复行
为了排除重复行,需要使用DISTINCT关键字
在SCOTT模式下,显示emp表中的job(职务)列,要求显示的“职务” 记录不重复 select distinct job from emp;
2018/5/11
distinct的作用是消除重复内容,但是所谓的消除重复的内容, 是指一条完整的数据全部是重复的,如果多行记录只有一列重 复而其他列不重复,那么也是无法消除的。 查询emp表的员工编号和职位 当查询比较大的表时应尽可能地避免使用DISTINCT关键字
分析
列别名:年-基本工资,包含特殊符号“-”,而且别 名没有用双引号括起来
2018/5/11
排除重复行
查询结果中包含重复行 查询结果中排除重复行
2018/5/11
查询结果中包含重复行
默认情况下,查询结果会包含所有满足条 件的结果,其中可能会包含重复行。
在SCOTT模式下,显示emp表中的job(职务)列
2018/5/11
在SCOTT模式下,检索emp表中指定的列 (job、ename、empno)
分析
用SELECT语句来查询job、ename、empno,只要 在SELECT后面写job、ename、empno就可以啦
查询语句
select job、ename、empno from emp;
2018/5/11
2018/5/11
看下面这个例子
检索emp表员工的编号、姓名和年基本工资、日基本工资信息。 分析:
年基本工资 日基本工资信息
sal*12 sal/30
查询语句: select empno,ename,sal*12,sal/30 from emp;
2018/5/11
使用列别名
列名 [AS] 列别名
select empno "员工编号",ename "员工名称",job "职务" from emp;
2018/5/11
注意使用双引号
如果别名中包含了特殊字符,或想让别名原 样显示,就要使用双引号把别名括起来。
“试一试”中的第一个查 询,如果这样写:
select empno as "员工编号",ename as "员工名称",sal*12 as 年-基本工资,sal/30 as "日基本工 资" from emp;
伪列
定义
一种数据类型,唯一标识一条记录,物理位置的一个id,基 于64位编码的18个字符。 它并不是真实的存在于数据表中的 列,所以被称为伪列。 伪列可以从表中查询,但是不能插 入、更新或删除。
2018/5/11
伪列的用途
1.能以最快的方式访问表中的一行 2.能显示表的行是如何存储的 3.作为表中唯一标识
连接
等值连接
A表
T1 1 6 2 T2 T3 A 1 F 2 B 0 N 3 M T4 T5
B表 T1 = T3
等值连接
T1 1 T2 A
连接后的表
T3 1 T4 3 T5 M
2
B
2
0
N
自然连接
A表
T1 T2 T3 T1 1 100 20 5 T4 100 2 0 10
B表
T5 A1 B2 A2 A2 T6 D1 C1 D1 C2 T1 T2 A1 D2
查询emp表中工资(sal)大于1500的数据记录 SQL> select empno,ename,sal from emp where sal > 1500;
选择行
2.模式匹配
——LIKE谓词
LIKE谓词表达式的格式为: string_expression [NOT] LIKE string_expression[ESCAPE ‘escape_character’]
在emp表中,使用“关联子查询”检索工资大于同职位的平均工资的员工信 息 SQL> select empno,ename,sal from emp f where sal > (select avg(sal) from emp where job = f.job) order by job;
连接
1.表别名
连接
2.内连接 内连接是一种常用的多表关联查询方式,一般使用关键字INNER JOIN来实现。其中,INNER关键字可以省略,当只使用JOIN关键字时, 语句只表示内连接操作。
通过deptno字段来内连接emp表和dept表,并检索这两个表中相关字段的信 息。 SQL> select e.empno as 员工编号, e.ename as 员工名称, d.dname as 部门 from emp e inner join dept d on e.deptno=d.deptno;
select * from dept;;
2018/5/11
想一想
如果在SYSTEM模式中,查询emp表,要如何 进行查询呢?
如果这样做:
select * from emp;
应该这样做:
select * from soctt.emp;
2018/5/11
查询多个表中所有列
要查询多个表中所有列
在FROM子句后面指定多个数据表,用逗号隔开
相关文档
最新文档