单表查询

1.对于日期型数据, 做 *, / 运算不合法:select sysdate,sysdate -1 from dual;
select 5/2 from dual; 2.5

2.空值是未指定的或不可预知的值,空值不是0或者空格,凡是空值参与的运算,结果都为空

3.列的别名:别名如果由两个单词构成,中间有空格,必须加上双引号
select employee_id id,12*salary “annual salary” from employees

4.连接符:把列与列、列与字符连接在一起,用”||”表示
SELECT employee_id||’,’||first_name||’,’||last_name “OUT_PUT” FROM employees;

5.默认情况下,查询会返回全部行,包括重复行
select distinct department_id from employees;
以下语法错误:select last_name, distinct department_id from employees

使用WHERE子句过滤数据(WHERE子句紧随FROM子句):

1.使用比较运算:等于 = , 赋值 := , 不等于 <>或!=
select salary from employees where last_name = ‘Higgins’ (区分大小写)
select last_name from employees where salary>=4000 and salary<7000

2.使用BETWEEN AND,IN,NULL运算:
between…and… 在两个值之间(包含边界)
IN(set) 等于值列表中的一个(与多个 or 功能相同)
LIKE 模糊查询
IS NULL 空值 is not null 非空

雇用时间在1998-02-01到1998-05-01之间:
where to_char(hire_date,‘yyyy-mm-dd’) between ‘1998-02-01’ and ‘1998-05-01’
名字含有字符a的员工:where last_name like ‘%a%’
名字末位是字符a的员工:where last_name like ‘%a’
名字的第二位是字符a的员工:where last_name like ‘a%’
名字的第三位是字符a的员工:where last_name like ‘__a%’
名字中含有_的员工:where last_name like '%#
%’ escape ‘#’
姓名中有字母a和e : last_name like ‘%e%a%’ or last_name like ‘%a%e%’

3.使用逻辑运算AND,OR,NOT
使用ORDER BY子句进行排序:默认从低到高排列
1.从高到低排列:order by salary desc
2.从低到高排列:order by salary asc
3.多列进行排序:select last_name from employees order by salary asc,last_name asc
4.利用别名排序:select 12*salary annual_sal from employees order by annual_sal

(3)单行函数
1.字符函数:
大小写控制函数:lower(‘GUIGU’),UPPER(‘GuiGu’),initcap(‘at gui gu’)
字符控制函数:concat(‘Hello’,‘World’),substr(‘HelloWorld’,1,5)(从1开始),length(‘HelloWorld’)
substr(字符串,截取开始位置,截取长度)
判断字母首次出现的位置:instr(‘helloJava’,‘l’) 3 , instr(‘helloJava’,‘w’) 0
在左填充和在右填充:select salary,Lpad(salary,10,’ ‘),rpad(salary,10,’ ') from employees
将首尾的去掉:select trim(‘h’ from ‘xhellohworldhh’) from dual xhellohworld
将所有的都替换:select replace(‘abcdab’,‘b’,‘m’) from dual

2.数字函数:DUAL是一个‘伪表’,可以用来测试函数和表达式
ROUND(四舍五入):select round(435.45,1),round(435.45),round(435.45,-1)from dual; 435.5 ,435,440
TRUNC(截断):select trunc(435.45,1),trunc(435.45),trunc(435.45,-1)from dual; 435.4,435,430
MOD(求余): select mod(1100,300) from dual; 200

3.日期(包含两个值:日期和时间)函数:日期与日期之间只能做减法运算
判断工作的天数:select sysdate-hire_date from employees
判断工作的月份:select months_between(sysdate,hire_date) from employees
向指定日期中加入若干个月:select add_months(sysdate,2),add_months(sysdate,-3) from dual
指定日期距离最近的下一个星期:select next_day(sysdate,‘星期日’) from dual
hire_date是每个月倒数第二天来公司的员工: where hire_date = last_day(hire_date)-1

4.转换函数:Data <--------> Varchar2 <-----------> number
隐性数据类型转换:若字符串中没有特殊符号,Oracle自动完成的转换
显性数据类型转换:若字符串中有特殊符号(例如:4,567.89),需要使用显式转换
日期转换为字符串:to_char(sysdate,‘yyyy"年"mm"月"dd"日 "hh:mi:ss’) =‘2015年09月12日 15:46:56’;
字符串转换为日期:to_date(‘1994-06-07’,‘yyyy-mm-dd’) = hire_date

number转换为字符串:
select to_char(1234567.89,‘999,999,999.99’)from dual; 1,234,567.89
select to_char(1234567.89,‘000,000,999.99’) from dual; 001,234,567.89
select to_char(1234567.89,’$000,000,999.99’) from dual; $001,234,567.89
select to_char(1234567.89,‘L000,000,999.99’) from dual; ¥001,234,567.89
字符串转换为number:
select to_number(‘¥001,234,567.89’,‘L000,000,999.99’) from dual; 1234567.89

5.通用函数:这些函数适用于任何数据类型,同时也适用于空值
NVL函数:如果为 NULL ,转换为一个已知的值,可以使用的数据类型有日期、字符、数字
select salary*(1+nvl(commission_pct,0)) from employees
当department_id为null时,显示’没有部门’:select nvl(to_char(department_id,‘999’),‘没有部门’) from employees
NVL2函数:NVL2(expr1,expr2,expr3):expr1不为NULL,返回expr2;expr1为NULL,返回expr3

6.流程控制函数:
CASE表达式:
case department_id when 10 then salary1.1 when 20 then salary1.2 else salary1.3 end new_sal
DECODE表达式:
decode(department_id,10,salary
1.1,20,salary1.2,salary1.3) new_sal

============================== 5.分组函数 ======================================

组函数:
(1)可以对任意数据类型的数据使用 MIN 和 MAX 函数:
(2)AVG和SUM函数只能对number类型的数据操作
(3)COUNT(*)返回表中记录总数,该函数适用于任何数据类型
COUNT(commission_pct):返回 commission_pct 不为空的记录总数
COUNT(DISTINCT expr):返回expr非空且不重复的记录总数
使用GROUP BY函数对数据分组:
在 SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中
包含在 GROUP BY 子句中的列不必包含在 SELECT 列表中
使用HAVING子句过滤分组结果集:
HAVING子句不要求与FROM紧挨着
不能在WHERE子句中使用组函数,但可以在HAVING子句中使用组函数

(四)嵌套组函数:
输出各部门当中平均工资最高的部门:
select max(avg(salary)) from employees group by department_id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值