Oracle 92语法和99语法

本文介绍了Oracle数据库的92语法和99语法,包括笛卡尔积、等值连接、非等值连接和外连接的概念。重点阐述了外连接的三种类型:左外连接、右外连接和自连接,并解释了99语法中如何实现这些连接操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle 92语法和99语法

92语法

  1. 笛卡尔积

    --笛卡尔积
    --使用的字段,是多个表中存在的,指定字段的来源
    select empno,emp.deptno from emp,dept;
    
  2. 等值连接

    --等值连接  可以是相同名字的字段,也可以是非相同名字的字段,但是要保证两个字段的类型相同
    select * from emp,dept where emp.deptno=dept.deptno;
    select * from emp,dept where emp.ename=dept.dname; --没有满足条件的数据
    
  3. 非等值连接

    --非等值连接
    --薪资2500的等级信息
    select * from salgrade 
<think>嗯,用户让我介绍一下Oracle的常用语法。首先,我需要确定用户的背景。可能他们刚开始学习Oracle数据库,或者是已经有一定基础想复习一下?不管怎样,我需要涵盖基本的SQL操作,比如DDL、DML、查询语句,还有常用函数、子查询、连接这些内容。 用户可能需要的不仅仅是列出语法,最好还能有例子说明,这样更容易理解。比如,创建表的时候,可能需要解释字段类型,主键约束这些。还有,查询部分要包括基本的SELECT,WHERE,聚合函数,分组,排序,这些都很基础但重要。 另外,Oracle有一些特有的功能,比如分页查询用ROWNUM或者12c之后的FETCH,序列同义词,这些可能也是用户想了解的。需要区分不同版本,比如12c之前之后的差异,避免用户使用时出现问题。 子查询连接部分,用户可能需要知道内连接、外连接的区别,以及如何正确使用JOIN语法。函数方面,字符串函数、日期函数转换函数都是常用的,可以举几个例子,比如TO_CHAR处理日期格式,NVL处理空值。 还要考虑性能方面的内容吗?比如索引的创建,但用户可能暂时只需要基础语法。不过提到索引的创建也是有必要的,毕竟优化查询常用。 最后,可能需要提醒用户注意Oracle的版本差异,比如分页方法的不同,以及一些最佳实践,比如使用JOIN代替旧式的连接语法。这样用户不仅能写出正确的语句,还能符合现代的标准。</think>以下是 Oracle 数据库的常用语法及示例介绍,涵盖基本 SQL 操作常用功能: --- ### **1. 数据定义语言 (DDL)** #### 创建表 ```sql CREATE TABLE employees ( emp_id NUMBER(10) PRIMARY KEY, name VARCHAR2(50) NOT NULL, hire_date DATE DEFAULT SYSDATE, salary NUMBER(10, 2), dept_id NUMBER(5) ); ``` #### 修改表结构 ```sql -- 添加列 ALTER TABLE employees ADD (email VARCHAR2(100)); -- 修改列类型 ALTER TABLE employees MODIFY (salary NUMBER(12, 2)); -- 删除列 ALTER TABLE employees DROP COLUMN email; ``` #### 删除表 ```sql DROP TABLE employees; ``` --- ### **2. 数据操作语言 (DML)** #### 插入数据 ```sql INSERT INTO employees (emp_id, name, salary) VALUES (1, '张三', 8000); ``` #### 更新数据 ```sql UPDATE employees SET salary = 9000 WHERE emp_id = 1; ``` #### 删除数据 ```sql DELETE FROM employees WHERE emp_id = 1; ``` --- ### **3. 查询语句 (SELECT)** #### 基础查询 ```sql SELECT emp_id, name, salary FROM employees; ``` #### 条件过滤 (`WHERE`) ```sql SELECT * FROM employees WHERE salary > 5000 AND hire_date > DATE '2020-01-01'; ``` #### 聚合函数 ```sql SELECT AVG(salary) AS avg_salary, MAX(hire_date) AS latest_hire_date, COUNT(*) AS total_employees FROM employees; ``` #### 分组 (`GROUP BY` + `HAVING`) ```sql SELECT dept_id, AVG(salary) AS avg_salary FROM employees GROUP BY dept_id HAVING AVG(salary) > 7000; ``` #### 排序 (`ORDER BY`) ```sql SELECT name, hire_date, salary FROM employees ORDER BY salary DESC, hire_date ASC; ``` --- ### **4. 分页查询** #### Oracle 12c+ 语法 ```sql SELECT * FROM employees OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY; ``` #### 传统方法(12c 之前) ```sql SELECT * FROM ( SELECT t.*, ROWNUM rn FROM (SELECT * FROM employees ORDER BY hire_date) t ) WHERE rn BETWEEN 11 AND 15; ``` --- ### **5. 连接查询** #### 内连接 ```sql SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id = d.dept_id; ``` #### 左外连接 ```sql SELECT e.name, d.dept_name FROM employees e LEFT JOIN departments d ON e.dept_id = d.dept_id; ``` --- ### **6. 子查询** #### 单行子查询 ```sql SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); ``` #### 多行子查询 (`IN`, `EXISTS`) ```sql SELECT name FROM employees WHERE dept_id IN (SELECT dept_id FROM departments WHERE location = '北京'); ``` --- ### **7. 常用函数** #### 字符串函数 ```sql SELECT UPPER(name) AS upper_name, SUBSTR(name, 1, 3) AS short_name, LENGTH(name) AS name_length FROM employees; ``` #### 日期函数 ```sql SELECT SYSDATE AS current_time, TO_CHAR(hire_date, 'YYYY-MM-DD') AS formatted_date, MONTHS_BETWEEN(SYSDATE, hire_date) AS months_worked FROM employees; ``` #### 转换函数 ```sql SELECT TO_CHAR(12345.67, '999,999.99') AS formatted_num, TO_NUMBER('1000') + 500 AS num_result, NVL(salary, 0) AS salary_with_default -- 处理 NULL FROM employees; ``` --- ### **8. 索引** ```sql -- 创建索引 CREATE INDEX idx_emp_name ON employees(name); -- 唯一索引 CREATE UNIQUE INDEX idx_emp_email ON employees(email); ``` --- ### **9. 序列(自增主键工具)** ```sql -- 创建序列 CREATE SEQUENCE emp_seq START WITH 1000 INCREMENT BY 1 NOCACHE; -- 使用序列 INSERT INTO employees (emp_id, name) VALUES (emp_seq.NEXTVAL, '李四'); ``` --- ### **10. 同义词** ```sql -- 创建同义词(简化对象访问) CREATE SYNONYM emp FOR hr.employees; SELECT * FROM emp; -- 等同于访问 hr.employees ``` --- ### 注意事项: 1. **大小写不敏感**:Oracle 默认对象名列名为大写,但字符串内容区分大小写。 2. **分号结尾**:SQL 语句建议以分号结束(PL/SQL 块中必须使用)。 3. **事务控制**:使用 `COMMIT` 提交事务,`ROLLBACK` 回滚。 可根据具体需求组合使用上述语法,并参考 Oracle 官方文档深入学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值