一、DQL(data query language)数据查询语句
- 查询语句基本语法
select 列名 from 表名;-->列出指定表中的指定列的数据,列出所有列用*。
select * from tab 列出当前用户的所有表
- 含有数学运算结果的列查询列名表名
select ename,ename,sal, sal*1000 from emp; 数据有无限复制,运算的特性
oracle 数学运算符:加(+)、减(-)、乘(*)、除(/)
select ename,ename,sal, sal+1000 from emp;
select ename,ename,sal, sal-1000 from emp;
select ename,ename,sal, sal*1.1 from emp;
select ename,ename,sal, sal/2 from emp;
- 对列设置别名
select name as xingming ,sal as 'gong zi' from emp;--> 取别名 as 可以省略,''引号在字符
串中间没有空格的时候也可略。
- 去掉重复取唯一值 distinct
select distinct name from emp;--
- 取出指定表中指定列中不同的据,,相同的只取一次。
select table_name from user_tables;-->取出当前用户下的所有表名。oracle 专用语句
- ★查看表结构,oracle 专用语句。
desc emp;->列出表信息(表结构)
- 列排序 order by
select * from emp order by sal asc; [desc]-->列出表中所有信息按指定列中数据的升序或者降序排列 asc 表示升序 desc 表示降序。
- 带 where 条件查询 条件可以带运算符
select * from emp where sal =3000;-->列出指定表中符合条件的所有信息 where 后面跟筛
选条件普通条件格式 where 列名 比较运算符 值。
逻辑运算符 and(与) or(或) not(非) 优先级:()>not>and>or
- 空值 null,非空值 not null
select * from emp where sal is not null;-->is null 空值判断 not 还可以加在 where 后面的列
名前面
- between...and 在...之间 ,上限在前下限在后
select * from emp where sal between 1000 and 3000;
- (值列表) 筛选值列表中的数据
select * from emp where sal in(3000,1500);
- 模糊查询 筛选名字以 m 结尾的数据
select * from emp where ename like '%m';
正则表达式通配符 % 代表 0~多个字符,_代表一个字符,m%代表 m 开头 %m%代表包含 m
关键字集合
select from ,as, distinct, table, order by asc/desc, where is null, not, and ,or,between and ,in like
- 不同数据库查询前十条记录
sql server:
SELECT top 10 * FROM EMP ORDER BY sal DESC;在 sql server 里是使用 top 来表示前 10 条的信息。
Oracle:
SELECT * FROM EMP WHERE ROWNUM <= 10 ORDER BY sal DESC; 在 oracle 中是使用 ROWNUM 来表示前 10 条的信息
MYSQL 查询前 10 条的方法
select * from table_name limit 0,10 --通常 0 是可以省略的,直接写成 limit 10。0 代表从第 0 条记录后面开始,也就是从第一条开始
select * from table_name limit 1,10 --则为从第一条后面的记录开始展示,也就是说从第二条开始。
运算符用于 where 比较条件的运算符有:
- 等于:=、<、<=、>、>=、<>
- 包含:in、not in 、exists、not exists
- 范围:between...and、not between....and
- 匹配测试:like、not like
- Null 测试:is null、is not null select * from emp where DEPTNO is null
- 布尔链接: and(与) or(或) not(非) ,优先级()>not>and>or
- 通配符%:在 where 子句中,通配符可与 like 条件一起使用。在 Oracle 中%(百分号)用来表示任意数量的字符,或者可能根本没有字符。
- 星号(*):select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示 0 个或任意多个字符。
- 单引号( ' ):在 Oracle 中,应该只使用单引号将文本和字符和日期括起来,不能使用引号。
- 双引号( “ ) : 关键字,对象名、字段名加双引号,则示意 Oracle将严格区分大小写,否则Oracl都默认大写。
二、DDl(data definition language)数据定义语言
- 创建表
create table 表名 (列名 1 类型 1,...列名 n 类型 n);
数据类型
MySQL |
Oracle |
Note |
int/double |
number |
数值型 |
varchar |
varchar2 |
小文本型 |
text |
varchar2 |
对于普通文本大于255,且小于4000的列 |
text |
blob |
对于大于4000的comment |
longblob |
blob |
1 数字型
number 默认 38 位 number(n) n 为 位数长度 number(m,n) m 为总长度 n 为小数位数长度 n 不能大于 m
- 字符串型
char(n)定长字符串 n 为长度最多 20 位 varchar2(n) 不定长字符串 n 为长度 上限 4000
- 日期,时间型 date 年月日小数分秒(小数后 9 位)
- 删除表
drop table 表名;
- 修改表
增加列alter table 表名 add(列名 类型.....);
修改类型alter table 表名 modify(列名 新类型);
改列名alter table 表名 rename column 列名 to 新列名;
删除列alter table 表名 drop column 列名;
修改表名 rename 表名 to 新表名;
截断表 truncate table 表名;
- 子查询创建表,相当于拷贝一个表中数据
create table 表名 as (select * from 表名);
关键字集合
create, number,varchar2,char,date,drop,alter,add ,modify,rename column to, truncate
三、DML(data manipulation language)数据操作语言
- 行级操作
增 insert into 表名 (‘字段名 1’,’ 字段名 2’,’ 字段名 3’) values (‘列值1’,’ 列值 2’,’ 列值 3’);
例:insert into student_a011 (name,course,score) values('张青','化学',76) ;
删 delete [from可加也可不加] 表名 where 条件;
改 update 表名 set 列名 = 值 where 条件;
关键字集合
insert into, values, delete, update set .
- 删除表 drop、清空数据 truncate、删除数据 delete区别
删除表drop table 表名;
清空数据 truncate table 表名; -->保留表的数据结构, 不删表。
删除数据delete [from可加也可不加] 表名; -->不带where条件逐条删全部列,不删表。
相同点:
1.truncate 和不带 where 子句的 delete, 以及 drop都会删除表内的数据。
2.drop,truncate 都是 DDL 语句,执行后会自动提交,delete 语句执行后要commit提交。
- Date(时间)类型操作需要用到的常见函数
to_date(‘日期字符串’,’格式字符串’)
例 :to_date('2010/02/03 20:30:30','yyyy/mm/dd hh24:mi:ss')
insert into emp(empno,hiredate) values('8004',to_date('2004-10-10','yyyy-mm-dd'));
insert into tabname(datecol) value(sysdate) ; -- 用 date 值
insert into tabname(datecol) value(sysdate+1) ; -- 用 date 值
insert into tabname(datecol) value(to_date('2014-02-14','yyyy-mm-dd')) ; -- 用 to_date
insert into tabname(datecol) value(to_date('2014-02-14 20:47:00','yyyy-mm-dd hh24:mi:ss')) ; -- 用 to_date insert
into tabname(datecol) value(to_date('20140214','yyyymmdd')) ; -- 用 to_date
insert into tabname(datecol) value(to_date('20140214204700','yyyymmddhh24miss')) ; -用 to_dat
to_char(‘date 类型’,’格式字符串’) sysdate =系统时间
例 to_char(chushengriqi,'yyyy/mm/dd')
SQL>select to_char(sysdate,'YYYY-MM-DD HH12:MI:SS AM')from dual;
2007-06-29 02:50:06 下午
- 函数
nvl(列,值) 空值处理 对指定列中的空值赋指定的值
substr(string,m,n) 子字符串对指定的字符串截取指定长度 从 M 开始截取 N 个
trim()剪裁字符串(去头尾)
concat()合并字符串 oracle 也可以用 ' '//' ' 来合并
- 统计函数 (聚合函数)
count()计数,统计行数; sum()总和; avg()平均值; max()最大值; min()最小值;
round(m,保留位)四舍五入 例 ROUND(748.58, -1) 750.00
- 分组查询以指定的列进行分组
select 列名 ,count(列名),sum(列),avg(列),max(列),min(列) from 表名 group by 列having 条件;
例:SELECT order_num,SUM(cds) AS order FROM orderitems group byorder_num having SUM(cds)>=50 ORDER BY order;
select 后面的所有列(聚合函数除外),必须跟在 group by 后面 ,.
group by 列 having 条件-->对指定的列筛选后的结果进行二次筛选。 where 是对分组前的结果进行筛选,having 是对分组后的结果进行筛选。
关键字集合:
to_date() to_char() nvl() substr() trim() concat() count() sum() avg() max() min() sysdate; group by having
函数的嵌套:
select count(nal(comm,0)) from emp;-->把统计表里空值赋值 0,提出有多少条记录;
select sum(distinct(nvl(sal,0))) from emp ;
多表查询:
一般格式: select e.empno,e.ename,d.dname,d.loc from emp e,dept d where e.deptno = d.deptno;
有筛选条件的格式: select 表名 . 列名,表名 . 列名... from 表名列表(可以取别名, 取别名的时候中间不能加 AS) where 连接条件 and 筛选条件;
多表连接
1、相等连接通过两个表具有相同意义的列,可以建立相等连接条件。只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。
例 查询员工信息以及对应的员工所在的部门信息;
SELECT * FROM EMP a ,DEPT b WHERE a.DEPTNO = b.DEPTNO order by a.empno;
2、外连接
外连接采用(+)来识别。
- "右外连接"
左条件(+) = 右条件; 代表除了显示匹配相等连接条件的信息之外,还显示右条件所在的表中无法匹配相等连接条 件的信息。
a. SELECT ... FROM 表 1 RIGHT OUTER JOIN 表 2 ON 连接条件;
b. SELECT ... FROM 表 1,表 2 where 表1.列1(+)=表2.列2 ;
B)"左外连接"
左条件 = 右条件(+); 代表除了显示匹配相等连接条件的信息之外,还显示左条件所在的表中无法匹配相等连接条 件的信息。
SELECT ... FROM 表 1 LEFT OUTER JOIN 表 2 ON 连接条件;
例 显示员工信息以及所对应的部门信息 --无法显示没有部门的员工信息
--SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO(+);
--SELECT * FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
3、不等连接(略)
4、自连接 (略)
oracle建表、建主键、外键基本语法
-创建表格语法:
create table 表名(字段名1 字段类型(长度) ,字段名2 字段类型....);
-增加主键
alter table 表名 add constraint 主键名 primary key (字段名1);
-增加外键:
alter table 表名 add constraint 外键名 foreign key (字段名1) references 关联表 (字段2);
建立表格时指定主键
create table T_STU ( STU_ID char(5) not null, STU_NAME varchar2(8) not null,
constraint 主键名 primary key (STU_ID));
主键和外键一起建立:
create table 表名(字段名1 字段类型(长度) ,字段名2 字段类型....
constraint PK_T_SCORE primary key (AUTOID),
constraint FK_T_SCORE_REFE foreign key (STU_ID)
references T_STU (STU_ID));