文章目录
单表查询
查询结果拼接用||
SELECT ename || '的工作是' || ejob AS msg from emp
条件判断用CASE WHEN
限制返回的行数用rownum
SELECT * from product WHERE rownum <= 2;
选择两行中的第二行
SELECT * FROM (SELECT rownum AS sn, product.* FROM product WHERE rownum <= 2) WHERE sn = 2;
随机返回用dbms_random.value()
SELECT * FROM
( SELECT * FROM product ORDER BY dbms_random.value())
WHERE rownum <= 3;
模糊查询用% _ \
对结果排序用ORDER BY 字段名(逆序在字段名后加DESC)
对第三列排序用ORDER BY 3
查询出子串用substr
查询出str的后4为用substr(str, -4)
对应字符一一替换用TRANSLATE(expr,from_string,to_string)
将字符串中的数字去掉
translate(str, ‘-0123456789’, ‘_’)
将空值放在前面用NULLS FIRST
SELECT a,b FROM projuct ORDER BY 2 NULLS FIRST
SELECT a,b FROM projuct ORDER BY 2 NULLS LAST
将符合条件的放前面后再排序用CASE WHEN后在ORDER BY
也可以ORDER BY后紧跟CASE WHEN
多表查询
合并多个数据集UNION ALL(UNION会去掉重复数据)
左表为主表LEFT JOIN
右边没有数据的用NULL代替
select left.*, right.* from left LEFT JOIN right ON (left.id = right.id);
--也可以用
select left.*, right.* from left, right where left.id = right.id(+);
右表为主表RIGHT JOIN
左边没有数据的用NULL代替
select left.*, right.* from left RIGHT JOIN right ON (left.id = right.id);
--也可以用
select left.*, right.* from left, right where where left.id(+) = right.id;
所有数据FULL JOIN
select left.*, right.* from left FULL JOIN right ON (left.id = right.id);
无(+)写法
半连接SEMI JOIN
只显示左表数据
插入更新删除
阻止对某列的插入可以建立VIEW来操作
视图
从一张表或多张表中选取特定的字段呈现给用户。