当前位置:首页 > 问答 > 正文

Oracle系统里那些常用的操作SQL代码,给你举几个简单示范看看

查看当前数据库里有哪些表

刚接触一个数据库,你肯定想知道里面有什么,你可以这样看:

SELECT table_name FROM user_tables;

这条语句会列出你当前用户下拥有的所有表的名称。user_tables 是Oracle提供的一个数据字典视图,它就像一个记录了所有表信息的清单,如果你有权限想看所有用户的表,可以用 SELECT table_name FROM all_tables;

看看一张表具体长什么样

知道了表名,比如有个表叫 employees(员工表),你想知道它里面有哪些列(字段),每个列是什么类型(比如是数字还是文字),可以这样:

DESC employees;

DESCDESCRIBE(描述)的缩写,这不是标准的SQL语句,但却是Oracle(以及一些其他数据库)里一个非常方便的命令,执行后,它会显示表的结构,包括列名、是否允许为空、数据类型等,如果你想用标准的SQL查询来实现类似效果,可以查 SELECT * FROM user_tab_columns WHERE table_name = 'EMPLOYEES';,但显然 DESC 更简单快捷。

从表里把数据查出来

这是最核心、最常用的操作,比如你想看员工表里所有员工的信息:

SELECT * FROM employees;

那个星号 代表“所有列”,如果你只想看员工的编号和姓名,而不是所有信息,可以指定列名:

SELECT employee_id, first_name, last_name FROM employees;

给查询结果加上条件

表里数据可能成千上万,你通常只想看其中一部分,你想只看部门编号是90的员工:

SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = 90;

WHERE 后面跟的就是条件,再比如,你想找所有名字里以字母‘S’开头的员工:

SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE 'S%';

这里的 LIKE 是模糊匹配,百分号 代表任意长度的任意字符。

往表里添加新数据

假设公司新来了一位员工,你需要把他的信息加到表里:

INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id)
VALUES (1000, '张三', '张', 'zhangsan@company.com', DATE '2023-10-27', 'IT_PROG');

这条语句的意思是:向 employees 表中指定的那些列里,插入后面括号里对应的值,注意,值的顺序和类型必须和前面列的顺序和类型一一对应,日期值可以用 DATE 关键字来指定。

修改表里已有的数据

员工张三结婚了,改了姓氏,你需要更新他的信息:

UPDATE employees
SET last_name = '李'
WHERE employee_id = 1000;

非常重要UPDATE 语句一定要有 WHERE 条件,否则它会更新表中所有行的数据,那很可能就酿成事故了,这里的 WHERE employee_id = 1000 确保了只更新编号为1000的这一位员工的记录。

从表里删除数据

如果一位员工离职了,需要将他的记录从表里移除:

DELETE FROM employees
WHERE employee_id = 1000;

UPDATE 一样,DELETE 语句也必须谨慎使用 WHERE 条件,如果没有条件,会删除整个表的所有数据,这个操作几乎是不可逆的。

把查询结果排序

当你查数据时,可能希望结果按某种顺序排列,按员工的入职日期从晚到早排序(最新的在最前面):

SELECT employee_id, first_name, last_name, hire_date
FROM employees
ORDER BY hire_date DESC;

ORDER BY 负责排序,DESC 表示降序(从大到小,从晚到早),如果想升序(从小到大,从早到晚)可以用 ASC,或者不写(因为默认就是升序)。

把相似的数据分组统计

如果你想统计每个部门有多少名员工,就需要用到分组:

SELECT department_id, COUNT(*) as employee_count
FROM employees
GROUP BY department_id;

这条语句会先按 department_id(部门编号)把员工记录分组,同一个部门的归为一组,然后使用 COUNT(*) 函数计算每一组里有多少条记录(即多少名员工),结果就会显示每个部门编号及其对应的员工数量。

把两张表的信息关联起来查

通常信息会分散在不同的表里,员工表里只有部门编号(department_id),而部门的详细名称(如‘财务部’、‘销售部’)在另一张叫 departments 的表中,这时你需要把两张表连起来查:

SELECT e.first_name, e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;

这是一种古老的连接写法,它通过在 WHERE 条件里指定两个表之间的关联关系(e.department_id = d.department_id),来将员工表和部门表的数据“拼凑”在一起,这样你就能看到每个员工属于哪个具体的部门名称了,更现代的写法是使用 JOIN 关键字:

SELECT e.first_name, e.last_name, d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;

效果是一样的。

这些例子覆盖了最基础的增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)操作,以及排序、分组和表连接,是Oracle SQL入门最常接触到的一些代码。

Oracle系统里那些常用的操作SQL代码,给你举几个简单示范看看