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

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;
一、 概念介绍: 数据库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、SAGE1SAGE2、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 还可以用来复制表结构 例如:假设有三个表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值