Notes 操作数据-DML语句

MySQLDML操作教程:插入、删除、修改及查询详解,
本文详细介绍了MySQL中的DML语句,包括如何使用INSERT插入数据(单值、多值、指定字段和省略主键),DELETE删除数据(全表和有条件),UPDATE修改数据,以及SELECT查询语句的完整语法、分组、排序、分页和聚合函数的应用。

操作数据-DML语句

使用命令窗口登录数据库

显示登陆 mysql -u用户名 -proot密码

隐士登录 mysql -u 用户名 -p

添加数据

语法

insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); 
几种添加形式
​
INSERT INTO student(`id`,`name`,`birthday`) VALUES (1,'李四1','2018-11-11');
​
-- 添加数据 一一对应
insert INTO emp3 ( id, NAME, sex, job, salary )VALUES ( NULL, 'rose', "女", '测试', 4000 );
​
-- 添加数据 省略主键
insert INTO emp3 ( NAME, sex, job, salary )VALUES ( 'yiyi', "女", 'php', 24000 );
​
-- 添加数据 指定字段
insert INTO emp3 ( NAME, sex, salary )VALUES ( 'yiyan', "女", 90000 );
​
-- 添加数据 省略字段,字段全写
insert into emp3 values( NULL, 'tom', "男", '抓老jerry', 1000);
​
-- 批量添加
INSERT INTO stu1(id,name,birthday) VALUES
(1,'李四1','2020-11-11'),
(2,'李四2','2020-11-11'),
(3,'李四3','2020-11-11'),
(4,'李四4','2020-11-11');

注意

除了数字类型,其他都需要用引号引起来 (单双引号都可以) ,建议使用单引号

删除数据

语法

delete from 表名 [where 条件]  

注意事项

==如果不加条件,则删除表中所有记录。==

delete from student; -- 删除所有的记录

==如果要删除所有记录==

delete from 表名;      -- 不推荐使用。有多少条记录就会执行多少次删除操作
truncate table 表名;   -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表

修改数据

语法

update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

注意事项

如果不加任何条件,则会将表中所有记录全部修改。

DQL语句

查询完整语法

select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段
having
    分组之后的条件
order by
    排序
limit
    分页限定

注意

在MySQL中,以下是查询语句中各个关键字的执行顺序:

  1. FROM:指定要从哪个表中检索数据。

  2. WHERE:使用条件来筛选需要满足的行。

  3. GROUP BY:将结果集按指定的列进行分组。

  4. HAVING:使用条件来筛选分组后的结果。

  5. SELECT:选择要检索的列。

  6. ORDER BY:按指定的列进行排序。

  7. LIMIT:设置检索结果的行数限制。

请注意,这只是查询语句中关键字的执行顺序的一般规则。 如果在实际中碰到特殊情况,可能不会按照此顺序执行

select特点

  • * select 可以查询 表中的字段 表达式  常量值  函数
    * 查询出的结果是一个虚拟表 不影响实际表中的数据

简单查询

查询所有记录

语法:
    SELECT * FROM 表名;

查询单个或多个记录

-- 查看表中学生对应的数学成绩
select name,math from stu;

条件查询

-- 查看jack的所有成绩
select * from stu where name = 'jack'

对查询后的数据进行改动,并不会队员表格数据有影响

-- 给所有学生数据成绩加10分
select id , name , math + 10 from stu;

去重复

语法:
    对单一项去重
    select distinct 字段名1,FROM 表名;
    
    对多项去重
    语法:
    select distinct 字段名1,字段名2... FROM 表名;
    注意
    必须保证去重的多项是完全一样的才能进行去重

Ifnull

ifnull(表达式1,表达式2)

ifnull(参数1,参数2) 
​
如果参数1有值,就走参数1 ,如果参数1为null,就走参数2
SELECT name, chinese + ifnull(english,0) + math FROM stu;

为什么使用ifnull,因为 null参与运算结果一定为null

别名

可以是列别名 也可以是表别名

列别名
select id as '学号' from stu;
表别名
select s.id ,s.name ,s.chinese from stu s;

注意

在起别别名时注意

