SQL语句实现多表查询

目录
  • 基本sql语句
  • 多表查询
  • 例一:双表查询
  • 例二:多表查询

基本sql语句

SELECT <目标字段> FROM <数据库表> WHERE <查询条件> GROUP BY <分组依据> ORDER BY <排列依据>

多表查询

内连接 :返回满足连接条件的数据

格式:SELECT <目标字段> FROM <INNER JOIN+表名+ON+连接条件> WHERE <查询条件>

注意:理清表与表之间的关系,从哪些表中查出哪些数据,表与表之间的连接条件是什么

例一:双表查询

例二:多表查询

a  sys_user       user_name => user_id dept_id
b  sys_user_role  user_id   => role_id
c  sys_role       role_id   => role_name
d  sys_role_dept  role_id   => dept_id
e  sys_dept       dept_id   => dept_name parent_id dept_name
f  sys_dept       parent_id => dept_name
SELECT
	a.user_name,
	a.user_id,
	a.dept_id,
	b.role_id,
	c.role_name,
	e.dept_name,
	f.dept_name
FROM
	sys_user AS a
	INNER JOIN  sys_user_role AS b  ON b.user_id = a.user_id
    INNER JOIN  sys_role AS c       ON c.role_id = b.role_id
    INNER JOIN  sys_dept AS e       ON e.dept_id = a.dept_id
	INNER JOIN  sys_dept AS f       ON f.dept_id = e.parent_id
WHERE
	a.user_name = 'zjzsqxyf01'

外连接:外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行

(1)左连接:返回左表中的所有数据

格式:SELECT <目标字段> FROM <LEFT JOIN+表名+ON+连接条件> WHERE <查询条件>

(2)右连接:返回右表中的所有数据

格式:SELECT <目标字段> FROM <RIGHT JOIN+表名+ON+连接条件> WHERE <查询条件>

(3)全连接:在等值连接的基础上将左表和右表的未匹配数据都加上

格式:SELECT <目标字段> FROM <FULL JOIN+表名+ON+连接条件> WHERE <查询条件>

自然连接:以两个表具有相同的字段的所有列为基础,返回两个表中满足查询条件的数据

