oracle 的sql语句 及注意

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;//创建序列
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值