数据库-DML+DQL

87 阅读7分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

DML 数据操作语言

对表中的数据进行增、删、改操作。

(一)插入记录

1. 指定字段的插入

语法

	INSERT INTO 表名 (字段名 1, 字段名2...,字段n) VALUES (值1, 值2...,值n)

示例

# 更换数据库,创建student表
create table student(
   id int,
   name varchar(20),
   age int,
  sex char(1),
  address varchar(100)
); 
# 向学生表中添加 id, name, age, sex数据
INSERT INTO student (id, name, age, sex) VALUES (1, '张三', 20, '男');

注意事项

值与字段必须对应,个数相同,类型相同

值的数据大小必须在字段的长度范围内 varchar()

除了数值类型外,其它的字段类型的值必须使用引号引起(建议单引号)

如果要插入空值,可以不写字段,或者插入null

2. 不指定字段的插入

所有字段全部需要维护。

语法

	INSERT INTO 表名 VALUES (值1, 值2…)

示例

	INSERT INTO student VALUES (3, '王五', 18, '男', '北京');

在这里插入图片描述

注意事项

不指定列时,相当于指定了所有列,顺序和建表时的顺序一致。

3. 蠕虫复制

在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中。

语法

	INSERT INTO 表名1 SELECT * FROM 表名2; 

示例

	# 创建student2表,student2结构和student表结构一样
	CREATE TABLE student2 LIKE student;

	# 将student表中的数据添加到student2表中
	INSERT INTO student2 SELECT * FROM student

(二)更新表记录

1. 不带条件更新

语法

	UPDATE 表名 SET 字段1=1[,字段2=2,,...,字段n=值n]

示例

	UPDATE student1 set sex='男';

说明

表中所有行的sex都会被更新为男

2. 带条件的更新

语法

	UPDATE 表名 SET 字段1=1[,字段2=2,,...,字段n=值n][where 条件]

示例

	# 将id号为2的学生性别改成女
	UPDATE student SET sex='女' WHERE id=2;

(三)删除记录

1. 带条件删除

语法

	DELETE FROM 表名 WHERE 条件

示例

	#带条件删除数据,删除id为3的记录
	DELETE FROM student WHERE id=3

在这里插入图片描述

2. 不带条件删除

语法

	DELETE FROM 表名

示例

	DELETE FROM student;

在这里插入图片描述

说明

不带条件的删除,将删除表中的全部数据。

DQL 数据查询语言

DQL语句的作用是查询数据库中的数据。查询不会对数据库中的数据进行修改,只是一种显示数据的方式。

1. 简单查询

(1)查询表中全部数据

语法

SELECT  *  FROM 表名

示例

SELECT * FROM student

语法

SELECT 字段名1, 字段名2,  ...字段n  FROM 表名
写出所有列名

示例

Select id,name,age,sex,address from student

(2)查询指定列

语法

SELECT 字段名1, 字段名2... FROM 表名

示例

# 查询student表中的name 和 age 列
SELECT NAME, age FROM student

在这里插入图片描述

(3)别名查询

在查询时,给查询的列或表起一个其他的(一般是稍短的名字,或为了防止重复)名字就叫做别名。使用别名的好处是方便查看和处理查询到的数据。

语法

SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名

示例

# 查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
SELECT NAME AS '姓名', age AS '年龄' FROM student;
# AS可以省略
SELECT NAME '姓名', age '年龄' FROM student;

在这里插入图片描述

说明

查询时给表取别名目前还看不到效果,需要到多表查询的时候才能体现出其好处。

(4)去除重复值

在查询指定列时,如果指定的列中有重复的数据,默认都会显示出来。

例如

在这里插入图片描述

可以使用distinct关键字来去除重复数据

语法

SELECT DISTINCT 字段名 FROM 表名

示例

SELECT DISTINCT name FROM student

说明

当distinct后出现了多个列时,只有当多个列的数据都重复才叫重复数据。

(5)查询结果参与运算

在查询语句中,查询的列的可以和其他值做数学运算(加、减、乘、除等)。运算结果只会影响展示,不会影响表中的数据。

语法

SELECT 列名1 + 固定值 FROM 表名
SELECT 列名1 + 列名2 FROM 表名

示例

# 在student表中添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩
# 修改student表结构,添加数学和英语成绩列
ALTER TABLE student ADD math INT;
ALTER TABLE student ADD english INT
# 查询math + english的和,并使用别名”总成绩”
SELECT math + english '总成绩' FROM student
# 查询所有列与math + english的和,并使用别名”总成绩”
SELECT *, math + english '总成绩' FROM student
# 查询姓名、年龄,将每个人的年龄增加10岁
SELECT name, age + 10 FROM student
# null值和任何值做任何运算,结果都是null
# 向student表中添加数据
insert into student values(4,'赵六',22,'男','北京',null,90)  
# 赵六缺考了数学,没有成绩。
# 查询所有列与math + english的和,并使用别名”总成绩”
SELECT *, math + english '总成绩' FROM student

2. 条件查询

(1)准备表和数据

CREATE TABLE student3 (
   		id int,
  		name varchar(20),
  		age int,
 		 sex varchar(5),
  		address varchar(100),
  		math int,
  		english int
	);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

(2)比较运算符

在查询条件中,可以使用多种比较运算符来表示查询条件。

=等于、 >大于、 <小于、 <=小于等于、 >=大于等于、 <>或!=不等于

示例1:

# 查询math分数大于80分的学生
SELECT * FROM student3 WHERE math>80

示例2:

# 查询english分数小于或等于80分的学生
SELECT * FROM student3 WHERE english<=80;

示例3:

# 查询age等于20岁的学生
SELECT * FROM student3 WHERE age=20;

示例4:

# 查询age不等于20岁的学生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;

(3)逻辑运算符

and(&&) 多个条件同时满足

or(||) 多个条件其中一个满足

not(!) 不满足

示例1:

# 查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student3 WHERE  age>35 AND sex='男';

示例2:

# 查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student WHERE age>35 OR sex='男';

(4)指定范围内查询 in

语法

SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...); 
in里面的每个数据都会作为一次条件,只要满足条件的就会显示。

示例1:

# 查询id是135的学生
SELECT * FROM student3 WHERE id IN (1,3,5)

说明

相当于使用or连接多个条件。

示例2:

# 查询id不是135的学生
SELECT * FROM student3 WHERE id NOT IN (1,3,5);

(5)范围

BETWEEN 值1 AND 值2,表示从值1到值2范围,包括开头值又包括结尾值。

比如:age BETWEEN 80 AND 100 相当于: age>=80 and age<=100

示例:查询english成绩大于等于75,且小于等于90的学生

SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;

(6)模糊查询 like

SELECT * FROM 表名 WHERE 字段名 like '通配符字符串'; 满足通配符字符串规则的数据就会显示出来。

MySQL通配符有两个:

%: 表示0个或多个字符(任意个字符)

_: 表示一个字符

示例1:查询姓马的学生

SELECT * FROM student3 WHERE NAME LIKE '马%';

示例2:查询姓名中包含'德'字的学生

SELECT * FROM student3 WHERE NAME LIKE '%德%';

示例3:查询姓马,且姓名有三个字的学生

SELECT * FROM student3 WHERE NAME LIKE '马__';

(7)为空查询 is null

查询某个字段为空(null)的数据,不是使用=null(null和任何值都不相等),而是使用is null来进行判断。

示例

# 查询english成绩时null的学生信息
select * from student3 where english is null