首页 > 其他分享 >DML语句

DML语句

时间:2024-06-13 13:33:33浏览次数:24  
标签:语句 name DML 查询 VALUES student id SELECT

DML语句

DML:

DML:针对数据行增删查改的语言,由于查询的SQL语句较多,所以查询语句又分出来叫做DQL。

 
 

主键:

每张表有且只有一个主键
 
主键:主键上的数据不能重复且不能为null,主键上的数据相当于该数据行的唯一标识。
 
PRIMARY KEY -----> 主键

auto_increment ----> 自动增长

# PRIMARY KEY - 主键
# auto_increment - 自动增长
CREATE TABLE student(
	id INT(3) PRIMARY KEY auto_increment,
	name VARCHAR(32),
	sex VARCHAR(32),
	age INT(3),
	salary FLOAT(8,2),
	course VARCHAR(32)
)

 
 

添加数据:

# 方式一
INSERT INTO student VALUES(1,'小明','男',23,10000,'Java');

 

# 方式二
INSERT INTO student VALUES(1,'小明','男',23,10000,'Java'),(2,'小黑','男',20,12000,'Java');

 

# 方式三
INSERT INTO student(name,sex,age,salary,course) VALUES('小明','男',23,10000,'Java');

 

 

删除数据:

清空表数据 :

#方式一:清空数据后,再次添加,id会从1开始。
TRUNCATE student;

 

#方式二:清空数据后,再次添加,id会继续递增。
DELETE FROM student;

注意:清空数据推荐使用第二种方式,因为删除的数据如果恢复后,id不会冲突。

 

单条件删除:

DELETE FROM student WHERE id=5;
DELETE FROM student WHERE salary<=5000;

 

多条件删除:

OR ---->或

AND ---->与

DELETE FROM student WHERE sex='女' OR course='Python';

 

DELETE FROM student WHERE sex='女' AND course='Java';

 

DELETE FROM student WHERE course IN('Python','HTML');

 
 

修改数据:

修改所有数据:

# 修改所有数据
UPDATE student SET salary=10000;

 
 

单条件修改:

# 单条件修改
UPDATE student SET salary = 20000 WHERE id=3;

 

# 修改多个数据
UPDATE student SET age=21,salary=50000 WHERE id=3;

 
 

多条件修改:

# 多条件修改
UPDATE student SET salary=30000 WHERE sex='女' OR course='Python';

 

UPDATE student SET salary=40000 WHERE sex='女' AND course='Java';

 

UPDATE student SET salary=10000 WHERE course IN('Python','HTML');

 

查询数据(DQL):

# 查询所有字段
SELECT * FROM student;

 

查询指定字段:

# 查询指定字段
SELECT name,sex,age FROM student;

 

# 查询指定字段 + 别名
SELECT name AS '姓名',sex AS '性别',age AS '年龄' FROM student;

 
 

去重查询:

# 去重查询
# 查询学科
SELECT DISTINCT course FROM student;

 
 

单条件查询:

# 单条件查询
SELECT * FROM student WHERE id=3;

 

多条件查询:

# 多条件查询
SELECT * FROM student WHERE sex='女' OR course='Python';

 

SELECT * FROM student WHERE sex='女' AND course='Java';

 

SELECT * FROM student WHERE course IN('Java','Python');

 

模糊查询:

%表示没有或多个字符。

_ 代表一位字符。

# 需求1:查询出姓名中带'华'字的数据
SELECT * FROM student WHERE name LIKE '%华%';

 

# 需求2:查询出姓名中第四个带'华'字的数据
SELECT * FROM student WHERE name LIKE '___华';

 

排序:

ORDER BY表示排序。

ASC表示升序,DESC表示降序

 

单字段排序:
# 需求1:按照年龄排序 - 升序
SELECT * FROM student ORDER BY age ASC;

 

# 需求2:按照工资排序 - 降序
SELECT * FROM student ORDER BY salary DESC;

 

多字段排序:
# 需求:按照年龄排升序,年龄一致按照工资排降序
SELECT * FROM student ORDER BY age ASC,salary DESC;

 

限制查询:

# 需求:查询出工资最高的学生信息
SELECT * FROM student ORDER BY salary DESC LIMIT 1;

 

分页查询:

# SELECT * FROM student LIMIT 偏移量,数据条数;
SELECT * FROM student LIMIT 0,5;# 第1页
SELECT * FROM student LIMIT 5,5;# 第2页
SELECT * FROM student LIMIT 10,5;# 第3页

分页公式:SELECT * FROM student LIMIT (当前页-1)*数据条数,数据条数;

 

聚合查询:

函数作用
sum求和
count统计总数
max最大值
min最小值
avg平均值
# 需求1:获取学生的总工资
SELECT SUM(salary) FROM student;

 

# 需求2:获取学生的平均工资(保留2位小数)
SELECT FORMAT(AVG(salary),2) FROM student;

 

# 需求3:获取学生的最高工资
SELECT MAX(salary) FROM student;

 

