From 1d1e6d8ca212c473f774d8e21fbcc0379acb1fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E5=BB=BA=E9=94=8B?= <467466356@qq.com> Date: Sun, 18 Sep 2022 20:31:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\350\257\242\347\254\224\350\256\260.txt" | 198 ++++++++++++++++++ .../SQLQuery1.sql" | 51 +++++ 2 files changed, 249 insertions(+) create mode 100644 "\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/2022-09-18\346\237\245\350\257\242\347\254\224\350\256\260.txt" create mode 100644 "\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery1.sql" diff --git "a/\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/2022-09-18\346\237\245\350\257\242\347\254\224\350\256\260.txt" "b/\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/2022-09-18\346\237\245\350\257\242\347\254\224\350\256\260.txt" new file mode 100644 index 0000000..54f6d48 --- /dev/null +++ "b/\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/2022-09-18\346\237\245\350\257\242\347\254\224\350\256\260.txt" @@ -0,0 +1,198 @@ +#### 基础查询 + +1. 查询所有行所有列 +2. 指定列查询(姓名,性别,月薪,电话) +3. 指定列查询,并自定义中文列名(姓名,性别,月薪,电话) +4. 查询公司员工所在城市(不需要重复数据) +5. 假设工资普调10%,查询原始工资和调整后的工资,显示(姓名,性别,月薪,加薪后的月薪)(添加列查询)。 + +#### 条件查询 + +**SQL中常用运算符** + +```sql +=:等于,比较是否相等及赋值 +!=:比较不等于 +>:比较大于 +<:比较小于 +>=:比较大于等于 +<=:比较小于等于 +IS NULL:比较为空 +IS NOT NULL:比较不为空 +in:比较是否在其中 +like:模糊查询 +BETWEEN...AND...:比较是否在两者之间 50-100 BETWEEN 50 AND 100 +and:逻辑与(两个条件同时成立表达式成立) +or:逻辑或(两个条件有一个成立表达式成立) +not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立) +``` + +1. 根据指定列(姓名,性别,月薪,电话)查询性别为女的员工信息,并自定义中文列名 +2. 查询月薪大于等于10000 的员工信息( 单条件 ) +3. 查询月薪大于等于10000 的女员工信息(多条件) +4. 显示出出身年月在1980-1-1之后,而且月薪大于等于10000的女员工信息。 +5. 显示出月薪大于等于15000 的员工,或者月薪大于等于8000的女员工信息。 +6. 查询月薪在10000-20000 之间员工信息( 多条件 ) +7. 查询出地址在北京或者上海的员工信息 +8. 查询所有员工信息(根据工资排序,降序排列) +9. 显示所有的员工信息,按照名字的长度进行倒序排列 +10. 查询工资最高的5个人的信息 +11. 查询工资最高的10%的员工信息 +12. 查询出地址没有填写的员工信息 +13. 查询出地址已经填写的员工信息 +14. 查询所有的80后员工信息 +15. 查询年龄在30-40 之间,并且工资在15000-30000 之间的员工信息 +16. 查询出巨蟹 6.22--7.22 的员工信息 +17. 查询工资比赵云高的人 +18. 查询出和赵云在同一个城市的人 +19. 查询出生肖为鼠的人员信息 +20. 查询所有员工信息,添加一列显示属相(鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪) + +#### 模糊查询 + +模糊查询使用like关键字和通配符结合来实现,通配符具体含义如下: + +```sql +%:代表匹配0个字符、1个字符或多个字符。 +_:代表匹配有且只有1个字符。 +[]:代表匹配范围内 +[^]:代表匹配不在范围内 +``` + +1. 查询姓刘的员工信息 +2. 查询名字中含有 " 尚 " 的员工信息 +3. 显示名字中含有“尚”或者“史”的员工信息 +4. 查询姓刘的员工,名字是2个字 +5. 查询出名字最后一个字是香,名字一共三个字的员工信息 +6. 查询出电话号码开头138的员工信息 +7. 查询出电话号码开头138的员工信息,第4位可能是7,可能8 ,最后一个号码是5 +8. 查询出电话号码开头133的员工信息,第4位是2-5之间的数字 ,最后一个号码不是2和3 + +#### 聚合函数 + +SQL SERVER中聚合函数主要有: + +```sql +count:求数量 +max:求最大值 +min:求最小值 +sum:求和 +avg:求平均值 +``` + +1. 求员工总人数 +2. 求最大值,求最高工资 +3. 求最小值,求最小工资 +4. 求和,求所有员工的工资总和 +5. 求平均值,求所有员工的平均工资 +6. 求数量,最大值,最小值,总和,平均值,在一行显示 +7. 查询出武汉地区的员工人数,总工资,最高工资,最低工资和平均工资 +8. 求出工资比平均工资高的人员信息 +9. 求数量,年龄最大值,年龄最小值,年龄总和,年龄平均值,在一行显示 +10. 计算出月薪在10000 以上的男性员工的最大年龄,最小年龄和平均年龄 +11. 统计出所在地在“武汉或上海”的所有女员工数量以及最大年龄,最小年龄和平均年龄 +12. 求出年龄比平均年龄高的人员信息 + +ROUND函数用法: + +```sql +round(num,len,[type]) +其中: +num表示需要处理的数字,len表示需要保留的长度,type处理类型(0是默认值代表四舍五入,非0代表直接截取) +select ROUND(123.45454,3) --123.45500 +select ROUND(123.45454,3,1) --123.45400 +``` + +CONVERT()与CAST()函数: + +```sql +--1.保留小数 +convert(decimal(13,2),12.45454) +cast(12.45454 as decimal(13,2)) +--2.强制转换类型 +``` + + + +#### SQL中常用的时间函数 + +```sql +select DATEDIFF(day, '2019-08-20', getDate()); --获取指定时间单位的差值 +SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR +select DATENAME(month, getDate()); --当前月份 +select DATENAME(WEEKDAY, getDate()); --当前星期几 +select DATEPART(month, getDate()); --当前月份 +select DAY(getDate()); --返回当前日期天数 +select MONTH(getDate()); --返回当前日期月数 +select YEAR(getDate()); --返回当前日期年数 + +SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 +SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 +SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 +SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 +Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330 +``` + +**时间格式控制字符串:** + +| 名称 | 日期单位 | 缩写 | +| ------------ | ----------- | --------- | +| 年 | year | yyyy 或yy | +| 季度 | quarter | qq,q | +| 月 | month | mm,m | +| 一年中第几天 | dayofyear | dy,y | +| 日 | day | dd,d | +| 一年中第几周 | week | wk,ww | +| 星期 | weekday | dw | +| 小时 | Hour | hh | +| 分钟 | minute | mi,n | +| 秒 | second | ss,s | +| 毫秒 | millisecond | ms | + +#### 分组查询 group by + +1. 根据员工所在地区分组统计员工人数 ,员工工资总和 ,平均工资,最高工资和最低工资 +2. 根据员工所在地区分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资,1985 年及以后出身的员工不参与统计。 +3. 根据员工所在地区分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资,要求筛选出员工人数至少在2人及以上的记录,并且1985年及以后出身的员工不参与统计。 + +#### 多表查询 + +##### 简单多表 + +1. **查询员工信息,同时显示部门名称** +2. **查询员工信息,同时显示职级名称** +3. **查询员工信息,同时显示部门名称,职位名称** + +##### 内连接 题目同上 + +##### 综合示例 + +1. 查询出武汉地区所有的员工信息,要求显示部门名称以及员工的详细资料 +2. 查询出武汉地区所有的员工信息,要求显示部门名称,职级名称以及员工的详细资料 +3. 根据部门分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资。 +4. 根据部门分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资,平均工资在10000 以下的不参与统计,并且根据平均工资降序排列。 +5. 根据部门名称,然后根据职位名称,分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资 + + + +**其他链接:左外连接,右外链接,自连接等** + + + +SQL语句执行顺序: + +```sql +(7) SELECT +(8) DISTINCT +(1) FROM +(3) JOIN +(2) ON +(4) WHERE +(5) GROUP BY +(6) HAVING +(9) ORDER BY +(10) LIMIT +``` + + + diff --git "a/\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery1.sql" "b/\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery1.sql" new file mode 100644 index 0000000..79a5e20 --- /dev/null +++ "b/\351\231\206\345\273\272\351\224\213/2022-09-18\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/SQLQuery1.sql" @@ -0,0 +1,51 @@ +--1. ѯ人еԱϢҪʾԼԱϸ +select pe.*,De.DepartmentName from People pe +inner join Department De on pe.DepartmentId=De.DepartmentId +where PeopleAddress='人' + +--2. ѯ人еԱϢҪʾƣְԼԱϸ +select pe.*,De.DepartmentName,Ra.RankName from People pe +inner join Department De on pe.DepartmentId=De.DepartmentId +inner join Rank Ra on pe.RankId=Ra.RankId +where PeopleAddress='人' + +--3. ݲŷͳԱԱܺͣƽʣ߹ʺ͹ʡ +select De.DepartmentName ,count(*)Ա, sum(PeopleSalary)Աܺ,AVG(PeopleSalary)ƽ,max(PeopleSalary)߹,min(PeopleSalary)͹ from People pe +inner join Department De on pe.DepartmentId=De.DepartmentId +group by De.DepartmentName + +--4. ݲŷͳԱԱܺͣƽʣ߹ʺ͹ʣ +--ƽ10000 µIJͳƣҸƽʽС +select De.DepartmentName ,count(*)Ա, sum(PeopleSalary)Աܺ,AVG(PeopleSalary)ƽ,max(PeopleSalary)߹,min(PeopleSalary)͹ from People pe +inner join Department De on pe.DepartmentId=De.DepartmentId +group by De.DepartmentName +having AVG(PeopleSalary)>=10000 +order by AVG(PeopleSalary)asc + +--5. ݲƣȻְλƣͳԱԱܺͣƽʣ߹ʺ͹ +select De.DepartmentName , Ra.RankName ְλ,count(*)Ա, sum(PeopleSalary)Աܺ,AVG(PeopleSalary)ƽ,max(PeopleSalary)߹,min(PeopleSalary)͹ from People pe +inner join Department De on pe.DepartmentId=De.DepartmentId +inner join Rank Ra on pe.RankId=Ra.RankId +group by De.DepartmentName, Ra.RankName + +--6.ѯз 6.22--7.22 ԱϢ +select * from people where +(MONTH(PeopleBirth)=6 and DAY(PeopleBirth)>=22) or +(MONTH(PeopleBirth)=7 and DAY(PeopleBirth)<=22) +--7.ѯԱϢһʾ(,ţ,,,,,,,,,,) +select * , +case when datepart(YY,PeopleBirth)%12=0 then'' +when datepart(YY,PeopleBirth)%12=1 then'ţ' +when datepart(YY,PeopleBirth)%12=2 then'' +when datepart(YY,PeopleBirth)%12=3 then'' +when datepart(YY,PeopleBirth)%12=4 then'' +when datepart(YY,PeopleBirth)%12=5 then'' +when datepart(YY,PeopleBirth)%12=6 then'' +when datepart(YY,PeopleBirth)%12=7 then'' +when datepart(YY,PeopleBirth)%12=8 then'' +when datepart(YY,PeopleBirth)%12=9 then'' +when datepart(YY,PeopleBirth)%12=10 then'' +when datepart(YY,PeopleBirth)%12=11 then'' +end as +from people + \ No newline at end of file -- Gitee