数据分析SQL语法练习大全【从基础到提高】

学习目标:

SQL数据分析的常用语法

  • SQL是不区分大小写的

学习目标:

  1. 基础查询
  2. 字符串\数字\日期时间
  3. 聚合数据查询

1.基础查询

(1)查询列

select 顾客姓名,...
from tb_顾客表 

(2)查询全部信息

select *
from tb_顾客表

(3)换标题

select 顾客编号 '编号',
       顾客姓名 '姓名',
       所在城市 '城市'
from tb_顾客表

(4)添加列

select 顾客姓名,邮编,电话,传真,
	   (电话+传真) AS 信息 1
	   (邮编+电话) AS 信息 2
from tb_顾客表

(5)区间查询,选择数据范围

select 顾客姓名,邮编,电话,传真
from tb_顾客表
where 邮编>131000
select *
from mrbooks
where price between 68 and 88

(6) 模糊查询

select *
from mrbooks 
where price like '_9'
--该查询将返回 "mrbooks" 表中价格列以数字9结尾的所有行

(7)前五名

select TOP 5 *
from mrbooks 
order by price DESC
--从名为 "mrbooks" 的表中选择价格最高的前5条记录
--并按价格降序排列

(8)后五名

select TOP 5 书号,书名,SUM(金额) AS 合计销售金额
from mrbooks
GROUP BY 书号,书名,作者
-- 从名为 "mrbooks" 的表中查询,
--将返回销售额前五的书籍,每本书籍的销售总额,
--并按照书号、书名和作者进行分组

(9)查询结果升(降)序

SELECT *
FROM tb_employee05
ORDER BY 工资,奖金
--这个查询将返回 "tb_employee05" 表中的所有行,并按照工资和奖金进行升序排序, ORDER BY 默认升序
--工资低、奖金低的排在前面;先按工资排再按奖金排
--工资相同的情况下,奖金低的排在前面;

(10)姓名首字母

SELECT *
FROM tb_abstu05 
ORDER BY substring (国籍,1,1)
-- 这个查询将返回 "tb_abstu05" 表中的所有行,并按照国籍的第一个字符进行排序

(11)查询数学不大于90,或者音乐大于等于95

SELECT ID,Name,Math_Score,Music_Score
FROM tu_stuscore
WHERE not (Math_Score>=90) OR (Music_Score>=95)

(12)姓李的人

SELECT *
FROMM tb_StuScore
where 姓名 LIKE '李%'
--'李%' 中的 % 是一个通配符,表示匹配任意数量(包括零个)的字符

(13)去重

SELECT DISTINCT 书号,书名,作者,出版社
FROM tb_BookSell
ORDER BY 书号
--DISTINCT 关键字来确保返回结果中的每一行都是唯一的
--这个查询将返回 "tb_BookSell" 表中唯一的书籍信息,并按照书号进行升序排序

(14)列出重复超过1次的

SELECT 书名,书号,作者,COUNT(书名) AS 重复次数
FROM tb_Booksell
GROUP BY 书名,书号,作者
Having COUNT(书名)>=2
--HAVING COUNT(书名) >= 2: 这是一个条件过滤,它筛选了只有至少两次出现的书籍信息。HAVING 子句在 GROUP BY 子句后使用,用于对分组后的结果进行筛选。
--综合起来,这个查询将返回 "tb_Booksell" 表中重复出现至少两次的书籍信息,其中包括书名、书号、作者以及重复的次数。

(15) 查询备注不为空的信息

SELECT 学生姓名,所在学院,备注
FROM tb_stu
WHERE 备注 is Not NULL

(16) 去除空格

SELECT 
    姓名,
    LTRIM(姓名) AS 去除左边空格,
    RTRIM(姓名) AS 去除右边空格,
    LTRIM(RTRIM(姓名)) AS 去除左边右边空格
FROM 
    客户信息表;

(17)四舍五入

SELECT 
    人员姓名,
    ROUND(代扣税 - 1) AS 代扣税,
    ROUND(本月扣零) AS 本月扣零,
    CAST(ROUND(应发合计, 1) AS REAL) AS 英法合计
FROM 
	工资表;
-- 函数 ROUND() 需要传入两个参数:要进行四舍五入的数值,以及要保留的小数位数

2.字符串\数字\日期时间

(1)编号和姓名字符串尾部去掉空格

SELECT 编号, RTRIM(编号) AS 编号去空格后,
	   姓名, RTRIM(姓名) AS 姓名去空格后,
	   专业, RTRIM(专业) AS 专业去空格后
FROM tb_stu0690

(2)学生信息表中截取姓和名字

SELECT 姓名,SUBSTRING(姓名,1,1) AS,
	   SUBSTRING(姓名,2,2) AS 名字
FROM tb_stu05
-- SUBSTRING(要处理的字符串,参数起始位置,截取的字符个数) 

(3)书名+别类 生成信息

SELECT 图书名称,图书分类,
	   (图书名称+'的类别为'+图书分类) AS 说明