# 需求4:获取学生的最低工资
SELECT MIN(salary) FROM student;

 

# 需求5:获取学生个数
#id是主键,不为空。count()不能统计为空(null)的行。
SELECT COUNT(id) FROM student;

count(*):是表示所有的行。

count(1):计算一共有多少符合条件的行,不会忽略null值。

count(列名):查询列名那一列的,字段为null不统计。

 

子查询:

# 需求:查询出工资最高的学生信息
SELECT * FROM student WHERE salary = (SELECT MAX(salary) FROM student);

 

分组查询:

# 需求1:查询出各个学科的平均工资
SELECT course,AVG(salary) FROM student GROUP BY course;

 

# 需求2:查询出平均工资大于10000的学科
SELECT course,AVG(salary) FROM student GROUP BY course HAVING AVG(salary)>10000;

 

多表联合查询:

多表查询分为:

  1. 一对一
  2. 一对多
  3. 多对多

 

一对多:

创建场景:
# 创建老师表,并插入数据
CREATE TABLE teacher(
	id INT(3) PRIMARY KEY auto_increment,
	name VARCHAR(32)
)
INSERT INTO teacher(name) VALUES('何老师');
INSERT INTO teacher(name) VALUES('苍老师');
INSERT INTO teacher(name) VALUES('多老师');

 

# 创建学生表,并插入数据
CREATE TABLE student(
	id INT(3) PRIMARY KEY auto_increment,
	name VARCHAR(32),
	t_id INT(3)
)
INSERT INTO student(name,t_id) VALUES('小明',1);
INSERT INTO student(name,t_id) VALUES('小黑',1);
INSERT INTO student(name,t_id) VALUES('小白',1);
INSERT INTO student(name,t_id) VALUES('小林',2);
INSERT INTO student(name,t_id) VALUES('小灰',2);
INSERT INTO student(name) VALUES('小蓝');

 

内链接 :

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据

# 方式一
SELECT s.name,t.name FROM student s,teacher t WHERE s.t_id=t.id;

 

# 方式二
SELECT s.name AS '学生姓名',t.name AS '老师姓名' FROM student s INNER JOIN teacher t ON s.t_id=t.id;

 

外连接:

外连接不仅包含符合连接条件的行,还包含左表(左连接时)、右表(右连接时)或两个边接表(全外连接)中的所有数据行

 

左连接:

左连接:针对于左边表去查询,会展示左边表中的所有数据。

LEFT JOIN

SELECT s.name,t.name FROM student s LEFT JOIN teacher t ON s.t_id=t.id;

 

右链接:

右链接:针对于右边表去查询,会展示右边表中的所有数据。

RIGHT JOIN

SELECT s.name,t.name FROM student s RIGHT JOIN teacher t ON s.t_id=t.id;

 

全连接:

全连接:多张表联合查询,多张表没有联系的数据都查询出来。

注意:MySQL没有全连接的SQL语句,实现全连接的思想就是合并查询结果 + 去重。

# 合并查询结果
SELECT s.name,t.name FROM student s LEFT JOIN teacher t ON s.t_id=t.id
UNION ALL
SELECT s.name,t.name FROM student s RIGHT JOIN teacher t ON s.t_id=t.id;

 

# 合并查询结果 + 去重
SELECT s.name,t.name FROM student s LEFT JOIN teacher t ON s.t_id=t.id
UNION
SELECT s.name,t.name FROM student s RIGHT JOIN teacher t ON s.t_id=t.id;

 

多对多:

创建学生表,并插入数据。

# 创建学生表,并插入数据
CREATE TABLE student(
	id INT(3) PRIMARY KEY auto_increment,
	name VARCHAR(32)
)
INSERT INTO student(name) VALUES('小明');
INSERT INTO student(name) VALUES('小黑');
INSERT INTO student(name) VALUES('小红');

 

创建学科表,并插入数据

# 创建学科表,并插入数据
CREATE TABLE course(
	id INT(3) PRIMARY KEY auto_increment,
	name VARCHAR(32)
)
INSERT INTO course(name) VALUES('语文');
INSERT INTO course(name) VALUES('数学');
INSERT INTO course(name) VALUES('英语');

 

创建成绩表,并插入数据

# 创建成绩表,并插入数据
CREATE TABLE scores(
	id INT(3) PRIMARY KEY auto_increment,
	s_id INT(3),
	c_id INT(3),
	score FLOAT(4,1)
)
INSERT INTO scores(s_id,c_id,score) VALUES(1,1,90);
INSERT INTO scores(s_id,c_id,score) VALUES(1,2,91);
INSERT INTO scores(s_id,c_id,score) VALUES(1,3,92);
INSERT INTO scores(s_id,c_id,score) VALUES(2,1,93);
INSERT INTO scores(s_id,c_id,score) VALUES(2,2,94);
INSERT INTO scores(s_id,c_id,score) VALUES(2,3,95);
INSERT INTO scores(s_id,c_id,score) VALUES(3,1,85);
INSERT INTO scores(s_id,c_id,score) VALUES(3,2,87);
INSERT INTO scores(s_id,c_id,score) VALUES(3,3,86);

 

