1.sql 语言:在数据库地下执行操作的语言 简称:结构化查询语言
-----------------------------------------------------------
2.登录 sqlplus sys/password as sysdba //用超级管理员登录,
在进入oracle数据库中oracle有一个默认的用户scott
此账户的密码是没有被解开的需要对起解锁
alter user scott account(账户) unlock(解锁) //此语句将scott的密码给解锁 以前的默认密码是tiger(老虎)
然后再次登录 用 sqlplus scott/tiger
然后oracle 会让你更改口令 你还是保持以前的密码比较好 tiger 就okay
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.查看一个用户下有那些表
select table_name from user_tables;
----------------------------------------------------------------------
4.查看一个表的结构
desc 表名
-----------------------------------------------------------------
5.查询表里的所有数据
select *from 表名 ;// *代表所有 在oracle中以分号结束;
-----------------------------------------------------------------------------------
6. select 列明1 as 列明2 from 表名 //此句是将给列明取个别名列明2,as 是此句的关键字
select 列明1 * 数字 as 名列2 from 表名 //此句 将列明1和数字相乘的结果取个别名列明2
--------------------------------------------------------------------------------------------------------------------------------------
7.select sysdate from dual //此句查处的结果是系统的当前时间,dual是系统只带的一个表,可是在这里
做不重复的运算 如select 2*3 from dual 结果就是6 在其他表中 会显示很多个6
-----------------------------------------------------------------------------------------------------------------------------------------------
8.在一个查询语句中 如果你的别名有牵涉多个字符,中间有空格隔开的时候 需要用双引号 括起来
如 select sal *12 "year sal" from 表名 //此句就是将 sal *12的结果取个别名为year sal
如果写成这样 select sal*12 year sal from 表名就会报没有from的异常
----------------------------------------------------------------------------------------------------------------------------------------------
9.在oracle中 将两个字符连接起来用的是双竖线 || 相当于java中的+号
如 select 列明1 ||列明2 from 表名 //就是将列明1的数据和列明2的数据想+ 注意这里的+不是算数运算符的+是字符的+
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10.在一个一个sql语句中,连接字符的时候有单引号的处理
如 select name ||'jac'ky' from 表名 这样的写法是错误的
right: select name || 'jac''ky' from 表名 这里用两个单引号 就可以了
--------------------------------------------------------------------------------------------------------------------------------
11.去掉组合中重复的数据 关键字 distinct
如何 select distinct 列明1 ,列明2 from 表名 //这样就能去除 表中,列明1和列名 组合查询出来重复的数据
-------------------------------------------------------------------------------------------------------------------------------------------------------------
12between ---and
select sal(薪水) from emp where between 800 and 1500 //意思将薪水在800——1500之间的数据取出
相当于 select sal(薪水) from emp where sal>=800 and sal<=1500
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
13 :空值的过滤
select name from emp where name is null//此语句就是将姓名为null(空)的值取出
select name from emp where name is not null // 此语句就是将姓名不为null(空)的值取出
----------------------------------------------------------------------------------------------------------------------------------------------------------
14 :查询语句中的in语句
select name ,sal(薪水) from emp where sal in(800,1500,2000);
//意思是说 谁的薪水=800,或者=1500 或者=2000的将其取出
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
15:如何处理在模糊查找中带有特殊字符的
例如 查询名称中带%号的名称
select name,sal from emp where name like '%/%%' 这里的/是转义字符,%号就是我们确实查找要查找的
同时我们还可以自己指定转义字符
例如:select name ,sal from emp where name like'%$%%' escape '$';
//意思是会所 将名称带有%号的给我查处 这里的$符号是我的转义字符
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
查用的sql函数
16:
select lower(ename) from emp; //将emp表中所有ename列中的字段全部转换成小写
select upper(ename) from emp; //将emp表中所有ename列中的字段全部转换成大写
截取字符函数substr()
如 select substr(ename,1,3) from emp;
//从emp中的ename字段中,从1一个开始截取3个字符
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
17 :
将ascii码转换成字符的函数chr()
select chr(65) from dual //将65转换成对应的字符 j结果就是A
将字符转换成ascii的函数 ascii()
select ascii('A') from dual// 这里就是将字符A 转换成了 ascii :65
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
18: 四舍五入函数 round()
select round(23.456) from dual;//将23.456四舍五入 结果就是24
select round(23.456,2) from dual;//将23.456四舍五入到小数点2位 结果就是23.46
select round(23.456,1) from dual;//将23.456 四舍五入到小数点1位 结果就是23.5
select round(23.456,-1) from dual;//将23.456四舍五入到小数点前1位 结果就是20
------------------------------------------------------------------------------------------------------------------------------------------------------------------
19 :to_char()是将某种数字或者日期 转换特定的格式
//对数字的控制 一般很少用
如: select to_char(sal,'$99,999.9999') from emp;//意思是 9代表以为数字 ,千位划分,转换出来是$美元符号
select to_char(sal,'L99,999.9999') from emp;//意思是 9代表以为数字 ,千位划分,L代表转换成本地货币符号¥
select to_char(sal,'$0000.0000') from emp;//0也代表以为数字,运行可以观察和9之间的区别
// 对日期的控制 经常用 要牢牢记住
如:select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;
//将emp中的hiredate的时间转换成YYYY-MM-DD HH:NI:SS的格式 如:2011-10-11 12:00:00
--------------------------
select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from emp;
//sysdate 系统当前时间 比如 2011-5-7 3:14:20 < 2011年5月7日 下午3点14分 20秒>
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from emp;
//sysdate 系统当前时间 比如 2011-5-7 15:14:20 < 2011年5月7日 下午3点14分 20秒>
这也是HH和HH24之间的区别
--------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
20: to_date()日期函数
select to_date('要转的字符','转成日期的格式') from emp;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
21:to_number() 将一个字符 转换成数字
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
22: NVL()函数 主要处理空值的情况
select NVL(sal,0) from emp;//如果sal的值为空 此刻就为0,否者就是sal原来的值 这样就避免了空值
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
:组合函数 一个都不能忘记 很重要的
23: select max(sal) from emp; //取出emp中sal(薪水)中最大的值
select min(sal) from emp; //取出emp中sal(薪水)中最小的值
select avg(sal) from emp; //取出emp中sal(薪水)中平均值
select sum(sal) from emp; //取出emp中sal(薪水)和值
select count(*)from emp;//求出emp表中有多少条记录
select count(distinct sal) from emp;//取出emp中sal(薪水)重复的值
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----分组
group by
24:
select avg(sal) from emp group by deptno;//在emp表中 安装deptno(部门编号) 分组求平均薪水
select avg(sal) from emp group by '' ;//当by后面跟的是两个单引号'' 表示求的是全部的平均值,无分组
select max(sal) from emp group by deptno,job; //按照 deptno与job的组合分组
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
25:按分组后 筛选
select avg(sal), deptno from emp group by deptno having avg(sal)>2000
//按照部门分组后求平均薪水,取出平均薪水大于2000的,having 主要是对分组进行限制
注意:在group by中,by后面有的条件,必须在 select 后面出现
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
26:理解子查询。我们可以将子查询的结果当成一张表来看待
---------------------------------------------------------------------------------------
27:自连接,就是在同一张表连接自己,把一张表当成两张表连接,给两张表取不同的别名
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
28:交叉连接
select ename,dname from emp,cross join dept;
//查询的结果是一个交叉连接 ename 是emp的一个字段,dname 是dept的一个字段 cross交叉连接的关键字
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------29
:两个表的等值连接
select ename,dname from emp,dept where emp.deptno=dept.deptno; (1)
select ename ,dname from emp join dept on(emp.deptno=dept.deptno);(2)
//两种查询语句是等价的,
select ename,dname from emp join dept using(deptno)
//此种查询语句于(2)查询语句是等价,但是不推荐使用这种查询语句
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
30:
select ename,dname from emp left join dept on( emp.deptno=dept.deptno);
//左连接保持左边的数据不变,就是将左边的表的数据全部显示
select ename,dname from emp right join dept on(emp.deptno=dept.deptno);
//右连接保持右边的数据不变,就是将右边的表的数据全部显示
select ename,dname from emp full join dept on(emp.deptno=dept.deptno);
//全表连接 将两张表的所有数据显示 相当于是左连接和右连接的组合
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
31:create view v$_name
as --- 此处要创建的SQL语句--
//创建一个视图 ,视图一般用v$开头,
--------------------------------------------------------------------------------------------------------------------------------------------------
32:备份数据库表
create table emp2 as select *from emp
//此刻emp2这张表完全按照emp的所有结构 和字段创建,包括emp的所有数据
--------------------------------------------------------------------------------------------------------------------------------------------------
33:rownum 伪列
只能和< 或者<= 一起用
(注:在SQLSERVER2005 中 取前几条语句是: select top 1 from table_name)
在oracle中 用的是rownum这个伪列
如:我们要去一个数据的数据的第几条或者一个区间段 必须构造它的子查询
select ename form (select rownum r,ename from emp) where r>10
这样就取出来,在>10的所有数据
有比如我们要取得薪水的最大值
select sal from (select * from emp order by sal desc) where rownum=1;
-------------------------
select ename,sal from
(
select ename,sal ,rownum r from
(select * from emp order by sal desc //此处是将这个子查询 作为一张表,而且是排序过后的)
//这里就解决了 r 的乱序排列
) where r>=6 and r<=10
//一般oracle 分页模式就是如此 三层嵌套 子查询
--------------------------------------------------------------------------------------------------------------------------------------------------------
34:修改表结构
//向以建好的表里面添加字段
ALTER TABLE TABLE_NAME ADD(字段名,字段类型);
//删除某个表中的字段
ALTER TABLE TABLE_NAME DROP (字段名);
//修改某个表中的字段
ALTER TABLE TABLE_NAME MODIFY(字段名,字段类型);
注意:如果在一个有数据的表中,修改某个为字符串的字段的时候,长度必须不能小于已有数据的长度
//删除某个表的约束条件
ALTER TABLE TABLE_NAME DROP CONSTRAINT 约束名//一般很少修改
// 删除某张表
DROP TABLE TABLE_NAME
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
35:
//查看当前用户有那些表
SELECT TABLE_NAME FROM USER_TABLES;
//查看当前用户的视图
SELECT VIEW_NAME FROM USER_VIEWS
注:因此要看当前用户的某些信息 均可以以此类推
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
36:创建索引
CREATE INDEX INDEX_NAME ON TABLE_NAME(字段名);
//DROP INDEX INDEX_NAME;
注:不轻易创建索引,
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
37:视图(view 就是一个子查询)
//视图也有不好的时候,当一个表的结构改变,视图也的改变,增大了维护的困难,优化了查询
CREATE VIEW VIEW_NAME AS SQL_语句;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
38:序列长生唯一的不重复的 一般用来做主键
CREATE SEQUENCE SEQUENCE_NAEM;//创建序列
-----------------------------------------------------------------------------------------------------------------------------------------------------------------