您的位置:首页 > 数据库 > MySQL

第9天-mysql创建高级联结

2016-04-11 19:27 330 查看

一、使用表别名

在sql中,除了可以使用列别名之外,也可以使用表别名,这样做有两个理由

缩短sql语句
允许在单个select语句中使用相同的表


例子:

SELECT name, age, sex
FROM students as s, courses as c, course_selection as cs
WHERE cs.student_id = s.id
AND c.course_teacher = 'zhang'
AND c.course_id = cs.course_id;


上面的语句使用了表别名,缩短了sql语句的长度。

二、使用不同类型的联结

目前为止我们使用的都是内部联结,sql中还存在其他三种类型的联结:

自联结
自然联结
外部联结


1、自联结

假设我们想在
students
表中找出和学生
jyjxycgw
分数相同的所有学生的信息。

编写查询语句如下:

SELECT id, name, sex, age, score
FROM students
WHERE score =
(
SELECT score
FROM students
WHERE name = 'jyjxycgw'
);


输出为:

+-----+----------+--------+-----+-------+
| id  | name     | sex    | age | score |
+-----+----------+--------+-----+-------+
|   2 | jyjxycgw | male   |  44 |    27 |
| 121 | ibtzfqzo | female |  34 |    27 |
| 126 | hjvgmryx | female |  21 |    27 |
| 170 | jaqzptez | male   |  53 |    27 |
| 194 | kuxvtxwd | female |  17 |    27 |
| 427 | iuuludyb | male   |  52 |    27 |
| 432 | dhhmommn | female |  40 |    27 |
| 455 | kkhiunlf | male   |  90 |    27 |
| 463 | jnlnrezu | female |  61 |    27 |
| 489 | zurgnibf | male   |  55 |    27 |
| 653 | tkpkhbhq | male   |  43 |    27 |
| 879 | kvprpaph | female |  11 |    27 |
| 908 | atydodkc | female |   4 |    27 |
+-----+----------+--------+-----+-------+


上面使用了一个简单的select子查询,我们还可以使用联结达到同样的效果:

SELECT a.id, a.name, a.sex, a.age, a.score
FROM students as a, students as b
WHERE a.score = b.score
AND b.name = 'jyjxycgw';


输出完全相同。

与其等价的join语法:

SELECT a.id, a.name, a.sex, a.age, a.score
FROM students as a JOIN students as b
on a.score = b.score
AND b.name = 'jyjxycgw';


2、自然联结

无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。这样在使用标准联结(前面提到的内部联结)的时候,重复的列会不止出现一次。

而所谓自然联结是排除了那些重复的列,使得重复的列只出现一次的联结。

系统没有这样的功能,需要我们自己指定,方法是指定从各个表中指定要select的列。

这不是废话吗?

3、外部联结

许多联结将一个表中的行与另一各表中的行相关联。但有时候需要包含没有关联行的那些行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: