本系列出自《深入浅出MySQL》,全文以问答形式展开,是我的个人学习笔记
先看花絮。
Q:我为什么需要交叉联接?
A:知道交叉联接的存在,有助于我们找出修正联接的正确方式。还有,交叉联接有时可用于RDBMS软件及其配置的运行速度。运行交叉联接所需的时间可以轻易的检测与比较出速度慢的查询。
Q:内联接和交叉联接有什么区别吗?
A:交叉联接属于内联接的一种。内联接就是通过查询中的条件移除了某些结果的交叉联接。
Q:可以联接多于两张表吗?
A:可以,后续章节再说,有点饿了。
Q:ORDER BY 这些东西也能与联接放到一起吗?
A:是的。
Q:外联接呢?
A:莫急。
CREATE TABLE profession(
id INT(11) NOT NULL AUTP+INCREMENT PRIMARY KEY,
profession varchar(20)
);
INSERT INTO profession (profession)
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
CREATE TABLE profession AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
ALTER TABLE profession
ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY(id);
CREATE TABLE profession(
id INT(11) NOT NULL AUTP+INCREMENT PRIMARY KEY,
profession varchar(20)
) AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
看上面语句,AS能把SELECT的查询结果填入表中。
短短一个查询语句,就出现了五次“profession”,这五次profession效果各有不同,我们容易弄晕,但是SQL能够很轻易的分辨。 为了能让我们容易分辨,SQL推出了假名功能。
创建别名真的很简单,在查询软件中首次使用原始列名的地方后接一个AS并设定要采用的别名,告诉软件现在开始要以另一个名称引用my_contacs表的profession列,这样可以让查询更容易被我们理解。
你会需要! 接下来要开始对表进行联结了,嘿嘿,睁大眼睛吧。
创建表的别名的方式和创建列的别名的方式几乎一样。在查询中首次出现表名的地方后接AS并设定别名。 当然,你甚至可以连AS也省了。
假设你有一个存储男孩姓名的表以及一个记录男孩们都有哪些玩具的表,现在我们要试着找出每个男孩拥有的玩具。
SELECT t.toy,b.boy
From toys t
CROSS JOIN
boys AS b
;
CROSS JOIN返回两张表的每一行相乘的结果。
INNER JOIN利用条件判断中的比较运算符结合两张表的记录。只有联接记录符合记录条件时才会返回列。
SELECT somecolumns
FROM table1
INNER JOIN
table2
ON somecondition; --条件式里课采用任何一个比较运算符,也可以改用WHERE
示例:
SELECT mc.last_name,mc.first_name,p.profession
FROM my_contacts AS mc
INNER JOIN
profession AS p
ON mc.prof_id = p.prof_id;
属于内联接的一种。 自然联接只有在联接的列在两张表中的名称相同时才会用。
SELECT boys.boy,toys.toy
FROM boys
NATURAL JOIN
toys;