SQL语句详解四-DQL(数据查询语言-多表查询二)

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

多表查询

  • 接下来需要用到的表

    -- 创建公司数据库
    CREATE DATABASE IF NOT EXISTS company CHARACTER SET utf8;
    
    -- 使用数据库
    USE company;
    
    -- 创建部门表
    CREATE TABLE dept(
    	did INT PRIMARY KEY AUTO_INCREMENT,		-- 部门编号
    	dname VARCHAR(40)				-- 部门名称 
    );
    
    -- 向部门表插入数据
    INSERT INTO dept(dname) VALUES('开发部'),('市场部'),('财务部');
    
    -- 创建员工表
    CREATE TABLE emp(
    	eid INT PRIMARY KEY AUTO_INCREMENT,		-- 员工编号
    	ename VARCHAR(40),				-- 员工姓名
    	gender CHAR(1),					-- 性别
    	salary DOUBLE,					-- 工资
    	join_date DATE,					-- 入职日期
    	dept_id INT,					-- 部门外键
    	FOREIGN KEY (dept_id) REFERENCES dept(did)	-- 外键,关联部门表		
    );
    
    -- 插入数据
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2018-01-24',1);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2019-12-02',2);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2018-08-08',2);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2019-10-07',3);
    INSERT INTO emp(ename,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2020-03-14',1);
    
  • 查询语法

    SELECT
    	列名列表
    FROM
    	表名列表
    WHERE
    	限定条件
    
  • 注意:多表查询要 消除无用的数据


内连接查询

隐式内连接
  • 使用 where 条件消除无用数据

  • 标准格式

    SELECT
    	t1.ename,						-- 员工表的姓名
    	t1.gender,						-- 员工表的性别
    	t2.dname						-- 部门表的名称
    FROM
    	emp t1,							-- 起别名,替换表名,更加方便
    	dept t2
    WHERE
    	t1.dept_id = t2.did;			-- 员工表外键等于部门表的did键
    
  • 示例代码

    • 查询所有员工信息和对应的部门信息
    SELECT
    	* 
    FROM
    	emp e,
    	dept d
    WHERE
    	e.dept_id = d.did;
    
    • 查询员工表的名称、性别,部门表的名称
    SELECT
    	t1.ename,						-- 员工表的姓名
    	t1.gender,						-- 员工表的性别
    	t2.dname							-- 部门表的名称
    FROM
    	emp t1,							-- 起别名,替换表名,更加方便
    	dept t2
    WHERE
    	t1.dept_id = t2.did;
    
显示内连接
  • 语法

    SELECT
    	字段列表
    FROM
    	表名1
    [INNER] JOIN						-- 这里的 INNER 可以去掉的
    	表名2
    ON
    	条件;
    
  • 示例代码

    • 查询所有员工信息和对应的部门信息
    -- 方式一
    SELECT
    	*
    FROM
    	emp t1
    INNER JOIN
    	dept t2
    ON
    	t1.`dept_id` = t2.`did`;		-- 员工表部门外键等于部门表主键
    	
    -- 方式二
    SELECT
    	*
    FROM
    	emp t1
    JOIN								-- 	这里的 INNER 可以去掉的
    	dept t2
    ON
    	t1.`dept_id` = t2.`did`;		-- 员工表部门外键等于部门表主键
    
    • 查询所有员工姓名和所属部门信息
    SELECT 
    	t1.`ename` "员工姓名",
    	t2.`dname` "员工部门"
    FROM
    	emp t1
    JOIN 
    	dept t2
    ON
    	t1.`dept_id` = t2.`did`;		-- 员工表部门外键等于部门表主键
    
注意事项
  • 内连接查询
    • 明确从哪些表中查询什么数据
    • 查询的限制条件是什么
    • 我们要查询哪些字段

外连接查询

左外连接
  • 语法

    SELECT
    	字段列表
    FROM1
    LEFT [OUTER] JOIN						-- 左外连接2
    ON
    	条件;
    
  • 左外连接查询什么?

    • 查询的是左表所有数据及其交集部分
  • 代码示例

    • 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
    SELECT
    	t1.*,								-- 员工表所有信息
    	t2.`dname`							-- 部门名称
    FROM
    	emp t1
    LEFT OUTER JOIN							-- 左外连接
    	dept t2
    ON
    	t1.`dept_id`=t2.`did`;
    
    • 查询开发部员工信息
    SELECT
    	t1.*,
    	t2.`dname`
    FROM
    	emp t1
    LEFT JOIN
    	dept t2
    ON
    	t1.`dept_id`=t2.`did`
    WHERE 
    	t2.`dname`='开发部';
    
右外连接
  • 语法

    SELECT
    	字段列表
    FROM1
    RIGHT [OUTER] JOIN						-- 右外连接2
    ON
    	条件;
    
  • 右外连接查询什么?

    • 查询的是右表所有数据以及其交集部分
  • 代码示例

    • 查询所有员工信息,及部门信息,右表在前
    SELECT
    	*
    FROM
    	dept t2
    RIGHT JOIN
    	emp t1
    ON
    	t1.`dept_id`=t2.`did`;
    

子查询

  • 概述:查询中嵌套查询,称嵌套查询为子查询
子查询单行单列
  • 概述:子查询的结果可以作为条件,使用运算符(> >= < <= <>)进行判断

  • 代码示例

    • 查询员工工资小于平均工资的人
    SELECT
    	*
    FROM
    	emp
    WHERE
    	emp.`salary`<(SELECT AVG(salary) FROM emp);				-- 子查询的条件作为判断结果
    
    -- 子查询结果,单行单列的。显示 平均工资是5860
    SELECT AVG(salary) FROM emp;
    
    • 查询员工属于市场部的人
    SELECT
    	*
    FROM
    	emp
    WHERE
    	emp.`dept_id`=(SELECT dept.`did` FROM dept WHERE dept.`dname`='市场部');
    
    -- 子查询结果,单行单列,显示 2
    SELECT dept.`did` FROM dept WHERE dept.`dname`='市场部';
    

    注意:如果根据需要,发现需要使用子查询,一定要看需求中子查询结果是否是单行单列

子查询多行单列
  • 概述:子查询的结果可以作为条件,使用运算符 in 进行判断

  • 示例代码

    • 查询 财务部 和 市场部 所有的员工信息
    SELECT
    	*
    FROM
    	emp
    WHERE
    	emp.`dept_id` IN(SELECT did FROM dept WHERE dname IN('市场部','财务部'));
    	
    -- 子查询结果,多行单列
    SELECT did FROM dept WHERE dname IN('市场部','财务部');
    
子查询多行多列
  • 概述:子查询可以作为一张虚拟表参与查询(第三张表)

  • 示例代码

    • 查询员工入职日期是2018-11-11日之后的员工信息和部门信息
    SELECT
    	*
    FROM
    	dept t1,
    	(SELECT * FROM emp WHERE join_date>'2018-11-11') t2			-- 子查询多行多列
    WHERE
    	t1.did=t2.dept_id;
    
  • 注意文章来源地址https://www.toymoban.com/news/detail-803510.html

    • 多表查询的时候,需要分析,查询那几个表,条件是什么即可。

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

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

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

相关文章

  • 第八篇:SQL语法-DQL-数据查询语言

    DQL英文全称是Data QueryLanguage(数据查询语言),用来查询数据库中表的记录 查询: select DQL主要包含以下操作 基本查询 条件查询 分组查询 在select之后指定字段名,如果有多个则用逗号分隔,用于查询表中指定字段的数据 在select之后使用【 通配符* 】,用于查询 同一

    2024年02月20日
    浏览(34)
  • Mysql 数据库DQL 数据查询语言 SELECT 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询——包含DQL所有查询语句。吐血分享。

    DQL:数据查询语言; 用来对表内的数据进行查找 。Database Query Language SQL语句分为:基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询。  可以发现name字段就只剩下一个张三了;   条件: 条件查询—比较运算符 比较运算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    浏览(45)
  • [JavaWeb]SQL介绍-DQL查询数据

    DQL查询基础的语法结构如下: 说明 语法 查询多个字段 SELECT 字段列表 FROM 表名; SELECT * FROM 表名; -- 查询所有数据 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名; 起别名 列名 AS 别名 (AS也可以省略) 条件查询的语法很简单但是要结合不同的条件表达式去使用 SELECT 字段列表 FRO

    2024年02月14日
    浏览(36)
  • SQL-DML、DQL查询数据

    DML主要是对数据进行 增 ( insert ) 删 ( delete ) 改 ( update )操作。 1.1 添加数据 给指定列添加数据 给全部列添加数据 批量添加数据 1.2 修改数据 修改表数据 注意: 修改语句中如果不加条件, 则将所有数据都修改 ! 像上面的语句中的中括号,表示在写sql语句中可以省略

    2024年02月08日
    浏览(72)
  • SQL查询数据之多表(关联)查询

      数据表: 关联查询主要分为:(inner join)交叉关联、(left join)左关联、(right join)右关联 (inner join)交叉关联: 定义:(inner join)交叉关联只返回两个表联结相等的字段的行 语法:select * from 表1 inner join 表2 on 表1.字段号=表2.字段号 比如我要查学生表和成绩表的交叉

    2023年04月08日
    浏览(29)
  • 学习笔记-数据查询语言DQL

    1.基本语法 2.数据准备 3.简单查询 4.条件查询 (1)比较查询 (2).范围查询 (3).逻辑查询 (4).模糊查询 (5).非空查询 5.排序查询 ASC 升序 (默认) DESC 降序 6.聚合查询 7.分组查询 having与where的区别: 1).having是在分组后对数据进行过滤,where是在分组前对数据进行过滤 2).having后面可以使用分

    2024年02月02日
    浏览(51)
  • MySQL数据库基础(十):DQL数据查询语言

    文章目录 DQL数据查询语言 一、数据集准备 二、select查询 三、简单查询 四、条件查询 1、比较查询 2、范围查询 3、逻辑查询 4、模糊查询 5、非空查询 五、排序查询 六、聚合查询 七、分组查询与having子句 1、分组查询介绍 2、group by的使用 3、group by + 聚合函数的使用 4、gro

    2024年02月21日
    浏览(33)
  • 【MySQL】数据库的查询语言DQL

    目录 前言: 一.基本查询 1.1查询多个字段 1.2设置别名 1.3去除字段中重复的值 二.条件查询 2.1条件的种类 2.1.1比较运算符 2.1.2逻辑运算符 三.结尾   在前面讲完了如何增删改数据表中的记录后,那么如何使用这些数据就成了另一个重点。   当我们浏览网站的时候,商品的各种

    2024年02月08日
    浏览(32)
  • MySQL多表查询 子查询效率(DQL语句)

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一) 多对多 一对一 一对多 部门与员工的关系:一个部门对应多个员工,一

    2023年04月08日
    浏览(39)
  • [SQL Server]数据库入门之多表查询

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

    2024年02月08日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包