一、简单查询语句
格式:select *| 具体的列名 as [别名] from 表名称
防止重复查询结果的关键字:distinct (用法:用于列表的前面)
二、限定查询
格式:select *| 具体的列名 from 表名称 where 条件表达式
null:表示该列中没有值
三、in关键字
语法:select * from 表名称 where 列名 in (值1,值2...)
select * from 表名称 where 列名 not in (值1,值2...)
四、模糊查询
关键字:like
两个通配符: “%” 可以匹配任意长度的内容
“_” 可以匹配一个长度的内容
用法:select * from 表名称 where 列名 like ‘_M%‘;
五、运算符
不等于:<> 或 !=
六、排序
语法:select * 列名 from 表名称 where 条件表达式 order by 排序1,排序2
asc:升序,默认排序方式
desc:降序
七、单行函数
7.1字符函数
a.将小写字母转为大写字母
函数:upper()
用法:select upper(‘smith‘)from dual;
b.将字符串变为小写字母
函数:lower()
用法:select lower(‘HELLO WORLD‘)fromdual;
c.将字符串的首字母变为大写
函数:initcap()
用法:select initcap(‘HELLO WORLD‘)fromdual;
d.字符串的连接
函数:concat()
用法:select concat(‘hello‘,‘world‘)fromdual;
e.字符串的截取
函数:substr()
用法:select substr(‘hello‘,0,3) 3:表示截取的长度
倒着截取:select ename,substr(ename,-3)from emp; //保留所有雇员姓名的后三位
f.获取字符串长度
函数:length()
用法:select length(‘hello‘)from dual;
g.字符串的替换
函数:replace()
用法:selectreplace(‘hello‘,‘l‘,‘x‘)from dual;
7.2 数值函数
a.四舍五入
函数:round()
用法:
1、执行四舍五入操作,可以指定保留的小数位
selectround(789.536) from dual; --->800
selectround(789.436) from dual; --->789
selectround(789.436,2) from dual; --->789.44
2、可以直接对整数进行四舍五入的进位
selectround(789.536,-3) from dual; --->1000
selectround(789.536,-2) from dual; --->800
selectround(789.536,-4) from dual; --->0
b.截断小数位
函数:trunc()
用法:
1、数值从小数点截断,只保留整数部分
selecttrunc(789.536) from dual; --->789
2、设置小数位的保留位数
selecttrunc(789.536,2) from dual; --->789.53
selecttrunc(789.536,-2) from dual; --->700
c.取余(取模)
函数:mod()
用法: select mod(10,3) from dual; --->1
7.3 日期函数
a.关键字:sysdate
b.用法:selectsysdate from dual;
c.其余几个日期函数
months_between() --->求出给定日期范围的月数
add_months() --->在指定日期上加上指定的月数,求出之后的日期
next_day() --->从起始日期开始,计算下个某个星期几的具体日期
last_day() --->求出给定日期的最后一天日期
例:计算星期数: 使用公式:当前日期-雇佣日期=天数 / 7 = 星期数
select empno,ename,round((sysdate-hiredate)/7)from emp;
查询出所有雇员的编号,姓名,和入职的月数
selectempno,ename,round(months_between(sysdate,hiredate)) from emp;
查询出当前日期加上4 个月后的日期
select add_months(sysdate,4) from dual;
查询出下一个给定日期数
select next_day(sysdate,‘星期一‘) from dual;
查询给定日期的最后一天,也就是给定日期的月份的最后一天
select last_day(sysdate) from dual;
7.4 转换函数
a.类型
to_char()-->转换成字符串
to_number()-->转换成数字
to_date()-->转换成日期
b.例题:查询所有雇员的雇员编号,姓名和雇佣时间
1、按照年、月、日进行拆分,首先需要用to_char()函数,拆分时指定拆分的通配符:
年-->y,年是四位数字,所以使用yyyy表示
月-->m,月是两位数字,所以使用mm表示
日-->d,日是两位数字,所以使用dd表示
select empno,ename,to_char(hiredate,‘yyyy‘)year,to_char(hiredate,‘mm‘) month,to_char(hiredate,‘dd‘) day from emp;
2、使用to_char()进行日期显示的转换功能
select empno,ename,to_char(hiredate,‘yyyy-mm-dd‘)from emp;
或:select empno,ename,to_char(hiredate,‘yyyy"年"mm"月"dd"日"‘) from emp;
3、去掉月份前的0,使用关键字:fm
selectempno,ename,to_char(hiredate,‘fmyyyy-mm-dd‘) from emp;
4、使用“,”将工资的每 3位进行一个分隔
select empno,ename,to_char(sal,‘99,999‘)from emp; 格式化时9代表的事占位符
5、显示工资数的两种表示符号:
L-->表示Local的缩写,以本地的语言进行金额的显示
$-->表示美元
select empno,ename,to_char(sal,‘$99,999‘)from emp;
c.to_number():将字符串变为数字的函数
selectto_number(‘123‘) + to_number(‘123‘) from dual;
d.to_date():将字符串变为date 的数据
selectto_date(‘2012-09-12‘,‘yyyy-mm-dd‘) from dual;
7.5 通用函数
a.将一个指定的null值变为指定的内容
函数:nvl()
用法:selectempno,ename,(sal+nvl(comm,0))*12 from emp;
b.类似于if...elseif...else语句的函数
函数:decode()
语法:decode(col/expression,search1,result1[search2,result2,......][,default])
说明:col/expression-->列名或表达式
search1.search2......-->为用于比较的条件
result1、result2......-->为返回值
如果col/expression 和search i 相比较,相同的话返回 result i ,如果没有与col/expression相匹配 的结果,则返回默认值default。
用法:select decode(1,1,‘内容是1‘,2,‘内容是2‘,3,‘内容是3‘) from dual; --->内容是1
例:查询出雇员的编号,姓名,雇佣日期及工作,将工作替换为中文
select empno,ename,decode(job,‘CLERK‘,‘业务员‘,‘SALESMAN‘,‘销售人员‘,‘MANAGER‘,‘经理‘,‘ANALYST‘,‘分析员‘,‘PRESIDENT‘,‘总裁‘)from emp;