Oracle操作笔记——数据库基本操作及SQL命令

单表查询

查询结果拼接用||

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来操作

视图

从一张表或多张表中选取特定的字段呈现给用户。

建立视图CREATE VIEW 视图名 AS …

删除视图DROP VIEW 视图名

猜你喜欢

转载自blog.csdn.net/weixin_42628594/article/details/82995731