http://www.lovestblog.cn,欢迎转载该文,但请注明文章出处,谢谢合作。

mysql的from从句用来指定参与查询的表,当然也可以是生成的中间表,在表前我们有时需要指定数据库,这主要是用在我们需要访问当前数据库之外的数据库中的表的情况,在这中情况下我们采用"."操作符来进行,如userdb.user,其实userdb为数据库名,user为表名,这是对mysql数据库而言的,对于DB2和Oracle就不是通过指定数据库名了,而是指定sql用户了,这就是说不同sql用户可以建立相同名字的表,但是同一个sql用户只能建立唯一名字的表。这就是它们在这表规范上面的区别。对于列规范,mysql可以在需要查询的列则可以采用如下形式进行访问:“数据库名.表名.列名”。对于多个表的规范,也就是涉及查询多个表的情况下,执行的过程是采用笛卡尔积的形式进行的。也就是说生成的中间表的列数为两个表中列数的总和,而行的总数等于一个表中的行的数量与另外一个表中行的数量的乘积。

对于from从句中使用假名的情况,比如select u.id,name,age,a.account from utb as u,atb as a where u.id=a.user_id,在我们使用假名之后,那么在该sql语句的任何地方都只能使用假名,不能使用真实的表名,同时上面的as关键字也是可以省略的,也就是说对于上面的语句不能用atb来取代a,utb来取代u了。虽然from从句不是我们指定的第一条语句,但是绝对是第一个被处理的语句,所以在声明假名前使用假名不会导致错误。如果一条from从句引用到两个有着相同名称的表,则必须使用假名。如:

select p.playerno

from players as p,players as par

where par.fn="jp" and par.ln="l" and p.birth_date

对于多个表间的连接处理可能会导致有相同的结果,即有重复的结果,sql并不会自动从最终结果中删除重复的行,这是如果我们不希望在结果中出现重复的行,那么我们可以在select后直接指定distinct。如:

select distinct T.playerno

from teams as T,penalties as pen

where T.playerno=pen.playerno。

接下来说说连接哈,对于内连接,如果是两个表的话,就取两个表的一个交集,如果是左外连接的话,那就是左边的表全取,右边没有的用null替代,弱国是右外连接的话,那就是右边的表全取,左边没有的用null表示。下面看看一个具体的例子:

--表stu --表exam

id name id grade

1, Jack 1, 56

2, Tom 2, 76

3, Kity 11, 89

4, nono

内连接 (显示两表id匹配的)

select stu.id,exam.id,stu.name, exam.grade from stu (inner) join exam on stu.id=exam.id

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

1 1 Jack 56

2 2 Tom 76

左连接(显示join 左边的表的所有数据,exam只有两条记录,所以stu.id,grade 都用NULL 显示)

select stu.id,exam.id,stu.name, exam.grade from stu left (outer) join exam on stu.id=exam.id

1 1 Jack 56

2 2 Tom 76

3 NULL Kity NULL

4 NULL nono NULL

右连接(与作连接相反,显示join右边表的所有数据)

select stu.id,exam.id,stu.name, exam.grade from stu right join exam on stu.id=exam.id

1 1 Jack 56

2 2 Tom 76

NULL 11 NULL 89

内连接取交集,外连接分左和右,

左连接左边的全取,

右连接右边的全取

对于连接的列的名称相同的话,那么可以使用using来替代条件,如上面的内连接可以这样改写:

select stu.id,exam.id,stu.name, exam.grade from stu inner join exam using(id)。

对于左外连接使用的情况一般是当左表的连接列中存在未出现在右表的连接列中的值时,左外连接才有用。

还有个全外连接的,也就是说只要在两个表中出现的记录都会在中间表中出现,当右表有而左表没有或当左表有而右表没有的时候用null表示。具体语法如下:select stu.id,exam.id,stu.name, exam.grade from stu full join exam using(id)。

交叉连接:就是显示求表的笛卡尔积,select * from teams cross join penalties.这句完全等价于select teams.*,penalties.* from teams,penalties.

联合连接:select * from teams union join penalties,这个其实很容易理解,产生结果所包含的列为两个表所有的列和,对于数据的列出,首先列出左表的数据,对于属于右表的列,用null表示,接下来列出右表的数据,对于属于左表的列用null表示。

自然连接:select * from teams nature inner join penalties where division='first';此句完全等同于select t.playerno,t.teamno,t.division,pen.paymentno,pen.payment_date,pen.amount from teams as t inner join penalties as pen on t.playerno=pen.playerno where dividion='first'.相比就知道,我们无须显示指出必须要连接到哪些列,sql会自动查找两表中是否有相同名称的列,且假设他们必须在连接条件中使用。此处的on或using从句是多余的,因此不允许使用。

