`

mysql as 别名与 join 多表连接语法

 
阅读更多
在MySQL中,使用AS关键字为字段、表、视图取别名,或者不用as,用空格隔开:

SELECT (SELECT id a,title b FROM blog c limit 1)d;

使用字段别名,可以帮助我们有效的组织查询的输出结果。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在SQL标准中规划的(Join)联结大致分为下面四种:

1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。

2.外联结:分为外左联结和外右联结。

左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。

右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

Select A.name B.name From A Left Join B On A.id=B.id  和  

Select A.name B.name From B Right Join A on B.id=A.id   执行后的结果是一样的。

3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结(这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合联结条件,因此意义不大)。

4.无联结:不用解释了吧,就是没有使用联结功能呗,也有自联结的说法。

这里我有个比较简便的记忆方法,

内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。

外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。

内联接取交集,外连接取并集。单独的join语句默认是inner join。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在MySQL现有版本中CROSS JOIN的作用和INNER JOIN是一样的(虽然在SQL Standard中是不一样的,然而在MySQL中他们的区别仅仅是INNER JOIN需要附加ON参数的语句,而CROSS JOIN不需要)。

ON语句其实和WHERE语句功能大致相当,只是这里的ON语句是专门针对联结表的,ON语句后面的条件的要求和书写方式和WHERE语句的要求是一样的,大家基本上可以把ON当作WHERE用。

MySQL联结查询中的某些参数的作用: 

1.USING (column_list):其作用是为了方便书写联结的多对应关系,大部分情况下USING语句可以用ON语句来代替,如下面例子:


a LEFT JOIN b USING (c1,c2,c3),其作用相当于下面语句

a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

只是用ON来代替会书写比较麻烦而已。

2.NATURAL [LEFT] JOIN:这个句子的作用相当于INNER JOIN,或者是在USING子句中包含了联结的表中所有字段的Left JOIN(左联结)。

3.STRAIGHT_JOIN:由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度。

最后要说的就是,在MySQL5.0以后,运算顺序得到了重视,所以对多表的联结查询可能会错误以子联结查询的方式进行。譬如你需要进行多表联结,因此你输入了下面的联结查询:

SELECT t1.id,t2.id,t3.id

    FROM t1,t2

    LEFT JOIN t3 ON (t3.id=t1.id)

    WHERE t1.id=t2.id;

但是MySQL并不是这样执行的,其后台的真正执行方式是下面的语句:

SELECT t1.id,t2.id,t3.id

    FROM t1,(  t2 LEFT JOIN t3 ON (t3.id=t1.id)  )

    WHERE t1.id=t2.id;

这并不是我们想要的效果,所以我们需要这样输入:

SELECT t1.id,t2.id,t3.id

    FROM (t1,t2)

    LEFT JOIN t3 ON (t3.id=t1.id)

    WHERE t1.id=t2.id;

在这里括号是相当重要的,因此以后在写这样的查询的时候我们不要忘记了多写几个括号,至少这样能避免很多错误


分享到:
评论

相关推荐

    MySQL表与表之的连接和查询.pdf

    在进行表连接时,MySQL还支持使用别名来简化查询语句,提高可读性。例如,可以在FROM子句中给表赋予一个简短的别名: ```sql SELECT a.column_name, b.column_name FROM table1 AS a JOIN table2 AS b ON a.id = b....

    MySQL多表查询详解

    在MySQL中,多表查询通常涉及使用`JOIN`操作来连接不同的表。 ##### 1. 多表查询的操作与限制 多表查询的基本语法结构如下: ```sql SELECT [DISTINCT] * | 字段[别名], 字段[别名], ... FROM 表名称[别名], 表...

    MySQL数据库:自连接.pptx

    在MySQL数据库中,自连接是一种特殊的表连接方式,它允许我们把同一个表当作两个不同的实体进行操作,通过为表提供别名,使我们能够在查询中比较同一张表的不同行。这种技术在处理复杂的关联查询或者查找具有特定...

    MySQL语法大全..

    本文将全面介绍MySQL的基本语法,包括启动服务器、进入交互式界面、退出操作、执行查询、多行语句、显示数据库、选择数据库、查看表以及取消命令等核心概念。 1. 启动MySQL服务器: - 可以通过图形化工具...

    mysql join所有方法总结

    这里,同一个employee_table被赋予了不同的别名,以便于表自身与自身连接。 CROSS JOIN(交叉连接):交叉连接返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。在上述内容中的CROSS JOIN写法为:...

    sql语法(oracle,mysql,sqlserver)

    根据给定的信息,我们可以深入探讨SQL中的多表查询技术,特别是针对Oracle、MySQL以及SQL Server数据库系统的应用。这里我们将重点放在几个关键的概念上:笛卡尔积、连接(Join)的不同类型,尤其是内连接(Inner ...

    mysql修改语句修改单表中的记录

    2. **SQL99(也称为SQL-99)语法**,使用`JOIN`来连接多表: ```sql UPDATE 表1 AS 别名 JOIN 表2 AS 别名 ON 连接条件 SET 列=新值, ... WHERE 筛选条件; ``` 同样的例子,使用`JOIN`语法可以写成: ```...

    MYSQL语法与例题.pdf

    - 使用 CROSS JOIN、INNER JOIN等连接操作符可以合并来自多个表的数据。 - 如“SELECT * FROM CUSTOMER, ORDERS”为交叉连接的例子,而“SELECT c.* FROM CUSTOMER c INNER JOIN ORDERS o ON c.ID = o.CUSTOMER_ID...

    SQL数据库(Mysql进阶) - Git1

    多表连接可以使用Inner Join、Outer Join和Self-Join等方式进行连接。 * 多表等值连接:SELECT 字段|表达式 FROM 表名 1,表名 2,表名 3 WHERE 表名 1.列名=表名 2.列名 AND 表名 2.列名=表名 3.列名 * 多表Inner ...

    北京动力节点MySQL课程讲义_02

    这种方式中,表连接条件和数据查询条件混合在一起,使得SQL语句的结构不够清晰。 #### b. SQL99语法 相比之下,SQL99语法提供了更为清晰的结构,使用join关键字连接表,并用on子句明确指定连接条件。例如: ```sql...

    MySQL 5.1中文手冊

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 ...

    MySQL基础语法

    14. **连接查询(多表查询)** - **SQL92语法:** - **SQL99语法:** - 内连接(`INNER JOIN`)、左连接(`LEFT JOIN`)、右连接(`RIGHT JOIN`)、全连接(`FULL JOIN`)、交叉连接(`CROSS JOIN`) - 示例:`...

    MySQL 5.1参考手册

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 ...

    MySql 5.1 参考手册.chm

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 ...

    MySQL 5.1参考手册中文版

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户...

    MySQL 5.1参考手册 (中文版)

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 ...

    MYSQL中文手册

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户...

    mysql sql99语法 内连接非等值连接详解

    MySQL SQL99 语法中的内连接(INNER JOIN)是非等值连接的一种常见应用,它用于合并两个或更多表的数据,返回的结果是满足特定条件的记录。在这个语法中,"非等值连接"指的是连接条件不局限于列之间的相等比较,而是...

    MySQL 5.1官方简体中文参考手册

    5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 ...

Global site tag (gtag.js) - Google Analytics