FROM tb_aspnebook

(4)将某个数字插入编号中(第二个删除)

SELECT 学号,姓名
		STUFF (学号,2,2,200900) AS 新学号
FROM tb_name06
--STUFF 函数用于在字符串中插入、替换或删除字符。具体来说,它的第一个参数是原始字符串,第二个参数是要替换的起始位置,第三个参数是要替换的字符数,第四个参数是要插入的新字符串。在这个例子中,你要将学号字符串中从第二个字符开始的两个字符替换为 "200900"。替换完成后,这个新字符串会被命名为 "新学号"。

(5)改大小写

SELECT UPPER(firstname) AS up_firstname,
	   LOWER(lastname) AS low_lastname
FROM tb_name06 

(6)比较姓名

SELECT (CASE WHEN 'Helen'='Helan' THEN '相同'
		ELSE '不同' END) AS 比较结果
SELECT (CASE WHEN 'Particia'='Patricia' THEN '相同'
		ELSE '不同' END) AS 比较结果

(7)条件判断

SELECT
    OrderID,TotalAmount
    CASE 
        WHEN TotalAmount >= 1000 THEN '高销售额'
        WHEN TotalAmount >= 500 THEN '中等销售额'
        ELSE '低销售额'
    END AS SalesLevel
FROM
    Orders

(8)数据转换

SELECT
    StatusCode
    CASE
        WHEN StatusCode = 1 THEN 'Active'
        WHEN StatusCode = 2 THEN 'Inactive'
        ELSE 'Unknown'
    END AS StatusName
FROM
    Customers

(9)格式化日期 YY-MM-DD

SELECT 图书名称,图书分类,出版日期,
	   CONVERT(VARCHAR(10), 出版日期, 120) AS 格式化日期
FROM tb_aspnetbook
-- 出版日期 是一个日期类型的列,120 是表示日期格式的代码,VARCHAR(10) 指定了转换后的数据类型为字符串类型,长度为 10,最终将 出版日期 转换为 YYYY-MM-DD 的格式并返回。

(10)求平方根

SELECT A, SQRT(ABS(A)) AS SQRT
FROM tb_Numbers
-- SELECT A, SQRT(ABS(A)) AS SQRT: 这部分是查询的主体。
--它选择了表中的列 A,并对每个 A 的绝对值进行求平方根的操作,然后将结果作为别名为 "SQRT" 的新列返回。

(11) 求e的a次方

SELECT A, EXP(A) AS EXP
FROM tb_Numbers

(12) 三角函数

SELECT A,COS(A) AS MY_COS, SIN(A) AS MY_SIN AS MY_SIN(A), TAN(A) AS MY_TAN
FROM tb_Numbers

(13)十月份的信息

SELECT 图书名称,图书分类,出版日期
FROM tb_aspnetbook
WHERE month(出版日期)=10
ORDER BY 出版日期

(14)今天是周几

SELECT datename (dw,getdate()) AS 今天是周几
-- GETDATE()获取了当前日期

(15)查询当前图书出版日期与下一次出版日期间隔

SELECT x.*
	   datediff(day,x.出版日期,x.下一次出版日期) 两次出版相差的天数
	   FROM (
	   SELECT e.书号, e.书名,e.出版日期,
	   (SELECT MIN (d.出版日期)
	    FROM tb_booksell06  d
	    WHERE d.出版日期> e.出版日期) 下一次出版日期
	    FROM tb_booksell06 e
	    ) x 

3. 聚合时间查询

(1)用SUM对工资进行汇总

SELECT SUM(salary) AS 工资,
	   SUM(salary+bounds) AS 工资及奖金
FROM tb_treatment

(2)AVG求平均成绩

SELECT AVG(语文) AS 语文
FROM tb_stuAchievemnet

(3)MIN求销售和利润最低值

SELECT DISTINCT(编号),商品名称,销价 AS 销售额多少,
		利润 AS 利润多少,门店名称
FROM tb_sell
WHERE 销价 IN
	  (SELECT MIN(销价)
	  FROM tb_sell
	  )
	  OR 利润 IN
	  (SELECT MIN(利润)
	  FROM tb_sell
	  )
--选择表 tb_sell 中销售额或利润等于最小销售额或最小利润的行,并且去除重复的行,返回编号、商品名称、销售额、利润和门店名称等信息。

(4)MAX求销售业绩最高

SELECT tb1.销售员, tb1.销售额 AS 最高销售额
FROM  (SELECT 销售员,SUM(销售额) AS 销售额
       FROM tb_Seller
       WHERE MONTH(日期)='12'
       GROUP BY 销售员
       ) AS tb1
WHERE tb1.销售额=SELECT MAX(销售额)AS 最高销售额
	  FROM
	  	(SELECT 销售员, SUM(销售额) AS 销售额
	  	FROM tb_Seller
	  	WHERE MONTH(日期)='12'
	  	GROUP BY 销售员
	  	) AS tb1
	  )
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值