概述
2.8使用链接实现多表检索
2.8.1内连接
2.8.2对被链接的列引用进行限定
2.8.3左连接和右连接
因为第二天要早起 所以拖到了第二天忙完了才回来写。我的错。
select 的基本语法
select select_list
from table_list
where row_constraint
group by grouping_columns
order by sorting_columns
having group_constraint
limit countl;
在这里边除了第一句,都是可选的,包括第二句 from MySQL也允许不存在
select sqrt(pow(3,2)+pow(4,2));
我们在第一章基本接触了以上的几个子句。having好像还没有介绍过。这里举个例子来说明:
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
having即由sum或其它集合函数运算结果的输出进行限制
sum这里对一个顾客的orderprice进行汇总,having在这里就相当于一个针对于函数的where语句。函数条件查询的时候,SQL需要使用having而不是where。
通常情况下,having子句被放置在SQL命令的结尾处。
这一节的主要内容是编写连接查询
1.内连接
select t1.*,t2.*from t1 inner join t2
where t1.i1=t2.i2;
inner join即把一个表里的行与另一个表里的行进行匹配。然后产生结果。
通过增加where子句,实现表之间基于某些列值的匹配,这样整个操作只会选取t1,t2,表中
i1,i2列值相等的行。
其中inner join 可以等价替换为 join 或cross join
也可以替换为逗号运算符,但是有时候会因为优先级的问题而出错,所以作者不建议使用。
除此之外
select .... from ..inner join....on t1.i1=t2.i2;
select .... from ..inner join....using(same_column_name)
第一句即用on代替where
第二句使用的条件是两个表中需要连接的两个列必须同名!
2.被连接的表里列引用的限定
第一点:当连接的两个表中的列有相同列名的时候,要指定表名。
select a,t1.b,t2.b,c from............
第二点:自连接操作时除了指定表明外,还要为这个表再次赋别名。
select mytable.column1,m.column2 from mytable inner join mytable as m
where mytable.column1>m.column2;
这两条语句把mytable表与自身连接起来,然后又为它的一个实例分配了一个别名,从而消除了在引用时的歧义问题。
3.左连接和右连接
left join 即把左表里在右表里未匹配上的显示出来
right join 即把右表里在左表里未匹配上的显示出来
输出结果时,未匹配上的行对应未匹配结果,对应值将为null,所以我们需要确认被匹配的表列的约束为not null,这样就会避免已经匹配上了,但是匹配的值为null的情况,使操作者误以为这一行并没有匹配上。
where table_name.column_name is null;
在连接后加上这个条件 就会只显示没有进行匹配的对应行。
而这种查询命令的多数目的就是为了知道谁没有匹配上,所以匹配上的显示出来这里按需求可有可无。
书的接下来就是把连接运用到了sampdb数据库上:
我敲代码练练手:
select
student.name,student.student_id,
grade_event.data,grade_event.event_id,grade_event.category
from
student inner join grade_event
left join score on student.student_id=score.student_id
and grade_event.event_id=score.evvent_id
where score.score is null
order by student.student_id,grade_event.event_id;
书上最后一段有一个非常重要的注意事项:select使用的是student. student_id而不是score表,在这里score表作为被左连接的表,left join返回的所有列都是null值,如果继续使用score.student_id返回的列将全部是null,即错误,所以select选择是student表。
最后
以上就是唠叨唇膏为你收集整理的跟我一起学习MySQL技术内幕(第五版):(第二章学习日记6)的全部内容,希望文章能够帮你解决跟我一起学习MySQL技术内幕(第五版):(第二章学习日记6)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复