本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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是1或3或5的学生
SELECT * FROM student3 WHERE id IN (1,3,5)
说明
相当于使用or连接多个条件。
示例2:
# 查询id不是1或3或5的学生
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