SQL学习笔记

增删改查关键字

SELECT

COUNT(*) 统计所有值

COUNT(*) 统计所有值,一般用于统计符合条件有多少条数据,相比于SELECT * FROM TABLE; 可以提高效率

SELECT * FROM TABLE

SELECT * FROM TABLE在这里插入图片描述

SELECT COUNT(*) FROM student;

SELECT COUNT(*) FROM student;在这里插入图片描述
两相比较看到效率大大提高了,如果仅仅是想要判断符合条件的多少条数据完全可以使用COUNT关键字

DISTINCT 返回唯一值

写法:

SELECT DISTINCT student.student_sex FROM student;

结果:
查找前:
在这里插入图片描述
查找后:
在这里插入图片描述

DELETE

DELETE

delect 是删除表内的数据,可以根据条件删除要删除的数据;
写法:

DELETE FROM student WHERE student_age = 26;

结果:
删除前:
在这里插入图片描述
删除后:
在这里插入图片描述
在这里插入图片描述
显示数据已经删除了

TRUNCATE

TRUNCATE 会直接将表中的数据清除
写法:

TRUNCATE teacher;

先查找表内数据条数
在这里插入图片描述
运行后结果:
在这里插入图片描述
在这里插入图片描述

DROP

drop 语句会直接把表删除,
语句:

DROP TABLE teacher;

结果:
在这里插入图片描述
在这里插入图片描述
显示表不存在,说明表已经被删除完成了

DELETE、TRUNCATE 、DROP的区别

从执行速度上来说

DROP> TRUNCATE > DELETE

原理

DELETE:
1、DELETE属于数据库DML操作语言,只删除数据不删除表的结构,会走事务,执行时会触发trigger;

2、在 InnoDB 中,DELETE其实并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记为已删除, 因此 delete 删除表中的数据时,表文件在磁盘上所占空间不会变小存储空间不会被释放,只是把删除的数据行设置为不可见。虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以重用这部分空间(重用 → 覆盖)。

3、DELETE执行时,会先将所删除数据缓存到rollback segement中,事务commit之后生效;

4、delete from table_name删除表的全部数据, 对于MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;

5、对于delete from table_name where xxx 带条件的删除, 不管是InnoDB还是MyISAM都不会释放磁盘空间;

6、delete操作以后使用 optimize table table_name 会立刻释放磁盘空间。不管是InnoDB还是MyISAM 。所以要想达到释放磁盘空间的目的,delete以后执行optimize table 操作。

7、delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在redo和undo表空间中以便进行回滚(rollback)重做操作生成的大量日志也会占用磁盘空间

TRUNCATE:
1、truncate属于数据库DDL定义语言,不走事务,原数据不放到 rollback segment 中,操作不触发 trigger(不能够回滚撤回!!!)

2、truncate table table_name 立刻释放磁盘空间 ,不管是 InnoDB和MyISAM 。truncate table其实有点类似于drop table 然后creat,只不过这个create table 的过程做了优化,比如表结构文件之前已经有了等等。所以速度上应该是接近drop table的速度;

3、truncate能够快速清空一个表。并且重置auto_increment的值。

DROP:
1、drop属于数据库DDL定义语言,同truncate(不能够回滚撤回!!!)

2、drop table table_name 立刻释放磁盘空间 ,不管是 InnoDBMyISAM; drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index); 依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。

UPDATE

condition 条件

WHERE

CASE

函数方法关键字

TO_CHAR

TO_CHAR 是一种转换函数,意在将不指定格式的的内容转换成简单的字符串形式,存在多种用法:

简单用法:

  1. 不指定格式的 TO_CHAR函数将数值转换成简单字符串形式。
TO_CHAR(123)       结果       123
TO_CHAR(-123)      结果      -123
  1. 用元素9的格式
