一、select查询语句
1、where子句(对查询结果进行筛选、过滤)
常用的比较运算符:= != > < >= <=
字符串在比较相等时,一样使用符号!
格式:select 列名 from表名 where 查询条件;
案例:查询员工信息(id,last_name,salary)要求id等于10
语句:select id,last_name,salary,from emp where id =10;
练习:查询员工的信息(id,last_name,salary)要求id 大于10
语句:select id,last_name,salary from emp where id >10;
2、特殊的条件:
极限条件:永真条件,永假条件
永真条件:
select * from emp where 1=1;
永假条件:
select * from emp where 1!=1;
3、对于字符串进行比较时候,需要注意的地方:
- 在oracle数据库中字符串需要使用单引号引住!
- 在oracle中字符串是大小写敏感的,也就是比较时区分大小写。
案例:查询员工查询的信息(id,last_name,salary)条件:last_name等于Chang
语句:select id,last_name,salary from emp where last_name='Chang';
二、特殊的运算符(关键字)
1、between:表示一个闭合区间(包含开始和结尾)
使用方法:。。。where字段between 初始范围 and 最大范围;
案例:查询员工的信息(id,last_name,salary,条件为:工资在800到1000内的员工
语句:select id,last_name,salary from emp where salary between 800 and 1000;
2、in:表示从某个取值列表中匹配!
使用方法:。。。where字段in(取值1,取值2,取值3....取值n);
案列:查询领导编号(manager_id)为1或者是2或3的员工信息(id,last_name,salary)
语句:select id,last_name,salary from emp where manager_id in(1,2,3);
3、对于null值如何进行判断
对于null值得判断,需要使用 is null 来判断
格式:。。。。where 字段 is null;
案例:查询领导编号为null的员工;
语句:select id from emp where manager_id is null;
4、模糊查询——关键字:like
使用方式:...where 字段名 like '模糊格式文本';
文本中可以存在两种特殊含义的符号(通配符):
- _:表示一个任意的文本字符
- %:表示0-n个任意的文本字符
- 转义字符:escape
案例1:查询以晓阳开头的文本:
语句:。。。where 字段名 like '晓阳%';
案例2:查询包含娃娃的文本:
语句:。。。where 字段名 like '%娃娃%';
案例3:查询倒数第三个字为轩的文本
语句:。。。where 字段名 like ‘%轩__’
案例4:查询第二个字符为飞的文本
语句:。。。where 字段名 like '_飞%';
案例5转义字符的使用:查询user_table表格中table_name 中以s_开头的数据
select table_name from user_tables where table_name like 's\_%' escape '\';
三、逻辑条件连接符
1、用于连接多个条件
- 与:and
案例:查询员工的ID为6,并且领导编号为2的员工信息(id,last_name,salary)
语句:select id,last_name,salary from emp where id=6 and manager_id=2;
- 或: or
案例:查询员工的薪资为1400或者1450的员工的信息(id,last_name,salary)
select salary,id,last_name from emp where salary=1400 or salary=1450;
- 非:not(闭区间的not使用,得到不属于闭区间的内容)
格式:。。。where 字段名称 not between 最小范围 and最大范围;
案例:获取员工的信息(id,last_name,salary)条件为薪资不在1000-1300之间的员工
语句:select id,last_name,salary from emp where salary not between 1000 and 1300;
- in的使用:从结果集中忽略列表中的值!
格式:where字段名称 not in(值1,值2...值n);
案例:查询员工薪资不是1400和1450的员工信息(id,last_name,salary)
语句:select id,last_name,salary from emp where salary not in (1400,1450);
- is null的not使用
格式:where 字段名称 is not null (取出不为null的数据行)
案例:获取员工的信息,条件为manager_id 不为null
语句:select id ,last_name,salary from emp where manager_id is not null;
四、order by 子句的排序(order by 子句如果出现必须放在select语句的最后面)
order by可以对查询的结果集,指定排序的规则
规则:升序(ASC)\降序(desc)
1、格式:order by排序的字段【排序顺序】;
案例:查询所有员工的信息(Id,last_name,salary),按照部门编号dept_id进行升序;
语句:select id,last_name,salary from emp order by dept_id asc;
特殊情况:null在参与排序时候,是最大的!
案例:查询员工的信息(id,last_name,salary,manager_id),按照领导编号(manager_id)降序排序
语句:select id,last_name,salary,manager_id from emp order by manager_id desc;
2、多字段多规则排序
格式:order by 排序字段1 规则1,排序字段2 规则2.。。。排序字段N 规则N;
按照两个排序规则解释含义:
在排序时,按照排序字段1与规则1进行排序,如果排序字段1的值相同,则按照字段2排序
案列:按照部门编号(dept_id)降序排列,如果部门编号相同,则按照员工薪资倒序排列,如果员工薪资倒序排列,如果员工工资相同按照员工编号(id)升序排列
语句:select id,last_name,salary,manager_id from emp order by manager_id desc,salary desc,id asc;
五、函数
1、单行函数(针对每一行的数据都会返回一个结果,dual表格进行函数的测试)
常用的字符串处理单行函数
- upper(列名/字符串):把字符串结果改为全大写
案例:select upper(‘guojiao’) from dual;
- lower(列名/字符串):把字符串结果改为全小写
案例:select lower('Guo Jiao')from dual ;
- initcap(列名/字符串):单词首字母大写
案列:select initcap ('dong fei')from dual;
- length(列名/字符串):获取字符串的长度
案例:select length(‘guojiao’)from dual
- substr(参数1,参数2,参数3):截取字符串
参数1:要被截取的字符串
参数2:截取的开始下标从参数1开始,支持负数(负数表示倒数的下标)
参数3:截取的长度
案例:select substr('12345678',0,5)from dual;结果:12345
select substr('12345678',1,5)from dual;结果:12345
select substr('12345678',-5,5)from dual;结果:45678
- concat(参数1,参数2):拼接字符串
将参数1和参数2进行拼接返回
select concat('guojiao','ai bian cheng') zhenai from dual;
- replace(参数1,参数2,参数3):替换字符串中的内容
参数1:要被替换内容的原字符串
参数2:在参数1中存在的要被替换的字符串片段
参数3:替换的新的字符串片段内容
案例:select replace(‘guojiao ai biancheng’,'biancheng','ji suan ji bian cheng') zhenai from dual ;
- nvl(参数1,参数2)处理空值
如果参数1为空则返回参数2,如果参数1不为null则返回参数1;
案例:select nvl(manager_id,0)from emp;
常用的处理number类型数据的单行函数:
- round(参数1,参数2):四舍五入
参数1:要被四舍五入的数字
参数2:要保留的小数点后的位数,可以省略,默认值是0
案列:select round (3.1415926,3)from dual;结果:3.142
- trunc(参数1,参数2):截取数字
参数1:要截取的数字
参数2:要保留的小数点后的位数,可以省略,默认为0
案例:select trunc(3.1415926,3)from dual;
- to_char(参数 1,参数2):格式化显示
参数1:要被格式化的数字/列名
参数2:格式化的模板,是一个字符串类型的参数
模板中的特殊字符:
-FM:格式的开头,可以忽略
-L:本地(语言环境)货币单位
-$:美元符号
-9:分两种情况:
1、数字9出现在小数点的后面,在模板中表示1-9的任意数字(不建议)
2、数字9出现在小数点前面,在模板中表示0-9的任意数字
-0:分两种情况:
1、数字0出现在小数点的后面,在模板中表示0-9的任意数字
2、数字0出现在小数点的前面,数字的前面,在模板中表示强制显示前导零
- . :小数点
-,:分隔符
案列:查询s_emp表格中所有的salary,并将其进行格式化显示;
格式化:例如2500美元应显示为$002,500.00
格式化:FM$099,999.00(建议)|FM$099,999.99(不建议)
select to_char(salary,'FM$099,999.00'),id ,last_name from emp;
注意:在小数后的后面建议编写0,不要写9!
- 函数的相互嵌套
函数在调用时候,都有返回值存在,将一个函数的返回值传递给另一个参数进行使用!
练习:查询emp表格中的last_name最后的5个字符截取(substr)出,以大写(upper)方式显示出来
语句:select upper(substr(last_name,-5,5))from emp;