Mysql SQL语句记录

1.tm_old_allowance(allownce_userid)与tm_old_usersh(sh_userid)一一关联对应,由于不知名的原因,造成部分tm_old_usersh数据缺失,现在需要找出tm_old_allowance中的哪些数据没有对应的tm_old_usersh数据,查找Sql如下:

SELECT
     A.allowance_userid
FROM
     tm_old_allowance A
WHERE
     (
	SELECT
	       count(1) AS num FROM tm_old_usersh B WHERE B.sh_userid = A.allowance_userid
     ) = 0
AND A.allowance_operate != 'd'

记录,更复杂一点的:

SELECT
    A.allowance_userid,
    A.allowance_groupid,
    a.allowance_state
FROM
    tm_old_allowance A
WHERE
    (
    SELECT
        COUNT(1) AS num
    FROM
        tm_user_allowance B
    WHERE
        B.ua_userid = A.allowance_userid AND B.ua_groupid LIKE '610102002%' AND B.ua_a_state = 2
) = 0 AND A.allowance_operate != 'd' AND A.allowance_groupid LIKE '610102002%' AND allowance_state = 2

 

2.将tm_old_user中查询的数据插入到一张新的表tm_user65

 

INSERT INTO tm_user65 (
	dataid,
	user_name,
	user_idno,
	user_sex,
	user_photo,
	user_age,
	user_address,
	user_tel,
	user_groupid,
	user_operate,
	user_odate
) SELECT
	user_id,
	user_name,
	user_idno,
	user_sex,
	user_photo,
	user_age,
	user_address,
	user_tel,
	user_groupid,
	user_operate,
	user_odate
FROM
	tm_old_user
LEFT JOIN tm_old_card ON card_userid = user_id
WHERE
	card_lable = 3

3.根据一张表的信息更改另一张表

update table_1 t1,table_2 t2 set t1.column = t2.column where t1.id = t2.pid;

4.where group by having 三者联合使用

如图:找出语文数学分数都大于等于80分的同学

 

sql如下:

SELECT name from ss where score>=80 GROUP BY name HAVING COUNT(*)>1

最终结果是小华。这是我以前面试时遇到的一道笔试题,当时是瞬间蒙圈,感觉简单,写起来却无从下手,后来偶遇一篇博客https://blog.csdn.net/bingogirl/article/details/52559302,彻底茅塞顿开。

5.修改时在要修改的字段上统一追加字符串

UPDATE
    tm_organ g,
    tm_temp_group tm
SET
    g.organ_name = CONCAT(tm.new_groupname,'工作站') 
WHERE
    g.organ_groupid = tm.new_groupid 

 

6.将户金额修改成各成员金额之和

UPDATE poor_db AS a,
 (
	SELECT
		sum(family_money) AS sum
	FROM
		poor_db
	GROUP BY
		user_idno
) AS b
SET a.user_money = b.sum;

7.自连接

【1】如下商品采购表信息,用自连接方式,我们需要找到采购价格比惠惠高的所有信息

sql如下:

SELECT
	b.*
FROM
	shopping AS a,
	shopping AS b
WHERE
	a. NAME = '惠惠'
AND a.price < b.price

结果如下:

  

【2】公司员工信息表

  • 员工编号:empno
  • 员工姓名:ename
  • 员工上级编号:mgr,mgr其实就是empno

sql如下:

SELECT
	e.ename,
	(
		SELECT
			ename
		FROM
			emp d
		WHERE
			d.empno = e.mgr
	) AS boss
FROM
	emp e;

结果:

8.统计各区县的数据,但是数据中只包含到村社区的区划,查询区县数据需要截取数据区划中的前六位

SELECT
	COUNT(*),
	SUM(insure_money),
	LEFT (insure_groupid, 6)
FROM
	`tm_medical_insure`
WHERE
	insure_date BETWEEN '2018-01-01'
AND '2018-12-31'
GROUP BY
	LEFT (insure_groupid, 6)

9.sql练习记录

–1.学生表
Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别
–2.课程表
Course(c_id,c_name,t_id) – --课程编号, 课程名称, 教师编号
–3.教师表
Teacher(t_id,t_name) --教师编号,教师姓名
–4.成绩表
Score(s_id,c_id,s_score) --学生编号,课程编号,分数
 

 

【1】查询"01"课程比"02"课程成绩高的学生的信息及课程分数

SELECT
	a.s_score as '课程01成绩',
	b.s_score as '课程02成绩',
        c.s_name as '学生姓名'
FROM
	score a,
	score b,
        student c
WHERE
    a.c_id = '01' 	    -- 查询出课程01的成绩信息
AND b.c_id = '02' 	    -- 查询出课程02的成绩信息
AND a.s_score > b.s_score   -- 课程01成绩大于课程02成绩
and a.s_id=b.s_id	    -- 课程01的成绩与课程02成绩的大小比较针对的是同一个学生
and a.s_id=c.s_id	    -- 通过成绩的学生编号调取学生信息

【2】查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

SELECT
	AVG (s_score),
	a.s_id,
	b.s_name
FROM
	score a,
	student b
WHERE
	a.s_id = b.s_id      -- 课程表与学生表连接调出学生信息
GROUP BY
	a.s_id               --根据学生编号分组
HAVING
	AVG (s_score) >= 60  --根据分组后的学生成绩求平均数

【3】查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

SELECT
	a.s_id,
	a.s_name,
	count(b.s_score),
	sum(b.s_score)
FROM
	student a
LEFT JOIN score b ON a.s_id = b.s_id
GROUP BY
	a.s_id,
	a.s_name

group by 的简单说明:  group by 一般和聚合函数一起使用才有意义,比如 count sum avg等

使用group by的两个要素:
   (1) 出现在select后面的字段 要么是是聚合函数中的,要么就是group by 中的.
   (2) 要筛选结果 可以先使用where 再用group by 或者先用group by 再用having

【4】查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

SELECT
	c.s_name
FROM
	score a,
	score b,
	student c
WHERE
    a.c_id = '01'
AND b.c_id = '02'
AND a.s_id = b.s_id
AND a.s_id = c.s_id

10.mysql去重

delete from cl_a01_4 
WHERE `disabled_idno` in
    (
    SELECT `disabled_idno` FROM
                      (
                      SELECT `disabled_idno` FROM cl_a01_4 GROUP BY `disabled_idno` HAVING count(`disabled_idno`)>1
                      ) t1
    )
AND `disabled_id` NOT IN
    (
    SELECT cid FROM
                    (
                    SELECT max(`disabled_id`) cid FROM cl_a01_4 GROUP BY `disabled_idno` HAVING count(`disabled_idno`)>1
                    ) t2
    )

11.mysql去除字段中空格

update tm_xx set address = replace(replace(replace(address ,char(9),''),char(10),''),char(13),'') 

12.mysql 去除字段中的单引号

update a_die_data set idno = replace(idno,'\'','') 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值