SQL-小笔记

基础知识:

alter table emp_test rename to  emp_test2;  给表换名字,关键字:rename

alter table emp_test2 drop column  JOB_ID;删除表字段,关键字drop column

alter table emp_test2 add JOB_ID VARCHAR2(10);增加字段,关键字ADD 加表名和字段类型大小



comment on table emp_test2 is '员工表';

comment on column emp_test2.employee_id is '员工ID';

comment on column emp_test2.FIRST_NAME is '员工名';

comment on column emp_test2.LAST_NAME is '员工姓';

comment on column emp_test2.EMAIL is '邮箱';

comment on column emp_test2.PHONE_NUMBER is '电话号码';

comment on column emp_test2.HIRE_DATE is '入职日期';

comment on column emp_test2.JOB_ID is '工作ID';

comment on column emp_test2.SALARY is '薪酬';

comment on column emp_test2.COMMISSION_PCT is '佣金百分比';

comment on column emp_test2.MANAGER_ID  is '上级经理ID';

comment on column emp_test2.DEPARTMENT_ID is '部门ID';

Oracle常用数据类型

分类

备注和说明

数据类型

说明

字符型

Char

固定长度的非 Unicode 字符数据

Varchar/varchar2

可变长度非 Unicode 数据

Nchar

固定长度的 Unicode 数据

Nvarchar/nvarchar2

可变长度 Unicode 数据

大对象

Clob

用来存储单字节的字符数据

nclob

用来存储多字节的字符数据

Blob

用于存储二进制数据

Bfile

存储在文件中的二进制数据,这个文件只能被只读访问

日期和时间

日期和时间在单引号内输入

Date

日期和时间

数字数据

该数据仅包含数字,包括正数、负数以及分数

Number(m)

整数

Number(m,n)

数字

    • 修改表的名称
    • ALTER TABLE 表名 RENAME TO 新表名;
      ALTER TABLE emp_test RENAME TO emp;

    • Comment -- 注释
comment on table  表名  is ‘表名注释';

comment on column  表名.列名  is ‘字段名的注释';

comment on table EMP is '员工表';

comment on column EMP.EMPLOYEE_ID is '员工ID';

comment on column EMP.FIRST_NAME  is '员工的名';

comment on column EMP.LAST_NAME  is '员工的姓';

comment on column EMP.EMAIL  is '邮箱';

comment on column EMP.PHONE_NUMBER  is '电话号码';

comment on column EMP.HIRE_DATE  is '入职日期';

comment on column EMP.JOB_ID  is '工作ID';

comment on column EMP.SALARY  is '薪酬';

comment on column EMP.COMMISSION_PCT is '佣金百分比';

comment on column EMP.MANAGER_ID is '上级经理ID';

comment on column EMP.DEPARTMENT_ID  is '部门ID';

    • 约束

1)主键约束(Primary Key):要求主键列数据唯一,并且不允许为空

2)唯一约束(Unique Key): 要求该列唯一,允许为空,但只能出现一个空值。

3)检查约束(Check Key):某列取值范围限制、格式限制等,如有关年龄的约束

4)默认约束(Default Key): 某列的默认值,如将性别默认为

5)外键约束(Foreign Key ):  用于两表间建立关系,需要指定引用主表的那列

    • 创建约束语法
ALTER TABLE 表名

ADD CONSTRAINT 约束名  约束类型  (约束字段)

Alter  table  emp_test2;

Add  constraint  PK_EMP_EMP_ID  primary key (EMPLOYEE_ID);//加主键

    • DROP -- 删除数据库对象
    • drop table 表名;
      drop table EMP;//删表

    • DML(date manipulation language)数据操纵语言.
    • 对数据库里的数据进行操作的语言。常用的是DML语句对数据进行增删改查。
    • 常用的包括:select :查询   insert:插入  update:修改   delete:删除

    • SELECT -- 查询

SELECT <列名/表达式>

FROM <表名>

[WHERE<查询条件表达式>][GROUP BY<分组的列名>][HAVING <分组后的条件表达式,必须结合GROUP BY 子句使用>][ORDER BY <排序的列名>[ASC或DESC]]

    • 设置别名:

SELECT  <表别名.列名 AS 列别名>   FROM   <表名 表别名>  

设置表别名:

    select t.employee_id, t.hire_date from employees t

