oracle数据库判断某表是否存在

查询所有表

1
select count(*) from user_tables where table_name =upper('表名')

这个是查询当前登录用户中的所有表中是否存在该表。注意表名区分大小写,如果参数不限制,那这里就必须要加上upper函数 。

查询指定用户下是否有某个表

1
2
3
4
SELECT COUNT(*) 
FROM ALL_TABLES
WHERE OWNER = UPPER('user1')
AND TABLE_NAME = UPPER('表名')

这个是查询 user1 这个用户下的表中是否存在该表。比如你登录的是user2 这个用户,在它的查询面板上执行上边的sql,就可以查询user 这个用户下是否存在某表。

sql查询时添加一列为固定值

1
2
//sql查询添加一列固定值
SELECT 表字段1,表字段2,表字段3,'内容' AS extendStr FROM 表名称

mysql查询每个部门的员工个数

内连接查询

首先最直观的思路就是两张表联表查询,如下

1
2
3
4
SELECT e.department_id,COUNT(*)
FROM employees e
JOIN departments d ON e.`department_id` = d.`department_id`
GROUP BY e.`department_id`;

但这样会出现一个问题:查询结果中没有员工数为0的部门

子查询方式

为了解决上述问题,采用子查询的方式

1
2
3
4
5
6
SELECT d.*,(
SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.`department_id`
) count
FROM departments d;

外连接查询

出现问题的原因是采用了内连接查询,那么如果使用外连接呢

1
2
3
4
SELECT d.*,COUNT(*) 部门人数
FROM departments d
LEFT JOIN employees e ON e.`department_id` = d.`department_id`
GROUP BY d.`department_id`;

这样会出现一个问题:没有人员的部门count是变为1,所以需要我们手动去纠正count是0的记录

1
2
3
4
SELECT d.*,IF(employee_id IS NULL,0,COUNT(*)) 部门人数
FROM departments d
LEFT JOIN employees e ON e.`department_id` = d.`department_id`
GROUP BY d.`department_id`;

Oracle中case when then 中判断null的方法

正常来说,格式为

1
2
3
SELECT
(CASE sex WHEN '1' THEN '男' ELSE '女' END ) sex
FROM table1

上述语句在sex为’1’时,sex为’男’,否则为’女’,但是如果需要判断一个值是否为null,如果使用下面的语句

1
2
3
SELECT
(CASE optional WHEN null THEN 'is' ELSE 'no' END ) isNull
FROM table1

则不会报错,并且所有结果均为no,正确形式应该为:

1
2
3
SELECT
(CASE optional WHEN IS null THEN 'is' ELSE 'no' END ) isNull
FROM table1

VALIDATIONQUERY1=select 1

springboot 项目的database.properties中定义了一个键值对

1
VALIDATIONQUERY1=select 1

这个键值对的作用是,在启动项目时随便从数据库查一条数据、用来检测数据库连接是否有问题

select 1是给postgresql用的,select 1 from dual是个oracle用的