造价统计报表在哪个网站上做,网站开发界面,网站建设有那些,海外代发货平台本课目标
掌握MySQL的多表查询
SQL语句的综合应用 多表连接查询
通过各个表之间共同列的关联性#xff08;例如#xff1a;外键#xff09;来查询的
分类#xff1a;
内连接(INNER JOIN) #xff0c;可简写为 JOIN#xff1b;左外连接(LEFT OUTER JOIN)#xff0c;…本课目标
掌握MySQL的多表查询
SQL语句的综合应用 多表连接查询
通过各个表之间共同列的关联性例如外键来查询的
分类
内连接(INNER JOIN) 可简写为 JOIN左外连接(LEFT OUTER JOIN)可简写为LEFT JOIN右外连接(RIGHT OUTER JOIN)可简写为RIGHT JOIN自连接查询交叉连接(CROSS JOIN)也称为 笛卡儿乘积连接基本上用不到。
内连接
使用比较运算符根据每个表的通用列中的值匹配连个表中的行 如果两个表中邮箱通道字段名必须在列名前加表名否则将出现错误
#查询考试信息
SELECT S.STUDENTNO,STUDENTNAME,GRADENAME,SUBJECTNAME,STUDENTRESULT,EXAMDATE FROM STUDENT S JOIN RESULT R ON S.STUDENTNOR.STUDENTNO JOIN GRADE G ON S.GRADEIDG.GRADEID JOIN SUBJECT SU ON SU.SUBJECTNOR.SUBJECTNO ORDER BY G.GRADEID,EXAMDATE DESC,STUDENTRESULT DESC;
#第二种写法
SELECT S.STUDENTNO,STUDENTNAME,GRADENAME,SUBJECTNAME,STUDENTRESULT,EXAMDATE FROM STUDENT S,RESULT R,GRADE G,SUBJECT SU WHERE S.STUDENTNOR.STUDENTNO AND S.GRADEIDG.GRADEID AND SU.SUBJECTNOR.SUBJECTNO; #查询1993年以后出生的学生的姓名电话和年级名称。
SELECT BORNDATE,STUDENTNO,PHONE,GRADENAME FROM STUDENT S JOIN GRADE G ON S.GRADEIDG.GRADEID WHERE YEAR(BORNDATE)1993 ORDER BY BORNDATE;#查询学生的学号、姓名、课程名称和考试成绩。
SELECT S.STUDENTNO,STUDENTNAME,SUBJECTNAME,STUDENTRESULT FROM STUDENT S INNER JOIN RESULT R ON S.STUDENTNO R.STUDENTNO INNER JOIN SUBJECT SU ON SU.SUBJECTNOR.SUBJECTNO; #为每个学生制作在校期间每门课程的成绩单要求每个学生参加每门课程的最后一次考试成绩作为该生本课程的最终成绩。
#成绩单的数据项
#学生姓名
#课程所属的年级名称
#课程名称
#考试日期
#考试成绩
SELECT STUDENTNAME,GRADENAME,SUBJECTNAME,EXAMDATE,STUDENTRESULT
FROM STUDENT S JOIN (SELECT R1.*,R.STUDENTRESULTFROM RESULT R JOIN (SELECT STUDENTNO,SUBJECTNO,MAX(EXAMDATE) EXAMDATE FROM RESULT GROUP BY STUDENTNO,SUBJECTNO) R1 ON R.STUDENTNOR1.STUDENTNO AND R.SUBJECTNOR1.SUBJECTNO AND R.EXAMDATER1.EXAMDATE
) R2 ON S.STUDENTNOR2.STUDENTNO
JOIN SUBJECT SU ON SU.SUBJECTNOR2.SUBJECTNO
JOIN GRADE G ON S.GRADEIDG.GRADEID
ORDER BY S.STUDENTNO;
左外连接 左外连接左表的记录将会全部表示出来而右表只会显示符合匹配条件的记录
匹配返回到结果集无匹配NULL 值返回到结果集
#带条件的连接
#条件写在on后面时表示先对内容筛选然后再进行连接
#条件写在where中表示先对表进行连接然后对连接的结果再做筛选SELECT S.STUDENTNO,STUDENTNAME,SUBJECTNO,STUDENTRESULT FROM STUDENT S
LEFT JOIN RESULT R ON S.STUDENTNOR.STUDENTNO AND SUBJECTNO3; SELECT S.STUDENTNO,STUDENTNAME,SUBJECTNO,STUDENTRESULT FROM STUDENT S
LEFT JOIN RESULT R ON S.STUDENTNOR.STUDENTNO WHERE SUBJECTNO3; 右外连接 不同的 SQL JOIN 对比 #查询所有课程的信息某些课程可能还没有被考过。
SELECT SU.*,T.AVG FROM (SELECT S.SUBJECTNO,AVG(STUDENTRESULT) AVG FROM SUBJECT S LEFT JOIN RESULT R ON S.SUBJECTNOR.SUBJECTNO GROUP BY SUBJECTNO
)T JOIN SUBJECT SU ON T.SUBJECTNOSU.SUBJECTNO;#查询从未考试的课程信息。
SELECT SU.* FROM (SELECT S.SUBJECTNO,AVG(STUDENTRESULT) AVG FROM SUBJECT S LEFT JOIN RESULT R ON S.SUBJECTNOR.SUBJECTNO GROUP BY SUBJECTNO
)T JOIN SUBJECT SU ON T.SUBJECTNOSU.SUBJECTNO WHERE AVG IS NULL;