sql语句联合查询详解

sql语句联合查询详解

2011-03-01 18:58:22|  分类: mysql|举报|字号 订阅

例子:

person表和user表没有约束
person表:

user表:

有以下几种关联

1.UNION

格式:
查询语句

UNION [ALL] 查询语句

[UNION [ALL] 查询语句][…n]

说明:
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3) 
执行:select id,name from user UNION select id,name from person;

注意:sql句子栏目数必须是相同的,字段可以随意

2.JOIN

JOIN用于按照ON条件联接两个表,主要有四种:

(一)内连接

INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。(表示交集)

(二)外连接

LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。(差集)

RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。(差集)

FULL JOIN / FULL OUTER JOIN: 完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。(并集)

(三)交叉连接

交叉连接(cross join)不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

JOIN的基本语法(注意结果对比):

1.执行 select * from user as A join person as B on A.id=B.id;或
select * from user as A inner join person as B on A.id=B.id;

结果如下:

2.执行 select A.* from user as A join person as B on A.id=B.id;

3.执行select * from user as A left join person as B on A.id=B.id;

4.select * from person as A right join user as B on A.id=B.id;

5.full join  
mysql 5不支持full join 所以用左关联和右关联进行联合
SELECT * FROM user
LEFT JOIN money ON user.id=money.id
UNION
SELECT * FROM user
RIGHT JOIN money ON user.id=money.id

6.执行 select * from user CROSS JOIN person;

 巧记

select * from A left join  B where   条件

其一:  表以from最近表为准则(A表)

其二: join B要放在表A  left  (其中对面中的左右以自身的左右正好相反)

其三:from A表为准则时,Join表有多字段内容,少则为空值NULL

right join正好相反

select * from A right join  B where   条件

sql语句联合查询详解

时间: 2024-10-05 13:37:17

sql语句联合查询详解的相关文章

SQL语句执行过程详解

一.SQL语句执行原理: 第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时, 客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户端是不会做任何的操作,它的主要任务就是把客户端产生的一些SQL语句发送给服务器端.虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用不同.服务器上的数据库进程才会对SQL语句进行相关的处理.不过,有个问题需要说明,就是客户端的进程跟服务器的进程是一 一对应的.也就是说,在客户端

四、oracle基本sql语句和函数详解

一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构的数据定义语言命令有: create table alter table truncate table drop table eg. --创建tb_stu表数据结构 create table tb_stu( id number, name varchar2(20) );   --修改tb_stu表数

Oracle数据库入门——sql语句和函数详解

一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构的数据定义语言命令有: create table alter table truncate table drop table eg. --创建tb_stu表数据结构 create table tb_stu( id number, name varchar2(20) );   --修改tb_stu表数

一、oracle基本sql语句和函数详解

一. 数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构的数据定义语言命令有: create table alter table truncate table drop table eg. --创建tb_stu表数据结构 create table tb_stu( id number, name varchar2(20) ); --修改tb_stu表数据结构,新增一列 alter tab

六:SQL语句各种类型详解

前言:SQL语句常见包括以下几种类型 DDL:数据定义语句 DML:数据操作语言 DQL:数据查询语言 DCL:数据控制语言 一:数据定义语言DDL 1.1:一般对数据库的操作.对数据库表结构的操作属于数据定义语言 1.2:操作的是数据库和数据库表本身的结构,并非其内容 1.3:数据库和数据库表的增删改差 参照下面代码 --查看已经存在的数据库 SHOW DATABASES; --创建一个数据库 db_test; CREATE DATABASE db_test; --查看这个数据库的定义信息 S

MyBatis的SQL语句映射文件详解(三)----参数传递

1.单一基本类型参数(String,int等) 单一的基本类型参数,将对应语句中的parameterType的值与参数的类型相同.然后直接 用“#{参数名}” 来获取 java代码 //String类型的参数 usernamepublic User findUser(String usernumber) { return (User) sqlSessionTemplate.selectOne("findUserByUsernumber", usernumber); } xml代码 //

SQL常规查询详解

一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. 语句1:隐式的交叉连接,没有cross join. select o.id, o.order_number, c.id, c.name from orders o , customers c where o.id=1; 语句2:显式的交叉连接,使用cross join. select o.id,o.order

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

MySQL_05-Select查询详解

SQL查询详解 1.Orderby a) Order by 字段 asc | desc b) 允许多字段排序: 先按第一个字段排序,如果不能区分,再使用第二个字段排序:以此类推 2.Limit(限制获得的记录数量) a) 语法: limit offset, row_count  (offset:偏移量,下标从0开始:row_count:总记录数).例如:limit 2,3 表示从第二条开始,取三条(即第2条到第4条记录) 3.Distinct a) 去除重复记录. b) 语法: select d