SQL高级语法

本文介绍了SQL中的一些核心操作,包括根据城市统计各省人数,实现数据的行转列,条件更新薪资,关联更新表信息,解决SQL批量插入时的自增ID问题,以及使用GROUP_CONCAT进行数据拼接。此外,还展示了如何在MySQL中查看表元数据和获取数据库所有表名。这些技巧对于数据库管理和数据分析工作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.根据城市统计各省人数

SELECT province,SUM ( population ) as population from 
(SELECT
   CASE		
    WHEN area IN ( '石家庄', '邯郸', '秦皇岛' ) THEN '河北' 
    WHEN area IN ( '郑州', '安阳' ) THEN '河南' 
    ELSE '其他' END as province , population 
    FROM people ) peoplesum 
    GROUP BY province

2.行转列

SELECT
 username,
 SUM ( CASE subject WHEN '语文' THEN fraction ELSE 0 END ) AS yuwen,
 SUM ( CASE subject WHEN '数学' THEN fraction ELSE 0 END ) AS shuxue,
 SUM ( CASE subject WHEN '英语' THEN fraction ELSE 0 END ) AS yingyu 
FROM
 study 
GROUP BY
 username

3、条件更新

update salaries set salary = CASE WHEN salary >= 100000 THEN salary*0.8
				  WHEN salary >= 50000 AND salary < 100000 THEN salary*0.9
				  WHEN salary >= 10000 AND salary < 50000 THEN salary*0.95
				  ELSE salary END;

 关联更新

update 表1, 表2 set 表1.dept_name = d表2.dept_name
where 表1.dept_id = 表2.dept_id;

4.sql 批量插入

有自增长的SQL表格里面插入指定ID的数据的时候,会禁止你操作,提示如题目,解决办法:

set identity_insert sys_role_cpy1 on

INSERT INTO sys_role_cpy1(role_id, role_name) select role_id,role_name from sys_role_cpy1_copy1

set identity_insert sys_role_cpy1 off

5.行转列拼接到一个字段 GROUP_CONCAT

SELECT
    NAME,
	REPLACE ( GROUP_CONCAT( DISTINCT num ORDER BY num ASC ), ',', '、' ) AS newnum 
FROM
	demo 
GROUP BY
NAME

 6.Msql查看表元数据

SELECT
	column_name columnName,
	data_type dataType,
	column_comment columnComment,
	column_key columnKey,
	extra 
FROM
	information_schema.COLUMNS 
WHERE
	table_name = 'aaa' 
	AND table_schema = (
	SELECT DATABASE
	()
	) 
ORDER BY
	ordinal_position

 查看数据库所有表名 

select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables where table_schema = (select database())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yzhSWJ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值