SQL基础
以Oracle语法为例
远程连接Oracle、配置Oracle OCI、tnsnames.ora 监听IP、Port、破解安装登录PL/SQL(转载他人,感谢)
会不断对文档进行修改和更新
一、SQL书写规范
-
SQL语句不是大小写敏感的,为增加可读性,SQL的大小写保持一致
-
SQL语句可以分布于一行或者多行
-
关键字不能进行缩写,也不能分布在两行
-
经常用跳格键或者缩进来增强可读性
二、DDL-Data Define Language
1.CREATE
create table tablename
-
表名由字母开始,长度在1-30个字符之间。
-
名字中只能包含a–z, 0–9, _ (下划线),$和#。
-
同一个oracle服务器用户所拥有的表名不能重复。
-
名字不能为oracle的保留字。
2.表的约束
primary key --主键约束
foreign key --外键约束
check --检查约束
unique --唯一约束
not null --非空约束
3.ALTER
添加约束
alter table table_name add constraint 约束名 约束内容; --基本语法
--eg
--添加主键约束
ALTER TABLE LJ_TEST2 ADD PRIMARY KEY (order_id);
ALTER TABLE LJ_TEST2 ADD CONSTRAINT pk_order_id PRIMARY KEY (order_id); --添加主键约束并且设置约束名
-- 添加外键约束
ALTER TABLE LJ_TEST2 ADD CONSTRAINT fk_customer_id
FOREIGN KEY(customer_id) REFERENCES LJ_TEST1(customer_id);
修改约束
删除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name; --基本语法
--查看约束名称
SELECT constraint_name,constraint_type
FROM user_constraints
WHERE table_name = 'LJ_TEST2';
--eg
ALTER TABLE LJ_TEST2 DROP CONSTRAINT constraint_name;
添加列
修改列
4.DROP
drop table tablename
- 用drop 删除表的时候,并不是真正的将表删除了,而是将表放到回收站recyclebin里了,用 DBA_RECYCLEBIN可以查看,如果不小心删除了某个表,也可以从回收站里面还原,语法为:falshback table 表名 to before drop;
SELECT * FROM DBA_RECYCLEBIN WHERE original_name='...';
--eg
SELECT * FROM DBA_RECYCLEBIN WHERE original_name LIKE 'LJ%';
- 如果确定要删除某个表,最好在drop语句后面加上“purge”关键词,意思是彻底删除,减少占用硬盘空间。但是要慎用purge,只有在确定删除表的的情况下才使用
DROP TABLE [tablename] PURGE;
三、DML-Data Manage Language
1.TRUNCATE
2.INSERT
基本语法
INSERT INTO
[tablename](字段1.字段2,...,字段n)
VALUES
(参数1,参数2,...,参数n);
--eg
INSERT INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 1, '张三1', 'yingke1', 'www.yingke1.com', SYSDATE, SYSDATE )
-- 同时插入多条数据的方法之一
INSERT ALL INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 1, '张三1', 'yingke1', 'www.yingke1.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 2, '张三2', 'yingke2', 'www.yingke2.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 3, '张三3', 'yingke3', 'www.yingke3.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 4, '张三4', 'yingke4', 'www.yingke4.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 5, '张三5', 'yingke5', 'www.yingke5.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 6, '张三6', 'yingke6', 'www.yingke6.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 7, '张三7', 'yingke7', 'www.yingke7.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 8, '张三8', 'yingke8', 'www.yingke8.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 9, '张三9', 'yingke9', 'www.yingke9.com', SYSDATE, SYSDATE ) INTO LJ_TEST1 ( CUSTOMER_ID, NAME, ADDRESS, WEBSITE, CREATE_TIME, UPDATE_TIME )
VALUES
( 10, '张三10', 'yingke10', 'www.yingke10.com', SYSDATE, SYSDATE ) SELECT
*
FROM
dual;
-- 当索引设置自增的时候,单条数据插入的时候可以省略主键id参数
3.UPDATE
基本语法
UPDATE [TABLENAME]
SET
字段=值
WHERE
条件;
--eg
UPDATE LJ_TEST1 SET WEBSITE='http://yingke10.com' WHERE CUSTOMER_ID=1;
4.DELETE
基本语法
DELETE FROM [TABLENAME]
WHERE 条件;
--eg
DELETE LJ_TEST1 WHERE CUSTOMER_ID=1;
四、DQL-Data Query Language
1.SELECT
语法结构
select
-- 提取包含在结果集中的栏位
from
-- 数据集合
join...on...
where
-- 过滤条件
group by
-- 群组化数据列
having
-- 以群组过的的数据过滤结果集
order by
-- 依据一个或多个栏位,排序结果集
运行顺序
from->where->group by->having->select->order by
WHERE
=,<>,<,>,is [not] null
[not] between ... and ... --定义条件范围
and,or
[not] in --指明范围或使用子查询
[not] exists --使用子查询
like --模糊查询
通配符
_ 代表一个任意字符
% 代表任意数量的任意字符
order by
order by 字段 desc 降序
order by 字段 asc 升序
五、Oracle体系结构
六、Oracle字段类型
常用
类型 | 含义 | 描述 | 备注 |
---|---|---|---|
NUMBER | 数字类型 | ||
VARCHAR2 | 可变长度的字符串 | 最大长度4000bytes | 可做索引的最大长度749 |
DATE | 日期(日-月-年) | DD-MM-YY(HH-MI-SS),经过严格测试,无千虫问题 |
VARCHAR2和VARCHAR
都用于保存变长的字符串数据,最大长度为4000字节,其中最大程度可以由(size)指定。
区别在于
VARCHAR2 | VARCHAR | |
---|---|---|
存储 | 所有字符都占两字节处理 | 只对汉字和全角等字符占两字节,数字、英文字符都是一个字节 |
空"" | 把空串等同于null处理 | 仍按照空串处理 |
兼容性 | 好 | 一般 |
varchar
是被废弃的类型,oracle目前都推荐使用varchar2
。虽然varchar
也可以用,但不确保未来的版本是否还支持