SQL学习系列二(数据的增删改查)

东东   ·   发表于 2022-01-24 17:24:26   ·   学习杂记

一、数据表插入数据

在MySQL通过INSERT语句向数据表中插入数据。在此,我们先准备一张学生表,代码如下

  1. create table student(
  2. id int,
  3. name varchar(30),
  4. age int,
  5. gender varchar(30)
  6. );

1.为表中所有字段插入数据

每个字段与其值是严格一一对应的。也就是说:每个值、值的顺序、值的类型必须与对应的字段相匹配。但是,各字段也无须与其在表中定义的顺序一致,它们只要与 VALUES中值的顺序一致即可。
语法如下

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

示例:向学生表中插入一条学生信息

  1. insert into student (id,name,age,gender) values (1,'bob',16,'male');

2. 为表中指定字段插入数据

语法如下

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

插入数据的方法基本和为表中所有字段插入数据,一样,只是需要插入的字段由你自己指定

3.同时插入多条记录

语法如下

  1. INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;

在该方式中:(字段名1,字段名2,…)是可选的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)表示要插人的记录,该记录可有多条并且每条记录之间用逗号隔开。
示例:向学生表中插入多条学生信息 MySQL命令

  1. insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male');

二、更新数据

在MySQL通过UPDATE语句更新数据表中的数据。在此,我们将就用六中的student学生表

1.UPDATE基本语法

  1. UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];

在该语法中:字段名1、字段名2…用于指定要更新的字段名称;值1、值 2…用于表示字段的新数据;WHERE 条件表达式 是可选的,它用于指定更新数据需要满足的条件

2.UPDATE更新部分数据

示例:将name为tom的记录的age设置为20并将其gender设置为female MySQL命令:

  1. update student set age=20,gender='female' where name='tom';

3.UPDATE更新全部数据

示例:将所有记录的age设置为18 MySQL命令:

  1. update student set age=18;

三、删除数据

在MySQL通过DELETE语句删除数据表中的数据。在此,我们先准备一张数据表,代码如下:

  1. -- 创建学生表
  2. create table student(
  3. id int,
  4. name varchar(30),
  5. age int,
  6. gender varchar(30)
  7. );
  1. -- 插入数据
  2. insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'),(5,'sal',19,'female'),(6,'sun',20,'male')
  3. ,(7,'sad',13,'female'),(8,'sam',14,'male');

1.DELETE基本语法

在该语法中:表名用于指定要执行删除操作的表;[WHERE 条件表达式]为可选参数用于指定删除的条件。

  1. DELETE FROM 表名 [WHERE 条件表达式];

2.DELETE删除部分数据

示例:删除age等于14的所有记录 MySQL命令:

  1. delete from student where age=14;

3.DELETE删除全部数据

示例:删除student表中的所有记录 MySQL命令:

  1. delete from student;

四、MySQL数据表简单查询

1.简单查询概述

简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。在此,先准备测试数据,代码如下:

  1. -- 创建数据库
  2. DROP DATABASE IF EXISTS mydb;
  3. CREATE DATABASE mydb;
  4. USE mydb;
  5. -- 创建student
  6. CREATE TABLE student (
  7. sid CHAR(6),
  8. sname VARCHAR(50),
  9. age INT,
  10. gender VARCHAR(50) DEFAULT 'male'
  11. );
  12. -- student表插入数据
  13. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
  14. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
  15. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
  16. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
  17. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
  18. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
  19. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
  20. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
  21. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
  22. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');

2.查询所有字段

(方法不唯一只是举例)

查询所有字段 MySQL命令:

  1. select * from student;

3.查询指定字段(sid、sname)

查询指定字段(sid、sname) MySQL命令:

  1. select sid,sname from student;

4.常数的查询

在SELECT中除了书写列名,还可以书写常数。可以用于标记
常数的查询日期标记 MySQL命令:

  1. select sid,sname,'2021-03-02' from student;

5.从查询结果中过滤重复数据

在使用DISTINCT 时需要注意:
在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
MySQL命令:

  1. select distinct gender from student;

6.算术运算符

(举例加运算符)

在SELECT查询语句中还可以使用加减乘除运算符。
查询学生10年后的年龄 MySQL命令:

  1. select sname,age+10 from student;

五、条件查询

数据库中存有大量数据,我们可根据需求获取指定的数据。此时,我们可在查询语句中通过WHERE子句指定查询条件对查询结果进行过滤。
在开始学习条件查询之前,我们先准备测试数据,代码如下:

  1. -- 创建数据库
  2. DROP DATABASE IF EXISTS mydb;
  3. CREATE DATABASE mydb;
  4. USE mydb;
  5. -- 创建student
  6. CREATE TABLE student (
  7. sid CHAR(6),
  8. sname VARCHAR(50),
  9. age INT,
  10. gender VARCHAR(50) DEFAULT 'male'
  11. );
  12. -- student表插入数据
  13. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
  14. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
  15. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
  16. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
  17. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
  18. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
  19. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
  20. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
  21. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
  22. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');
  23. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1012', 'lili', 14, 'male');
  24. INSERT INTO student (sid,sname,age,gender) VALUES ('S_1013', 'wang', 15, 'female');