​
​
在MySQL查询语句中,给列名起别名时,根据以下情况需要考虑是否加引号:
​
情况一:列名不包含特殊字符或关键字时,不需要加引号。例如,给列名"age"起别名为"Age",不需要加引号:
SELECT age AS Age FROM table_name;
```
​
情况二:列名包含特殊字符或关键字时,需要加引号来区分别名和特殊字符。特殊字符可能包括空格、逗号、点号等。例如,给列名"first name"起别名为"First Name",需要加引号:
```
SELECT `first name` AS `First Name` FROM table_name;
```
​
情况三:列名大小写敏感时,需要加引号来确保别名的大小写与原始列名一致。例如,给列名"username"起别名为"UserName",需要加引号:
```
SELECT `username` AS `UserName` FROM table_name;
```
​
总结起来,一般来说,为了避免歧义和错误,建议给列名起别名时都加上引号,尤其是当列名包含特殊字符、关键字或大小写敏感时。
​

使用别名注意

在使用列名别名时,不需要在别名周围加引号。别名只是为了提供一个更友好、易读或易记的名称,它们不需要像列名一样在使用时加上引号。

条件查询

运算符

运算符说明
> 、< 、<= 、>= 、= 、<> !=<>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
BETWEEN...AND在一个范围之内,小的范围在前 大的在外面
IN( 集合)集合表示多个值,使用逗号分隔
IS NULL 不为空 is not null查询某一列为 NULL 的值,注:不能写=NULL
LIKE模糊查询 占位符: _:单个任意字符 %:多个任意字符
AND 或 &&与,SQL 中建议使用前者,后者并不通用。
OR 或 ||
NOT 或 !

DQL高级查询

排序查询

语法

SELECT 字段名 FROM 表名 [WHERE条件] ORDER BY 字段名 [ASC|DESC];

ASC: 升序,默认值

DESC: 降序

注意事项

如果有多个排序条件的话,后面的排序要在前面的基础上进行排序

聚合(集)函数

函数sql语法

SELECT 聚合函数(列名) FROM 表名;

常见聚合函数

聚合函数说明
count(*) | count(主键)计算表中的总记录数
max计算最大值
min计算最小值
sum计算和
avg计算平均值

分组查询

语法

SELECT 字段 1,字段 2... FROM 表名 [where条件] GROUP BY 分组字段 [HAVING 条件] [order by];

  • ==注意事项==

    • 分组之后查询的字段:分组字段、聚合函数

    • wherehaving的区别?

      • where 在分组之前进行过滤。having在分组之后进行过滤。

      • where 后不可以跟聚合函数,having可以进行聚合函数。

      • having 不能脱离 group by ,如果脱离group by 不能直接使用,一般与group by 一块使用

      • 换句话说,WHERE子句用于过滤行,而HAVING子句用于过滤组

    • where: 操作的数据源: 原始表

    • having: 操作的数据源: 结果集

分页查询

语法

SELECT * 字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];

limit语法格式

LIMIT offset,length;
  • offset:起始行数,从 0 开始计数,如果省略,默认就是 0

  • length:显示的条数

计算公式

开始的索引 = (当前的页码 - 1) * 每页显示的条数

# 题目重述 根据提供的数据库定义文件 `student_course.txt`,在 SQLyog 中编写完整的 SQL 语句,用于创建数据库、表结构及插入初始数据--- # 详解 该文件是一个 MySQL 数据库的建表与数据初始化脚本,已包含完整的 DDL 和 DML 语句。可直接在 SQLyog 中运行以下整合后的完整 SQL 脚本: ```sql -- 设置字符集和SQL模式 /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- 创建数据库 CREATE DATABASE /*!32312 IF NOT EXISTS*/`student_course` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; -- 使用数据库 USE `student_course`; -- 删除旧表(如果存在) DROP TABLE IF EXISTS `course`; DROP TABLE IF EXISTS `sc`; DROP TABLE IF EXISTS `student`; -- 创建 course 表 CREATE TABLE `course` ( `Cno` int NOT NULL, `Cname` char(40) DEFAULT NULL, `Cpno` int DEFAULT NULL, `Ccredit` smallint DEFAULT NULL, PRIMARY KEY (`Cno`), KEY `Cpno` (`Cpno`), CONSTRAINT `course_ibfk_1` FOREIGN KEY (`Cpno`) REFERENCES `course` (`Cno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- 插入 course 数据 INSERT INTO `course`(`Cno`,`Cname`,`Cpno`,`Ccredit`) VALUES (1,'数据库',5,4), (2,'数学',NULL,2), (3,'信息系统',1,4), (4,'操作系统',6,3), (5,'数据结构',7,4), (6,'数据处理',NULL,2), (7,'PASCAL语言',6,4), (8,'数据_课程',NULL,NULL); -- 创建 sc 表 CREATE TABLE `sc` ( `Sno` char(9) NOT NULL, `Cno` int NOT NULL, `Grade` smallint DEFAULT NULL, PRIMARY KEY (`Sno`,`Cno`), KEY `Cno` (`Cno`), CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`), CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- 插入 sc 数据 INSERT INTO `sc`(`Sno`,`Cno`,`Grade`) VALUES ('201215121',1,92), ('201215121',2,85), ('201215121',3,88), ('201215122',1,92), ('201215122',2,90), ('201215122',3,80), ('201215123',1,80), ('201215123',2,70), ('201215125',1,80), ('201215125',2,90), ('201215125',3,NULL), ('201215125',4,59), ('201215125',5,45), ('201215125',6,30); -- 创建 student 表 CREATE TABLE `student` ( `Sno` char(9) NOT NULL, `Sname` char(20) DEFAULT NULL, `Ssex` char(2) DEFAULT NULL, `Sage` smallint DEFAULT NULL, `Sdept` char(20) DEFAULT NULL, PRIMARY KEY (`Sno`), UNIQUE KEY `Sname` (`Sname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- 插入 student 数据 INSERT INTO `student`(`Sno`,`Sname`,`Ssex`,`Sage`,`Sdept`) VALUES ('201215121','李勇','男',20,'CS'), ('201215122','刘晨','女',19,'CS'), ('201215123','王敏','女',18,'MA'), ('201215125','张立','男',19,'IS'), ('201215126','未分专业',NULL,NULL,NULL), ('201215127','波波','男',20,'MBA'), ('201215128','刘阳','女',18,'CS'), ('201215129','欧阳振华','男',22,'IS'); -- 恢复原始设置 /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; ``` > ✅ 将以上 SQL 脚本复制到 SQLyog 的查询窗口中执行即可完成数据库构建。 --- # 知识点 - **SQL DDL语句**:包括CREATE DATABASE、CREATE TABLE、PRIMARY KEY、FOREIGN KEY等,用于定义数据库结构。 - **SQL DML语句**:如INSERT INTO,用于向表中插入具体的数据记录。 - **字符集与SQL模式配置**:通过SET语句控制MySQL的行为兼容性和编码方式,确保脚本通用性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值