mysql as join_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;
在这里括号是相当重要的,因此以后在写这样的查询的时候我们不要忘记了多写几个括号,至少这样能避免很多错误
分享到:
2012-09-20 11:19
浏览 2162
评论
mysql as join_mysql as 别名与 join 多表连接语法相关推荐
- mysql natural join_MySQL STRAIGHT_JOIN 与 NATURAL JOIN
MySQL STRAIGHT_JOIN STRAIGHT_JOIN 是 MySQL 对标准 SQL 的扩展,用于在多表查询时指定表载入的顺序.在 JOIN 表连接中,同样可以指定表载入的顺序,本文只讲 ...
- 02-SQL语句给表起别名SQL中的表连接
什么情况下需要给表起别名? 1.表名比较长 2.当需要在多个表中进行查询并把查询内容同时输出的时候 3.当需要进行表连接的时候(其实和2一个意思,一般情况下多个表进行连接主要目的就是为了从多个表中查询 ...
- mysql semi join_MySQL 5.6 Semi join优化之materialization strategy
8月 24, 2014 | Nix.Huang 考虑如下查询: select * from Country where Country.code IN (select City.Country fro ...
- mysql多种join_MySQL的几种Join
/* 左表t1*/ DROP TABLE IF EXISTS t1; CREATE TABLE t1 (id INT NOT NULL,NAME VARCHAR(20)); INSERT INTO t ...
- mysql 多表 left join_MySql left join 多表连接查询优化语句
创建索引: create index ix_register_year ON dbo.selects(register_year) SELECT M.*,SS.SensorCode,SS.Sensor ...
- mysql主动自增可以_Mysql join联表及id自增实例解析
join的写法 如果用left join 左边的表一定是驱动表吗?两个表的join包含多个条件的等值匹配,都要写道on还是只把一个写到on,其余写道where部分? createtablea(f1in ...
- MySQL数据库----多表查询,表连接
一.查询概述: 查询:指的是针对表中已经存在的数据,可以按照特定组合,条件,或者次序等等来进行一系列的检索查看操作------>select语句. 二.查询的基本操作: 1.查询语句的基本结构: ...
- 【PHP MySQL】数据库专题 第八课 表连接
[PHP & MySQL]✔️数据库专题✔️ 第八课 表连接 概述 表连接 内连接 左连接 右连接 全连接 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 表连接 表连接 ...
- MySQL学习(8)︱DISTINCT去重与表连接
DISTINCT去重 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的某一列含有重复值是常见的,如employee表的dept列.如果在查询数据时,希望 ...
最新文章
- linux 脚本 符号,Shell脚本 入门 —— 符号篇
- 别人的代码是火箭,我的代码是乌龟……
- 细说websocket快速重连机制
- 微信小程序 全局变量异步函数_微信小程序制作简述
- Android之开源视频压缩框架RxFFmpeg的commands设置
- 深夜,我偷听到程序员要对session下手......
- 本周ASP.NET英文技术文章推荐[03/04 - 03/10]
- C# Reflection
- golang学习笔记14 golang substring 截取字符串
- Android 网络图片加载之cude 框架
- 怎么查看linux系统硬盘,查看Linux磁盘空间的八大方法
- 如何使用Python3解二维码和编译二维码
- 【strlen函数的使用及strlen函数的三种模拟实现】· C语言详解库函数篇(一)
- 数据分析方法-AARRR模型分析方法
- 在校大学生计算机等级考试可以在其他省考吗
- 怎样读书(繁体版)读书笔记
- IIS服务器的安全保护措施
- 删除提示框 MessageBox弹框
- 建筑材料行业采购合同电子化,数商云采购商城系统助力企业采购业务更规范高效
- iOS开发之开源项目库总汇
热门文章
- mpvue v-html解决方案,mpvue开发小程序所遇问题及h5转化方案
- java list 遍历 remove_JAVA中LISt遍历时如何remove元素?
- win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...
- matlab小波脊线,小波脊线提取,模极大值法。运行的结果不太对,代码有些地方我也没完全看懂...
- Go--4大基本数据类型之布尔类型
- bzoj 1124 [POI2008]枪战Maf 贪心
- 20180105随笔
- 《Effective Java》读书笔记 - 5.泛型
- shell中的常用通配符,字符类
- CentOS下mysql数据库常用命令总结