SQL语句持续学习

常见sql语句无非就是增删改查,在实际应用中面对多表的情况时在基础上加以变动,尽量减少使用触发器,有时触发器利用可以带来优势,但是在大量数据的情况下,触发器并不好掌握。

查询语句

select 内容1,内容2 from 表1,表2 where 条件

select * from 表1(表2)  这种全查询可以用 但是尽量减少使用 

(select 内容1 内容2 from 表 where 条件)where 条件2      嵌套查询也比较使用

插入语句 对于表内容进行插入

insert into 表明(内容1,内容2)values(值1,值2)

插入语句同样可以嵌套使用 在实际使用中insert和update语句相类似 

inset into 表名(内容1,内容2)select (内容1,内容2)from 表2

update语句 更新表内已有数据的内容

update 表名 set 内容1=值 内容2=值 where 条件

delete 语句 删除数据表内记录的内容

delete from 表名 where 条件

对于delete语句 可以类比于jvm中的垃圾回收机制 在进行删除操作时并不会完全的删除内容 而是将内容标记为useless 让其他更新的内容对于这部分的内存进行覆盖式输入 当然在数据库中也可以进行完全式的删除操作:truncate 直接对于表内容所占据空间进行释放 所以在使用删除操作时一定会要小心 尤其是对于大型项目 尽量减少使用删除操作 有些删除可以通过数据库日志进行找回 但是有些删除的数据可能会造成比较严重的后果 慎用

对于表内内容的修改暂且到这 慢慢学习更新

接下来是对于表的创建和更改进行记录

首先是创建表

creat 表名(索引,视图,函数等)

更新表

alert table 表明1 to 表明2 更新表明通常用在最开始 用来对于已有表明进行数据操作时进行确定

删除表 慎用

drop table 表名 cascade constraints   同样 删除表的操作一定要慎用 联系时无所谓 但是在大型项目中应尽量减少使用 

模糊查询

一般的模糊查询语句

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

在模糊查询中 sql提供了四种条件匹配

  1. % :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示 例如:
    SELECT * FROM Studnet WHERE student_name LIKE '%张%' 查询是会将名字中带有张的所有人名查询出来 '张三','刘关张',如果查询条件需要增加是中间用and链接
    SELECT * FROM Student WHERE student_name LIKE '%张%' AND student_name LIKE '%刘%'
  2. _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句
    SELECT * FROM Student WHERE student_name LIKE '_三_'此时查询出的人名为 '张三丰'这种查询属于定点查询 查询某个字在某个位置 目的较为明确 
    SELECT * FROM Student WHERE student_name LIKE '__三'查询结果为'张老三'
  3. [ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
    
    SELECT * FROM Student WHERE student_name LIKE '[刘关张]三' 查询出的结果为'张三' '刘三' 而不是'刘关张三'
  4. [^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    SELECT * FROM Student WHERE student_name LIKE '[^张李王]三' 查询结果为孙三,将查询不出'张三' '刘三'等结果

 在实际使用中更为常用的模糊查询结构为

SELECT * FROM Student WHERE student_name LIKE CONCAT(CONCAT('%',#{student_name,jdbcType=VARCHAR}),'%'

数据类型为VARCHAR 使用的是jdbc链接 所以在使用中 这样连接查询出某个输入的值的所有模糊查询结果,包括输入字段为数据表中查询数据的前中后的所有位置的结果

在xml文件中书写sql语句时 增加条件时用and链接 同时根据查询的内容不同可以增加<if></if>用来判断具体实例如下:

select *
from Student
where 1=1
<if test="Student_ID != null and Student_ID != ''">
    AND  Student_ID=#{Student_ID,jdbcType=VARCHAR}
</if>
<if test="Student_NAME != null and Student_NAME != ''">
    AND (Student_NAME LIKE CONCAT(CONCAT('%',#{Student_NAME,jdbcType=VARCHAR}),'%')
    or Student_ID LIKE CONCAT(CONCAT('%',#{Student_NAME,jdbcType=VARCHAR}),'%')
    )
</if>
ORDER BY Student_ID DESC , Student_NAME ASC

数据对应输出实例 

DECODE(Student_TYPE,10,'戴眼镜',20,'不戴眼镜') Student_TYPE 将CHAR类型转换成字符串类型输送到前端

关于时间戳 很多时候前端需要的数据类型为字符串 而时间戳类型为TIMESTAMP 转换时在sql语句中加上TO_CHAR将时间戳数据转换成字符串 然后前端接受到字符串类型进行输出

求和sum  

SUM(number)  AS NUM

条件使用 

CASE WHEN  student_num=0 THEN 0 ELSE 1 END

条件使用搭配其他函数一起使用  例如round函数

例如对于多位小数求和时

ROUND(number,4)对于多位小数取小数点后四位数据

ROUND(SUM(CASE WHEN 条件 THEN 0 ELSE 执行表达式 END),4) AS number

连表查询  

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 

SELECT * FROM A

LEFT JOIN B ON A.NUM=B.NUM

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.NUM = B.NUM).


right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

SELECT * FROM A

RIGHT JOIN B ON A.NUM=B.NUM

INNER JOIN 内连接 只显示A表和B表中查询条件相同的数据

SELECT * FROM A 

INNER JOIN B ON A.NUM=B.NUM

inner join并不以谁为基础,它只显示符合条件的记录.

暂且写到这 之后对于数据库的应用包括 索引 触发器 视图等等边学习边写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值