Oracle 查询02
模糊查询
1."_"代表任意一位字符
2.”%“表示任意位数的任意字符
3.模糊查询关键字“LIKE”
模糊查询的格式
SELECT *
FROM 数据来源,数据来源…
WHERE 需要模糊查询的字段 LIKE 模糊查询的关键字
例如:查询姓名中第二个字母为A的人员信息
排序查询
1.排序查询要求指定的字段必须是日期或者是数字
2.关键字 ORDER BY
排序查询格式
SELECT *
FROM 数据来源,数据来源…
WHERE 判断条件
ORDER BY 需要排序的字段 ASC/DESC
ASC:升序
DESC:降序
如果写默认是升序
例如:按薪资升序查询
多表查询
多表查询格式
SELECT *
FROM 数据来源,数据来源…
WHERE 判断条件
ORDER BY 需要排序的字段 ASC/DESC
1.在多表查询中最终查询出来的数据量是多张表的乘积里面有很多的重复的数据,这种现象叫做笛卡尔积,消除笛卡尔积需要增加一个WHERE子句,WHERE的过滤条件是多张表中关联的字段。
2.多表查询又叫连接查询
3.多表查询会产生笛卡尔积,所以数据量大的时候不要使用。
例如:查询每个员工的编号,姓名,职位,薪资,薪资等级,部门名称和位置。
内连接查询
上面的多表查询就是一个内连接查询
内连接查询的特征是满足过滤条件的数据才会被显示出来
内连接的其他实现方式
使用 INNER JOIN 实现,在ON之后去掉笛卡尔积
外连接查询
右外连接查询:可以让右表不满足条件的显示出来。
左外连接查询:可以让左表不满足条件的显示出来。
全连接查询:可以让左表和右表不满足条件的都显示出来
(为了方便观察我在emp表中增加了也个人员 编号为1001 姓名为;张三 ,薪资为30000 ,岗位为:清洁工 如图)
Oracle特有方式右外连接查询案例
Oracle特有方式左外连接查询只是把“(+)”换到了右边,这样就是Oracle特有方式左外连接查询方式了。
通用的外连接查询
左外连接查询:使用 LEFT OUTER JION 实现,在ON之后去掉笛卡尔积
右外连接查询:使用 RIGHT OUTER JION 实现,在ON之后去掉笛卡尔积
全外连接查询:使用 FULL OUTER JION 实现,在ON之后去掉笛卡尔积
通用左外连接查询
通用右外连接查询
通用全外连接查询
一些常用的函数
Oracle提供的函数中常用的几个
COUNT(*/字段):统计出查询到的数据量。
SUM(字段):计算出指定字段的数据之和(字段为数值才右意义)
AVG(字段):计算出指定字段的平均值(字段为数值才右意义)
MAX(字段):统计出指点字段的最大值(字段为数值或日期才右意义)
MIN(字段):统计出指点字段的最小值(字段为数值或日期才右意义)
SYSDATE:获得当前日期
NVL(eExpression1,eExpression2):如果eExpression1不为空就返回eExpression1,如果eExpression1为空
eExpression2不为空就返回eExpression2,如果eExpression1,eExpression2都为空就返回null。
注意:COUNT()会统计所有的数据量,不会对数据进行过滤。
COUNT(字段)会统计该字段数据不为空的数据量。
COUNT( DISTIGCT 字段) 会统计该字段数据不为空且去掉重复之后的数据量。
分组统计查询
关键字:GROUP BY
格式
SELECT *
FROM 数据来源,数据来源…
WHERE 判断条件
GROUP BY 需要分组的字段名
ORDER BY 需要排序的字段 ASC/DESC
语句执行顺序为:第一步 FROM 子句,第二步 WHERE 子句,第三步 GROUP BY 子句 ,第四步 SELECT 子句,第五步 ORDER BY 子句。
例如:统计出每个部门的名称,人数,以及每个部门的最高薪资和最低薪资。
分组查询需要注意的问题
1.如果SELECT 子句中出现了统计函数,且sql语句中没有GROUP BY子句,那么SELECT 子句中只能出现统计函数,不能出现其他字段。
2.如果在SELECT 子句中出现了统计函数,且右GROUP BY 子句,则在SELECT子句中只能出现统计函数和分组的字段
3.如果SELECT子句中出现了嵌套统计函数那么不管有没有 GROUP BY 子句 ,SELECT 子句中都不能有统计函数之外的任何字段。
4.WHERE 子句不能使用分组统计函数