目录
ORACLE结构查询语言-SQL语言 .................................................................................................................................................. 3
一、 概念介绍:................................................................................................................................................................. 3 二、 数据类型:................................................................................................................................................................. 3 三、 列的非空属性NOT NULL: .................................................................................................................................... 3 四、 特殊约定:................................................................................................................................................................. 3 五、 建表或视图语句CREATE ......................................................................................................................................... 3 六、 简单SELECT语句: ................................................................................................................................................ 4 七、 有条件的SELECT语句: ........................................................................................................................................ 4 八、 对查询结果进行排序: ............................................................................................................................................. 4 九、 剔除重复语句DISTINCT: ......................................................................................................................................... 5 十、 集合函数:................................................................................................................................................................. 5 十一、 对查询结果分组GROUP BY ................................................................................................................................ 5 十二、 数据分组深入HAVING ........................................................................................................................................ 6 十三、 连接查询:............................................................................................................................................................. 8 十五、 外连接(+): ...................................................................................................................................................... 11 十六、 子查询:............................................................................................................................................................... 12 十七、 存在测试EXISTS、NOT EXISTS ..................................................................................................................... 13 十八、 子查询、连接查询的区别 ................................................................................................................................... 13 十九、 联合语句 union ................................................................................................................................................... 14 二十、 程序易读要求 ....................................................................................................................................................... 14 二十一、 关于索引使用方法 ........................................................................................................................................... 15 二十二、 From 表的顺序和查询速度相关 .................................................................................................................... 16 二十三、 关于运行速度参考时间 ................................................................................................................................... 16 二十四、 子查询作为select显示数据时的要求 ............................................................................................................ 16 二十五、 插入数据INSERT: ........................................................................................................................................ 17 二十六、 修改数据UPDATE: ...................................................................................................................................... 17 二十七、 利用表连接修改数据UPDATE: .................................................................................................................. 18 二十八、 验证update正确定的方法 .............................................................................................................................. 19 二十九、 同一个表中数据替换的例子 ........................................................................................................................... 19 三十、 删除数据DELETE............................................................................................................................................... 20 三十一、 提交生效COMMIT; ........................................................................................................................................ 20 三十二、 回滚作废ROLLBACK; ................................................................................................................................... 20 三十三、 Sql的递归用法 ................................................................................................................................................ 20 三十四、sql编译执行顺序(假设kh_jbxx有N条记录,kh_dkhxx有n条记录) ........................................................ 21
1、不使用索引的全表扫描 ............................................................................................................................................. 21 2、使用索引..................................................................................................................................................................... 21 3、exists ........................................................................................................................................................................... 21 4、无连接in .................................................................................................................................................................... 21 5、有连接in .................................................................................................................................................................... 21 三十五、说明: ...................................................................................................................................................................... 21 常用命令、技巧、书写格式........................................................................................................................................................... 22
一、 启动数据库(开机时系统自动启动) ........................................................................................................................ 22 二、 initorac.ora(或 intiWG73.ora) ............................................................................................................................ 22 三、 数据导出................................................................................................................................................................... 22
1
四、 数据导入................................................................................................................................................................... 22 五、 系统常用表............................................................................................................................................................... 23 六、 获取汉字拼音码 ....................................................................................................................................................... 23 七、 Sql语句启发方法 .................................................................................................................................................... 24 ORACLE数据库SQL语言常用函数 ............................................................................................................................................ 25
一、 伪列: ...................................................................................................................................................................... 25 二、 伪表dual: ............................................................................................................................................................... 25 三、 运算符:................................................................................................................................................................... 25 四、 日期运算:............................................................................................................................................................... 25 五、 数值函数:............................................................................................................................................................... 25 六、 字符串查找函数:instr............................................................................................................................................ 25 七、 字符函数:............................................................................................................................................................... 25 八、 日期函数:............................................................................................................................................................... 25 九、 判断是否为空函数 ................................................................................................................................................... 26 十、 转化函数:............................................................................................................................................................... 26 十一、 条件函数:........................................................................................................................................................... 26
1.case when .................................................................................................................................................................... 26 2.decode ......................................................................................................................................................................... 26
2
ORACLE结构查询语言-SQL语言
(新增内容为红色)
一、概念介绍:
数据库DATABASE、表TABLE、列COLUMN、行ROW、关键字PRIMARY KEY、索引INDEX 二、数据类型:
LONG RAM:超长大型数据(照片、图形、描述等不定长数据)。 DATE:包含日期和时间。
INTEGER:有符号全长二进制整数(31位精度)。 SMALLINT:有符号半长二进制整数(15位精度)。
DECIMAL (p[,q]): 有符号的封装了的十进制小数,最多有 p 位数,并假设有 q 位在小数点右边。 如果省略 q ,
则认为是 0。
FLOAT:有符号双字浮点数。
CHAR(n): 长度为 n 的定长字符串。
VARCHAR(n): 最大长度为 n 的变长字符串。
CHAR (5) 和 VARCHAR2(5)的区别是 CHAR不足5位后面自动加上空格,VARCHAR2不加
三、列的非空属性NOT NULL:
如果一个列具有非空属性,则在给该表增加、修改数据时必须保证该列有内容,否则会出错。
如果一个列允许为空,该列可以不放任何内容,即空值(在SQL中书写为NULL),空值不是空格。 如果一个列内容为空值,则该列不等于任何值(包括空值)。
例如:列SAGE1、SAGE2的内容为空,列SAGE3内容为20,则下面的逻辑表达式全部为NULL:SAGE1=SAGE2、SAGE1<>SAGE2、SAGE1=SAGE3、SAGE3>SAGE1。下面的逻辑表达式全部为真:SAGE1 IS NULL、SAGE3 IS NOT NULL。下列表达式全为空:sage1+100,sage2+sage3 四、特殊约定:
1. 所有SQL语句以分号结束不是以回车换行结束。 2. 中扩号代表选项,就是其中的内容可有可无。 3. 下面讲的列名在很多情况下也可以是表达式。
4. 表名格式:[用户名.]表名,例如:user001.student,如果不注名用户,则说明是当前登陆的用户的表。 五、建表或视图语句CREATE
格式:
CREATE TABLE 表名
(列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL]);
CREATE VIEW 视图名 AS SELECT ……; CREATE TABLE 表名 AS SELECT ……;
Create table as 经常在修改一个表前备份该表,而且运行速度很快且不用提交 例如:Select table a_student as select * from student; Create table as 还可以用来复制表结构
例如:假设有三个表
3
Student(sno,sname,ssex,sage,sdept) 学生表 Sno:学号 Sname:姓名 Ssex:性别 Sage:年龄 Sdept:所在系
Course(cno,cname,cpno,credit) Cno:课程号
Cname:课程名称 Cpno:先行课号 Credit:学分 Sc(sno,cno,grade) Sno:学号 Cno:课程号 Grade:成绩
Create table student1 as select sno,name from student; //利用student创建一个仅仅有两个列的student1。 六、简单SELECT语句:
格式:SELECT [表名.]列名 [列别名],[表名.]列名 [列别名],…… FROM表名 [表别名],表名 [表别名],表名 [表别名], ……;
SELECT * FROM 表名 [表别名],表名 [表别名],表名 [表别名];//*代表所有列 例如:1.SELECT SNO,SNAME,SAGE FROM STUDENT;
2.SELECT * FROM STUDENT;
七、有条件的SELECT语句:
常用的运算:=、<>、>=、<=、AND、OR、NOT、LIKE、IN,between…and… IN、NOT IN运算:SAGE IN (10,20,30) 、SAGE NOT IN (10,20,30)
LIKE、NOT LIKE运算:SNAME LIKE ‘李%’、 SNAME LIKE ‘%庆%’、 SNAME NOT LIKE ‘%华’ //百分号代表任意长度字符串。 //下划线代表任意一个字符。
between…and…运算:sage between 20 and 40;//年龄在20和40之间的,且包括20和40 格式:SELECT列名 [列别名],列名 [列别名],…… 列名 [列别名]
FROM表名 [表别名],表名 [表别名],表名 [表别名] WHERE 条件表达式;
例如:SELECT SNO,SNAME,SAGE FROM STUDENT WHERE ((SAGE>18 OR SAGE <25)AND SSEX=’男’) OR
SSEX=’女’;
//选择年龄大于18或小于25的性别为男的,或者性别为女的记录 SELECT * FROM STUDENT WHERE NOT SSEX=’女’; //选择性别不是女的所有记录(包括男与空)
SELECT * FROM STUDENT WHERE SSEX IS NOT NULL; //选择性别不为空的所有记录
Select sname,sdept,sage from student where sage between 20 and 40;
//查询年龄在20~40岁(包括20和40)之间的学生姓名,系别和年龄。
八、对查询结果进行排序:
用order by子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序。 格式:SELECT列名 [列别名],列名 [列别名],…… 列名 [列别名]
FROM 表名 [表别名],表名 [表别名],表名 [表别名] WHERE 条件表达式
4
ORDER BY列名、列名、……列名;
例如:SELECT SNO,SNAME,SAGE FROM STUDENT ORDER BY SNO; //选出的记录按SNO排序(升序)
SELECT SNO,SNAME,SAGE FROM STUDENT ORDER BY SSEX,SNO;
//选出的记录先按SSEX排序,再按SNO排序
说明:当有多列值进行排序时,先按第一列排序,在第一列值相同的情况下,再按第二列值进行排序,当第二列值相同时安第三列值排序,以此类推。。。。。。 九、剔除重复语句DISTINCT:
如查询系统表中电能表作用类别//select distinct(dnbzylb) from kh_cbkp; 历史数据移植问题
例如:SELECT DISTINCT SAGE FROM STUDENT;
如果有100名18岁的学生,不加DISTINCT 18在结果返回100行18,加DISTINCT 18返回1行18。 SELECT DISTINCT SSEX FROM STUDENT;//返回男、女或null
SELECT COUNT(DISTINCT SAGE) FROM STUDENT;//返回所有年龄种类的数量 十、集合函数:
MAX([distinct|all]<列名>)求一列值中的最大值 MIN([distinct|all]<列名>)求一列值中的最小值
SUM([distinct|all]<列名>)求一列值的总和(数值型的) COUNT([distinct|all]<列名>)统计一列中值的个数 AVG([distinct|all]<列名>)计算一列值的平均值 ★其中all为缺省值。
注意:如果用distinct短语,则表示在计算时要去掉此列中重复的值,即每个值只被记录一遍 例如:1。SELECT MAX(SAGE) FROM STUDENT;
//选择最大年龄。
2.SELECT COUNT(*) FROM STUDENT;
//选择student表中学生的总人数。 3.Select count(distinct sno )
From sc;
//查询选修了课程的学生人数 特别注意:
4.Select count(ssex) from student;
//选择student表中学生性别不为空的总人数。
十一、 对查询结果分组GROUP BY
Group by 子句将查询结果表的某一列或多列值分组,值相等的为一组,当在表列中不使用group by子句,实际上是告诉数据库把表中所有的行看作一个组。
格式:SELECT列名 [列别名],列名 [列别名],…… 集合函数(列名 [列别名] )
FROM表名 [表别名],表名 [表别名],表名 [表别名] WHERE 条件表达式
GROUP BY 列名、列名、……列名;
特别说明:当使用group by时,未在group by部分用到的表列在select部分出现时必须使用分组函数(max(),min(),sum(),avg(),count());如对于指定的表列找不到想使用的合适的分组函数,那么就将该表移到group by子句中。
Sno,sname,grade,cname 有数据
01 john 20 pascal 01 john 30 c
5