设置列表名

 select t.employee_id, t.hire_date AS Hire from employees t

uploading.4e448015.gif

正在上传…重新上传取消

 select t.employee_id, t.hire_date AS "Hire" from employees t

uploading.4e448015.gif

正在上传…重新上传取消

    • 注意:
    • 1)对于表,通常情况下会给表设置别名;但对于字段,则会根据需要设置别名
    • 2)设置列表名时,AS 可以省略
    • 3)列别名可以加双引号,也可不加双引号。但显示结果中,字段名称不一致。如,查询员工表的所有员工的工号,入职日期(并显示为Hire)

Where查询语句

BETWEEN 2200 AND 2400//在2000和2400之间

IN (101,103)//等于101或103

使用LIKE做模糊匹配

可使用 % 或 _ 作为通配符

% 代表0或多个字符

_ 代表一个单个字符

    • 若要对通配符本身进行模糊,则要使用escape关键字定义转义符

Select * from test_where where name like ‘%\%%’ escape ‘\';

uploading.4e448015.gif

正在上传…重新上传取消

    • 取前N条记录

SELECT last_name, department_id, salary FROM employees WHERE ROWNUM <= 5

ORDER BY –排序

    • 使用order by 子句进行排序。

用ASC关键字表示升序,缺省的话,则默认为升序排序

SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ASC;

使用DESC关键字,降序排序

SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date desc;

    • 可以按字段名排序,也可以使用字段别名排序

SELECT last_name , job_id, department_id , hire_date "Hire" FROM employeesORDER BY "Hire" ;

    • 可以单一字段排序,也可以多个字段排序,且排序规则也可以不一样

SELECT last_name, department_id, salary FROM employees ORDER BY department_id ASC, salary DESC;

uploading.4e448015.gif

正在上传…重新上传取消

WHERE –条件限制
 

逻辑操作符

意义

AND

所有条件都满足,返回true

OR

只要有一个条件满足,返回true

NOT

如果条件是false,返回true

字符串函数

    • 字符函数接受字符输入并返回字符或数值

函数

输入

输出

initcap(char)

initcap('hello world')

Hello World

lower

lower('Hello World')

hello world

upper

upper('Hello World')

HELLO WORLD

replace(char,old,new)

replace('HelloWorld','H','M')

MelloWorld

instr(char,m,n)

INSTR('HelloWorld', 'W')

6

substr(char,m,n)

SUBSTR('HelloWorld',1,5)

Hello

concat(expr1,expr2)

CONCAT('Hello', 'World')

HelloWorld

lpad

LPAD(salary,10,'*')

*****24000

rpad

RPAD(salary, 10, '*')

24000*****

trim(只能截取字符串前后的空格)

TRIM('H' FROM 'HelloWorld')

elloWorld

trim

TRIM(' HelloWorld')

HelloWorld

trim

TRIM('Hello World')

Hello World

length

LENGTH('HelloWorld')

10

    • uploading.4e448015.gif

      正在上传…重新上传取消

uploading.4e448015.gif

正在上传…重新上传取消

数学函数

    • 数字函数接受数字输入并返回数值结果

函数

输入

输出      

算法

Abs(n)

abs(-15)

15

取绝对值

Ceil(n)

ceil(44.778)

45

大于等于44.778的最小整数

Floor(n)

floor(100.2)

100

对n向负方向舍入取整

Power(m,n)

power(4,2)

16

4的平方

Mod(m,n)

mod(10,3)

1

除10取余数1

Round(m,n)

round(100.256,2)

100.26

取100.256后小数位2位(进行四舍五入)

Trunc(m,n)

trunc(100.256,2)

100.25

取100.256后小数位2位(不进行四舍五入)

日期函数

    • 日期函数对日期值进行运算,并生成日期数据类型或数值类型的结果
    • 常用日期函数:

    • ADD_MONTHS(日期,增值):追加N个月份(月份要是英文)
    • Extract:获取两个日期之间的具体时间间隔,可以用extract()函数
    • MONTHS_BETWEEN(日期,日期):两日期相差多少月
    • LAST_DAY(日期):返回当月最大天数
    • NEXT_DAY(日期,星期):获得某一日期后的第一个星期几的值
    • ROUND(日期,’YEAR’/’MONTH’)四舍五入
    • TRUNC(日期’YEAR’/’MONTH’) :舍去某一日期类型
    • uploading.4e448015.gif

      正在上传…重新上传取消

            select extract(day from hire_date ) day from employees'

