SQL笔记第二部分(除select外的基础)

来源:互联网 发布:蓝月传奇神盾升级数据 编辑:程序博客网 时间:2024/06/08 16:19
25-1课:
一、(创建用户并导入数据):
1-- backup scott(备份指定账户数据):
   exp
2-- create user(创建用户):
   create user username(用户名) identified by code(密码) default tablespace spacename(空间名) quota 10M on spacename(空间名);
    grant create session, create table, create view to username;(授予权限)
3-- import the date(导入数据)
   imp 
二、insert(插入):
    1.insert into tablename(表名) values (…………)(数据);(将完整数据段插入至指定表)
    2.rollback;(撤销上一步操作)
    3.create table tablename1(复制表名) as select *(指定数据) from tablename(源表名);(将源表tablename指定数据备份至tablename1)
    4.insert into tablename(表名) (....)(指定位置) values (…………)(数据);(将数据段插入至指定表指定段)
    5.insert into tablename1(复制表名) select from tablename(源表名);(将源表tablename数据插入至tablename1,前提是表结构完全一致)




25-2课:
一、rownum(行号):
    1.rownum只能用 '<' 或 '<=' 连接;
    2.--薪水排名最高的5人:
select ename,sal from
(select ename,sal from emp order by sal desc)
where rownum <= 5;
    3.--薪水排名第6-10人:
select ename, sal from
(
select ename, sal, rownum r from
(select ename, sal from emp)
)
where r >= 6 and r <= 10;




26课:
一、SQL COUNT(*) 语法:
    1.COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;
二、sql having:
    1.SQL语言中设定聚集函数的查询条件时使用HAVING从句而不是WHERE从句。通常情况下,HAVING从句被放置在SQL命令的结尾处。
三、update(更新):
    1.Update 语句用于修改表中的数据。
语法:
UPDATE (表名称) SET (列名称 / 旧值) (=) (新值) WHERE (筛选条件);
四、delete(删除):
    1.DELETE 语句用于删除表中的行。
语法
DELETE FROM (表名称) WHERE (筛选条件);
五、事务(Transaction):
    1.Transaction是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
    2.起始于一条DML语句,结束于rollback/commit语句以及DML/DCL语句。
    3.当结束时无法再回滚。
    3.非正常退出时自动回滚。


27课:
    create table(建表)
    


28-29课constraint(约束条件):
1.默认约束:定义该列未输入值时应该具有的默认值
SQL-------alter table 表名 add constraint dt_列名 default 默认值 for 列名


2.空值约束:定义该列是否允许为空值(只能在字段级定义)
SQL-------定义表的时候在对应列列数据类型后面添加not null


3.检查约束:又叫check约束,用来限制列的取值,它根据定义的逻辑表达式来强制域的完整性
SQL-------alter table 表名 add constraint ck_列名 check(逻辑表达式)


4.唯一约束:确保在非主键列不输入重复值
SQL-------alter table 表名 add constraint uq_列名 unique[clustered | nonclustered](列名)


5.外键约束:用于建立两个表数据之间连接的一列或多列
SQL-------alter table 表名 add constraint fk_列名 foreign key(列名) references 另一表名(列名)


6.主键约束:用来惟一地标识表中的每一行
SQL-------alter table 表名 add constraint pk_列名 primary key(列名)
    
PS:
    1.null值不认为是重复;
    2.字段级约束,表级约束;
    3.外键中被参考字段必须是主键;
    4.删除被参考字段时若有参考则无法删除,即删除字段时注意是否有外键约束。




31课:
一、alter table(修改表结构):     
    1.非删除操作修改后的结构需容纳原数据。
    2.可使用该操作修改约束条件。
二、drop table (删除表)




32课:
一、数据字典表(dictionary)




33课:
一、index(索引):
    1.创建索引:create index indexname (索引名) on tablename(*) (基于某表某字段)。
    2.删除索引:drop index indexname(索引名)。
    PS:
    1.分为单个索引与组合索引。
    2.加主键、唯一约束,自动创建索引。
    3.有索引效率读高改低。
    4.不要轻易建索引,会占大量空间。
    5.优化首选。
二、view(视图/虚表):
    PS:
    1.会增加维护支出。
    2.简化查询。
    


34课:
一、sequence(序列数)
    1.创建序列数:create sequence sequencename(序列数名)  with(起始数) 1 increment by(每次递增数) 1 ;
    2.得到下一个数字:sequencename(序列数名).nextval;
    PS:
    1.一般下一个序列数是在上一个序列数上+1,但可设置递增大小;
    2.一般序列数是从0开始,但可设置;




35课:
一、三范式(设计表的原则):
    具体情况具体分析,敢于打破三范式。
    1.第一范式(确保每列保持原子性):
求不存在冗余数据,要有主键。
求列不可分,列不可重。
PS:但实际设计时会存在一定冗余数据,以提高效率。
    2.第二范式(确保表中的每列都和主键相关):
多字段作为主键,非主键的字段不能部分的依赖于主键(即必须依赖于全部的主键字段)。
PS:解决方法是拆分成多张表。
    3.第三范式(确保每列都和主键列直接相关,而不是间接相关):
每列都和主键列直接相关,而不是间接相关(传递依赖)。
例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。









0 0
原创粉丝点击