您的位置:首页 > 数据库 > Oracle

Oracle数据库(二)——基础的SQL语法

2018-02-22 23:19 435 查看
DML&DQL

insert插入数据

insert into table_name(column_name1,column_name2,…) values(data1,data2…);

insert into table_name1(column_name1,column_name2,…) select column_name1,column_name2… from table_name2;

直接通过源数据表在添加数据的同时创建表也是可以实现的。

create table table_name AS select column_name1,column_name2,…FROM source_table;

update 修改数据

update table_name set column_name=data1,column_name1=data2,…[where condition];

delete 删除数据

delete from table_name [where condition] 删除的数据不是字段

select 查询数据

select column_name1,column_name2,…from table_name where[condition];

其他语句:

TRUNCATE 删除全部数据,比delete快,TRUNCATE TABLE table_name;

MERGE 修改表中数据,可以对数据表同时进行增加和修改的操作。

MERGE [INTO] table_name1
USING table_name2
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
--table_name1:要修改或添加的表
--table_name2:参照的更新的表
--condition:两表之间的关系,或其他的一些条件
--merge_update_clause:如果和参照表2中的雕件匹配,执行更新操作的SQL语句
--merge_update_clause:如果条件不匹配,就执行增加操作的SQL的语句
--可以删除一个,但不能都删除


下面使用MERGE语句完成对LOGIN表的操作

首先查询login和managerinfo表中的全部数据,然后使用on后面的条件编号是否相同,当相同时把login表中的loginname列改写成managerinfo表中的loginname,当不相同时,在login表中增加一条在managerinfo中存在的数据。

merge into login
using managerinfo
on (login.login_id=managerinfo.managerid)
when matched then update
set login.loginname=managerinfo.loginname
when not matched then insert
values(managerinfo.loginname,managerinfo.password,managerinfo.managerid);


利用select检索数据

select基本语法

select
[DISTINCT|ALL]   --描述列表字段中的数据是否去除重复记录
select_list  --需要查询的字段列表,也可以说是占位符。可以是一个也可以是多个字段
FROM table_list
[where_clause]      --查询条件
[group_by_clause]   --group by 子句部分
[HAVING condition]  --HAVING子句部分
[order_by_clause]  --排序
--其中select_list的具体语法
{
* |
{[ schema. ] { table | view } .*
| expr [ [AS] c_alias ]
}
--schema:模式名称 table|view 表或视图 expr 表达式 c_alias:别名


使用别名:

select productid 产品编号, productname AS 产品名称, productprice as 产品价格 from productinfo;

给字段定义别名可以用AS ,如果不用AS而是在查询的列名后加上空格然后输入别名效果相同

使用表达式查询

SELECT productid,productname,productprice || '*' || 1.25 || '=' || productprice*1.25 AS new_productprice from productinfo;
--* 代表乘号,"||"是连续操作符,用来连接两个字符串
--使用函数 subStr截取字符的函数
select productid 产品编号, subStr(productid,1,6) as 截取后的编号,
productname AS 产品名称, productprice AS 产品价格
from productinfo;


去除检索数据中的重复记录

select distinct(category) 产品类型 from productinfo;distinct 后面如果是多个列名,那么distinct把这些列名看出一个整体,来去除重复记录。

使用排序的语法

order by
{expr | position | c_alias} --表达式|列表中列的位置|别名
[ASC | DESC]        --升|降  不写默认升序
[NULLS FIRST | NULLS LAST]  --对空字段的处理方式
[,{expr | postion | c_alias}
[ASC | DESC]
[NULLS FIRST | NULLS LAST] --指定空字段的位置,默认NULL是最大值
]...
--使用字段位置作为排序字段
SELECT productname, productprice,quantity from productinfo order by 3 desc;


使用where子句设置检索条件

where 条件子句中可以使用的操作符主要有关系操作符,比较操作符和逻辑操作符。

1.关系操作符包括:<,<=,>,>=,=,!=,<> 不为和!=一样.

2.比较操作符包括:is NULL ;like 模糊比较字符串值 ;between…and… 验证值是否在范围内;in 验证操作数在设定的一系列值中

3.逻辑操作符包括: and 两个条件都必须得到满足;or 只要满足两个条件中的其中一个;not 与某个逻辑值取反

模糊查询数据,like 加上两个通配符:_ 可以替代字符 %可以替代多个字符

查询条件限制在某个列表范围之内:IN(list)

group by 和having子句

group by 用于归纳汇总相关数据,它不属于where子句,

group by
{ expr      -- 通常表示数据库列名
| { rollup | cube } ({expr [, expr ]...}) --group by子句的扩展,可以返回小计和总计记录
}


having子句通常和group by子句一起使用,限用搜索条件,它和where子句不一样,having子句与组有关,而不是单个的值有关。在group by 子句中,它会作用与group by创建的组

select category avg(productprice) 平均价格 from productinfo group by category having avg (productprice) > 2000;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 oracle sql