ORACLE学习笔记(二)简单查询

查询语句SELECT时使用频率最高,用途最广的语句,它由许多子句组成,通过这些子句可以完成选择链接投影等功能,选择通过WHERE子句完成、投影通过指定列来完成
链接运算则是把两个及其以上的表链接起来,形成一个结果集合
其完整语法结构如下

SELECT
    [ALL | DISTINCT ]
    TOP n[PERCENT] WITH TIES select_list
    [INTO [new table name]]        
[FROM table_references
[WHERE where_definition]
[GROUP BY {col_name | expr | position}
    [ASC | DESC], ... [WITH ROLLUP]] 
[HAVING where_definition]
[ORDER BY {col_name | expr | position}
    [ASC | DESC] , ...]
[COMPUTE clause]
[FROM BROWSE]

简单查询

  • 仅含有SELECT语句和FROM语句的查询属于简单查询,且SELECT和FROM为必填项,是所有查询都必须用到的两个子句
  • SELECT子句代表想要查询的列,*号表示所有列
  • FROM子句告诉我们从哪里找这些列,可以时视图也可是基本表
  • 在使用SELECT查询时,可以对数字数据和日期数据进行算术运算操作,例如显示上调百分之10以后的薪资
select salary*(1+0.1) from employees 
  • 为了提高阅读性,可以在指定列名后面,空格加上一个新的列名,如果新的名字包含特殊字符则需要使用双引号
select salary*(1+0.1) new_salary form employees
  • 如果需要删除重复出现的行则可以使用DISTINCT关键字,例如查询部门ID
select distinct department_id from employees

WHERE子句

  • 该语句可以筛选从FROM中返回的结果集,完成的是选择操作,例如查询以刘姓开头的员工
select * from employees where first_name like '刘%'
  • %代表任意个字符(0,1,或者多个),_代表任意一个字符
  • 常用的链接运算符有AND和OR,AND表示都满足才返回,OR则为满足其中之一即可
  • 在复合判断条件中,会涉及到运算符的优先级问题,可以合理的使用小括号()解决问题、
  • 在ORACLE中判断一个值可能为TRUE、FALSE或者为UNKNOWN,例如查询一个值是否为20,但是对应的列是NULL,此时查询的结果就是UNKNOWN,而非FALSE
  • 判断条件是否为空的时候,则需要使用IS NULL 或者 IS NOT NULL

ORDER BY子句

  • 如果需要对查询出的结果集进行排序的话则可使用ORDER BY子句
  • ASC为默认的,也就是默认为升序排序,DESC则为降序排序,例子对工资大于2000的员工信息进行降序排序
select * from employees where salary >= 2000 order by salary desc
  • 如果需要对多个列进行排序使用逗号隔开即可,根据前后顺序依次排序
-- 如果工资相同,此时根据年龄降序排序
select * from employees where salary >= 2000 order by salary,age desc

GROUP BY子句

  • 可用于在查询结果集中对记录进行分组,以汇总数据或者为整个分组显示单行的汇总信息
  • 根据user_id对员工的薪资记录进行分组,然后查询员工id,平均薪资,薪资总和,最高薪资和各组的记录数
select user_id, avg(salary), sum(salary), max(salary), conut(user_id) from employees group by user_id
  • 必须满足的条件,SELECT子句后面只能有两类条件:统计函数和进行分组的别名,SELECT子句的
  • 列名必须是进行分组的列,除此之外添加其他的列都是不允许的,但是GROUP BY子句后面的列名可以不出现在SELECT子句中
  • 如果使用WHERE子句,那么所有参加分组计算的数据必须先满足WHERE指定的条件
  • 默认情况下,会根据GROUP BY子句指定的分组进行升序排列,如果需要改变,可以使用ORDER BY子句指定新的排列顺序
  • 与ORDER BY子句类似,GROUP BY子句也可以对多个列进行分组,在这种情况下,GROUP BY子句在主范围内可以进行二次分组
  • GROUP BY子句还可以使用ROLLUP 或者 CUBE,这两个的功能极其相似,在GROUP BY子句使用它们后,将会在查询结果中附加一行汇总信息

HAVING 子句

  • 通常和GROUP BY子句一起使用,在完成分组统计结果后,可以使用HAVING子句对分组的结果进行进一步的筛选
  • HAVING子句与组有关,而WHERE子句与行有关
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值