Oracle数据库总结.docx
《Oracle数据库总结.docx》由会员分享,可在线阅读,更多相关《Oracle数据库总结.docx(8页珍藏版)》请在冰豆网上搜索。
Oracle数据库总结
创建表及命名规则?
表名和列名:
必须以字母开头
必须在1–30个字符之间
必须只能包含A–Z,a–z,0–9,_,$,和#
必须不能和用户定义的其他对象重名
必须不能是Oracle的保留字
Oracle默认存储是都存为大写
增删改查语法?
增加:
例如:
使用INSERT语句往customers表中插入数据,指定相关列和值
INSERTINTOcustomers(customer_id,first_name,last_name,dob,phone)VALUES(6,'Fred','Brown','01-1月-1970','800-555-1215');
如果为表所有列都指定值,那么可以忽略列清单
INSERTINTOcustomersVALUES(6,'Fred','Brown','01-1月-1970','800-555-1215');
可以使用NULL为某些列指定空值
INSERTINTOcustomersVALUES(8,'Sophie','White',NULL,NULL);
查询:
select*fromcustomers;或者select字段fromcustomerswhere条件
删除:
deletefromcustomerswhere条件
更改:
updatecustomerssetname='xiaoming',age=‘16’(更改多个字段时候用逗号隔开)where条件
对查询结果进行排序?
语句:
select*fromcustomersorderby字段desc;
(asc(升序),desc(降序)如果不写,默认升序)
NULL值了解么?
NULL值表示未知的值。
它是一个特殊的值,但并不是空字符串,NULL值表示该列是未知的。
当某些查询语句在输出结果列上看不到值的时候,可能就是NULL值
NVL()和NVL2():
NULL值被查询出来的时候没有显示信息,如何告知用户这是空字符串还是NULL,这可以通过NVL()函数来进行处理
NVL(x,value)是有value显示本身,null显示为替换的value
NVL2(x,value1,value2)是如果x不为NULL值,返回value1,否则返回value2
例程:
selectname,nvl2(email,'已知','未知')fromstudent;
【代码含义:
代表如果email字段中有值,则显示已知,null则显示未知,如果想显示本来的查询结果selectname,nvl(email,'未知')fromstudent;】
updatestudentsetname=replace(name,'小','大');
【代码含义:
代表将STUDENT表中NAME字段中如果含有小字,那么就将小字替换为大字(操作的不是显示结果,而是将表中数据进行更改)】
Oracle中的简单函数?
字符串函数
●concat:
将x和y拼接起来,并返回新字符串
例程:
selectconcat(first_name,'-'||last_name)姓名
fromcustomers;
●Instr字符查找,从1开始。
selectinstr('asdbcrdbewqrbmde','b')fromdual;
selectinstr('asdbcrdbewqrbmde','b',5,2)fromdual;
【代表从第5个字符开始,第二个b所在的位置】
●Ltrim:
LTRIM(x,[trim_string])
从x字符串左侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除左侧空白字符
●Rtrim
RTRIM(x,[trim_string])
从x字符串右侧去除所有的trim_string字符串,如果没有指定trim_string字符串,则默认为去除右侧空白字符
●Trim
TRIM(trim_stringFROMx)
从x字符串两侧去除trim_string字符串
●Replace
REPLACE(x,search_string,replace_string)
从字符串x中搜索search_string字符串,并使用replace_string字符串替换。
用select执行并不会修改数据库中原始值,但是用update执行可以修改。
●Substr
SUBSTR(x,start,[length])
返回字符串中的指定的字符,这些字符从字符串的第start个位置开始,长度为length个字符;如果start是负数,则从x字符串的末尾开始算起;如果length省略,则将返回一直到字符串末尾的所有字符
例程:
selectsubstr('abcd月fg',4,2)fromdual;(结果:
d月)
selectsubstr('abcdefg',-2)fromdual;(结果:
fq)
日期函数
●Sysdate
例程:
Selectsysdatefromdual;
Selectto_char(sysdate,'yyyy-mm-dd-hh-mm-ss')fromdual;
●Add_months(d1,n1)
●last_day():
返回所查询的值中最后一个日期数据。
转换函数
●To_char
TO_CHAR(x,[format])
将x转化为字符串。
format为转换的格式,可以为数字格式或日期格式
selectto_char(sysdate,'yyyy-mm-dd')fromdual;
【一般在查询时候使用,使返回的值成为指定格式】
●to_date
TO_DATE(x,[format])
将x字符串转换为日期
insertintostudentvalues(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);
【一般在添加使用】
聚合函数
●Avg:
平均数
●Sum:
求和
●Max:
最大值
●Min:
最小值
●Count:
返回统计的行数
●Round:
四舍五入
例程:
selectround(avg(bid),1)frombug;
分组了解么?
有时需要对表中的行进行分组,然后统计每组的信息,可以使用GROUPBY进行分组,然后再对每组进行统计。
(1)可以使用GROUPBY对多个列进行分组
例:
SELECTproduct_id,avg(customer_id)FROMpurchasesGROUPBYproduct_id;
(2)可以对分组后的行使用聚集函数,聚集函数会统计每组中的值,对于每组分别统计后返回一个值
例:
SELECTproduct_type_id,COUNT(ROWID)FROMproductsGROUPBYproduct_type_idORDERBYproduct_type_id;
注意:
a)如果查询中使用了聚集函数,被查询的列未使用聚集函数处理,那么这些列必须出现在GROUPBY子句后,否则,会提示ORA-00937错误
b)不能使用聚集函数作为WHERE子句的筛选条件,否则,会提示ORA-00934错误
c)可以使用HAVING子句过滤分组后的行
SELECT...
FROM...
WHERE
GROUPBY...
HAVING...
ORDERBY...;
(GROUPBY使用时可以不使用HAVING,但是使用HAVING时必须有GROUPBY才有意义)
(3)同时使用WHERE,GROUPBY和HAVING
a)首先,执行WHERE筛选掉不符合条件的行
b)然后,将符合条件的行使用GROUPBY进行分组
c)最后,使用HAVING对分组统计的结果进行再次筛选
例:
SELECTproduct_type_id,AVG(price)
FROMproducts
WHEREprice<15
GROUPBYproduct_type_id
HAVINGAVG(price)>13
ORDERBYproduct_type_id;
表的约束条件?
目的:
确保表中数据的完整性。
常用的约束类型:
主键约束(PRIMARYKEY):
要求主键列数据唯一,并且不允许为空
非空约束(NOTNULL):
指定的列的值不允许为空
唯一键约束(UNIQUE):
要求该列唯一,允许为空,但只能出现一个空值
检查约束(CHECK):
指定表中一列或多列可以接受的数据值格式
默认约束(DEFAULT):
指定某列的默认值
外键约束(FOREIGNKEY):
用于建立和加强两个表数据之间连接的一列或多列。
通过将表中的主键列添加到另一个表中。
可以创建两个表之间的连接。
这个主键的列就称为第二个表的外键。
外键约束就可以确保添加到外键表中的任何行都在主表中都存在相应的行
多表查询?
不同的数据存储在不同的表中,通常要查询多张表才能找到需要的数据
例程:
SELECTproducts.name,product_types.name
FROMproducts,product_types
WHEREproducts.product_type_id=product_types.product_type_id
ANDproducts.product_id=3;
products表和product_types表相关字段会用在SELECT语句及WHERE子句上,可以给表起别名,提高代码可读性、降低书写难度
例程:
SELECTp.name,pt.name
FROMproductsp,product_typespt
WHEREp.product_type_id=pt.product_type_id
ANDp.product_id=3
注意:
如果查询两张表,并且没有定义连接条件,那么查询的结果集是两表相乘的结果,这样的情况称之为笛卡尔乘积。
总结:
多表查询WHERE时,连接次数=查询时连接表的数量-1
常见的三种连接类型:
内连接:
内连接返回的行只有满足连接条件才会返回。
如果连接条件的列中有NULL值,那么该行则不会返回
外连接:
外连接返回的行满足连接条件,也包括在连接条件的列包含空值的行
自连接:
连接的表为同一张表
子查询?
子查询是嵌入到另一个SELECT语句中的一个SELECT语句。
通过使用子查询,可以使用简单的语句组成强大的语句。
当需要从表中选择行,而选择条件却取决于该表自身中的数据时,子查询非常有用。
单行子查询:
(1)可以将另外一个查询作为WHERE子句的子查询
例:
查询尾名是‘Brown’的首名和尾名
SELECTfirst_name,last_name
FROMcustomers
WHEREcustomer_id=
(SELECTcustomer_id
FROMcustomers
WHERElast_name='Brown');
(2)在单行子查询还可以使用其他比较运算符,如<>、<、>、<=和>=
例:
查询价格大于平均价格的商品编号、名称及价格
WHERE子句中使用>