一、子查询
子查询 (内查询) 在主查询之前一次执行完成
子查询的结果被主查询(外查询)使用
1.单行子查询
只返回一行,使用单行比较操作符。
--谁的工资比Able高?
select last_name,salary
from employees
where salary > (select salary
from employees
where last_name = 'Abel')
--返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资
select last_name,job_id,salary
from employees
where job_id = (
select job_id
from employees
where employee_id = 141
)
and salary > (
select salary
from employees
where employee_id = 143
)
2.多行子查询
返回多行,使用多行比较操作符。
in - 等于列表中的任意一个
any - 和子查询返回的某一个值比较
all - 和子查询返回的所有值比较
--返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
select employee_id,last_name,job_id,salary
from employees
where job_id <> 'IT_PROG' and salary < any(
select salary
from employees
where job_id = 'IT_PROG'
)
二、创建和管理表
1.命名规则
表名和列名:
必须以字母开头
必须在 1–30 个字符之间
必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
必须不能和用户定义的其他对象重名
必须不能是Oracle 的保留字
2.创建表
<1>方式一:create table语句(白手起家)
字符串型,Oracle用varchar2,MySQL用varchar
create table emp1(
id number(10),
name varchar2(20),
salary number(10,2),
hire_date date
)
<2>方式二:create table as语句(依托于现有的表)
--创建表的同时复制employees表对应的记录
CREATE TABLE emp2
AS
SELECT employee_id id,last_name name,hire_date,salary
from employees
--创建表的同时不包含employees表中的记录, 即创建一个空表
create table myemp3
as
select employee_id id,last_name name,salary sal,email from employees where 1 = 2
3.alter table语句(修改表结构)
--添加一个新列
ALTER TABLE myemp
ADD(age number(3))
--修改现有列的类型
ALTER TABLE myemp
MODIFY(name varchar2(30))
--修改现有列的名字
ALTER TABLE myemp
RENAME COLUMN sal TO salary
--删除现有的列
ALTER TABLE myemp
DROP COLUMN age
4.truncate table语句(清空表)
TRUNCATE TABLE myemp
注意:truncate不可回滚!!!