需求1:查询学生对应的学科成绩(学生姓名,学科名,成绩)。

SELECT stu.name,cou.name,sco.score FROM student stu INNER JOIN course cou INNER JOIN scores sco WHERE sco.s_id=stu.id AND sco.c_id=cou.id;

 

需求2:查询出每个学生的平均成绩(学生姓名,平均分)。

SELECT stu.name,AVG(sco.score) FROM scores sco INNER JOIN student stu ON sco.s_id=stu.id GROUP BY sco.s_id;

 

需求3:查询出每个学生的最好成绩的学科(学生姓名,学科目,成绩)。

SELECT stu.name,cou.name,sco.score FROM scores sco INNER JOIN 
(SELECT sco.s_id,max(sco.score) AS 'maxScore' FROM scores sco GROUP BY sco.s_id)
xx INNER JOIN student stu INNER JOIN course cou ON sco.score =xx.maxScore AND sco.s_id=xx.s_id AND sco.s_id=stu.id AND sco.c_id = cou.id;

标签:语句,name,DML,查询,VALUES,student,id,SELECT
From: https://blog.csdn.net/m0_57463864/article/details/139595496

相关文章

  • 直接用sql语句来查询和分析excel表,不需要导数据,提供了sql语句自动生成,不会sql也能用
         用sql语句来查询excel表,我们需要把excel表格导入到数据库中,然后用数据库的管理工具写sql语句来进行查询。方法有很多,我们不一一描述。     今天我们要说的是直接用sql语句来查询和分析excel表。为什么有这么一个想法呢?程序员或者会sql语句的人,不太愿......
  • golang执行语句操作与map结构体变量调用函数
    本文记录利用golang调用exe文件。需要用到包os/exec,本文重点介绍如何利用golang执行带参数的可执行文件以及踩过的坑。首先c:=exec.Command(cmd)语句不会执行cmd命令,而是做好要执行的准备,当接下来调用c.Run()时才会执行cmd命令,注意到此时是会阻塞进程的,等待执行完成才会进行下一......
  • Navicat的使用、PDManer、PyMySQL(连接数据库、执行SQL语句、结果获取、插入数据、删
    【一】Navicat的使用【1】连接数据库打开Navicat,找到连接选项输入连接参数测试参数【2】创建数据库新建数据库输入数据库参数新建表并设置主键修改表字段【3】导出SQL文件【4】备份数据库【5】视图展示会展示当前数据库下的所有表模型......
  • JavaScript常用的流程控制语句
    在JavaScript中,有以下几种常用的流程控制语句:if...else:当if条件为假时,可以使用else语句执行另一段代码。if(condition){//条件为真时执行的代码}else{//条件为假时执行的代码}if...elseif...else:可以链式使用多个if和elseif来根据多个条件执行不......
  • 程序猿大战Python——流程控制——其他控制语句
    for循环==目标:==掌握for循环的使用。与while循环功能类似,for语句也能完成反复多次的执行。for语法:for临时变量in序列: 满足条件时,执行的代码1 满足条件时,执行的代码2 ……[else:当for循环正常执行结束后,执行代码]说明:序列指的是能被循环处理......
  • [20240607]PL/SQL中sql语句的注解.txt
    [20240607]PL/SQL中sql语句的注解.txt--//别人测试遇到的问题,重复测试说明问题.1.环境:SCOTT@test01p>@verBANNER                                                                           ......
  • C++ try-catch 语句的注意事项
    在C++中,try-catch 语句用于处理异常。当在 try 块中的代码抛出一个异常时,程序会立即跳出 try 块,并查找与之匹配的 catch 块来执行。以下是使用 try-catch 语句时需要注意的一些事项:异常类型匹配:catch 块后面必须跟上一个异常类型(或者是省略类型以捕获所有类型的......
  • Tdengine的时序数据库简介、单机部署、操作语句及java应用
    Tdengine的时序数据库简介、单机部署、操作语句及java应用   本文介绍了Tdengine的功能特点、应用场景、超级表和子表等概念,讲述了Tdengine2.6.0.34的单机部署,并介绍了taos数据库的常见使用方法及特色窗口查询方法,最后介绍了在java中的应用。一、tdengine简要介绍及应......
  • Python控制语句
    程序设计中的控制语句有3种,即顺序、分支和循环语句。Python程序通过控制语句来管理程序流,完成一定的任务。程序流是由若干个语句组成,语句既可以是一条单一的语句,也可以是复合语句(即语句中嵌套语句),Python中的控制语句如下:分支语句:if循环语句:while和for跳转语句:break、continue......
  • JavaScript-if多分支语句和switch的区别
    学习目标:掌握if多分支语句和switch的区别学习内容:if多分支语句和switch的区别if多分支语句和switch的区别:共同点1.都能实现多分支选择,多选一。2.大部分情况下可以互换。区别switch..case语句if...else...语句通常处理case为比较确定值的情况更加灵活,通常用于范......