sql server两列相除 sql两列相乘_条件判断


一:表的加法

表1+表2,用union

例如


sql server两列相除 sql两列相乘_排列组合_02

course33


sql server两列相除 sql两列相乘_排列组合_02

course22

sql server两列相除 sql两列相乘_sql server两列相除_04

union

也可理解为“或”“并”的关系。当需要保留重复行的时候用 union all.


sql server两列相除 sql两列相乘_sql语句多表相乘_05

union all

二:表的联结

联结:数据库能够对应的匹配(join)

表和表通过列产生对应关系,联结是通过表之间的对应关系,联结在一起的操作。

  1. 交叉联结(cross join)笛卡尔积

如表一为3行,表二为2行,得到的交叉联结表为6行。(类似排列组合)较少单独使用交叉联结.

2.內联结(inner join)

两个表取交集,取出符合条件的行,再进行交叉联结。


sql server两列相除 sql两列相乘_sql语句多表相乘_06

studentinner1

sql server两列相除 sql两列相乘_条件判断_07

scoreinner1

sql server两列相除 sql两列相乘_条件判断_08

inner join

3.左联结

以左边的表为参考系,将左边全部的行在右边的表中找到对应。

先取出符合条件的行——再进行交叉联结,若在右边的表中无对应,显示为NULL。


sql server两列相除 sql两列相乘_mysql_09

left join

若要去除公共部分,最后一行再加语句 where b.学号=NULL.

4.右联结

以右边的表为参考系,将右边全部的行在左边的表中找到对应。

先取出符合条件的行——再进行交叉联结,若在左边的表中无对应,显示为NULL


sql server两列相除 sql两列相乘_条件判断_10

right join

若要去除公共部分,最后一行再加语句 where a.学号=NULL.

  1. 全联结

返回左表和右表中的所有行,(mysql不支持全联结,理解即可)。

三:联结应用案例


sql server两列相除 sql两列相乘_mysql_11

案例表

例1 查询所有学生的学号、姓名、选课数、总成绩。


sql server两列相除 sql两列相乘_条件判断_12


例2 查询平均成绩大于85的所有学生的学号、姓名和平均成绩


sql server两列相除 sql两列相乘_mysql_13


例3 查询学生的选课情况:学号,姓名,课程号,课程名称


sql server两列相除 sql两列相乘_sql server两列相除_14


四:case表达式

有多种情况需要条件判断时,使用case表达式。

例1


sql server两列相除 sql两列相乘_条件判断_15


例2 查询出每门课程的优秀人数和良好人数


sql server两列相除 sql两列相乘_sql server两列相除_16


例3 使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称。


sql server两列相除 sql两列相乘_条件判断_17


case表达式注意事项:

1. else不写时,默认为空值,但是尽量写全。

2.end不可省略。

3.case表达式可以写在select子句的任意位置。

SQLZOO题库练习

sql server两列相除 sql两列相乘_sql server两列相除_18


sql server两列相除 sql两列相乘_条件判断_19


13题注意every match用left join.