开头:本人总结,大神勿喷,欢迎指教。谢谢
一:join 和 inner join 与等值连接:
1:SELECT st.s_name,co.c_name FROM relevance re, student st, course co WHERE re.s_id = st.s_id AND re.c_id = co.t_id(内连接)
2:select st.s_name,co.c_name from relevance re inner join student st join course co where re.s_id = st.s_id AND re.c_id = co.t_id(等值连接)
等值连接等同于内链接,执行效率、执行结果相同。等值连接省略了 join 或inner join。
总结: 无论是等值连接还是内连接。查询结果都是,: 显示有关联关系的字段,不显示无关联的字段。
二: left join right join 左连接 与 右连接 的用法。 on 和where的用法
1:SELECT st.s_name,te.t_name FROM studen st LEFT JOIN teacher te on st.t_id = te.t_id (左连接)
2:SELECT te.t_name,te.s_id,st.s_name FROM studen st right JOIN teacher te on te.s_id = st.id(右连接)
结果:
3:SELECT te.t_name, te.s_id,st.s_name FROM studen st right JOIN teacher te on te.s_id = st.idwhere te.t_name = '张老师'
结果:
总结:由此可知:使用左连接是以左表的数据为基准,以on为关联条件,没有左表关联的数据以null补充数据。where是先生成中间表再对条件进行过滤。相反右连接也是如此。
三:group by having 分组的使用、 order by 升序 降序排列的使用、limit sql分组的使用、
1:group by having 分组的使用 (主要用于分组统计,配合聚合函数使用(max()、min()、count()、sum()、avg()),来实现,用having进行条件过滤)
select te.t_name,te.s_id from teacher te GROUP BY te.t_name,te.s_id ORDER BY s_id desc
结果:
总结:
1:group by 字段 ,如果字段中有重复的数据(与关键字distinct去重一样效果),只显示一条,所以分组主要用于统计显示。如果与order by结合,order by后跟的字段,必须在分组字段中选择。
select te.t_name from teacher te where te.s_id = '1' group BY te.t_name HAVING te.t_name = '张老师'
数据: 结果:
2:补充一句:sql语句执行的顺序是 : from ... on ... where... group by... having... select order by limit。所以先进行where筛选 再分组 再进行having条件筛选(having中字段后必须是分组的字段)
四: union 与 union all 的使用:
注意:使用union 和union all 表必须要有相同的列、相似的数据项、select的顺序相同
union 筛选两个表中的不同的值!如需相同值出现用union all
五;between
select * from teacher where t_id between 01 and 02
总结: 在01 和 02 之间,如果显示之外的用not
五: between 使用在where后使用 在a 与b 之间 ; where between a and b;