常用sql语句

1.增加数据

 

<insert id="方法名" parameterType="实体类路径"> 
    insert into 表名(属性名,属性名······) values(值,值·····) 
</insert>

2.删除数据

 

<delete id="方法名" parameterType="int"> 
     delete from 数据库表名 where 属性名=值 
</delete>

3.修改数据

<update id="方法名" parameterType="实体类路径"> 
    update 数据库表名 set 属性名=值,属性名=值······where 属性名=值 
</update>

4.全查数据

<select id="方法名" resultType="实体路径"> 
    select * from 表名 
</select>

5.依据属性字段查询数据

<select id="方法名" resultType="实体路径"> 
    select * from 表名 where 属性名=值 
</select>

6.查询数量

<select id="方法名" resultType="java.lang.Integer"> 
    select count(*) from 表名 
</select>

7.多表查询

以学生表student(id,code,name,age,telephone,teacher_id,create_time)与教师表 teacher(id,name,class_name,telephone)为例

<select id="方法名" resultType="实体路径"> 
    SELECT a.id,a.name,a.age,a.telephone,a.teacher_id, b.id, b.name,
    b.class_name,b.telephone FROM student a INNER JOIN teacher b ON a.teacher_id=b.id
    WHERE b.id is not null 
</select>

8.分页

//取10条数据 0到10

<select id="方法名" resultType="实体路径"> 
    select * from 表名 limit 0,10; 
</select>

9.分组查询

<select id="方法名" resultType="实体路径"> 
    select * from 表名 group by name 
</select>

10.分组查询后对条数求和

<select id="方法名" resultType="java.lang.Integer"> 
    SELECT COUNT(*) FROM  (SELECT 字段... FROM 表 GROUP BY 分组字段) 别名 
</select>

11.逆序排列

//asc  升序排列 (默认) desc 降序排列  

<select id="方法名" resultType="实体路径"> 
    select * from 表名 ORDER BY name desc 
</select>

12.GROUP_CONCAT  用于拼接同一属性的字段

例如  数据库中学生表,学生名有张三与李四。

<select id="方法名" resultType="实体路径"> 
    select GROUP_CONCAT(name separator '、')  from student 
</select>

结果: 张三、李四。

附: GROUP_CONCAT 通常与group by使用,用于合并数据后去重。  多表查询时,可使用left join 避免为空数据不显示

13.拼接字符

select concat(“123”, “456”)

结果: 123456

注:使用中,若出现中文乱码,添加concat(convert(整形, char),"中文")

14.查询一个字段中不同状态的数量

SELECT sum(CASE STATE WHEN '0' THEN 1 ELSE 0 END) AS 'state0Count', 
 sum(CASE STATE WHEN '1' THEN 1 ELSE 0 END) AS 'state1Count', 
 sum(CASE STATE WHEN '0' THEN moeny ELSE 0.0 END) AS 'state1MoenySum', 
 sum(CASE STATE WHEN '1' THEN moeny ELSE 0.0 END) AS 'state2MoenySum' FROM table

15.依据时间查询,如果没有符合数据就为0

SELECT b.id, b.branch_name,COUNT(a.branch_id) branchCount 
FROM sc_worksheet a RIGHT JOIN sc_branch b ON b.id=a.branch_id 
 AND a.create_time >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 7 DAY)) 
 GROUP BY b.id ORDER BY branchCount DESC LIMIT 8;

16.截取字符 substr

select substr(“123456”, 1,4) 

结果:1234

17.时间戳与字符串的相互转换 

//时间戳转换成字符串 select from_unixtime(1234567892)   

//字符串转换成时间戳 select unix_timestamp('2019-01-01'); 

//时间转字符串 select date_format(now(), '%Y-%m-%d'); 

//字符串转时间 select str_to_date('2019-01-01', '%Y-%m-%d %H'); 

//时间转时间戳 select unix_timestamp(now()); 

//时间戳转时间 select from_unixtime(1451997924);

18.依据时间取最新的一条数据

 

<select id="selectOneStudent" resultType="com.modules.student"> 
    select * from student where name=#{name} ORDER BY create_time DESC limit 1 
</select>

19.获取某一属性最大值(可用于自动生成学生编码)

<select id="getMaxCode" resultType="java.lang.String"> 
    select max(code) from student 
</select>

20.foreach用法

附:foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。

item集合中每一个元素进行迭代时的别名,

index表示在迭代过程中,每次迭代到的位置,

open该语句以什么开始,

separator在每次进行迭代之间以什么符号作为分隔 符,

close以什么结束,

使用时应注意以下情况:

(1). 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

(2). 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

(3). 如果传入的参数是多个,通常封装成Map,collection的属性值为map里面的key

//循环添加 
<insert id="addAmount"> 
  insert into tb_student(id,name,age) value <foreach collection="lstStudent" item="student" index="index" separator=";" open="" close=""> <trim prefix=" (" suffix=")" suffixOverrides=","> #{student.id}, #{student.name}, #{student.age}, </trim> </foreach> </insert> 

//循环修改 <update id="updateAmount"> <foreach collection="lstStudent" item="student" index="index" separator=";" open="" close=""> update tb_student set age=#{student.age} </foreach> </update> 

//获取导出列(可用于导出excel) <select id="getStudent" resultType="com.modules.student"> select id,name,age,telephone,teacher_id from student where 1=1 <if test="list!=null and list.size()>0"> and id in <foreach item="ids" index="index" collection="list" open="(" separator="," close=")"> #{ids} </foreach> </if> </select>

21.字段模糊查询

 

/*学生名称 模糊查询*/ 
<if test="name!= null and name.trim() != ''"> name like concat(concat('%', #{name}), '%') </if>

22.去重用法

//依据学生名称对学生表进行去重后,取列表字段 
<select id="getSelectList" resultType="java.util.Map"> 
    select DISTINCT name as id,age as text from student where 1=1 
    <if test='queryString!=null and queryString!=""'> and name like 
    concat(concat('%', #{queryString}), '%') </if> 
</select> 

//依据学生名称对学生表进行去重后,取列表总条数 
<select id="getSelectMaterielTotal" resultType="java.lang.Integer"> 
    select count(DISTINCT name) from student where 1=1 <if test='queryString!=null and 
    queryString!=""'> and name like concat(concat('%', #{queryString}), '%') </if> 
</select>

23.//判断是否存在重复数据

<select id="getStudentCount" resultType="java.lang.Integer"> 
    select count(1) from student where id = #{id} and name in <foreach 
collection="lstNames" item="name" index="index" open="(" separator="," close=")"> #{name} 
</foreach> 
</select>

附:resultType与parameterType简介

select 查询时 resultType返回的几种方式:

resultType="java.lang.Integer"    返回int 
resultType="java.lang.String"     返回String 
resultType="com.User"             返回User实体对象(com.User为实体路径) 
resultType="java.util.List"       返回list 
resultType="java.util.Map"        返回map 

parameterType:参数类型

24.增加索引

1.普通索引 添加INDEX ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 
2.主键索引 添加PRIMARY KEY ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 
3.唯一索引 添加UNIQUE ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 
4.全文索引 添加FULLTEXT ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
5.如何添加多列索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

25.查看索引

1、查看数据库所有索引 SELECT * FROM mysql.`innodb_index_stats` a WHERE a.`database_name` = '数据库名'; 

2、查看某一表索引 SELECT * FROM mysql.`innodb_index_stats` a WHERE a.`database_name` = '数据
库名' and a.table_name like '%表名%';

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值