SQL 与 Oracle SQL常用语句

来源:互联网 发布:www.47es.com最新域名 编辑:程序博客网 时间:2024/06/17 00:09

SQL 与 Oracle SQL常用语句

SQL

SQL定义:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL由以下五大块组成:
- DQL: Data QueryLanguage 数据查询语言
- DDL: Data Definition Language 数据库模式定义语言
- DML: Data Manipulation Language 数据操作语言
- DCL: Data Control Language 数据控制语言
- TCL: Transaction Control Language 事务控制语言

如下列表,详细显示了其语言以及操作关键字:
这里写图片描述


Oracle SQL常用语句

–创建测试表空间
CREATE TABLESPACE TestDBXUPT datafile’F:\app\Administrator\oradata\orcl\TestDBXUPT.dbf’ size 20M;

–删除测试表空间
drop TABLESPACE TestDBXUPT INCLUDING contents and datafiles CASCADE CONSTRAINTS;

–创建user表
create table xuptuser(
userid int primary key not null,
username varchar2(32)
);

–插入数据
–全列插入
insert into PlatUser values(‘0001’,’user0001’);

–指定列插入
insert into PlatUser(PlatUserID,PlatUserName) values(‘0002’,’user0002’);

–查询数据
–全列查询
select * from PlatUser;

–限定列查询,作用是限定列
select columnname from tablename;

–条件查询,作用是限定行
select * from tablename where columnname =’xxx’;

–修改数据
update tablename set columnname = ‘XXX’;

update tablename set columnname = ‘xxx’ where columnname =’xxx’;

–删除数据
DELETE tablename;//删除所有行 !警惕

DELETE tablename where columnname = ‘xxx’;

使用外连接

    A、left (outer) join:        左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行。        SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c    B:rightouterjoin:        右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。    C:full/crossouterjoin:        全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。    D:多路查询        select * from tablename             left / right  jion tablename1 on condition            left / right  jion tablename2 on condition            where ...(other sql sentences)****************连接查询*****************将两个及两个以上的表连接起来选取所需数据。1)内连接查询:当两个表中具有相同意义的字段值相等时,就查询出该条记录。实例:复制代码 代码如下:select num,name,employee.d_id,age,d_name from employee,department where employee.d_id = department.d_id因字段名相同,所以取d_id字段值时最好指定哪张表的字段。2)外连接查询select 属性名列表 from 表名1 left|right join 表名2 on 表名1.属性名1=表名2.属性名2;左连接查询:进行左连接查询时,可以查出表名1中所指的表中所有记录。而表名2所指表中,只能查询出匹配的记录。实例:复制代码 代码如下:select num,name,employee.d_id,age,d_name from employee left join department on employee.d_id = department.d_id;右连接查询:与左连接相反,可以查询出表名2中的的所有记录,而表名1中所指的表中,只查询出匹配的记录。//****************************************

分组:Group by:
分组查询 group by
group by 属性名 [having 条件表达式][ with rollup]
“属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所有记录的最后加上一条记录,该记录是上 面所有记录的总和。
一张表,一旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;

–分组查询时,列投影必须是分组列;使用非分组列作为列投影时,必须使用组函数。
select REGION , sex ,count(PLATUSERID) from FRIEND
GROUP BY REGION , sex;

-重点内容-分页查询

–rownum是一个伪列,用来统计行序号。
select PlatUserID , rownum from PlatUser;

–查出第二页结果集,每页2条
SELECT PlatUserID , ROWNUM FROM PlatUser WHERE ROWNUM <= 4;
–查出第1页结果集,每页2条
select PlatUserID , rownum from PlatUser where ROWNUM <= 2;

–查出第二页

/***********************************************很明显:第二种分页查询方式更好,如果数据量相当大的时候,第二种查询方式所消耗的查询内存可想而知,相比第一种就小很多************************************************/ SELECT  PlatUserID , ROWNUM  FROM PlatUser  WHERE  ROWNUM  <= 4  AND PlatUserID NOT  IN (                select  PlatUserID   from PlatUser  where  ROWNUM  <= 2 );SELECT  *  FROM  PlatUser             where  PlatUserID  in (             SELECT  PlatUserID   FROM PlatUser  WHERE  ROWNUM  <= 4  AND PlatUserID NOT  IN (                select  PlatUserID   from PlatUser  where  ROWNUM  <= 2 )                );

第三种查询:

select columnname, rownum from XUPTUSER where rownum between row_lo and row_hi;    select * from tablename         where table_pri_ID in        (            select table_pri_ID, rownum from table_name            where rownum between row_lo and row_hi        );

简单的表空间、表操作

/*********************************************************Note one:    查看默认表空间:select default_tablespace from user_users;    查看所有表空间:select tablespace_name from user_tablespace;//或者dba_tablespace    查看:DEFAULT_TABLESPACE字段Note two:    创建表指定表空间(如果没有置顶表空间,默认为users)        crate table tablename (//user table name            ... ...//user feild        )tablespace tablespacename;//user tablespace nameNote three:    增加列:alter table tablename add tablecolumn columntype ... ...;    删除列:alter table tablename drop column columnname;    修改列名:alter table tablename rename column oldcolumn_name to newcolumn_name;    重命名表:alter tablename rename to newtablename;    修改表空间:alter table tablename move tablespace newtablespace;    删除表:drop table tablename;    清空表内容(truncate,清空数据不能回滚):truncate table tablename;    约束:        NOT NULL 非空        FOREIGN KEY 外键        UNIQUE  唯一        PRIMARY KEY 主键        CHECK 检查Note four:    关系查询:        a:比较运算符 = 等于, < 小于 <= 小于等于 <>、!= 不等 > 大于 >= 大于等于        b:范围条件BETWEEN ... AND ...;NOT BETWEEN ... AND ...;        c:逻辑条件:NOT、AND、OR优先级依次降低    字符匹配符:% 0-多个字符            _ 一个字符    列表运算符:IN、NOT IN    未知值条件:IS NULL 或者IS NOT NULL;    排序查询:ORDER BY column_name ASC-- 升序 -- / DESC -- 降序 --    筛选查询:HAVING 简介:HAVING子句与WHERE子句非常相似(效果和使用方法均类似),不同的是WHERE子句是对表中数据进行限定过滤,而HAVING是对WHERE或者GROUP BY子句查询的结果集进行限定过滤的。    数据更新:update tablename set columnnmae = vol_value where yourlimiters;   *********************************************************/