首页 > 数据库 >SQL的一些用法

SQL的一些用法

时间:2022-12-03 11:31:12浏览次数:59  
标签:... name 删除 用法 插入 value2 SQL 一些 table

创建表

  • 自增ID:AUTO_INCREMENT;
  • 设置主键:PRIMARY KEY;
  • 唯一性约束:UNIQUE
  • 非空约束:NOT NULL
  • 设置默认值:DEFAULT 0
  • 当前时间戳:CURRENT_TIMESTAMP
  • 评论/注释:COMMENT
  • 如果该表已创建过,正常返回:IF NOT EXISTS

查询语法

select (distinct 去重)列表名 from 表名
where ...... 条件
group by ... 分组字段
order by ... 排序(ASC 升序 , DESC 降序)
having ... 条件(可以写多个)
limit index,pageSize 分页条件(index:起始参数 , pageSize: 要展示的条数)

1.截取函数:substring()

用法:​​SUBSTRING​​(str ,n ,m):返回字符串str从第n个字符截取到第m个字符;

2.拼接函数:concat()

用法:select concat(A,B) 或者select A || B

3.大写函数UPPER()
  • where---过滤过滤指定的行
  • having--过滤分组,与group by连用
4.连接

内联结:inner join。取两列的交集。

外联结:

  • left join。左连接,以左边表的列为主,取两列的交集,对于不在右边列存在的名称取null。
  • right join。右连接,以右边表的列为主,取两列的交集,对于不在左边列存在的名称取null。
    union--连接表,对行操作。
  • union--将两个表做行拼接,同时自动删除重复的行。
  • union all---将两个表做行拼接,保留重复的行
5.元素偏移量

数列 offset 数列

6.在mysql中,round函数用于数据的四舍五入,它有两种形式:
  • round(x,d) ,x指要处理的数,d是指保留几位小数

这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0;

  • round(x) ,其实就是round(x,0),也就是默认d为0;
7.SUBSTRING_INDEX(str,delim,count),是一个通过特定标识符"delim"来截取子串的函数,我们日常使用频率是很高的;

delim:通过该标识符来进行截取的,delim可以为任意字符,不要为空; count:代表第几次出现;count为正数,代表从左边取标识符出现第count次之前的子串;负数则相反,从右边取标识符出现第count次之后的子串。 【'左边’代表‘前’, '右边’代表‘后’】

SQL片段(动态sql)

foreach: 动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
<where>
<foreach item="item" index="index" collection="list"
open="ID in (" separator="," close=")" nullable="true">
#{item}
</foreach>
</where>
</select>
复制代码

foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。这个元素也不会错误地添加多余的分隔符,看它多智能!

利用sql标签进行一些简单的公共抽取

<!-- 定义一个SQL片段 -->
<sql id="user_columns">
`user_id`, `name`, `sex`, `age`
</sql>
复制代码

在需要的时候使用​​<include​​标签

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hxstrive.mybatis.sql.demo1.UserMapper">
<!-- 映射结果 -->
<resultMap id="RESULT_MAP" type="com.hxstrive.mybatis.sql.demo1.UserBean">
<id column="user_id" jdbcType="INTEGER" property="userId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="sex" jdbcType="VARCHAR" property="sex" />
<result column="age" jdbcType="INTEGER" property="age" />
</resultMap>


<!-- 查询所有用户信息 -->
<select id="findAll" resultMap="RESULT_MAP">
select <include refid="user_columns" /> from `user`
</select>

</mapper>
复制代码

插入语句

插入记录的方式汇总:

  • 普通插入(全字段):INSERT INTO table_name VALUES (value1, value2, ...)
  • 普通插入(限定字段):INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
  • 多条一次性插入:INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...
  • 从另一个表导入:INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]
  • 带更新的插入:REPLACE INTO table_name VALUES (value1, value2, ...) (注意这种原理是检测到主键或唯一性索引键重复就删除原记录后重新插入)

删除语句

  • 根据条件删除:DELETE FROM tb_name [WHERE options] [ [ ORDER BY fields ] LIMIT n ]
  • 全部删除(表清空,包含自增计数器重置):TRUNCATE tb_name

时间差:

  • TIMESTAMPDIFF(interval, time_start, time_end)可计算time_start-time_end的时间差,单位以指定的interval为准,常用可选:
  • SECOND 秒
  • MINUTE 分钟(返回秒数差除以60的整数部分)
  • HOUR 小时(返回秒数差除以3600的整数部分)
  • DAY 天数(返回秒数差除以3600*24的整数部分)
  • MONTH 月数
  • YEAR 年数
delete pk TRUNCATE

1.DELETE 可以加where 条件,truncate 不能加

2.truncate删除,效率高一些

3.假如要删除的表中有自增长列,如果用delete 删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始

4.truncate删除后没有返回值,delete 删除有返回值

5.truncate 删除后不能回滚,delete 删除可以回滚

更新语句

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

标签:...,name,删除,用法,插入,value2,SQL,一些,table
From: https://blog.51cto.com/u_15900846/5908506

相关文章

  • Mysql基础
    1.数据库相关概念以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊端。假设在文件中存储以下......
  • SQLServer CTE 递归查询
    SQLServerCTE递归查询介绍指定临时命名的结果集,这些结果集称为公用表表达式(CTE)。公用表表达式可以包括对自身的引用。这种表达式称为递归公用表表达式。例子组......
  • 工作中,工作做到游刃有余,一些重要元素的排列
    工作中,工作做到游刃有余,一些重要元素的排列。1、资历越深,经验丰富,对于场景的预判、适应力会更好。2、角色,就是是以owner的角色思考,还是以跟随者交付思考也很重要3、和合作......
  • Webcam.getWebcamByName(“XXX“)的用法/Webcam调用摄像头的方法
    Webcam.getWebcamByName(“XXX”)的用法网上的资料很多都是Webcam.getDefault(),但是调用此方法时只能调用系统默认摄像头,在我的笔记本上只能调用我笔记本上的摄像头,而我希......
  • MySQL
    MySQL管理启动及关闭MySQL服务器Windows系统下在Windows系统下,打开命令窗口(cmd),进入MySQL安装目录的bin目录。启动:cdc:/mysql/binmysqld--console关闭:cdc:/m......
  • mysql 高级
    第1篇高级架构篇第1章Linux环境下MySQL的安装与使用1安装并启动好两台虚拟机掌握克隆虚拟机的操作:mac地址主机名ip地址UUID5字符集的相关操作5.2......
  • MySQL部署时提示Table mysql.plugin doesn’t exist的解决方法
    phpstudy_pro移到其它电脑,删除/data下文件后报错100200100200mysqld:Table'mysql.plugin'doesn'texist2022-12-02T14:44:45.439642Z0[ERROR]Can'topenth......
  • mysql5.7.13-windows 免安装版配置简介及Linux 5.7.31版本安装
    前面的是第一次配置的,可能解决不了问题,可直接跳过,直接看目录,第二次重装的记录,比较全面目录​​第一次装​​​​分割线​​​​第二次重装,遇到的新问题​​​​问题3:Yourpa......
  • sql
    创建表mysql主键自增长createtabletable_name(idIntegernotnullauto_incrementcomment'自增主键',namevarchar(32)comment'名称',PRIMARYKEY(id),......
  • MySQL高级SQL语句
    MySQL高级(进阶)SQL语句一、实例准备--制表1.表1mysql-uroot-pabc123usetest;createtablelocation(regionchar(20),store_namechar(20));insertintoloc......