SQL语句 - 多表查询使用详细介绍

这篇具有很好参考价值的文章主要介绍了SQL语句 - 多表查询使用详细介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多表查询

多表查询简介

例如我们有一张员工表和部门表, 员工表有6条数据, 部门表表有4条数据:

# 创建部门表
CREATE TABLE dept (
	did INT PRIMARY KEY AUTO_INCREMENT,
	dname VARCHAR (20)
);

-- 添加部门数据
INSERT INTO dept (dNAME)
VALUES ('研发部'), ('市场部'), ('财务部'), ('销售部');

# 创建员工表
CREATE TABLE emp (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR (10),
	gender CHAR (1),
	-- 性别
	salary DOUBLE,
	-- 工资
	join_date DATE,
	-- 入职日期
	dep_id INT,
	FOREIGN KEY (dep_id) REFERENCES dept (did) -- 外键,关联部门表(部门表的主键)
);

-- 添加员工数据
INSERT INTO emp (
	name,
	gender,
	salary,
	join_date,
	dep_id
)
VALUES(
	'孙悟空',
	'男',
	7200,
	'2013-02-24',
	1
), (
	'猪八戒',
	'男',
	3600,
	'2010-12-02',
	2
), (
	'唐僧',
	'男',
	9000,
	'2008-08-08',
	2
), (
	'白骨精',
	'女',
	5000,
	'2015-10-07',
	3), (
	'蜘蛛精',
	'女',
	4500,
	'2011-03-14',
	1
), (
	'小白龙',
	'男',
	2500,
	'2011-02-14',
	NULL
);

使用多表查询, 查询员工表和部门表两张表:

SELECT * FROM emp, dept;

此时查询到的结果会有24条数据, 为什么会这样呢?

笛卡尔积:有A, B两个集合, 取A, B集合所有组合情况(4*6=24);

我们多表查询, 更多的是消除这些无效的数据

例如上面表中, 我们可以加上emp表中的dep_id和dept表中的did相等的条件, 筛选出有效的数据

SELECT * FROM emp, dept WHERE emp.dep_id = dept.did;

多表查询:从多张表查询数据, 有下面两种方式:

连接查询

内连接:相当于查询A B交集数据

外连接:

  • 左外连接:相当于查询A表所有数据和交集部分数据
  • 右外连接:相当于查询B表所有数据和交集部分数据

子查询

多表查询内连接

内连接相当于查询 A B 交集数据:

sql多表查询语句,MySql,sql,数据库,java

内连接查询语法:

-- 隐式内连接
SELECT 字段列表 FROM1,2WHERE 条件;

-- 显式内连接
SELECT 字段列表 FROM1 [INNER] JOIN2 ON 条件;

隐式演示如下:

查询emp表中的name和gender, dept表中的did

SELECT emp.name, emp.gender, dept.did FROM emp, dept WHERE emp.dep_id = dept.did;

在多表查询的时候, 我们也是可以给表取别名的

SELECT t1.name, t1.gender, t2.did FROM emp t1, dept t2 WHERE t1.dep_id = t2.did;

显式内连接:

外连查询emp.dep_id = dept.did的所有员工信息

SELECT * FROM emp INNER JOIN dept ON emp.dep_id = dept.did;

INNER是可以省略的

SELECT * FROM emp JOIN dept ON emp.dep_id = dept.did;

查询emp表中的name和gender, dept表中的did, 同样显式内连接同样是可以取别名的

SELECT t1.name, t1.gender, t2.did FROM emp t1 JOIN dept t2 ON t1.dep_id = t2.did;

多表查询外连接

外连接查询语法:

左外连接:相当于查询A表所有数据和交集部分数据

右外连接:相当于查询B表所有数据和交集部分数据

-- 左外连接
SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件;

-- 右外连接
SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件;

演示如下:

-- 左外连接
SELECT * FROM emp LEFT JOIN dept ON emp.dep_id = dept.did;

-- 右外连接
SELECT * FROM emp RIGHT JOIN dept ON emp.dep_id = dept.did;

多表查询子查询

子查询概念

查询中嵌套查询,称嵌套查询为子查询

子查询根据查询结果不同,作用不同

单行单列: 作为条件值,使用 = != > <等进行条件判断;

指的是子查询语句的查询结果是单行单列的, 例如查询猪八戒工资结果如下:

sql多表查询语句,MySql,sql,数据库,java

单行单列子查询语法如下:

SELECT 字段列表 FROMWHERE 字段名 = (子查询);

演示: 查询emp表中猪八戒的工资, 然后再查出工资高于猪八戒工资的员工信息;

SELECT * FROM emp WHERE salary > (SELECT salary FROM emp WHERE name = '猪八戒');

