17.08.01

集合操作

当列的数量和列的数值类型,要完全一致,

不能确定的时候,要用null和数值类型函数来确定

select employee_id, job_id from employees

union all

select employee_id, job_id from job_history;

select employee_id, job_id from employees

union

select employee_id, job_id from job_history;

select employee_id, job_id from employees

intersect

select employee_id, job_id from job_history;

select employee_id from employees

minus

select employee_id from job_history;

select employee_id, job_id, salary from employees

union all

select employee_id, job_id, null from job_history;

select employee_id, job_id, to_char(salary) from employees

union all

select employee_id, job_id, ‘no salary‘ from job_history;

集合排序:

排序写在最后,但是来自第一个查询里面列的排序

select employee_id, job_id, salary from employees

union all

select employee_id, job_id, null from job_history

order by salary;

select employee_id, job_id, null from job_history

union all

select employee_id, job_id, salary from employees

order by 3;

DML

insert:

SQL> create table t1(x int, y char(1), z date);

SQL> insert into t1(x, y, z) values (1, ‘a‘, sysdate);

SQL> insert into t1(x, z, y) values (2, sysdate+1, ‘b‘);

SQL> insert into t1(x, y, z) values (1, null, sysdate);

SQL> insert into t1(x, z) values (2, sysdate+1);

SQL> insert into t1 values (1, null, sysdate);

SQL> create table my_emp as select * from employees;     (只是复制了数据和基本的表结构)

SQL> create table my_emp as select last_name, salary from employees where department_id=50;

SQL> create table avg_sal as select department_id, avg(salary) avg_sal from employees group by department_id;

SQL> create table my_emp as select * from employees where 1=0; (用不可能的条件复制表结构)

SQL> insert into my_emp select * from employees;(因为表结构相同,所以可以复制数据)

例:将department_id是50的,员工姓名和工资,保存在一张新的表里。

Create table创建空表结构,insert into插入数据

update:

SQL> update my_emp set salary=salary*1.1;

SQL> update my_emp set salary=salary*1.1 where department_id=50;

SQL> update my_emp set salary=salary*1.1, commission_pct=0.5 where employee_id=197;

delete:

SQL> delete from my_emp where employee_id=197;

SQL> delete from my_emp where department_id=50;

SQL> delete from my_emp;

子查询:

SQL> create table my_emp as select * from employees;

SQL> alter table my_emp add(department_name varchar2(30));

SQL> update my_emp outer set department_name=(select department_name from departments where department_id=outer.department_id);

update (select t1.department_name as aname,t2.department_name bname from my_emp t1 ,departments t2 where t1.department_id=t2.department_id) set aname=bname;

练习:

在new_dept表中删除没有员工的部门

SQL> create table my_dept as select * from departments;

delete from my_dept outer

where not exists

(select 1 from my_emp

where department_id=outer.department_id);

delete和truncate:

delete                                truncate

语句类型                 dml                                     ddl (数据定义语言)

undo数据                产生大量undo数据      不产生undo数据

空间管理                 不释放                            释放

语法                          where                                删除全部数据

(ACID : A原子性  C一致性  I 隔离性  D持久性)

dml 语句不自动提交,直到遇到commit 或者rollback才会提交

ddl 语句自动提交

dml 语句回滚(rollback)不能回滚到ddl语句前面

DML:select,insert,update,delete  (CRUD)增删查改

DDL:create,alter,drop

Char 定长

Varchar2 可变长

五种约束条件:

字段:

Not null

Check(salary>0)

行与行之间:

Primary key(pk)主键约束 非空,一张表只能有一个主键

Unique 唯一性约束 同一列唯一,允许为空,一张表可以有多个唯一性约束

表与表之间:

Foreign key(references) 外键

DDL

字符串:

SQL> create table t1(x char(10), y varchar2(10));

SQL> insert into t1 values(‘x‘, ‘y‘);

SQL> select dump(x), dump(y) from t1;

数值:

SQL> create table t1(x number(5,2), y number(5));

SQL> insert into t1 values (123.45, 12345);

SQL> insert into t1 values (12.345, 12345);

SQL> insert into t1 values (12.345, 123.45);

SQL> select * from t1;

SQL> insert into t1 values (12.345, 112345);

日期时间:

SQL> create table t1(a date, b timestamp, c timestamp with time zone, d timestamp with local time zone);

SQL> insert into t1 values (sysdate, systimestamp, systimestamp, systimestamp);

SQL> alter session set time_zone=‘+9:00‘;

SQL> select * from t1;

修改表结构:

SQL> alter table t1 add(e char(10));

SQL> alter table t1 drop(e);

SQL> alter table t1 modify(d not null);

约束条件:

字段(列):not null, check(salary>0)

行与行:primary key, unique

表与表之间:foreign key

create table dept (

deptno int constraint dept_deptno_pk primary key,

dname varchar2(20) constraint dept_dname_nn not null);

create table emp (

empno int constraint emp_empno_pk primary key,

ename varchar2(20) constraint emp_ename_nn not null,

email varchar2(50) constraint emp_email_uq unique,

salary int constraint emp_salary_ck check(salary>0),

deptno int constraint emp_deptno_fk references dept(deptno))

