一. sql Oracle创建dept和emp表
时间: 2024-09-26 08:12:47 浏览: 25
在Oracle数据库中,你可以使用SQL语句来创建两个基本表,分别是部门(dept)表和员工(emp)表,这两个表通常用于管理组织结构和人员信息。下面是创建这两个表的一个示例:
**创建部门(dept)表:**
```sql
CREATE TABLE dept (
dept_id NUMBER PRIMARY KEY,
dept_name VARCHAR2(50),
manager_id NUMBER REFERENCES emp(employee_id)
);
```
在这个表中,`dept_id`作为主键标识每个部门,`dept_name`存储部门名称,`manager_id`是一个外键引用`emp`表的`employee_id`,表示每个部门的经理。
**创建员工(emp)表:**
```sql
CREATE TABLE emp (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
hire_date DATE,
salary NUMBER,
dept_id NUMBER REFERENCES dept(dept_id)
);
```
这里,`employee_id`是员工的唯一标识,`first_name`和`last_name`分别存放名字,`hire_date`记录入职日期,`salary`存储薪水,同样,`dept_id`也是外键,关联到相应的部门。
相关问题
请使用Oracle11g软件下默认账户scott提供的emp表和dept表完成如下SQL练习题,请找出员工工资均大于1000的部门其员工信息【要求使用exists子查询】,用一条语句输出。
可以使用以下SQL语句来实现:
```
SELECT *
FROM emp
WHERE EXISTS (
SELECT 1
FROM dept
WHERE emp.deptno = dept.deptno
AND deptno IN (
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
)
);
```
解释一下以上SQL语句的思路:
- 首先,我们需要找到工资均大于1000的部门编号。为此,我们需要对emp表进行分组,计算每个部门的平均工资,并筛选出工资均大于1000的部门编号。这可以通过以下子查询实现:
```
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
```
- 接着,我们需要找到所有属于这些部门的员工。这可以通过检查每个员工所在的部门编号是否在上一步筛选出的部门编号列表中来实现。使用EXISTS子查询可以很容易地实现这一点。
最终输出的结果将包含所有工资均大于1000的部门中的所有员工信息。
ORACLE中将查询scott用户的dept表,修改emp表的sal字段的权限授予新用户role01
您可以使用如下的 SQL 语句来授予新用户 role01 修改 scott 用户的 dept 表和 emp 表的 sal 字段的权限:
```sql
-- 创建新用户
CREATE USER role01 IDENTIFIED BY password;
-- 授予修改 scott 用户的 dept 表的权限
GRANT UPDATE ON scott.dept TO role01;
-- 授予修改 scott 用户的 emp 表的 sal 字段的权限
GRANT UPDATE(sal) ON scott.emp TO role01;
```
需要注意的是,以上 SQL 语句需要以具有相应权限的用户登录 ORACLE 数据库才能执行成功。如果您不确定当前用户是否具有相应权限,可以先使用 `DESCRIBE` 命令查看表的结构,或者使用 `SELECT` 命令查询表的数据来确认。