下面看个例子创建一个称为towns的虚拟表:

select *

from (select 'Stratford' as town,4 as number

union

select 'Plymouth',6

union

select 'Inglewood',1

union

select 'Douglas',2) as towns

order by town;结果为:

town number

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

Douglas 2

Inglewood 1

Plymouth 6

Stratford 4

1

0

分享到:

2009-09-24 15:44

浏览 2267

分类:数据库

评论

mysql 从句_MySQL select语句之from从句相关推荐

  1. 学习MySQL:使用SELECT语句从MySQL服务器查询数据

    In this series of articles, we are going to learn about the basics of the MySQL database server. In ...

  2. mysql 取左_MySQL select语句从字符串左侧获取5个字符

    要从字符串的左侧获取字符数,请在MySQL中使用LEFT方法.让我们首先创建一个表-mysql> create table DemoTable ( Name varchar(100) ); 使用 ...

  3. mysql查询单表的销售额_MYSQL select语句的单表查询

    MYSQL select语句的单表查询 发布时间:2020-05-29 13:19:48 来源:亿速云 阅读:131 作者:Leah 这篇文章运用了实例代码展示select语句的单表查询的用法,代码非 ...

  4. 查看MySQL句柄_mysql查询语句-handler

    1 简介 mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能.它是mys ...

  5. mysql 批量_mysql LOAD语句批量录入数据

    本章的前面讨论如何使用SQL向一个表中插入数据.但是,如果你需要向一个表中添加许多条记录,使用SQL语句输入数据是很不方便的. 幸运的是,MySQL提供了一些方法用于批量录入数据,使得向表中添加数据变 ...

  6. MySQL基本的SELECT语句,SQL语言概述,基础和重要不冲突,完整详细可收藏

    文章目录 1.SQL语言的分类 2.SQL语言的规则与规范 3.基本的SELECT语句 4.DESCRIBE显示表结构 5.WHERE过滤数据 1.SQL语言的分类 SQL语言在功能上主要分为如下3大 ...

  7. [MySQL] 基本的SELECT语句

    文章目录 资料 1. 查询常量计算 2. 查询语句的基本语法 2.1 查询全部字段 2.2 查询指定字段 3. 列的别名 4. 去除重复行 5. 空值参与运算 6. 着重号 7. 查询常数 8. 显示 ...

  8. mysql 笔记05 select语句以及条件语句的使用

    select语句 过滤重复语句(distinct) 举例: 查询学生的总分 select name, math + English + China as '总分' from students; 在姓赵 ...

  9. mysql的selectwhere语句_(MySQL笔记)SELECT语句的WHERE子句详解

    WHERE子句 在SELECT语句中,语句首先从FROM子句开始执行,执行后会生成一个中间结果集,然后就开始执行WHERE子句.WHERE子句是对FROM子句生成的结果集进行过滤,对中间结果集的每一行 ...

最新文章

  1. mysql 错误记录
  2. C#学习基本概念之属性使用
  3. 桥接模式coding
  4. 限制文本框只能输入数字和小数点
  5. windows 中搭建Zookeeper的搭建
  6. 学生成绩查询java版_学生成绩查询系统,基于ssm的JAVA系统
  7. Confluence 6 从外部目录中同步数据支持的目录类型
  8. JAVA题目 写一个收费站类_Java综合题目
  9. c++rpg黑框游戏_c++实现简单RPG对战游戏的代码
  10. python open 编码格式_Python以unicode编码格式读入外部文件
  11. asp.net 实现动态显示当前时间(不用javascript不考虑开销)
  12. 编译原理:c语言词法分析器的实现
  13. synopsys软件介绍
  14. kettle定时调度
  15. JS常见的逻辑题目操作(常见面试逻辑题)
  16. VSPE虚拟串口关机蓝屏(BSOD)的解决办法
  17. WSUS无法发现客户端
  18. FFmpeg视频剪辑拼接
  19. 电子科技大学信息与通信工程学院考研复试总结
  20. 最爱经典歌曲TOP500

热门文章

  1. 淘宝 Android 端图片体验优化实践
  2. JVM之类的加载过程(三):初始化——>Initialization
  3. Quill编辑器实现图片上传功能
  4. 下载centos7.6光盘映像文件,使用VMware12创建虚拟机,设置固定IP,最全图文教程
  5. IDEA 搭建黑马品优购商城
  6. HTML常用实体符号
  7. unity3D赛车游戏项目源代码
  8. PES包的PTS详解
  9. 大龄程序员的出路在哪里!40岁50岁你还有精力每天抱着电脑写程序吗?
  10. 如何用计算机模拟光的传播,一种模拟激光辐射颗粒的数值建模方法与流程