SQL的多表查询Join,union和case的使用

实际中经常会用到多表查询,复杂的查询包括join、union、case表达式等。
连接不同表中数据的连接操作,包括内连接、左连接、右连接、全连接和交叉连接。
我们在两个表中一起找到内部链接数据。
左连接和右连接分别作为主连接左表和右表。
完成所有表信息的连接请求。
十字连接将每个表连接在一起,称为笛卡尔积。
union语句用于组合多个查询结果,数据库会自动去除重复记录。
如果需要保留重复的行,请使用联接。
case表达式类似于条件判断函数,用于判断一个数据数组是否满足某个条件并每次返回结果。
这个表达式有助于解决复杂的问题。
查询示例如下:1.查询学生学号、姓名、选课数、所有学生人数。
使用左侧的链接向所有学生显示信息,包括那些没有选择课程或没有成绩的学生。
2.查询所有平均分大于85分的学生的学号、姓名和平均分。
该问题针对一组具有特定平均绩点的学生。
3、选择课程查询学生状态:学号、姓名、课程号、课程名称。
您必须使用左侧的两个链接来获取所有学生的选课信息,包括未选课的学生。
4.查看每门课程通过和未通过的学生人数。
使用sum函数统计0级和1级的表,即及格数和不及格数的总数。
5.使用分段[100-85]、[85-70]、[70-60]、<60>这里,使用随机表达式来定义不同的表演组并统计相应组中的人数。
使用case表达式时,避免省略其他子句和终止符,以确保代码的清晰度和一致性。
同时可以使用case表达式来进行条件判断。

SQL多表之间的查询,同一字段多个条件。

在SQL查询中;当需要查询同一人持有多张票的情况时。
这可以通过嵌套和嵌套活动进行分组来实现。
例如,同时,身份证;持有驾驶执照和健康证明的人。
或者询问同时有身份证和工伤保险的人;可以使用以下语句:SELECTa.cno,a.cnameFROMhr_epm_mainaINNERJOINhr_epm_certbONa.cno=b.cnoGROUPBYa.cno,a.cnameHAVINGSUM(CASEWHENb.nameIN('身份证','驾驶证','健康证')THENN1ELSE0END)=3ORSUM(CASEWHENb.nameIN('身份证','劳动保证')THEN1ELSE0END)=2张身份证;驾照如果需要同时询问是否有健康证明和工伤保险。
可以在上述语句后继续添加条件;例如:ORSUM(CASEWHENb.nameIN('身份证','驾照','健康证','劳动保险')THEN1ELSE0END)=4表示你必须有同时4张票。
这样,查询结果将仅包含符合所有条件的记录。
另一种检查方法是查明谁拥有所有文档。
例如,身份证;驾驶执照;询问同时有健康证明和劳动保险的人。
您可以使用以下语句:SELECTa.cno,a.cnameFROMhr_epm_mainaINNERJOINhr_epm_certbONa.cno=b.cnoINNERJOIN(SELECTzhengjianSum=COUNTuniquename)FROMr_epm_cert)cON1=1GROUPBYa.cno,a.cname,c.zhengjianSumHAVINGSUM(1)=c.zhengjianSumThe子查询。
上述语句中的系统证书类型总数中`SELECTzhengjianSum=COUNT(DISTINCTname)FROMhr_epm_cert`。
用于计算假设系统中有10种票据类型。
上述语句将返回包含所有10种门票类型的门票。
通过这些方法,我们可以很方便的查询不同ID组合的人。
我希望这些例子对您有所帮助。

sql中的outerjoin为什么分leftouterjoin和rightjoin?

SQL中的Join查询将多个表中的关键字段组合起来创建虚拟结果集,以补充字段信息并从多个表中检索数据,以满足特定的业务需求。
连接查询的连接工作流程如下:单表查询:从where过滤表记录,根据选择的指定列返回结果。
两表连接查询:使用条件连接两个表,创建虚拟结果集,然后按where过滤,返回选择结果。
多表连接查询:顺序连接两个表,直到所有表连接起来形成虚拟结果集,最后根据where进行过滤并根据选择返回。
左连接(LeftOuterJoin)和右连接(RightJoin)的区别:左连接:根据连接条件返回两个表中匹配的记录以及左表中的所有记录,如果右表不匹配,则显示将被取为零。
SQL语句格式:从LEFTOUTERJOIN中选择[,...,]。
右连接:根据连接条件,也返回匹配的记录以及右表中的所有记录。
如果左表不匹配,则显示零。
SQL语句格式:select[,...,]fromrightjoinon。