1.连接列值:将多列值作为一列返回。
--DB2,Oracle:是用双竖线作为连接运算符。
--MySQL:支持concat函数。
select concat(ename,' works as a ',job) as msg from table where deptno=10
?
--SQL Server:使用+运算符进行连接操作。
select ename+' works as a '+job as msg from table where deptno=10
?
?
1.8、在select 语句中使用条件逻辑:要在select语句中对数值执行IF-ELSE 操作。
--使用CASE表达式直接在SELECT语句中执行条件逻辑。
?
例:如果一个小员工工资<=2000,返回‘UNDERPAID’; 如果>=4000,返回‘OVERPAID’;如果在两者之间,返回‘OK’
?
select ename, sal,
case when sal<=2000 then 'UNDERPAID'
WHEN sal>=4000 then 'OVERPAID'
else 'OK'
end as status
from emp?
?
1.9、限制返回的行数:限制查询中返回的行数,这里不关心顺序。
--DB2: select * from emp fetch first 5 rows only
--MySQL: select * from emp limit 5
--Oracle: select * from emp where rownum<=5
--SQL Server: select top 5 * from emp
?
?
1.10、从表中随机返回n条记录
--在ORDER BY 字句中使用该函数,对行进行随机排序。
?
--DB2:同时使用内置函数RAND 与ORDER BY 和FETCH
select ename, job from emp order by rand() fetch first 5 rows only
--MYSQL: 同时使用内置的RAND函数、LIMIT、和ORDER BY
select ename,job,from emp order by rand() limit 5
--Oracle: 同时使用DBMS_RANDOM 中内置函数VALUE、ORDER BY 和内置函数ROWNUM:
select * from?
(select ename,job from emp order by dbms_random.value())?
where rownum<=5
--SQL Server:同时使用内置函数NEWID, TOP,和ORDER BY 返回随机结果集:
select top 5 ename,job from emp order by newid()
?
--总结:1)ORDER BY 字句可以接受函数的返回值,并使用它来改变结果集的次序。
2)ORDER BY 子句中指定数字常量时,是要求根据SELECT列表中相应位置的列来排序。
3)ORDER BY 子句中使用函数时,则按函数在每一行计算结果排序。
?
?
?
1.11、查找空值:要查找某列值为空的所有行。
--要确定值是否为空,必须使用IS NULL 或者IS NOT NULL.
select * from emp where comm is null
?
1.12、将空值转换为实际值
--使用COALESCE函数用实际值来替换空值, 多个参数时返回第一个非空值。
select coalesce(comm,0) from emp
?
--使用CASE:
select case?
when comm is null them 0?
else comm
end
from emp
?
?
1.13、按模式搜索
--需要返回匹配特定子串或模式的行。
--使用LIKE运算符合SQL 通配符“%”。
?
例:在部门10和部门20需要返回名字中有一个“I”或者职务(Job title)中带“ER”的员工。
select ename,job?
from emp
where deptno in (10,20) and
(ename like '%I%' or job like '%ER')
?
?
?
?
?