操作表中数据DML
一、添加数据
INSERT INTO 表名 VALUES(值1,值2,值N);
INSERT INTO [表名] VALUES(值1,值2,值N);
INSERT INTO STU(name,age,grade) VALUES('张三',18,100);
INSERT INTO STU(name,age,grade) VALUES('李四',18,100);
INSERT INTO STU(name,age,grade) VALUES('王五',18,100);
注:
- 字段必须与值 一一对应
- 注:如过没有写字段,只有值 那么会为所有的字段赋值,但是值必须与表中字段都需要一一对应;
- 除了数字其他数据类型必须使用引号括起来(单引号或双引号)
二、删除数据
1. 删除数据
DELETE FROM [表名] [WHERE 条件];
DELETE FROM STU WHERE name='王五';
注:
- 如果不加WHERE 条件会删除表中说有数据
- 删除所有数据时不建议使用。
2. 删除表中所有数据
- 第一种方式
DELETE FROM [表名]; -- 不推荐 - 第二种方式
TRUNCATE TABLE [表名]; -- 推荐
第一种方式删除表中数据,效率低。有多少记录就会执行多少次删除操作。
第二种方式删除表中数据,效率高。他会先删除表,然后再创建一个结构一样的表
DELETE FROM STU;--第一种
TRUNCATE TABLE STU;-- 第二种
三、修改数据
UPDATE [表名] SET [字段1]=[值1],[字段2]=[值2],[字段N]=[值N] [WHERR 条件];
注:如果不加任何条件,则会修改表中字段的说有记录
UPDATE STU SET grade=99,age=12 WHERE name='王五'; --将王五的grade改为99 age改为12
四、查询
SELECT
[字段1],[字段2],[字段3],[字段N] --如果时* 则查询所有
FROM
[表名]
WHERE
[条件语句]
GROUP BY
[分组条件]
HAVING
[分组语句]
ORDER BY
[排序语句]
LIMIT
[分页限定]
1 .基础查询
-- 创建表
CREATE TABLE student(
name varchar(20),
age int,
sex varchar(4),
region varchar(30),
math int,
english int
);
-- 插入数据
INSERT INTO
student(
name,age,sex,region,math,english
)
VALUES
(
"张三",20,'男',"北京",80,90
),
(
"刘亦菲",23,'女',"北京",70,80
),
(
"柳岩",26,'女',"深圳",90,60
),
(
"马云",21,'男',"成都",30,100
),
(
"马化腾",30,'男',"深圳",80,60
),
(
"盖伦",19,'男',"深圳",100,90
),
(
"艾克",26,'男',"德玛西亚",77,93
),
(
"亚索",25,'男',"德玛西亚",86,99
);
下面操作使用到下面的表
1>. 多个字段的查询
SETECT [字段1],[字段1],[字段1],[字段1] FROM [表名];
+-----------+------+
| name | age |
+-----------+------+
| 张三 | 20 |
| 刘亦菲 | 23 |
| 柳岩 | 26 |
| 马云 | 21 |
| 马化腾 | 30 |
| 盖伦 | 19 |
| 艾克 | 26 |
| 亚索 | 25 |
+-----------+------+
SELECT name ,age FROM student;
2>. 去除重复
DISTINCT;
SELECT DISTINCT region FROM student;-- 查询表中region 并去除重复
+--------------+
| region |
+--------------+
| 北京 |
| 深圳 |
| 成都 |
| 德玛西亚 |
+--------------+
3>计算列
- 一般可以使用四则运算计算一下列的值(一般只会进行数值类型的计算)
- IFNULL([表达式1],[表达式2])
表达式1:那个字段需要判断是否为NULL;
表达式2如果该字段为null后替换值;
-- 查询name math english 并计算math与english的和其中如果遇到NULL按0处理
SELECT name ,math,english,IFNULL(math,0)+IFNULL(english,0)FROM student;
+-----------+------+---------+----------------------------------+
| name | math | english | IFNULL(math,0)+IFNULL(english,0) |
+-----------+------+---------+----------------------------------+
| 张三 | 80 | 90 | 170 |
| 刘亦菲 | 70 | 80 | 150 |
| 柳岩 | 90 | 60 | 150 |
| 马云 | 30 | 100 | 130 |
| 马化腾 | 80 | 60 | 140 |
| 盖伦 | 100 | 90 | 190 |
| 艾克 | 77 | 93 | 170 |
| 亚索 | 86 | 99 | 185 |
+-----------+------+---------+----------------------------------+
4>计算列 起别名 as:as也可以省略
-- 查询name math english 并计算math与english的和其中如果遇到NULL按0处理
SELECT
name AS 姓名,math 数学,english 英语,IFNULL(math,0)+IFNULL(english,0) AS 总分
FROM
student;
+-----------+--------+--------+--------+
| 姓名 | 数学 | 英语 | 总分 |
+-----------+--------+--------+--------+
| 张三 | 80 | 90 | 170 |
| 刘亦菲 | 70 | 80 | 150 |
| 柳岩 | 90 | 60 | 150 |
| 马云 | 30 | 100 | 130 |
| 马化腾 | 80 | 60 | 140 |
| 盖伦 | 100 | 90 | 190 |
| 艾克 | 77 | 93 | 170 |
| 亚索 | 86 | 99 | 185 |
+-----------+--------+--------+--------+
2. 条件查询,分组查询
- WHERE 子句后面跟条件
- 运算符
-
、< 、<= 、>= 、= 、<>
-
BETWEEN...AND
-
IN( 集合)
-
LIKE:模糊查询
-
占位符:
- _:单个任意字符
- %:多个任意字符
-
IS NULL
-
and 或 &&
-
or 或 ||
-
not 或 !
-
示例:
-- 1. 查询年龄大于20岁
SELECT * FROM student WHERE age > 20;
-- 2. 查询年龄等于20
SELECT *FROM student WHERE age = 20;
-- 3. 查询年龄不等于20
SELECT * FROM student WHERE age != 20;
--或
SELECT * FROM student WHERE age <> 20;
-- 4. 查询年龄大于20小于等于30
SELECT * FROM student WHERE age >20 AND age <=30;
-- 或
SELECT * FROM student WHERE age >20 && age <=30;
-- 或
SELECT * FROM student WHERE age BETWEEN 21 AND 30;
-- 5. 查询英语成绩为null
SELECT * FROM student WHERE english = NULL --这是不对的
SELECT * FROM student WHERE english IS NULL;
-- 6. 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
-- 7. 查询姓马的人有哪些
SELECT * FROM student WHERE name LIKE '马%';
-- 8. 查询姓名是3个字的人
SELECT * FROM student WHERE name LIKE '___';
-- 9. 查询姓名中包含德字的人
SELECT *FROM student WHERE name LIKE "%德%";
评论区