Lesson 9
Subquery Syntax:
单行子查询(返回值一个)
select last_name,salary
from employees
where salary >
(select salary
from employees
where last_name = 'Abel')
注:必须使用单行运算符(> < 等)子查询的位置(放在运算符右边)、写法(放在小括号内)、返回值必须是单行;另外注意组函数在子查询中的应用,语法与在主查询中的一样;
多行子查询
ALL/ANY 知道 ALL 和 ANY 在比较关系中的范围;
空值子查询
Lesson 10
Set 运算符
UNION 相当于A B的并集;(A B重复的部分输出一次)(默认升序排序)
例: select employee_id,job_id
from employees
union
select employee_id,job_id
from job_history
注:select 后跟的列数、顺序和返回值类型必须相同;当columns在表中有不存在时,可以用TO_CHAR或其它函数(与相对应的columns的返回值)来匹配;
例:SELECT location_id,department_name "Department",TO_CHAR(NULL) "Warehouselocation" FROM departments
UNION
SELECT location_id,TO_CHAR(NULL) "Department",state province
FROM locations;
UNION ALL (A B重复的部分输出2次)
例: select employee_id,job_id
from employees
union all
select employee_id,job_id
from job_history
INTERSET (交集)
例: select employee_id,job_id
from employees
union all
select employee_id,job_id
from job_history
MINUS (把A中的A与B的交集去掉,返回A的剩余的值)
例: select employee_id
from employees
minus
select employee_id
from job_history
前面10课讲的是DQL:Data Query Language SELECT 数据查询语言。
另:DDL 数据库模式定义语言(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。
DCL 数据库控制语言(Data Control Language),是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
Lesson 11
DML:Data Manipulation Language,数据操纵语言,命令使用户能够查询数据库以及操作已有数据库中的数据的计算机语言。具体是指是UPDATE更新、INSERT插入、DELETE删除。
INSERT 语句 语法结构:
INSERT INTO table[(column [,column...])]
VALUES (value [,value...]);
注:最好不要操作系统自带的一些数据库,可以创建一个新的数据库。语法如下:
create table copy_departments as select * from departments;(新创建的表名为:copy_departments)
create table copy_departments as select * from departments where 1=2(或其它为false的语句);创 建了一个有表结构但是没有数据的表;
desc copy_departments;(查询新创建的表)
drop table copy_departments;(删除名为copy_departments的表)
例:insert into copy_departments(department_id,department_name,manager_id,location_id)
values (10,'Public Relations',100,1300);(向表中插入一条数据,注意此时写的数据只是存到了缓冲区中,并没有真正存到数据库表中)
values中的数据可以是sysdate(当前日期)等函数,要求函数的返回值和对应列的数据类型相同;
insert into copy_departments(department_id,department_name,manager_id,location_id)
values (&d_id,&d_name,&m_i,&l_i);(可以不停的插入新的数据);
insert into copy_departments(department_id,department_name,manager_id,location_id)
select * from departments(从其它表查询数据插入到新建的表中,注意数据的匹配)
UPDATE 语句(更新数据库的数据)
语法:UPDATE table
SET column = [,column=value,...]
[WHERE condition](加上该条件,每次更新对应的一行);
UPDATE语句中可以用子查询,进行相应的修改。
DELETE 语句、TRUNCATE 语句(但两个很少用),而用update语句去更改数据的状态;
语法:DELETE [FROM] table
[WHERE condition](表示删除某一行);也可以用子查询;
TRUNCATE 语句删除后保留表的机构,删除的比较彻底,不能使用回退(rollback)恢复数据;
Lesson 12
DCL : Data Control Language
数据库的事物控制 (需要注意的是update 语句对其作用)
开始:当DML SQL语句创建时
结束:a.COMMIT 或者 ROLLBACK 语句执行;
b.DDL或DCL语句执行时(相当于自动执行了COMMIT);
c.用户退出SQL Developer 或 SQL*Plus(正常退出);
d.系统(崩溃)(自动回退,不会保存数据(操作));
在(select)语句中加一句for update 语句,会锁定当前的操作,其它用户不能对其操作,直到执行回退或者commit语句;
COMMIT 执行完COMMIT语句
a.数据存入数据库;c.释放缓存区;b.所有用户可以访问数据;
ROLLBACK(默认回退到最近一次COMMIT处) rollback to __ 回退到保存点处;
SAVEPOINT(设置保存点)
set auto on/off 设置自动提交开/关
Read Consistency(阅读规则)
a.读不影响写;b.写不必等待读;c.一个用户必须等待另一个写完才可以再对数据修改;