当前位置: 首页 > news >正文

MySQL的使用

在MySQL中,DDL(数据定义语言)、DML(数据操作语言)和DQL(数据查询语言)是三类常用的SQL语言,每类语言有不同的功能:

1. DDL(Data Definition Language - 数据定义语言)

DDL 用于定义和修改数据库中的结构(如数据库、表、索引等)。常见的DDL命令包括 CREATEALTERDROP

  • 创建数据库

    CREATE DATABASE my_database;
    
  • 创建表

    CREATE TABLE my_table (id INT PRIMARY KEY,name VARCHAR(50),age INT
    );
    
  • 修改表

    ALTER TABLE my_table ADD COLUMN email VARCHAR(100);
    
  • 删除表

    DROP TABLE my_table;
    

2. DML(Data Manipulation Language - 数据操作语言)

DML 用于对表中的数据进行增、删、改的操作。常见的DML命令有 INSERTUPDATEDELETE

  • 插入数据

    INSERT INTO my_table (id, name, age) VALUES (1, 'Alice', 25);
    
  • 更新数据

    UPDATE my_table SET age = 26 WHERE name = 'Alice';
    
  • 删除数据

    DELETE FROM my_table WHERE id = 1;
    

3. DQL(Data Query Language - 数据查询语言)

DQL 用于查询数据,主要是 SELECT 语句。可以通过 WHEREGROUP BYORDER BY 等子句来精确地查询所需的数据。

  • 查询所有数据

    SELECT * FROM my_table;
    
  • 条件查询

    SELECT name, age FROM my_table WHERE age > 20;
    
  • 分组查询

    SELECT age, COUNT(*) FROM my_table GROUP BY age;
    
  • 排序查询

    SELECT * FROM my_table ORDER BY age DESC;
    
  • 分页查询

    SELECT * FROM my_table LIMIT 10 OFFSET 0;
    
  • DDL 主要用于定义和修改表结构。

  • DML 主要用于操作表中的数据(增、改、删)。

  • DQL 主要用于查询数据,并可以结合各种子句精确查询。

MySQL 多表查询

MySQL 多表查询是关系型数据库中一个非常重要的功能,它允许开发者从多个相关表中获取数据。MySQL 提供了多种方式来进行多表查询,常见的有 连接查询(JOIN)子查询(Subquery)。掌握这些技巧是数据库设计与查询优化中的核心技能。

以下是 MySQL 多表查询的总结,涵盖了常用的连接类型、子查询以及实际应用中的查询示例。


一、连接查询(JOIN)

1.1 INNER JOIN(内连接)

内连接是最常见的连接查询,它只返回两个表中匹配条件的数据。如果某一行在其中一个表中不存在对应的匹配行,那么该行将不会出现在结果集中。

语法

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

示例
假设有两个表:

  • orders 表(存储订单信息)
  • customers 表(存储客户信息)

我们希望查询每个订单对应的客户信息:

SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

此查询返回订单和客户的匹配结果,仅显示那些在 orders 表中有订单,并且在 customers 表中有对应客户的记录。


1.2 LEFT JOIN(左连接)

左连接返回左表中的所有行,即使右表中没有匹配的数据,右表中的数据为空(NULL)。

语法

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

示例
我们希望查询所有订单,包括那些没有匹配到客户的订单:

SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

此查询会显示所有订单,即使某些订单的客户信息缺失。


1.3 RIGHT JOIN(右连接)

右连接与左连接相反,它返回右表中的所有行,即使左表中没有匹配的数据。

语法

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

示例
我们希望查询所有客户,包括那些没有下订单的客户:

SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

此查询会显示所有客户信息,包含那些没有订单的客户。


1.4 FULL JOIN(全连接)

全连接返回两个表中的所有行,不论是否匹配。MySQL 本身不直接支持 FULL JOIN,但可以通过使用 UNION 结合 LEFT JOINRIGHT JOIN 来实现全连接。

语法

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column
UNION
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

示例
返回所有客户和订单,不论是否有匹配关系:

SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
UNION
SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

1.5 CROSS JOIN(交叉连接)

交叉连接会返回两个表的笛卡尔积,即每一个表中的行都和另一个表中的每一行进行组合,不考虑是否有匹配条件。

语法

SELECT columns
FROM table1
CROSS JOIN table2;

示例
查询所有产品与所有订单的组合:

SELECT products.product_name, orders.order_id
FROM products
CROSS JOIN orders;

