- 模糊查询:like,需要占位符或者通配符。占位符包括:
下划线_,表示某个数字或字符仅出现一次。
%百分号,任意字符出现任意次数。
--查询名字以S开头的用户
select * from emp where ename like('S%');
--查询名字以S开头且倒数第二个字符为T的用户
select * from emp where ename like('S%T_');
注意:使用like时候要慎重,like效率比较低。
- escape,使用转义字符,可以自定义转义字符。
--查询名字中带有%的用户
select * from emp where ename like('%\%%') escape('\');
like注意事项:
1.不能过度使用通配符,如果其他操作符额能达到目的,就不要使用通配符。
2.确实需要使用通配符时,除非绝对必要,否则不要把通配符用到搜索模式最开始处,因为这样是最慢的。如'%A%','_A%'
- order by :进行排序操作
asc是默认的排序方式,表示升序。
desc表示降序。数值排序按照大小,字符串排序按照字典序。
在排序时可指定多个字段,且多个字段可使用不同的排序方式。
select * from emp order by sal asc, ename desc;
每次执行orderby相当于做全排序,比较耗费系统资源,因此选择在业务不繁忙的时候进行。
- 创建计算字段:
我们经常需要直接从数据库中检索出转换、计算或者格式化过的数据,而不是检索出数据,然后再重新格式化。
计算字段并不实际存在于数据库表。
sql中允许select子句出现+-*/以及列名和常熟的表达式。
拼接字段(|| +):首选||来作为拼接字段(MySQL中||表示or,一般用concat());--使用计算字段,字符串连接符来连接,有两种方式:
select 'my name is' || ename name from emp;
select concat('my name is',ename) name from emp;
--计算所有员工的年薪
select ename,(e.sal+e.comm)*12 from emp e;//绩效加基本工资*12,如果没有绩效的为NULL。
--NULL是比较特殊的,null做任何运算都还是null,因此要进行转换。
引入nvl,nvl(a1,a2),如果a1为空则返回a2,不为空则返回a1;
select ename,(e.sal+nvl(e.comm,0))*12 from emp e;
- sql中允许列值为空,空值用保留字NULL表示。NULL不同于数字0或者空格,它就是代表了一个不确定的内容。任何含有NULL值的数学表达式最后的结果都为空值。
select ename,sal,comm,(sal * 12)+comm "income" from emp;//此时有的员工没有绩效的员工则comm为NULL,结果为空值,可转换为具体的值。
--可以通过函数将NULL转换成一个确切的值
select ename,comm,nvl(comm,0) from emp;
select ename,sal,comm,(sal*12) +nvl(comm,0) "income" from emp;