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:right (outer) join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full/cross (outer) join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
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 name
Note 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;
*********************************************************/