SQL> select constraint_name, constraint_type from user_constraints where table_name in(‘DEPT‘, ‘EMP‘);

SQL> insert into emp values (100, ‘abc‘, ‘[email protected]‘, 10000, 10);

insert into emp values (100, ‘abc‘, ‘[email protected]‘, 10000, 10)

*

ERROR at line 1:

ORA-02291: integrity constraint (HR.EMP_DEPTNO_FK) violated - parent key not

found

SQL> insert into dept values (10, ‘sales‘);

1 row created.

SQL> insert into dept values (10, ‘market‘);

insert into dept values (10, ‘market‘)

*

ERROR at line 1:

ORA-00001: unique constraint (HR.DEPT_DEPTNO_PK) violated

SQL> insert into dept values (20, ‘market‘);

1 row created.

SQL> commit;

Commit complete.

SQL> insert into emp values (101, ‘def‘, ‘[email protected]‘, 10000, 20);

create table emp (

empno int constraint emp_empno_pk primary key,

ename varchar2(20) constraint emp_ename_nn not null,

email varchar2(50) constraint emp_email_uq unique,

salary int constraint emp_salary_ck check(salary>0),

deptno int constraint emp_deptno_fk references dept(deptno) on delete set null)或者on delete cascade

SQl>  create table t1(x int constraint t1_x_pk primary key);

SQL>  alter table t1 add(y int);

SQL>  alter table t1 add(z int,a int);

SQL>  alter table t1 drop(z,a);

SQL>  alter table t1 modify(y char(1));

SQL>  alter table t1 modify(y default ‘a’);

SQL>  alter table t1 disable novalidate constraint t1_x_pk;

SQL>insert into t1 values (1, ‘a’);

SQL>insert into t1 values (1, ’b’);

SQL>alter table t1 enable validate constraint t1_x_pk;报错

SQL>delete t1;

SQL>alter table t1 enable validate constraint t1_x_pk;

SQL>drop table t1;

时间: 2024-08-06 14:13:58

17.08.01的相关文章

面试题 08.01. 三步问题

面试题 08.01. 三步问题 三步问题.有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶或3阶.实现一种方法,计算小孩有多少种上楼梯的方式.结果可能很大,你需要对结果模1000000007. 示例1: 输入:n = 3 输出:4 说明: 有四种走法示例2: 输入:n = 5 输出:13提示: n范围在[1, 1000000]之间  为什么可以在过程中取模而不影响最终结果 状态转移方程不用说了:S(n) = S(n-1)+S(n-2)+S(n-3) 因为要对结果S(n)取模,用S(n

X100S Collection Before 2014/08/01

风暴前的东京湾 // Tokyo Bay before Storm 上野公园 // Ueno Park X100S Collection Before 2014/08/01,布布扣,bubuko.com

2014年6月7日03:17:08

1 int i = 9; 2 Console.WriteLine("{0}", i == 1); 3 Console.WriteLine("{0}", i = 1); 4 Console.ReadKey(); 5 //输出falese和1. C#中赋值表达式也有值,它的值表示为赋值后变量的值 1 string s = Console.ReadLine(); 2 if (s == "1") 3 { 4 Console.WriteLine("

17.08.29

1.in fuction xxx 指的是xxx没有赋值 2.关于该error 应将add函数放在main之前.

解决SQL Server 2008 64位系统无法导入Access/Excel的问题 2012/08/01

操作系统Windows Server 2008 X64,数据库SQL Server 2008 X64,Office 2007(好像只有32位),在存储过程执行OpenDatasource导入Access数据的时候遇到问题了,Oledb 4.0已经不被支持,以下是遇到的若干错误提示: 因为 OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询. 无法创建链接服务器 "(null)" 的 OLE DB 访

17.08.04

实例管理 监听 启动监听: $ netstat -tlnp | grep 1521 $ lsnrctl LSNRCTL> help $ lsnrctl status $ lsnrctl stop $ netstat -tln | grep 1521 快速动态注册:(可选) $ sqlplus / as sysdba SQL> alter system register; $ lsnrctl status em Emctl start | stop | status dbconsole 一个监听

17.08.12

调度作业 $ ps -ef | grep cjq SQL> show parameter job_queue_processes 后台预先设置的自动化管理作业: 自定义作业: SQL> create table session_history(snap_time timestamp with local time zone, num_session number); em中创建作业: 使用plsql块: declare session_count  number; begin select c

2017/08/01 工作日志

昨天下班前拿到一份文档,就是上次开会时说的新系统的需求文档,记录了一些名词 EMR(Electronic Medical Record).EHR(Electronic Health Record). HIS:医疗信息系统(广义).HMIS:医疗管理信息系统(狭义). CIS(Clinical Information System)临床信息系统.HRP(Hospital Resource Planning System)医院运营管理信息系统. CDA(Clinical Document Archi

17.08.03

oracle管理 体系结构 SGA:    大的缓冲区 $ sqlplus / as sysdba SQL> show sga              显示sga的设置 SQL> show parameter sga_max_size    查看系统里面初始化参数 SQL> select * from V$SGAINFO;      动态性能视图,描述系统里面组件的信息 oem:浏览器中 服务器-->内存指导(https://192.168.0.1:1158/em) shared