到此这篇关于SQL语句实现多表查询的文章就介绍到这了,更多相关SQL多表查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • thinkphp中多表查询中防止数据重复的sql语句(必看)

    下面先来看看例子: table id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. select *, count(distinct name) from table group by name 结果: id name count(distinct name) 1 a 1 2 b 1 3 c 1 最后一 项是多余的,不用管就行了 tp2.0手册   搜索连贯操作 可看到相关的资料 SELECT cat_id, COUNT(*) AS

  • 一个多表查询的SQL语句

    有 表1:如下内容 表2:   如下内容      id     info id value      1 a 1 10      2 b 2 30      3 c      4 d 想得到      id value      1 10 //表2中存在      2 20 //表2中存在      3 0 //表2中不存在      4 0 //表2中不存在      是否可以使用一条sql语句来解决,而不必先从表1中得到id,再在表2中查找是否有该条记录,如果有就直接读取出来,没有则赋值为

  • Orancle的SQL语句之多表查询和组函数

    一.SQL的多表查询: 1.左连接和右连接(不重要一方加(+)) SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE e.deptno(+)=d.deptno ; (+)在等号左边是右连接,反之左连接. 2.交叉连接 (CROSS JOIN产生笛卡尔积) SELECT * FROM emp CROSS JOIN dept ; 3.自然连接 (NATURAL JOIN)自动关联字段匹配 SELECT * FRO

  • SQL判断语句用法和多表查询

    1.格式化时间sql语句 本例中本人随便做了两张表,和实际不是很相符,只是想说明sql语句的写法. 例1表格式如下: 需求:查询出本表,但需要使time字段的时间格式为yyyy-MM-dd,比如:2013-08-13 sql写法: SELECT u.id,u.userId,u.timeType,DATE_FORMAT(time,'%Y-%m-%d') AS time,secondId FROM `user` u 运行结果: 2.多表查询(三表查询) 例二三表结构如下: 需求:查询出主表,要求在主

  • SQL语句如何实现超简单的多表查询

    目录 一.简单的多表联查(inner join,left join,right join) 1. 两表联查 2.三表联查 二.触发器 一.简单的多表联查(inner join,left join,right join) 1. 两表联查 user_table表 department表 1.inner join代表内连接,数据显示内容以外键为准,意思就是外键没有的,数据就不显示. select user_table.id,user_table.username,user_table.sex,user

  • SQL 多表连接查询实现语句

    1.理论 只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来. 个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为牵引合并起来. 语法 select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2 INNER JOIN 操作包含以下部分: 部分 说明 table1, table2 要组合其中的记录的表的名称. field1,field2 要联接的字

  • SQL语句实现多表查询

    目录 基本sql语句 多表查询 例一:双表查询 例二:多表查询 基本sql语句 SELECT <目标字段> FROM <数据库表> WHERE <查询条件> GROUP BY <分组依据> ORDER BY <排列依据> 多表查询 内连接 :返回满足连接条件的数据 格式:SELECT <目标字段> FROM <INNER JOIN+表名+ON+连接条件> WHERE <查询条件> 注意:理清表与表之间的关系,从

  • SQL 列不同的表查询结果合并操作

    两个不同的表进行查询,需要把结果合并, 比如table1的列为 id, user_id, type_id,pro_id: table2的列为 id,user_id,collect_id:分别如下图所示 table1: table2: 将两个表的查询结果合并到一起的查询语句为 select *, null as collect_id from table1 where user_id = 527 union select id,user_id,null as type_id,null as pro

  • 教你使用SQL语句进行数据库复杂查询

    目录 前言 前言 本篇可当做例题练习, 1.查询比”林红”年纪大的男学生信息语句: select * from Student where Sex='男' and year(Birth)-(select year(Birth)from Student--这里是需要告诉查询的表名,相当于嵌套 where Sname='林红')<0 2.检索所有学生的选课信息,包括学号.姓名.课程名.成绩,性别.语句: select sc.sno,sname, course.Cno,Cname,Grade,Sex

  • 用非动态SQL Server SQL语句来对动态查询进行执行

    此文章主要向大家讲述的是非动态SQL ServerSQL语句执行动态查询,在实际操作中我尝试在一个存储过程中,来进行传递一系列以逗号划定界限的值,来对结果集进行限制.但是无论什么时候,我在IN子句中使用变量,都会得到错误信息. 是否存在一种不执行动态SQL语句也能完成查询的方式呢? 我尝试在一个存储过程中传递一系列以逗号划定界限的值,以限制结果集.但是无论什么时候,我在IN子句中使用变量,都会得到错误信息.是否存在一种不执行动态SQL ServerSQL语句也能完成查询的方式呢? 专家解答: 这

  • MySQL中使用SQL语句查看某个表的编码方法

    MySQL中,如何使用SQL语句来查看某个表的编码呢?我们使用show create table 这一SQL语句来解决这个问题. show create table可以查看创建这个表的SQL语句脚本,它的基本语法是: show create table <表名>; 我们用它看看test表的create脚本: mysql> show create table test; +-------+--------------------------------------------- -----

  • 通过SQL语句直接把表导出为XML格式

    首先建立一张表: 复制代码 代码如下: USE [ip] GO /****** 对象: Table [dbo].[SiteData] 脚本日期: 09/11/2010 17:41:11 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[SiteData]( [id] [int] IDENTITY(1,1) NOT NULL, [SiteName]

  • Oracle中sql语句如何执行日志查询

    目录 Oracle sql语句执行日志查询 Oracle查询某天sql执行记录 Oracle sql语句执行日志查询 在Oracle数据中,我们经常编写sql语句,有时我们会编写一些特别长的sql语句,而有一些意外导致sql消失,从而出现长时间写的sql,但是需要重新辨析,我们可以使用查询语句通过时间定位sql. 从而找到: select FIRST_LOAD_TIME,LENGTH(SQL_FULLTEXT),SQL_FULLTEXT from v$sql where SQL_FULLTEXT

  • SQL直接操作excel表(查询/导入/插入)

    复制代码 代码如下: --配置权限 EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO SQL SERVER 和EXCEL的数据导入导出 1.在SQL SERVER里查询Excel数据: -- ============================================

  • 一条SQL语句修改多表多字段的信息的具体实现

    之前修改两张及以上表的时候,总得需要用几次语句才修改,万一其中一条没修改上,又没事务机制的话,处理很麻烦,于是想到能不能一条语句完成呢? 结果是成功的~~ 多表多字段的时候,得用到表关联的方式修改信息: 复制代码 代码如下: UPDATE `user` join `binding` on `user`.`uid`=`binding`.`uid` SET `user`.`renren`="" ,`binding`.`renren_token`= "" , `bindi

随机推荐