uploading.4e448015.gif

正在上传…重新上传取消

uploading.4e448015.gif

正在上传…重新上传取消

SELECT TO_CHAR (SYSDATE, 'DAY','NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''') FROM DUAL

:NLS_DATE_LANGUAGE 表示你要把时间以什么区域方式显示,比如是要显示MONDAY还是要显示星期一

uploading.4e448015.gif

正在上传…重新上传取消

转换函数

    • 转换函数将值从一种数据类型转换为另一种数据类型
    • 常用的转换函数:
      • TO_CHAR
      • TO_DATE
      • TO_NUMBER
    • SELECT TO_DATE('2016-01-06' , 'yyyy-mm-dd') as time FROM dual;

uploading.4e448015.gif

正在上传…重新上传取消

    • SELECT TO_NUMBER('100') as num FROM dual;

uploading.4e448015.gif

正在上传…重新上传取消

SELECT TO_CHAR(sysdate,'YYYY""MM""DD"" HH24:MI:SS') as t_char FROM dual;

uploading.4e448015.gif

正在上传…重新上传取消

Select  last_name, to_char(salary, 'L9,999,000,00')  From employees e;

uploading.4e448015.gif

正在上传…重新上传取消

commit;提交 若不写这个数据可以回滚不插入(delete可以回滚,truncate,drop不能回滚)

    • 删除表语法
    • drop table 表名;
    • 举例:

Drop table emp_test2;删表

插入时间格式数据

insert into 表名(列名,日期列) values(值,to_date('1988-11-11','yyyy-mm-dd'));

函数

用途

NVL (expr1, expr2)

如果expr1为空,这返回expr2

NVL2 (expr1, expr2, expr3)

如果expr1为空,则返回expr3(第2个结果)否则返回expr2

NULLIF (expr1, expr2)

如果expr1expr2相等,则返回空

COALESCE (expr1, expr2, ..., exprn)

如果expr1不为空,则返回expr1,结束;否则计算expr2,直到找到一个不为NULL的值 或者如果全部为NULL,也只能返回NULL

Nvl如果不为空返回第一个值反之第二个值

select nvl(null,2)from dual;//结果为2

Select nvl(1,2)from dual;//结果为1

Select emp,ename,nva(sal,0)+nvl(comm,0) from emp where empno='121212'

常用的分析函数

常用的聚合函数

    • SUM:求和 
    • AVG:求平均值
    • MAX、MIN:求最大最小值
    • COUNT:计数

HAVING子句:对分组后的组数据进行条件限制

Where 和 having 的区别

    • WHERE 子句从数据源中去掉不符合其搜索条件的数据

HAVING子句从分组后的数

据中去掉不符合其组搜索条件的各组数据行

    • HAVING必须与GROUP BY搭配使用,且一定是在GROUP BY子句后面

错误SQL:

   SELECT t.department_id, t.job_id ,avg(t.salary) as av  g_sal

     FROM employees t

 group by t.department_id;

    • 注意:Group BY 后面的字段为分组字段,Select查询的字段,除了固定数据及聚合函数之外的字段,都必须包括在分组字段中!

INSERT—插入数据

INSERT  [INTO] <表名>  [字段列表] VALUES <值列表>

insert into dept (DEPTNO, DNAME, LOC) values (50, 'Training', ' SHANGHAI')

uploading.4e448015.gif

正在上传…重新上传取消

    • 注意事项:
    • 插入数据时,字段列表和值列表要一一对应,数量保持一致;
    • 插入数据时,每个数据值的数据类型、精度和小数位数必须与相应的列匹配;
    • 插入数据时,如果在设计表的时候就指定了某列不允许为空,则必须插入数据;
    • 插入数据时,具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值

Update –更新数据

UPDATE <表名> SET <列名 = 更新值,…>   [WHERE <更新条件>]

update dept

   set DNAME = 'Training Dept', LOC = 'NEW YORK'

 where DEPTNO = 50

uploading.4e448015.gif

正在上传…重新上传取消

Delete –删除数据

DELETE FROM <表名> [WHERE <删除条件>]

