mysql表操作与查询功能详解

2025-06-28 17:50

本文主要是介绍mysql表操作与查询功能详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随...

01.表的操作

1.1表操作概览

mysql表操作与查询功能详解

1.2创建表

语法: 语句以;结尾。

#  []表示里面内容可选,使用时不带[]本身
CREATE TABLE [IF NOT EXISTS] table_name (
    column1 datatype [constraints],
    column2 datatype [constraints],
    ...
    [table_constraints]
) [ENGINE=storage_engine] [DEFAULT CHARSET=charset];
  • 数据类型:

    • 数值类型:INT、BIGINT、FLOAT、DOUBLE、DECIMAL(10,2)
    • 字符串类型:VARCHAR(255)、TEXT、CHAR(10)
    • 日期时间:DATE、TIME、DATETIME、TIMESTAMP
    • 其他类型
      • BOOLEAN
      • ENUM (’ opt1’,’ opt2’)只能存储定义时指定的值之一,单选
      • SET (’ opt1’,’ opt2’,’js opt3’),多选
  • 列约束:

    • NOT NULL`:该字段不能为空
    • UNIQUE:该字段值必须唯一
    • DEFAULT:设置默认值
    • AUTO_INCREMENT:自增主键(通常用于 ID 字段)
  • 表约束: 主外键

    PRIMARY KEY (列1, ...),
    FOREIGN KEY (字段名) REFERENCES 主表(列),

    创建主表: 主键时表的身份证,唯一,可由多个字段组成。

    create table myclass(
    	id int primary key,
    	name varchar(30)not null comment'班级名'
    );

    创建从表: 外键是与其他表的关系纽带。

    create table stu(
    	id int primary key,
    	name varchar(30) not nu1l comment'学生名',
        class_id int ,
    	foreign key(class_id) references myclass(id)
    	);   #插入数据过程省略

    mysql表操作与查询功能详解

创建表代码示例:

-- 1:创建数据库
CREATE DATABASE sql_stu;
-- 2:使用数据库
USE sql_stu;
-- 3:创建表
CREATE TABLE IF NOT EXISTS table_stu (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    age INT DEFAULT 18,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 使用 DESCRIBE 表名 或 SHOW CREATE TABLE 表名 查看表
DESCRIBE table_name;-- 或简写为:DESC table_name;

mysql表操作与查询功能详解

1.3修改表

语法:

ALTER TABLE 表名
    操作1,
    ...;

修改表的操作:

ALTER TABLE employees 
#添加列
ADD COLUMN 列名 数据类型 AFTER 某个列;
#修改列数据类型与重命名
MODIFY COLUMN 列名 数据类型;
CHANGE COLUMN 老列名 新列名 数据类型;
#删除列
DROP COLUMN 列名;
#添加约束
ADD PRIMARY KEY (emp_id);
---
外键?
#删约束
DROP FOREIGN KEY 外键名;
DROP PRIMARY KEY;

1.4复制表

#仅复制结构
CREATE TABLE 新表 LIKE 源表;
#复制结构+数据
CREATE TABLE 新表 AS 
SELECT * FROM 源表;
#选择复制结构+数据
CREATE TABLE 新表 AS 
SELECT 列1,列2,列3 
FROM 源表
WHERE 条件;
-- 创建表
CREATE TABLE stuinfo (
    stuid INT PRIMARY KEY,
    stuname VARCHAR(20) UNIQUE NOT NULL,
    stugender CHAR(1) DEFAULT '男',
    email VARCHAR(20) NOT NULL,
    age INT,
    majorid INT,
    CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id)
);
-- 修改表结构
ALTER TABLE stuinfo RENAME TO stuinfo1;  -- 重命名表
ALTER TABLE stuinfo1 ADD COLUMN borndate TIMESTAMP NOT NULL;  -- 添加列
ALTER TABLE stuinfo1 CHANGE COLUMN borndate birthday DATETIME;  -- 修改列名
ALTER TABLE stuinfo1 MODIFY COLUMN birthday DATE;  -- 修改数据类型
ALTER TABLE stuinfo1 DROP COLUMN age;  -- 删除列
-- 复制表
CREATE TABLE newTable LIKE stuinfo;  -- 仅复制结构
CREATE TABLE emp_copy SELECT * FROM employees;  -- 复制结构和数据

02.基本查询操作

基础结构:

SELECT [DISTINCT] 列1, 列2, ...  --选择需要显示的列
FROM 表名    				     --首先确定数据来源
[WHERE 条件]     	 		      --对原始数据进行筛选
[GROUP BY 分组列]   			 --对筛选后的数据分组
[HAVING 分组条件]   		    --对分组后的数据进行筛选
[ORDER BY 排序列 [ASC|DESC]]     --对结果进行排序
[LIMIT [偏移量,] 行数];          --限制返回结果数量

执行顺序FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT

2.1 SELECT选择列

-- 查询所有列
SELECT * FROM users;
-- 查询指定列
SELECT id, ... FROM users;
-- 列别名
SELECT id AS user_id, username AS name FROM users;编程--(AS可省略)
-- 去重查询(DISTINCT)
SELECT DISTINCT country FROM customers;
-- 连接字段 CONCAT
SELECT CONCAT(last_name, first_name) AS 姓名 FROM employees;

2.2 FROM指定表

-- 单表查询
SELECT * FROM products;
-- 多表连接查询(内连接)
SELECT * 
FROM orders
INNER JOIN users ON orders.user_id = users.id;
SELECT IFNULL(commission_pct, 0.00) AS 奖金, cojsmmission_pct
FROM employees;

2.3 WHERE条件过滤

–> 在分组前过滤行

2.3.1 基本条件表达式
/* 语法结构:
   SELECT 查询列表
   FROM 表名
   WHERE 筛选条件   */
-- 比较运算符:> < = != <> >= <=
SELECT * FROM employees WHERE salary > 12000;
-- 逻辑运算符:AND OR NOT
SELECT last_name, salary
FROM employees
WHERE salary >= 10000 AND salary <= 20000;
-- 范围查询 BETWEEN AND,或者使用 salary > 10000 AND salary < 20000
SELECT * 
FROM employees
WHERE salary BETWEEN 10000 AND 20000;
2.3.2 特殊条件查询
-- IN 查询,IN ()任意一个返回TRUE(1)
SELECT last_name, job_id
FROM employees
WHERE job_id IN ('AD_PRES', 'IT_PROG', 'PU_CLERK');
-- 是 NULL 值判断
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NULL;  -- IS NOT NULL
-- 安全等于 <=> (可判断NULL和普通值)
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct <=> NULL;
2.3.3 模糊查询 LIKE

使用% 匹配任意个字符, _ 匹配单个字符,使用 \ 转义。

-- 基本通配符:% 匹配任意个字符, _ 匹配单个字符
SELECT last_name
FROM employees
WHERE last_name LIKE '_a_%' ESCAPE 'a';  -- 第二个字符为_
-- 使用 \ 转义
...同上
WHERE last_name LIKE '_\_%';  -- 使用 \ 转义

2.4 GROUP BY分组

-- 统计每个部门的员工数
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
-- 分组后过滤(HAVING)
SELECT category, AVG(price) AS avg_price
FROM products
GROUP BY category
HAVING avg_price > 200;  -- 只返回平均价格>200的分组

2.5 ORDER BY排序

-- 基本排序
SELECT * FROM employees ORDER BY salary DESC;  --ASC 升序(默认), DESC (drop降序)
-- 多字段排序
SELECT *
FROM empChina编程loyees
ORDER BY salary DESC, employee_id ASC;
-- 按表达式和函数结果多字段排序
SELECT 
    LENGTH(last_name)  字符长度,  
    salary * 12 * (1 + IFNULL(commission_pct, 0))  年薪
FROM employees
ORDER BY 年薪 DESC, 字符长度 DESC;  -- 按年薪和字符长度排序

2.6 HAVING 分组后过滤

–> 分组后过滤组

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 6000;

2.7 LIMIT分页

-- 提取第2页,每页10条           偏移量 每页行数
 SELECT  *  FROM  products LIMIT 10  ,  10;  -- 等价于 OFFSET 10 LIMIT 10
-- 带排序的分页
SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;  -- 第3页

03. 函数

3.1 聚合函数

函数描述
SUM(expr)求和
AVG(expr)平均值
MAX(expr)最大值
MIN(expr)最小值
COUNT(expr)计数

3.2 日期函数

SQL 标准函数

mysql表操作与查询功能详解

3.3 字符串函数

语法功能描述
CHARSET(str)返回字符串的字符集
CONCAT(str1, str2, ...)连接多个字符串
INSTR(str, substr)返回子串在字符串中的位置(从1开始),未找到返回0
UCASE(str)UPPER(str)串转换为大写
LCASE(str)LOWER(str)串转换为小写
LEFT(str, length)从字符串左侧截取指定长度的子串
LENGTH(str)返回字符串的字节长度(非字符数)
REPLACE(str, from_str, to_str)替换字符串中的指定子串
STRCMP(str1, www.chinasem.cnstr2)逐字符比较两字符串大小(返回-1,0,1
SUBSTRING(str, pos, len)从指定位置截取子串(pos1开始)
TRIM(str) LTRIM(str) RTRIM(str)去除字符串前或后面空格

3.4 数学函数

mysql表操作与查询功能详解

04.复合查询

笛卡尔积: 将两个表穷举的结果

mysql表操作与查询功能详解

4.1 多表查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。

mysql表操作与查询功能详解

通过将两个表直接笛卡尔积组成一个新表,但是引入了许多无关数据,这时对其进行去除不正确数据后再筛选即可得到

显示部门号为10的部门名,员工名和工资

select ename, sal,dname from EMP, DEPT where EMP.deptno=DEPT.deptno andDEPT.deptno = 10;

4.2 自连接

自连接是指在同一张表连接查询

mysql表操作与查询功能详解

4.3 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

4.3.1 单行子查询

案例: 查询和SMITH的部门和岗位完全相同的所有雇员。下面这个案例返回了多行,视情况而定

mysql表操作与查询功能详解

4.3.2 多行子查询
  • IN/NOT IN 检查值是否在于子查询结果中
  • ANY 与子查询返回的任一值比较
  • ALL 与子查询返回的所有值比较
  • EXISTS 检查存在性

示例:

SELECT *
FROM products
WHERE (category, price) IN (SELECT category, price FROM products WHERE category = 'Electronics');

4.3.3 FROM子句子查询

-- from子查询 (返回临时表)
SELECT dep_ag.department_id, dep_ag.ag, j.grade_level
FROM (
    SELECT AVG(salary) ag, department_id
    FROM employees
    GROUP BY department_id
) AS dep_ag
INNER JOIN job_grades j ON dep_ag.ag BETWEEN j.lowest_sal AND j.highest_sal;
4.3.4 合并查询

联合查询 :

  • UNION :并集<-- 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
  • UNION ALL :该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
-- 基本联合
SELECT employee_id FROM employees WHERE salary > 15000
UNION
SELECT employee_id FROM employees WHERE commission_pct > 0.2;
-- UNION ALL (保留重复记录)
SELECT department_id FROM employees
UNION ALL
SELECT department_id FROM departments;

05. 内外连接

5.1内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。

mysql表操作与查询功能详解

语法:

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

示例:

--用前面的写法
select ename,dname from EMP, DEPT where EMp.deptno=DEPT.deptno andename='SMITH'
--用标准的内连接写法
select ename, dname from EMp inner join DEPT on EMP.deptno=DEPT.deptno andename='SMITH':

5.2 外连接

保留左侧表或者右侧表数据

mysql表操作与查询功能详解

多表内连接耶可以

到此这篇关于mysql表操作与查询的文章就介绍到这了,更多相关mysql表操作与查询内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于mysql表操作与查询功能详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155252

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input