目录
1.3.2 数据操纵语言DML----INSERT、DELETE、UPDATE、SELECT
1. SQL语言基础
1.1 SQL语言概述
SQL(结构化查询语)是关系数据库语言,用于建立、存储、修改、检索和管理关系数据库中的数据。
SQL是所有程序和用户用于存取关系数据库中数据的命令集。
1.1.1 PL/SQL与SQL的关系
PL/SQL是Oracle对关系数据库语言SQL的扩充,它将SQL的数据操纵功能与过程化语言数处理功能相结合。
PL/SQL是Oracle数据库应用的重要开发工具。
1.2 SQL语言的组成
2.1数据定义语言DDL----CREATE、ALTER、DROP - - 创建、修改表结构、删除
2.2数据操纵语言DML----INSERT、DELETE、UPDATE、SELECT - - 插入、删除、修改表数据、查询
2.3事物控制语句TCL----COMMIT、ROLLBACK、SAVEPOINT - - 提交、回滚、保存
2.4数据控制语言DCL----GRANT、REVOKE - - 授权、撤回
1.3 数据定义语言DDL
1.3.1 SQL数据类型
1.3.1.1 字符:char,varchar2,long
char: 固变 1~2000字节
varchar2:可变长度 1~4000字节
nvarchar2: 可变长度 2GB长度(一般不用)
1.3.1.2 数值 number,integer
number:即是整数又是小数,默认整型
number[(p[,s])] ==p精度,s小数位
number(5,2) == 共5位,其中小数位2位
--只要整型:number(5)
1.3.1.3 日期时间
Date:存储日期、时间类型。
日期转换函数:to_date('2016-02-02','yyyy-mm-dd')
例:insert into tb_name(mydate)
values(to_date('2016-02-02','yyyy-mm-dd hh:mi:ss'));
1.3.1.4 储存二进制数据,比如图片、视频、声音文件等
4.1 Raw或Raw Long
4.2 LOB (常用,就是所谓的大数据,最大4BG)
记住,一般我们不把图片、视频等存在数据库中,只是把它们存放在硬盘地址保存到硬盘。
存在数据库里,要转换,资源消耗多。
1.3.1.5 格式:
CREATE TABLE TB_EMP(
SID NUMBER,
SNAME VARCAHR2(20) NOT NULL,
SEX VARCHAR2(20),
CONSTRAINT PK_SID PRIMARY KEY(SID),
CONSTRAINT CH_SEX CHECK(SEX)
)
1.3.2 数据操纵语言DML----INSERT、DELETE、UPDATE、SELECT
1.3.2.1 INSERT
--单条数据插入
INSERT INTO EMP(SID,SNAME)
VALUES(1, ’ 张三 ’);
- - 多条数据插入
INSERT INTO EMP(SID,SNAME)
SELECT 1,’A’ from dual union
Select 2,’b’ from dual
1.3.2.2 DELETE
- - 删除数据(删除表数据)
DELETE EMP WHERE EMPNO = 7369;
1.3.2.3 UPDATE
- - 修改数据
UPDATE EMP SET SAL = SAL+100;
1.3.2.4 SELECT
- - 查询
SELECT * FROM EMP
1.3.3 查看表结构(只能在SQLPLUS中使用)
DESCRIBE <表名>; - - 不能用
--复制表:
CREATE TABLE EMP2 AS
SELECT * FROM EMP;
--只复制表结构,不要数据
CREATE TABLE EMP3 AS
SELECT * FROM EMP WHERE 1=2;
1.3.4 修改表结构
ALTER TABLE EMP
--添加表约束
alter table SCOTT.EMP
add constraint FK_DEPTNO foreign key (DEPTNO)
1.3.5 SQL操作符(查询中使用运算符会使索引失效)
1.算术运算符 + - * /
2.比较运算符 = != < > <= >= between .. and in like is null
3.逻辑运算符 not and or
4.集合运算符 union行合并,union all
5.连接操作符 ||用来连接字符串
DECLARE
SNAME VARCHAR2(20);
BEGIN
SELECT ENAME INTO SNAME FROM EMP WHERE EMPNO = 7369;
DBMS_OUTPUT.PUT.LINE(‘姓名’||SNAME);
EDN;
注意:SQL操作符的优先级:算术 > 连接 > 比较 > not > and > or
1.3.6 伪表dual与伪列rowid,rownum
SELECT * FROM DUAL
--如果结果集中出现三列,其实它有五列,还有两个列:rowid、rownum
--rowid:唯一标识符,这是系统给的,不是我们自己定义的
--rownum:有点类似sql中的row_number()方法
查看:
select t.*,rowid from tb_name t;
select t.*.rownum from tb_name t;
注意:在Oracle项目中,一般都使用rownum做分页。
两个可以一起使用
SELECT EMP.*,ROWID,ROWNUM FROM EMP
问题:
求前两条数据
SELECT A.*,ROWNUM FROM EMP A WHERE ROWNUM<3
--求第3、4条记录(注意:rownum只能作用于小于号)
--解决办法:rownum是a表的伪列,把这伪列变成实列
SELECT EM.* FROM (SELECT E.*,ROWNUM EID FROM EMP E WHERE ROWNUM<5)EM WHERE EID>1;
问题:使用in 查询 部门编号10,20的所有员工
SELECT * FROM DEPT WHERE DEPTNO IN(10,20);
有建议可以联系本人QQ:304808680