delete from dept where DEPTNO=50

uploading.4e448015.gif

正在上传…重新上传取消

TCL事务控制语言

    • TCL(Transaction Control language)事务控制语言
    • 常用的包括
      • commit:提交
      • rollback:回滚

DCL数据库控制语言

    • DCL(date control language):数据库控制语言
    • 用于定义数据库用户的权限。
    • 常用的包括
      • grant :赋权
      • revoke :收回权限

Grant –赋权

    • GRANT 命令可用于为用户分配权限或角色

GRANT   CONNECT  TO   user_name;

----CONNECT角色允许用户连接至数据库,并创建数据库对象

GRANT RESOURCE TO user_name;

---- RESOURCE角色允许用户使用数据库中的存储空间

    • 授予用户 user_name 操作table_name表对象的权限 

GRANT SELECT ON table_name TO user_name;

----允许用户查询 table_name表的记录

GRANT UPDATE ON table_name TO user_name;

----允许用户更新 table_name表中的记录

GRANT ALL ON table_name TO user_name;

----允许用户插入、删除、更新和查询 table_name表中的记录

REVOKE – 收回权限

    • REVOKE 命令可用于为用户回收权限或角色

REVOKE CONNECT FROM user_name;

----回收CONNECT角色允许用户连接至数据库,并创建数据库对象

REVOKE  RESOURCE FROM user_name;

----回收RESOURCE角色允许用户使用数据库中的存储空间

    • 授予用户 user_name 操作table_name表对象的权限 

REVOKE SELECT ON table_name FROM user_name;

----回收用户查询 table_name表的记录的权限

REVOKE UPDATE ON table_name FROM user_name;

----回收用户更新 table_name表中的记录的权限

REVOKE ALL ON table_name FROM user_name;

----回收用户插入、删除、更新和查询 table_name表中的记录的权限

Distinct 查询去重复

SQL upper()函数实例代码教程 - 返回字符串str,根据当前字符集映射的所有字符更改为大写。

例子解释:

 upper(字段名):是将字段的内容转换成大写进行返回  注意:字段的数据类型必须是字符串类型

 upper(字符串):Upper('aabbcc')返回的是‘AABBCC‘

经典语句

列出薪金水平处于第四位的雇员信息

    • select * from (select rownum num, e.* from (select * from emp order by sal desc) e) where num = 4;

select * from emp order by sal desc

uploading.4e448015.gif

正在上传…重新上传取消

select rownum num, e.* from (select * from emp order by sal desc) e  select rownum num 新建一列num排序,e.*前面搜索的表格)

uploading.4e448015.gif

正在上传…重新上传取消

select * from (select rownum num, e.* from (select * from emp order by sal desc) e) where num = 4;

uploading.4e448015.gif

正在上传…重新上传取消

和 UNION 指令类似,INTERSECT 也是对两个 SQL 语句所产生的结果做处理的。

不同的地方是,

 UNION 基本上是一个 OR (如果这个值存在于第一句或是第二句,它就会被选出),

而 INTERSECT 则比较像 AND ( 这个值要存在于第一句和第二句才会被选出)。

UNION 是联集,而 INTERSECT 是交集

INTERSECT 的语法如下

[SQL语句 1]

INTERSECT

[SQL语句 2];

uploading.4e448015.gif

正在上传…重新上传取消

请注意,在 INTERSECT 指令下,不同的值只会被列出一次。 

decode()函数简介

主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);

使用方法:

Select decodecolumnname,值1,翻译值1,2,翻译值2,...n,翻译值n,缺省值)

decode(条件,1,翻译值1,2,翻译值2,...n,翻译值n,缺省值)的理解如下:

if (条件==1

 then

return(翻译值1)

elsif (条件==2

then

return(翻译值2)

......

elsif (条件==n

 then

return(翻译值n)

else

return(缺省值)

end if

注:其中缺省值可以是你要选择的column name 本身,也可以是你想定义的其他值,比如Other等;

uploading.4e448015.gif

正在上传…重新上传取消

Rownum<10 获取前10条数据

update gl_balances  set W_UPDATE_DT=to_date('2019-12-13 16:40:00','yyyy-mm-dd HH24:MI:SS')改时间

删主键

ALTER TABLE  表名   DROP CONSTRAINT 主键名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值