多行单列: 作为条件值,使用 in 等关键字进行条件判断;

指的是子查询的结果是多行单列的, 例如查询出dept表中财务部和市场部的did结果如下:

sql多表查询语句,MySql,sql,数据库,java

多行单列查询语法如下:

SELECT 字段列表 FROMWHERE 字段名 in (子查询);

演示: 查询财务部和市场部的所有员工信息

SELECT * FROM emp WHERE dep_id 
IN (SELECT did FROM dept WHERE dname = '财务部' OR dname = '市场部');

多行多列: 作为虚拟表;

子查询出来的结果是多行多列: 例如查询入职日期是’2011-11-11’之后的员工信息, 结果如下

sql多表查询语句,MySql,sql,数据库,java

多行多列语法如下:

SELECT 字段列表 FROM (子查询) WHERE 条件;

演示: 查询入职日期是’2011-11-11’之后的员工信息和部门信息文章来源地址https://www.toymoban.com/news/detail-795295.html

SELECT * FROM (SELECT * FROM emp WHERE join_date > '2011-11-11') t1, dept WHERE t1.dep_id = dept.did;

到了这里,关于SQL语句 - 多表查询使用详细介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL基础篇补充 | 多表查询中使用SQL99实现7种JOIN操作、SQL99语法新特性

    目录 一:多表查询中使用SQL99实现7种JOIN操作  二:SQL99语法新特性 1. 自然连接Natural 2. USING连接 在多表查询中,除了遇到最多的内连接、左外连接和右外连接,还有其它的连接方式;接下来就聊聊其它的连接方式,如下图:  ​​​​​​ 并且在正式讲解之前,需要先了解

    2024年02月03日
    浏览(18)
  • [SQL Server]数据库入门之多表查询

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(17)
  • 数据库系统头歌实验二 SQL的多表查询

    第一关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S、J表) 工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图

    2024年02月07日
    浏览(23)
  • 数据库作业-sql语句查询

    建表的插入数据的表 数据库作业-sql建表和插入数据_快乐的xiao何的博客-CSDN博客 create table supplier( supplierno char(6) primary key, suppliername nvarchar(10), address nvarchar(20), number char(11) )create table category( categoryno char(5) primary key, categoryname varchar(20), descriptions text... https://blog.csdn.net/m0_539670

    2023年04月23日
    浏览(22)
  • WordPress必备数据库SQL查询语句整理

    最近明月给博客和主站都部署了SSL证书,彻彻底底的加入了HTTPS站点行列。这个期间也用到了SQL查询语句来批量的对内链的HTTP前缀做替换,就感觉掌握一些SQL方面的语句还是非常有必要的,这不在【俄语译客】博客上就发现了几条比较实用的,适合 WordPress 实用的SQL语句。于

    2024年02月01日
    浏览(38)
  • 数据库学习笔记-----SQL查询语句和代码演示

    SQL不区分大小写,本文是邹兆年老师的课件和课堂的部分内容总结,部分比较细的内容请看课件 Db笔记(1).pdf 数值型: 整型:INT/SMALLINT/BIGINT        4个字节/两个字节/八个字节 浮点型:NUMERIC/DECIMAL(p,s):定点数,p位有效数字,小数点后s位                               

    2023年04月12日
    浏览(37)
  • MyBatis(多表查询,动态SQL的使用)

    目录 多表查询  查询文章详情 查询一个用户底下的所有文章 动态SQL的使用 if 标签 trim 标签  where 标签 set 标签 foreach 标签 现在有俩张表,一张是 文章表 ,一张是 用户表 .如下: 我们现在想查询得到一张表,表里面的内容和文章表大多一致,只是要 在文章表的基础上添加用户表中

    2024年02月10日
    浏览(15)
  • 【SQL】MySQL的查询语句

    MySQL是一种广泛使用的关系型数据库管理系统,它被广泛地应用于各种应用程序和网站。学会使用MySQL的查询语句可以帮助我们更好地管理和分析数据,从而更好地利用数据库中的信息。在本篇博客中,我们将深入学习MySQL的查询语句,包括 SELECT 语句、 WHERE 子句、 JOIN 语句等

    2024年02月06日
    浏览(24)
  • Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入

    要从MySQL中的表格中选择数据,请使用\\\"SELECT\\\"语句: 示例选择\\\"customers\\\"表格中的所有记录,并显示结果: 注意 :我们使用 fetchall() 方法,该方法从上次执行的语句中获取所有行。 要仅选择表格中的某些列,请使用\\\"SELECT\\\"语句,后跟列名: 示例仅选择name和address列: 如果您只对

    2024年02月05日
    浏览(40)
  • [MySQL]不允许你不会SQL语句之查询语句

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包