DDL语言.docx
- 文档编号:2095183
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:14
- 大小:20.29KB
DDL语言.docx
《DDL语言.docx》由会员分享,可在线阅读,更多相关《DDL语言.docx(14页珍藏版)》请在冰点文库上搜索。
DDL语言
一、数据定义语言(ddl)
数据定义语言ddl(datadefinitionlanguage)用于改变数据库结构,包括创建、更改和删除数据库对象。
用于操纵表结构的数据定义语言命令有:
createtable
altertable
truncatetable
droptable
eg、
--创建tb_stu表数据结构
createtabletb_stu(
idnumber,
namevarchar2(20)
);
--修改tb_stu表数据结构,新增一列
altertabletb_stuaddpwdvarchar2(6);
--修改字段
altertabletb_stumodifypwdvarchar2(20);
--重命名表:
renametable_name1totable_name2;
RENAMEstudentTOtb_student;
--重命名列:
altertabletable_namerenamecolumncol_oldnametocolnewname;
ALTERTABLEstudentRENAMECOLUMNpwdTOpwd1;
--删除字段
altertabletb_studropcolumnpwd;
--删除tb_stu表数据
truncatetabletb_stu;
--删除tb_stu表
droptabletb_stu;
二、数据操作语言(dml)
数据操纵语言dml(datamanipulationlanguage)用于检索、插入和修改数据,dml利用insert、select、update及delete等语句来操作数据库对象所包含的数据。
(1)、利用现有的表创建表
语法:
createtable
selectcolumn_namesfrom
eg、
1)、createtabletb_deptasselect*fromdept;
2)、createtabletb_deptasselecta.deptno,a.dnamefromdepta;
3)、createtabletb_deptasselect*fromdeptawherea.deptno=10;
(2)、选择无重复的行,使用distinct关键字
eg、selectdistincta.dnamefromtb_depta;
(3)、使用列别名
selecta.deptno部门编号,a.dname"部门名称"fromtb_depta;
--中间有空格,用""
(4)、插入来自其他表中的记录
语法:
insertinto
selectcolumn_namesfrom
eg、insertintostudent2select*fromstudent;
三、事务控制语言(tcl)
放到“事务”讲解
四、数据控制语言(dcl)
放到“用户和权限”讲解
五、sql操作符
略
六、oracle函数
1、字符函数
initcap(char)函数:
首字母大写
eg、selectinitcap('hello')fromdual;
输出结果:
Hello
lower(char)函数:
字母全部转换为小写
eg、selectlower('heLLo')fromdual;
输出结果:
hello
upper(char)函数:
字母全部转换为大写
eg、selectupper('hello')fromdual;
输出结果:
HELLO
ltrim(char,set)函数:
去掉左边指定的字符
eg、selectltrim('xyzadmin','xyz')fromdual;
输出结果:
admin
rtrim(char,set)函数:
去掉右边指定的字符
eg、selectrtrim('xyzadmin','admin')fromdual;
输出结果:
xyz
translate(char,from,to)函数:
返回将from中的每个字符替换为to中相应字符以后的string
eg、1)、selecttranslate('jack','j','b')fromdual;--将j替换为b
输出结果:
back
2)、selecttranslate('123abc','2dc','4e')fromdual;
输出结果:
143ab
解析:
2替换为4,
d因为字符串里没有,所以不作替换,
c由于没有对应的替换字符,所以字符串里的c会被删除
replace(char,searchstring,[repstring])函数:
替换
eg、selectreplace('jackandjue','j','bl')fromdual;
输出结果:
blackandblue
instr(char,m,n)函数:
返回截取的字符串在源字符串中的位置,没有返回0
eg、selectinstr('worldwide','d')fromdual;
输出结果:
5
instr(C1,C2,I,J)-->判断某字符或字符串是否存在,存在返回出现的位置的索引,否则返回小于1;在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1被搜索的字符串
C2希望搜索的字符串
I搜索的开始位置,默认为1
J出现的位置,默认为1
substr(char,m,n)函数:
截取字符串
eg、selectsubstr('abcdefg',3,2)fromdual;
输出结果:
cd
concat(expr1,expr2)函数:
连接字符串
eg、selectconcat('Hello','world')fromdual;
输出结果:
Helloworld
chr(number)函数:
给出整数,返回对应的字符;
eg、selectchr(54740),chr(65)fromdual;
输出结果:
赵A
lpad和rpad函数:
粘贴字符
lpad在列的左边粘贴字符
rpad在列的右边粘贴字符
eg、SELECTlpad('林计钦',10,'*')FROMdual;
输出结果:
****林计钦
注意:
不够字符则用*来填满
trim函数:
去除字符串左右两边的空字符串;如果不指定,默认为空格符。
length(char)函数:
返回字符串的长度
eg、selectlength('abcdef')fromdual;
输出结果:
6
2、日期时间函数
add_months函数:
增加或减去月份
eg、
selectto_char(add_months(to_date('2011-11-30','yyyy-mm-dd'),2),'yyyy-mm-dd')fromdual;--前进
输出结果:
2012-01-31
selectto_char(add_months(to_date('2011-11-30','yyyy-mm-dd'),-2),'yyyy-mm-dd')fromdual;--后退
输出结果:
2011-9-30
months_between(date2,date1)函数:
给出date2-date1的月份
eg、selectmonths_between('19-12月-1999','19-3月-1999')fromdual;
输出结果:
9
last_day函数:
返回日期的最后一天
eg、selectto_char(last_day(sysdate),'yyyy-mm-ddhh24:
mi:
ss')fromdual;
输出结果:
2011-11-3023:
27:
20
round和trunc函数:
按照指定的精度进行四舍五入
eg、selectround(55.5),round(-55.4),trunc(55.5),trunc(-55.5)fromdual;
输出结果:
56-5555-55
next_day(date,'day')函数:
给出日期date和星期几计算下一个星期的日期
eg、selectnext_day('30-11月-2011','星期三')next_dayfromdual;
输出结果:
07-12月-11
extract(datetime)函数:
获取时间函数
eg、
输出结果:
SELECTEXTRACT(YEARFROMSYSDATE)FROMDUAL;--获取年
SELECTEXTRACT(MONTHFROMSYSDATE)FROMDUAL;--获取月
SELECTEXTRACT(DAYFROMSYSDATE)FROMDUAL;--获取日
selectto_char(sysdate,'hh24')fromdual;--获取小时
selectto_char(sysdate,'mi')fromdual;--获取分钟
selectto_char(sysdate,'ss')fromdual;--获取秒
selectextract(yearfromsystimestamp)year
extract(monthfromsystimestamp)month
extract(dayfromsystimestamp)day
extract(minutefromsystimestamp)minute
extract(secondfromsystimestamp)second
extract(timezone_hourfromsystimestamp)th
extract(timezone_minutefromsystimestamp)tm
extract(timezone_regionfromsystimestamp)tr
extract(timezone_abbrfromsystimestamp)ta
fromdual;
3、数字函数
abs函数:
绝对值
eg、selectabs(-15)fromdual;
输出结果:
15
round(m,n)四舍五入函数:
eg、selectround(45.926,2)fromdual;
输出结果:
45.93
selectround(45.926,-1)fromdual;
输出结果:
50
selectround(245.926,-2)fromdual;
输出结果:
200
selectround(275.926,-2)fromdual;
输出结果:
300
trunc(m,n)截取函数
一、日期
trunc函数为指定元素而截取的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date一个日期值
fmt日期格式,该日期将由指定的元素格式所截去。
忽略它则由最近的日期截去
如果当日日期是:
2011-3-18
selecttrunc(sysdate)fromdual--2011-3-18今天的日期为2011-3-18
selecttrunc(sysdate,'mm')fromdual--2011-3-1返回当月第一天.
selecttrunc(sysdate,'yy')fromdual--2011-1-1返回当年第一天
selecttrunc(sysdate,'dd')fromdual--2011-3-18返回当前年月日
selecttrunc(sysdate,'yyyy')fromdual--2011-1-1返回当年第一天
selecttrunc(sysdate,'d')fromdual--2011-3-13(星期天)返回当前星期的第一天
selecttrunc(sysdate,'hh')fromdual--2011-3-1814:
00:
00当前时间为14:
41
selecttrunc(sysdate,'mi')fromdual--2011-3-1814:
41:
00TRUNC()函数没有秒的精确
二、数字
trunc(number,num_digits)
number需要截尾取整的数字。
num_digits用于指定取整精度的数字。
num_digits的默认值为0。
trunc()函数截取时不进行四舍五入
selecttrunc(123.458)fromdual--123
selecttrunc(123.458,0)fromdual--123
selecttrunc(123.458,1)fromdual--123.4
selecttrunc(123.458,-1)fromdual--120
selecttrunc(123.458,-4)fromdual--0
selecttrunc(123.458,4)fromdual--123.458
selecttrunc(123)fromdual--123
selecttrunc(123,1)fromdual--123
selecttrunc(123,-1)fromdual--120
mod(m,n)求余函数
eg、selectmod(5,2)fromdual;
输出结果:
1
ceil(n)函数:
取大于等于数值n的最小整数
eg、selectceil(44.778)fromdual;
输出结果:
45
floor(n)函数:
取小于等于数值n的最大整数
eg、selectceil(44.778)fromdual;
输出结果:
44
4、转换函数
selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual;
selectto_date('2011-12-0110:
33:
56','yyyy-mm-ddhh24:
mi:
ss')fromdual;
selectto_number('1000')fromdual;
5、混合函数
nvl(string1,replace_with)功能:
如果string1为null,则nvl函数返回replace_with的值,否则返回string1的值。
注意事项:
string1和replace_with必须为同一数据类型,除非显示的使用to_char函数。
nvl2(e1,e2,e3)的功能为:
如果e1为null,则函数返回e3,否则返回e2。
nullif(exp1,expr2)函数的作用是如果exp1和exp2相等则返回空(null),否则返回第一个值。
eg、selectnullif('a','a')fromdual;
输出结果:
返回空,无值
selectnullif('a','1')fromdual;
输出结果:
a
6、分组函数
avg(n)、min(n)、max(n)、sun(n)、count(n)
八、oracle多表查询
多表联合查询
通过连接可以建立多表查询,多表查询的数据可以来自多个表,但是表之间必须有适当的连接条件。
为了从多张表中查询,必须识别连接多张表的公共列。
一般是在WHERE子句中用比较运算符指明连接的条件。
两个表连接有四种连接方式:
*相等连接
*不等连接(看作单表查询)
*外连接(左连接、右连接;左连接即左表全部显示,右表只显示匹配的信息,右连接反之。
)
*自连接(自关联)
1.相等连接
通过两个表具有相同意义的列,可以建立相等连接条件。
使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中
显示雇员名称和所在部门的编号和名称。
执行以下查询:
SELECTa.ename,b.id,b.dname
FROMemployeea,deptb
WHEREa.id=b.id
说明:
相等连接语句的格式要求是,在FROM从句中依次列出两个表的名称,在表的每个列前需要添加表名,用“.”分隔,表示列属于不同的表。
在WHERE条件中要指明进行相等连接的列。
以上训练中,不在两个表中同时出现的列,前面的表名前缀可以省略。
所以以上例子可以简化为如下的表示:
SELECT*
FROMempe,deptd
WHEREe.deptno=d.deptno;
2.外连接
在以上的例子中,相等连接有一个问题:
如果某个雇员的部门还没有填写,即保留为空,那么该雇员在查询中就不会出现;或者某个部门还没有雇员,该部门在查询中也不会出现。
为了解决这个问题可以用外连,即除了显示满足相等连接条件的记录外,还显示那些不满足连接条件的行,不满足连接条件的行将显示在最后。
外连操作符为(+),它可以出现在相等连接条件的左侧或右侧。
出现在左侧或右侧的含义不同,这里用如下的例子予以说明。
使用外连显示不满足相等条件的记录。
显示雇员名称和所在部门的编号和名称。
执行以下查询:
左连接方法一(推荐使用,简洁):
--+号(附表)对面的是主表,可以理解为主表全部显示,+号这边如果没有匹配就显示空值
--不管dept是否存在,emp都会显示(emp当主表)
SELECT*FROMempe,deptdWHEREd.deptno(+)=e.deptno;--左连接
SELECT*FROMempe,deptdWHEREe.deptno=d.deptno(+);--右连接
--不管emp是否存在,dept都会显示(dept当主表)
SELECT*FROMempe,deptdWHEREe.deptno(+)=d.deptno;--左连接
SELECT*FROMempe,deptdWHEREd.deptno=e.deptno(+);--右连接
左连接方法二:
--不管dept是否存在,employee都会显示
SELECT*FROMempeLEFTJOINdeptdONd.deptno=e.deptno;
SELECT*FROMdeptdRIGHTJOINempeONd.deptno=e.deptno;
3、自连接(一般用在树形权限结构中)
自连接就是一个表,同本身进行连接。
对于自连接可以想像存在两个相同的表(表和表的副本),可以通过不同的别名区别两个相同的表。
SELECTworker.ename||'的经理是'||manager.enameAS雇员经理
FROMemployeeworker,employeemanager
WHEREworker.mgr=manager.empno;
------------
执行结果为:
1.SMITH的经理是FORD
2.ALLEN的经理是BLAKE
3.WARD的经理是BLAKE
注:
在操作多表联合查询时,若出现以下情况,将形成笛卡尔积
–联接条件被省略
–联接条件无效
–第一个表中的所有行被联接到第二个表中的所有行上
为了避免笛卡尔积,请始终包括有效的联接条件
何为笛卡尔积?
笛卡尔(Descartes)乘积又叫直积。
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
可以扩展到多个集合的情况。
九、集合连接
十、扩展
1、cmd控制台登录oracle数据库:
sqlplusscott/oracle@orcl
2、获取当前时间
-->selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual;
输出结果值:
2011-11-3019:
40:
55
获取当前时间(小数点精确到后面6位,6是可变的)
-->selectto_char(systimestamp,'yyyy-mm-ddhh24:
mi:
ssxff6')fromdual;
输出结果值:
2011-11-3019:
45:
35.791000
3、查看表结构:
descdept;
4、修改日期格式:
altersessionsetnls_date_format='yyyy-mm-ddhh24:
mi:
ss';(注意:
只在当前会话中生效)
5、两种插入空值方式
方法一:
insertintotb_stuvalues(1,null,to_date('20111130','yyyymmdd'));
方法二:
insertintotb_stu(id,birthday)values(1,to_date('20111130','yyyymmdd'));
6、清屏:
clearscreen;
7、oracle中两个单引号表示一个单引号
eg、updatetb_stusetpwd='1''2'whereid=1;
8、oracle匹配
eg、select*fromtb_stuwherepwdlike'A%'--匹配多个
select*fromtb_stuwherepwdlike'A_'--匹配一个
9、droptabletb_deptpurge;--永久删除
droptabletb_dept;--把表放入回收站,并没有彻底的删除表
10、selectto_char(33,'L99.99')fromdual;--获取本地货币符号,输出结果为:
¥33.00
selectto_char(33,'$99.99')fromdual;--获取美元
11、oracle中为空的两种表达方式
select''fromdual;
selectnullfromdual;
12、查询当前数据库中的所有表名
select*fromtab;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDL 语言