`
nijiaben
  • 浏览: 129135 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL select语句之from从句

阅读更多
    本文最新发布于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<par.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
分享到:
评论

相关推荐

    mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql in

    mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql insert语句mysql ...

    mysql各种语句多表查询+ mysql视图 mysql数据库管理+ select语句+ 创建

    数据库mysql的各种查询语句check的完整性约束 mysql多表查询+ mysql视图 mysql数据库管理+ select语句+ 创建表+ 多表链接 分类汇总 外连接和子查询 完整性约束等等

    常用MySQL语句大全

    常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句大全常用MySQL语句...

    根据update语句自动生成select语句

    根据update语句自动生成select语句.

    Oracle Sql语句转换成Mysql Sql语句

    Oracle Sql语句转换成Mysql Sql语句java 源码,非常简单,只要给定源oracle sql语句地址,和生成目标文件地址运行即可。

    MySQL语法语句大全MySQL语法语句大全

    MySQL语法语句大全MySQL语法语句大全MySQL语法语句大全

    MySQL数据库中SELECT语句快速精细掌握

    最简单的SELECT语句是SELECT select_list,实际上利用这个最简单的SELECT语句,你也可以完成许多你期待的功能,首先你能利用它进行MySQL所支持的任何运算,例如:SELECT 1+1,它将返回2;其次,你也能利用它给变量...

    oracle到mysql建表语句迁移

    oracle向mysql建表语句的迁移。 直接表结构的生成sql脚本

    MySQL进阶SELECT语法篇

    MySQL进阶SELECT语法篇,内有大量高级SELECT语句、用法 最简单的SELECT语句是SELECT select_list,实际上利用这个最简单的SELECT语句,你也可以完成许多你期待的功能,首先你能利用它进行MySQL所支持的任何运算,例如...

    mysql SELECT语句去除某个字段的重复信息

    mysql SELECT语句去除某个字段的重复信息,需要的朋友可以收藏下。

    MYSQL语句大全MYSQL语句大全

    MYSQL语句大全MYSQL语句大全MYSQL语句大全MYSQL语句大全MYSQL语句大全MYSQL语句大全

    mysql基础语句mysql基础语句

    mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句mysql基础语句

    25.1 MySQL SELECT语句

    配套资源

    mysql查询语句汇总基本语法.doc

    下面是一些常用的MySQL查询语句,包括基本的SELECT查询、条件查询、聚合函数、子查询、连接查询以及更新和删除数据等。这些语句将帮助您更好地理解和使用MySQL数据库。 一、基本SELECT查询 SELECT语句用于从数据库中...

    mysql查询语句汇总.docx

    mysql查询语句汇总 MySQL查询语句是数据库操作的核心部分,涵盖了数据检索、插入、更新和删除等多个方面。以下是一个MySQL查询语句的汇总,涵盖了基本语法和一些常用示例,力求达到接近2000字的要求。 一、数据检索...

    mysql建表语句

    mysql语句,mysql语句mysql语句mysql语句mysql语句mysql语句mysql语句mysql语句

    mysql修改语句 mysql语句用法,添加、修改、删除字段

    mysql修改语句 mysql语句用法,添加、修改、删除字段mysql语句用法,添加、修改、删除字段mysql语句用法,添加、修改、删除字段mysql语句用法,添加、修改、删除字段mysql语句用法,添加、修改、删除字段mysql语句用法,...

    mysql批量修改语句

    mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改

    mysql-语句大全

    mysql语句大全 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql&gt; SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql&gt; CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql&gt; USE MYSQLDATA; (按...

Global site tag (gtag.js) - Google Analytics