有不少人都想知道的无需基础知识2周全面解析SQL——和一些关于sql查询某表中所有男生相关话题,小编有详细解说,希望帮助到大家。
46年前,两位年轻的IBM研究人员提出了一种新的数据库语言。它是一种关系语言,追求所有数据都可以轻松地以声明方式操作的理念。46年来,我们见证了无数数据库的诞生和消亡,以及无数数据处理方法的诞生和消亡,但即使在今天,SQL仍然是数据分析师和关系数据库的查询语言的必备技能。正如LukasEder所说,BI工具使用各种SQL与数据交互。“SQL是一种神秘的工具,只有它自己的力量才能超越。”今天我们就来学习如何使用这种神秘的语言进行汇总分析!
1总结分析
首先我们进入SQL的常用函数。学习这些共同特征为总结分析打开了大门。
count函数该函数返回满足指定条件的行数。
count函数返回指定列中值的数量。
SELECTCOUNTcolumn_nameFROMtable_nameWHERE条件;
从教师中选择COUNT个教师姓名。
COUNT函数返回表中的记录数。
从老师那里选择一个号码。
COUNTDISTINCTcolumn_name函数返回指定列的唯一值的数量。
从学生中选择COUNTDISTINCT姓名。
sum函数返回数字列的总和。
SELECTSUMcolumn_nameFROMtable_nameWHERE条件;
在分数中,选择SUM分数。
AVG函数返回一列数字的平均值。
SELECTAVGcolumn_nameFROMtable_nameWHERE条件
从分数中选择平均分数。
MIN函数返回所选列的最小值。
SELECTMINcolumn_nameFROMtable_nameWHERE条件;MAX函数返回所选列的最大值。
SELECTMAXcolumn_nameFROMtable_nameWHERE条件;
选择最高分、MIN`score`FROMScore。
面试题
查询科目号“0002”的总分。
从分数中选择总分,其中课程编号=39;
查询选择课程的学生人数。
SELECTCOUNTDISTINCTStudentNumberFROMScoreWHERECourseNumber不为NULL。
2组
学习基本的汇总功能后,您将学习如何对数据进行分组。在SQL中,您可以使用group-by语句对数据进行分组。
GROUPBY语句与聚合函数一起使用,根据一列或多列对结果集进行分组。
从表名中选择列名GROUPBY列名;注意任何出现在分组依据之后的字段都必须出现在选择之后,任何未出现在聚合函数中的字段也必须出现在分组依据之后。
栗子“学生”表中按性别和人数分组
SELECT性别,COUNTnameAS学生人数FROMStudentGROUPBY‘gender’;
此外,我们还统计了出生日期大于1990年1月1日的学生,并按性别分组。
选择性别,将姓名计为学生人数--从学生中运行顺序4--1如果出生日期>39--2按性别分组--3;
注意SQL执行顺序。
面试题
查看每个科目的最高分和最低分
从scoreGROUPBY课程编号中选择课程编号、最高分数、最低分数。
查询每门课程的学生人数。
选择课程编号,将学生人数计算为SCORESGROUPBY课程编号中的学生人数。
查询男孩和女孩的数量。
3指定对结果进行分组的条件
GROUPBY的主要作用是进行分组聚合,有时也用于进行重复,类似于DISTINCT关键字。它还经常与HAVING关键字结合使用,以进一步过滤分组数据。
在SELECT查询中,HAVING子句必须位于GROUPBY子句之后、ORDERBY子句之前。带有HAVING子句的SELECT语句的语法为
SELECTcolumn1,column2--查询结果FROMtable1,table2--WHERE[条件]查找数据的表--查询条件GROUPBYcolumn1,column2--groupingHAVING[条件]--指定对结果进行分组的条件示例by性别分组,过滤统计人数大于1的学生。
选择性别,COUNT个姓名作为学生人数FROMStudentGROUPBYBYHAVINGCOUNTname>1;
面试题
查看平均分在60分以上的学生人数及平均分
选择学生ID、AVG分数作为平均分数FROMScoreGROUPBY学生IDHAVING平均分数>60;
查询至少修读两门课程的学生人数。
SELECT学生编号,按选修课数量COUNT科目编号FROMScoreGROUPBY学生编号HAVING选修课数量gt;=2;
查询同名学生列表,统计同名学生的数量。
SELECTname,COUNTname(学生人数)FROMStudentGROUPBYnameHAVING学生人数>=2;
4用SQL解决业务题
您过去已经学到了很多东西,但是您应该应用您所学到的知识并使用SQL来解决业务题吗?那么如何使用SQL来解决业务题呢?
将业务题翻译成易于理解的母语。
写下你的分析想法
编写相应的SQL子句
让我们看一个现实世界的例子,看看如何使用这个想法来解决题。
现在,假设您的老板要求您计算每个科目的平均分数。按照上面的步骤,先在草稿纸上写下题对应的分析思路,然后写下第一步要做什么,下一步要做什么。第二步.
上级要求关键词各科、平均成绩
在哪个表——>评分
每个科目——gt;每门课程——gt;
平均分——gt;
查询结果科目号、平均成绩
伟大的!接下来我们按照上面的分析思路,结合SQL子句的执行顺序,创建对应的SQL子句。
选择课程编号,AVG分数作为平均分FROMScoreGROUPBY课程编号;
接下来,你的老板会要求你进一步筛选出平均分在80分或更高的员工。
关键词筛选、平均分——gt;指定结果分组条件gt;=80,
选择课程号,AVG分数作为平均分FROMScoreGROUPBY课程号HAVING平均分>=80;
这很容易完成
面试题计算各科平均分,平均分在80分以上。按照我上面说的做就可以了。
5对查询结果进行排序
在处理数据时,经常需要对数据进行排序。SQL使用orderby语句来完成这个任务。
ORDERBY关键字用于对结果集进行排序。
ORDERBY与Excel中的排序类似,是将要排序的列按照升序ASC或降序DESC进行排序,然后显示数据。
默认情况下,ORDERBY关键字按ASC升序对记录进行排序。默认排序不需要您创建ASC。
DESC必须按降序书写,常与TOP关键字一起使用。
像往常一样,让我们从语法开始。
SELECT列1、列2、FROM表名ORDERBY列1、列2、ASC|DESC;此时SQL语句的执行顺序如下
5SELECTlt;selectlistgt;1FROM[left_table]3WHERElt;where_conditiongt;2GROUPBYlt;group_by_listgt;4HAVINGlt;having_conditiongt;6ORDERBYlt;order_by_listgt-orderby子句是查询结果,因此在select子句之后执行。栗子比如上面的题,如果找到每个科目的平均分,改成降序排序,就需要添加orderby语句。
选择课程编号,AVG分数作为平均分数FROMScoreGROUPBY课程编号ORDERBY平均分数DESC;
如何指定多个排序名称?
栗子按照年级升序和科目编号降序重新排列成绩单数据。
SELECTFROMScoreORDERBY分数ASC,课程号DESC/多排序列名,按照orderby子句中的列名从左到右排序,如果第一列值相同,则先排序第一列。然后按第二列中的值排序。
现在出现了一个新题。如果要排序的列包含空值,会发生什么情况?如何对空值进行排序?
我们来看看栗子树。
按教师表对教师姓名进行排序
请按教师姓名从订单中选择。
可以看到空值排在第一位,这意味着如果你想知道一列中有多少个空值,其实可以通过这样排序来找出。
你可能想知道为什么在上面列出的“老师姓名”一栏中,孟扎扎排在马化腾之前。如果不指定排序规则,则默认为“升序”排序。孟和马,a在e之前,所以马化腾应该在孟扎扎之前吧?
事实上,如果你的数据库的字符集编码是utf-8,汉字就不会按字母顺序排序。如果你的数据库的字符集编码是gbk,汉字就会按字母顺序排序。
这里有一个小技巧。如果你有几万、几十万条数据,此时只想返回一部分数据以提高效率,可以使用limit语句。
板栗
从分数2中选择;这仅返回表中的前两个数据。
由于Limit语句还处理查询结果,因此即使在select子句之后也会执行Limit子句!
面试题
查询未通过的课程,并按课程编号从大到小排序。
选择科目编号,F级
一、用sql语句查询男学生的学号、姓名?
选择列名、列名、列名fromtable_name。这里的列名称=“男性”。
二、sql查询年龄最大的男生信息语句?
选择最大年龄,来自性别='男性'的表
No Comment