数据库的基础操作二——表的增删改查

目录

准备工作

1、插入数据

2、更新数据

3、删除数据

3.1 delete删除

3.2 truncate删除

4、查询

4.1 SELECT基本查询语句

4.2 运算符

4.3 where条件查询

4.4 where多条件查询

4.5 like模糊查询

4.6 IN关键字查询

4.7 BETWEEN关键字查询

4.8 DISTINCT关键字查询(去重)

4.9 ORDER BY关键字查询

4.10 LIMIT关键字查询

5、连接查询

5.1 内连接

4.1.1 显示内连接查询

5.1.2 隐式内连接查询

5.2 外连接

5.2.1左外连接查询

5.2.2 右外连接查询

6、聚合函数

7、子查询(查询嵌套)

7.1 简单子查询

7.2 ANY/SOME子查询

7.3 All子查询

7.4 EXISTS子查询

7.5 NOT EXISTS子查询


注意:本文语法格式中[ ]所括起来的内容均可省略

准备工作

分别创建三张空表(学生表、老师表、课程表),本文的操作均是基于这三张表。

create table students(
    id int auto_increment primary key,
    name varchar(20),
    age int,
    height float,
    gender char(10),
    cls_id int,
    is_delete int
);
create table teachers(
    id int primary key,
    name varchar(20)
);
create table classes(
    id int primary key,
    teacher_id int,
    cls_content varchar(100),
    cls_date datetime,
    name varchar(50)
);

1、插入数据

语法格式:

INSERT  [INTO]
表名  [字段名]
VALUES  (值列表);

示例:向学生表中插入一行数据

第一种:

insert into students (id,name,age,height,gender,cls_id,is_delete)
values (0,'小明',18,180.00,2,1,0);

第二种:

insert into students values (0,'小明',18,180.00,2,1,0);

向学生表中插入多行数据:

insert into students (id,name,age,height,gender,cls_id,is_delete)

values (2,'佩奇',8,130.00,2,1,0),(3,'超人',36,180.00,1,2,0);

注意:为避免表结构发生变化引发错误,建议插入数据时写明具体字段名!

2、更新数据

语法格式:

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

示例:将所有学生的姓名改成邓超

UPDATE students SET name= '邓超';

示例: 将id是1学生的姓名改成超人,年龄改为30

update students set name='超人',age=30 where id=1;

3、删除数据

3.1 delete删除

语法格式:

DELETE FROM 表名
[WHERE条件];

示例:删除id是1的学生的数据

DELETE FROM students where id = 1;

3.2 truncate删除

语法结构:

TRUNCATE TABLE 表名;

示例:删除id是2的学生的数据【报错,不能加条件!!!】

TRUNCATE TABLE students where id = 2;

示例:删除学生表中的数据【清空数据,表还在,delete删除同理】

TRUNCATE TABLE students;

4、查询

前文的操作完成后三张表依旧是空表,接下来给出数据填充这三张表格。

INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (1, '小明', 18, 180, '女', 1, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (2, '小月月', 18, 180, '女', 2, 1);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (3, '彭于晏', 29, 185, '男', 1, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (4, '刘德华', 59, 175, '男', 2, 1);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (5, '黄蓉', 38, 160, '女', 1, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (6, '凤姐', 28, 150, '保密', 2, 1);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (7, '王祖贤', 18, 172, '保密', 1, 1);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (8, '周杰伦', 36, NULL, '男', 3, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (9, '程坤', 27, 181, '男', 2, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (10, '刘亦菲', 25, 166, '男', 2, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (11, '猪猪侠', 33, 162, '保密', 3, 1);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (12, '静香', 12, 180, '女', 2, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (13, '郭靖', 12, 170, '男', 3, 0);
INSERT INTO `students` (`id`, `name`, `age`, `height`, `gender`, `cls_id`, `is_delete`) VALUES (14, '周杰', 34, 176, '女', 1, 0);
INSERT INTO `teachers` (`id`, `name`) VALUES (1, '赵老师');
INSERT INTO `teachers` (`id`, `name`) VALUES (2, '孙老师');
INSERT INTO `teachers` (`id`, `name`) VALUES (3, '李老师');
INSERT INTO `teachers` (`id`, `name`) VALUES (4, '周老师');
INSERT INTO `classes` (`id`, `teacher_id`, `cls_content`, `cls_date`, `name`) VALUES (1, 1, '班级学生有较强的学习能力', '2024-10-01 00:00:00', 'python_01期');
INSERT INTO `classes` (`id`, `teacher_id`, `cls_content`, `cls_date`, `name`) VALUES (2, 2, '班级学生比较顽皮', '2024-11-01 00:00:00', 'python_02期');
INSERT INTO `classes` (`id`, `teacher_id`, `cls_content`, `cls_date`, `name`) VALUES (3, 2, '数据结构班', '2024-11-01 00:00:00', 'data_struct_01期');

4.1 SELECT基本查询语句

语法格式:

SELECT 列名 FROM 表名;

示例:查询所有学生信息

select * from students;

示例:查询所有学生的姓名,性别

select name,gender from students;

4.2 运算符

算术运算符 + - * / %【取余运算符】

5 ÷ 2 = 2 .... 1

5 / 2 = 2 5 % 2 = 1

关系运算符 > < = <> >=

赋值运算符 =

逻辑运算符 and(&&)、or( ||)、not( !)

4.3 where条件查询

语法格式:

SELECT 列名

FROM 表名

WHERE 条件

示例:查询id为1学生的姓名,性别

SELECT name, gender FROM students WHERE id=1;

4.4 where多条件查询

语法格式:

SELECT 列名
FROM 表名
WHERE 条件 运算符 条件

示例:查询id为1或者为3的 学生 姓名,性别

select name,gender from students where id=1 or id=3;

4.5 like模糊查询

语法格式:

SELECT 列名
FROM 表名
WHERE 字段
LIKE '值'

示例:查询名字里面包含'小'的学生的信息

select * from students where name like '小%';

4.6 IN关键字查询

语法格式:

SELECT 列名
FROM 表名
WHERE 字段
IN (值1,值2,....);

示例:查询id为1,5,6,10的学生的信息

select * from students where id in(1,5,6,10);

4.7 BETWEEN关键字查询

语法格式:

SELECT 列名
FROM 表名
WHERE 字段
BETWEEN  值1 and 值2;

示例:查询id为8-10的学生的信息

select * from students where id between 8 and 10;

4.8 DISTINCT关键字查询(去重)

语法格式:

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

示例:查询性别有几种分类

select distinct gender from students;

4.9 ORDER BY关键字查询

语法格式:

SELECT <字段名列表>
FROM <表名>
[WHERE <查询条件>]
[ORDER BY <排序的列名>
[ASC 或 DESC]];

示例:将学生的身高按照降序排列

select * from students order by height desc;

4.10 LIMIT关键字查询

语法格式:

SELECT <字段名列表>
FROM <表名>
[WHERE <查询条件>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT <行数>];

示例:只看前2条学生信息

select * from students limit 2;

5、连接查询

观察三张表,如何查看students表中cls_id所代表的的班级名称是什么? 答:使用连接查询

连接查询是将多张表中记录按照指定的条件进行连接的查询方式

注意:连接查询涉及到两个表以上,在查询的时候至少要有一个必备的连接条件,这个必备的条件就是两个表共有的那个字段相等,而且这个字段一定在一个表里是主键,在另一个表里是外健

5.1 内连接

内连接是返回连接表中符合连接条件记录的连接查询。

包括:显式内连接、隐式内连接

4.1.1 显示内连接查询

语法格式:

SELECT  字段  FROM  表1
INNER JOIN  表2
ON  连接条件
[WHERE 条件]

示例:查看学生所在班级

select s.name,c.name from students s inner join classes c on s.cls_id=c.id;

5.1.2 隐式内连接查询

语法格式:

SELECT  字段
FROM  表1,表2
WHERE 表1.条件=表2.条件

示例:查看学生所在班级

select s.name ,c.name from students s, classes c where s.cls_id = c.id;

5.2 外连接

5.2.1左外连接查询

左外连接是以左表为基表,返回左表中所有记录及连接表中符合条件的记录的外连接。

语法格式:

SELECT  字段  FROM  表1
LEFT [outer]  JOIN  表2
ON  连接条件
[WHERE 条件];

示例:查看老师所在班级

select c.name,t.name from classes c left join teachers t on c.teacher_id = t.id;

5.2.2 右外连接查询

右外连接是以右表为基表,返回右表中所有记录及连接表中符合条件的记录的外连接。

语法格式:

SELECT  字段  FROM  表1
RIGHT [outer] JOIN  表2
ON  连接条件
WHERE 条件

示例:查看老师所在班级

select classes.name,teachers.name from classes  right join teachers  on classes.teacher_id = teachers.id;

6、聚合函数

如何查看班级同学的平均身高? 答:使用聚合函数

聚合函数是可以对一组值进行计算,并返回单个值的函数。

count()-计数

sum()-求和

max()-最大值

min()-最小值

avg()-平均值

语法格式:

SELECT 聚合函数<字段>
FROM 表名
[WHERE 条件]
[GROUP BY 聚合函数]

示例:查询班级学生的平均身高

select avg(height) as '平均身高' from students;

7、子查询(查询嵌套)

如何只查询比刘德华高的同一班的学生信息?答:子查询

定义:子查询是在一个查询的内部包括另一个查询的查询方式

7.1 简单子查询

示例:查看刘德华同学的所在班级的所有同学

select * from students where cls_id = (select cls_id from students where name = '刘德华');

7.2 ANY/SOME子查询

示例:查看赵老师所带的学生信息

select * from students where cls_id = any(select id from classes where teacher_id = (select id from teachers where name='赵老师'));

7.3 All子查询

示例:查看班级号大于赵老师班的学生信息

select * from students where cls_id > all(select id from classes where teacher_id = (select id from teachers where name='赵老师'));

7.4 EXISTS子查询

示例:查看存在王老师的班级表

select * from classes where exists (select * from teachers where name='王老师');

7.5 NOT EXISTS子查询

示例:创建教师表

create table IF NOT EXISTS teachers(

id int primary key,

name varchar(20)

);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值