TO_CHAR(1234,'9999')            结果         1234
TO_CHAR(567,'9999')             结果          567
TO_CHAR(-567,'9999')            结果         -567
TO_CHAR(1234567,'9999')         结果         ####
TO_CHAR(45.789,'9999')          结果           46
TO_CHAR(567,'9999.99')          结果       567.00
TO_CHAR(-567,'9999.99')         结果      -567.00
TO_CHAR(1234567,'9999.99')      结果      #######
TO_CHAR(45.789,'9999.99')       结果        45.79
TO_CHAR(567,'9,999,999')        结果          567
TO_CHAR(-567,'9,999,999')       结果         -567
TO_CHAR(1234567,'9,9999,999')   结果    1,234,567
TO_CHAR(0.44,'9,999,999')       结果            0
  1. 用元素$的格式
TO_CHAR(1234,'$9999')       结果        $1234
TO_CHAR(-567,'$9999')       结果        -$567
  1. 用元素B的格式 如果被转换数值整数部分是0就显示为空格
TO_CHAR(567,'B999.9')         结果             567.0
TO_CHAR(-567,'B999.9')        结果            -567.0
TO_CHAR(0.44,'B999.9')        结果                .4
  1. 用元素MI的格式 负数则转换成末尾带减号的数
TO_CHAR(567,'999MI')         结果             567
TO_CHAR(-567,'999MI')        结果             567
  1. 用元素S的格式 转换成带有正负号的数字字符
TO_CHAR(567,'S999')         结果            +567
TO_CHAR(-567,'S999')        结果            -567
TO_CHAR(567,'999S')         结果             567+
TO_CHAR(-567,'999S')        结果             567-
  1. 用元素PR的格式 用尖括号包围负数
TO_CHAR(567,'9999PR')         结果           567
TO_CHAR(-567,'9999PR')        结果          <567>
  1. 用元素D的格式 在指定位置插入小数点
TO_CHAR(567,'9999D99')          结果           567.00
TO_CHAR(-567,'9999D99')         结果          -567.00
TO_CHAR(567.866,'9999D99')      结果           567.87
  1. EEEE 科学计数法
TO_CHAR(567,'9.9EEEE')          结果             5.7E+02
TO_CHAR(45,'9.9EEEE')           结果             4.5E+01
TO_CHAR(0.0666,'9.9EEEE')       结果             6.7E-02

加深学习:

  1. TO_CHAR(date[,format[,nlsparams]]):将日期date转化为VARCHAR2字符串, format缺省日期格式为Oracle的缺省日期格式(NLS_DATE_FORMAT)。

  2. TO_CHAR(number[,format[,nlsparams]]):将数值number转化为VARCHAR2字符串, format缺省,结果字符串包含有和number中有效位数相同位数的字符。
    ① 0与9:每一个0或9都表示一个有效位,转换值得有效位与0或9的各位相同。负数有前导负号,前导为0时,使用0,保持不变,使用9则视为空格。如果精度减小,自动四舍五入。

TO_CHAR(0.37,'00.000')   ---值:" 00.370",一个空格
TO_CHAR(0.37,'90.000')   ---值:"  0.370",两个空格

② 千分位与小数位:
逗号",“:在指定位置返回一个逗号(可以不在千分位位置)。不能与G,D等格式元素同时使用
G:返回千分位分隔符,不一定是”,“,要看Oracle数据库的默认设置或nlsparams的值。
句点”.“:在指定位置返回一个句点(可以不在小数位位置)。不能与G,D等格式元素同时使用
D:返回小数位分隔符,不一定是”.",要看Oracle数据库的默认设置或nlsparams的值

PARTITION BY

partition by是分区函数像(sum()等是聚合函数:聚合函数对一组值执行计算并返回单一的值。)

DECODE

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
这个是decode的表达式,具体的含义解释为:

IF 条件=1 THEN
    RETURN(翻译值1)
ELSIF 条件=2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

简单用法

一、判断前面的条件,如果值为1则是男生,值为2则是女生

SELECT
	t.id,
	t.NAME,
	t.age,
	decode( t.sex, '1', '男生', '2', '女生', '其他' ) AS sex 
FROM
	STUDENT2 t

二、decode比较大小

sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1

年龄在20以上的显示20以上,20以下的显示20以下,20的显示正好20

select t.id,
       t.name,
       t.age,
       decode(sign(t.age - 20),
              1,
              '20以上',
              -1,
              '20以下',
              0,
              '正好20',
              '未知') as sex
  from STUDENT2 t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨DaB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值