此查询返回所有产品和订单的每一种组合。


二、子查询(Subquery)

2.1 单行子查询

单行子查询返回一行数据,常用于条件判断。

语法

SELECT columns
FROM table
WHERE column = (SELECT value FROM other_table WHERE condition);

示例
查询下单次数最多的客户信息:

SELECT * 
FROM customers 
WHERE customer_id = (SELECT customer_id FROM orders GROUP BY customer_id ORDER BY COUNT(*) DESC LIMIT 1);

2.2 多行子查询

多行子查询返回多行数据,常与 INANYALL 等关键字一起使用。

语法

SELECT columns
FROM table
WHERE column IN (SELECT column FROM other_table WHERE condition);

示例
查询下过订单的所有客户信息:

SELECT * 
FROM customers 
WHERE customer_id IN (SELECT customer_id FROM orders);

2.3 相关子查询

相关子查询是指子查询依赖于外部查询的值。与普通子查询不同,它在外部查询的每一行执行一次。

语法

SELECT columns
FROM table1 AS t1
WHERE column = (SELECT value FROM table2 AS t2 WHERE t1.column = t2.column);

示例
查询订单金额大于所有该客户历史订单平均金额的订单:

SELECT order_id, order_total
FROM orders AS o1
WHERE order_total > (SELECT AVG(order_total)FROM orders AS o2WHERE o1.customer_id = o2.customer_id);

三、联合查询(UNION)

UNION 用于合并两个或多个 SELECT 查询的结果。每个查询的列数和数据类型必须匹配。

语法

SELECT columns FROM table1
UNION
SELECT columns FROM table2;

示例
查询所有客户和供应商的名称(假设有 customerssuppliers 表):

SELECT customer_name AS name FROM customers
UNION
SELECT supplier_name AS name FROM suppliers;

注意

  • UNION 默认去重,可以使用 UNION ALL 显示所有结果,包括重复项。

  1. 内连接(INNER JOIN) 是最常用的多表查询方式,只返回两个表之间匹配的数据。用于查找共有信息。
  2. 左连接(LEFT JOIN)右连接(RIGHT JOIN) 用于在查询中保留一方表的所有数据,即使另一方没有匹配数据。
  3. 全连接(FULL JOIN) 可以通过 UNION 来模拟,它返回两个表中的所有数据,不论是否有匹配项。
  4. 交叉连接(CROSS JOIN) 用于生成笛卡尔积,慎用。
  5. 子查询(Subquery) 用于嵌套查询,单行子查询和多行子查询在复杂查询中非常有用。
  6. 联合查询(UNION) 合并多个查询的结果集,但需要保证各查询的列数和类型相同。

通过理解这些查询方式,开发者能够轻松地处理多表数据操作,实现复杂业务逻辑。


http://www.mrgr.cn/news/62737.html

相关文章:

  • Redis特性和应用场景以及安装
  • NavVis VLX三维激光扫描仪在市政地形测绘中的典型应用【沪敖3D】
  • vue3 ref和reactive踩坑
  • 如何在本地搭建一个three.js的开发环境
  • Qt QCheckBox、QPushButton和QRadioButton详解
  • 富格林:正确追损思维安全交易
  • 亚马逊云免费Amazon CloudFront服务
  • 基于单片机的无线气象仪系统设计(论文+源码)
  • 程序员工作七年,我踩过的那七个坑
  • 好的呼叫中心系统是什么样的
  • Postman中的API安全堡垒:全面安全性测试指南_postman安全测试
  • 命名空间是啥意思
  • 10 大开源无头浏览器推荐:自动化测试、爬虫与 RPA 的强大助手
  • SpringBoot+Shiro权限管理
  • [ 应急响应靶场实战 ] VMware 搭建win server 2012应急响应靶机 攻击者获取服务器权限上传恶意病毒 防守方人员应急响应并溯源
  • 信息管理与信息系统专业的建设与发展 ——人才培养模式探讨
  • shell基础-case
  • golang rocketmq开发
  • 谷歌seo发外链真的能提升排名吗?
  • ios上架流程
  • DBeaver24.2.3 中安装yashandb驱动
  • 淘宝API接口(item_search- 关键词搜索淘宝商品列表数据查询)
  • 基于单片机的智能家居排气扇系统设计
  • 外贸单证小技巧,Winseeing汇信外贸软件让制单事半功倍
  • Es 基础操作 增删改查
  • Spring Cloud Gateway