1.使用关系运算符查询

在WHERE中可使用关系运算符进行条件查询,常用的关系运算符如下所示:

关系运算符

  1. = 等于
  2. <> 不等于
  3. != 不等于
  4. > 大于
  5. >= 大于等于

查询年龄等于或大于17的学生的信息

  1. select * from student where age>=17;

2.使用IN关键字查询

IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。

查询sid为S_1002和S_1003的学生信息 MySQL命令:

  1. select * from student where sid in ('S_1002','S_1003');

查询sid为S_1001以外的学生的信息 MySQL命令:

  1. select * from student where sid not in ('S_1001');

3.使用BETWEEN AND关键字查询

BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来
查询15到18岁的学生信息 MySQL命令:

  1. select * from student where age between 15 and 18;

查询不是15到18岁的学生信息 MySQL命令:

  1. select * from student where age not between 15 and 18;

4.使用空值查询

在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串

由于student表没有空值就不演示查询空值的了

查询sname不为空值的学生信息 MySQL命令:

  1. select * from student where sname is not null;

5.使用AND关键字查询

在MySQL中可使用AND关键字可以连接两个或者多个查询条件。
查询年纪大于15且性别为male的学生信息 MySQL命令:

  1. select * from student where age>15 and gender='male';

6.使用OR关键字查询

在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。在使用OR关键字时,只要记录满足其中任意一个条件就会被查询出来
查询年纪大于15或者性别为male的学生信息 MySQL命令:

  1. select * from student where age&gt;15 or gender='male';

7.使用LIKE关键字查询

MySQL中可使用LIKE关键字可以判断两个字符串是否相匹配

7.1 普通字符串

查询sname中与wang匹配的学生信息 MySQL命令:

  1. select * from student where sname like 'wang';

7.2 含有%通配的字符串

%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串
查询学生姓名以li开始的记录 MySQL命令:

  1. select * from student where sname like 'li%';

查询学生姓名以g结尾的记录 MySQL命令:

  1. select * from student where sname like '%g';

查询学生姓名包含s的记录 MySQL命令:

  1. select * from student where sname like '%s%';

7.3 含有_通配的字符串

下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符。例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如”abcd”、”atud”等等。
查询学生姓名以zx开头且长度为4的记录 MySQL命令:

  1. select * from student where sname like 'zx__';

查询学生姓名以g结尾且长度为4的记录 MySQL命令:

  1. select * from student where sname like '___g';

8.使用LIMIT限制查询结果的数量

当执行查询数据时可能会返回很多条记录,而用户需要的数据可能只是其中的一条或者几条
查询学生表中年纪最小的3位同学 MySQL命令:

  1. select * from student order by age asc limit 3;

9.使用GROUP BY进行分组查询

GROUP BY 子句可像切蛋糕一样将表中的数据进行分组,再进行查询等操作。换言之,可通俗地理解为:通过GROUP BY将原来的表拆分成了几张小表。
接下来,我们通过一个例子开始学习GROUP BY,代码如下

  1. -- 创建数据库
  2. DROP DATABASE IF EXISTS mydb;
  3. CREATE DATABASE mydb;
  4. USE mydb;
  5. -- 创建员工表
  6. CREATE TABLE employee (
  7. id int,
  8. name varchar(50),
  9. salary int,
  10. departmentnumber int
  11. );
  12. -- 向员工表中插入数据
  13. INSERT INTO employee values(1,'tome',2000,1001);
  14. INSERT INTO employee values(2,'lucy',9000,1002);
  15. INSERT INTO employee values(3,'joke',5000,1003);
  16. INSERT INTO employee values(4,'wang',3000,1004);
  17. INSERT INTO employee values(5,'chen',3000,1001);
  18. INSERT INTO employee values(6,'yukt',7000,1002);
  19. INSERT INTO employee values(7,'rett',6000,1003);
  20. INSERT INTO employee values(8,'mujk',4000,1004);
  21. INSERT INTO employee values(9,'poik',3000,1001);

9.1 GROUP BY和聚合函数一起使用

统计各部门员工个数 MySQL命令:

  1. select count(*), departmentnumber from employee group by departmentnumber;

统计部门编号大于1001的各部门员工个数 MySQL命令:

  1. select count(*), departmentnumber from employee where departmentnumber>1001 group by departmentnumber;

9.2 GROUP BY和聚合函数以及HAVING一起使用

统计工资总和大于8000的部门 MySQL命令:

  1. select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;

10.使用ORDER BY对查询结果排序

从表中査询出来的数据可能是无序的或者其排列顺序不是我们期望的。为此,我们可以使用ORDER BY对查询结果进行排序
其语法格式如下所示:

  1. SELECT 字段名1,字段名2,…
  2. FROM 表名
  3. ORDER BY 字段名1 [ASC DESC],字段名2 [ASC | DESC];

在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。

查询所有学生并按照年纪大小升序排列 MySQL命令:

  1. select * from student order by age asc;

查询所有学生并按照年纪大小降序排列 MySQL命令:

  1. select * from student order by age desc;

打赏我,让我更有动力~

0 条回复   |  直到 2022-1-24 | 658 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.