学习目标:
SQL数据分析的常用语法
- SQL是不区分大小写的
学习目标:
- 基础查询
- 字符串\数字\日期时间
- 聚合数据查询
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
)