🐎本期分享SQL语言的DML和DQL,数据增删改查
上一期我们已经了解了DDL(数据定义语言),本期让我们继续深入,看看怎么对数据库的数据进行操作的吧。
目录
- 🐎本期分享SQL语言的DML和DQL,数据增删改查
- 一、DML(数据的增加删除和修改)
- 1、插入数据
- 2.修改数据
- 3、删除数据
- 4、清空数据
- 二、DQL(数据查询)
- 1、select基本语句查询
- 2、运算符
- 3、where条件查询
- 4、模糊查询
- 5、in关键字查询
- 6、between关键字查询
- 7、distinct关键字查询(去重)
- 8、order by关键字查询
- 9、limit关键字查询
- 10、内连接查询
- 11、隐式内连接查询
- 12、左(右)外连接查询
- 13、聚合函数
- 14、嵌套查询
- 15、any/some嵌套
- 16、all子查询
- 17、exist子查询
- 18、not exist子查询
- 🐂未完待续
一、DML(数据的增加删除和修改)
1、插入数据
INSERT [INTO]
表名 [字段名]
VALUES (值列表);
首先我们可以先创建一个表
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)
);
然后又两种方式进行数据的插入(代码举例):
方法一:insert into students (id,name,age,height,gender,cls_id,is_delete)
方法二:insert into students values (0,'小明',18,180.00,2,1,0)
第一种方法提供了数据插入的字段名,第二种方法隐藏了字段名,方法一还可以指定插入某些字段的数据,而方法二必须一一对应否则:
正确效果如下
接下来查看表中数据
可以发现,用指定字段的方法可以使age字段的值为空
2.修改数据
UPDATE 表名 SET 字段1=值1,
字段2=值2,…,字段n=值n
[WHERE 条件];
可以添加where来指定更新的字段,这里修改了全部的age值
3、删除数据
DELETE FROM 表名
[WHERE条件];
这里要与删除数据库、删除数据表、删除字段进行区分
删除库 drop database db;
删除表 drop table students;
删除字段 alter table students drop id;
删除数据 delete from table students where id;
4、清空数据
TRUNCATE TABLE 表名;
此处的清空数据效果同delete * from table 清空了表的数据,表依然存在,但是此方法不能加条件where
二、DQL(数据查询)
DQL是Data Qurey Language英文缩写,数据查询语言
常用语句:
基本查询语句、条件查询、多条件查询、模糊查询、分组查询、连接查询、子查询
关键字:
AS、运算符、IN、BETWEEN AND、DISTINCT、ORDER BY、LIMIT
1、select基本语句查询
select 列名 from 表名
这里我先将数据通过Nivacat快速导入进原先创建好的三个数据表,如下图
🐎而后我们在命令行使用SQL语句进行查找验证(可以添加约束条件)
然后查找所有同学的身高与姓名
最后查找身高为180的同学
2、运算符
算术运算符 + - * / %
关系运算符 > < = <> >= <= !=
赋值运算符 =
逻辑运算符 and or not && || !
查找id为1或3的同学
或者用 or
3、where条件查询
SELECT 列名
FROM 表名
WHERE 条件 运算符 条件
添加as的查询
4、模糊查询
SELECT 列名
FROM 表名
WHERE 字段
LIKE ‘值’
5、in关键字查询
SELECT 列名
FROM 表名
WHERE 字段
IN (值1,值2,…);
还可以添加not
6、between关键字查询
SELECT 列名
FROM 表名
WHERE 字段
BETWEEN 值1 and 值2;
7、distinct关键字查询(去重)
SELECT DISTINCT
字段名1,字段名2…
FROM 表名;
示例:查询性别有几种分类
select distinct gender from students;
示例:查询有几个班级
select distinct cls_id from students;
8、order by关键字查询
SELECT <字段名列表>
FROM <表名>
[WHERE <查询条件>]
[ORDER BY <排序的列名>
[ASC 或 DESC]];
逆序排
9、limit关键字查询
SELECT <字段名列表>
FROM <表名>
[WHERE <查询条件>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT <行数>];
select * fron students limit 2;
显示前两行数据
select * from students limit 0,6 (从第0+1个开始此页面显示6个数据)
分页显示
10、内连接查询
SELECT 字段 FROM 表1
INNER JOIN 表2
ON 连接条件
[WHERE 条件]
查看学生所在班级
select s.name,s.name from students s inner join classes s on s.cls_id=c.id;
11、隐式内连接查询
SELECT 字段
FROM 表1,表2
WHERE 表1.条件=表2.条件
12、左(右)外连接查询
SELECT 字段 FROM 表1
RIGHT(LEFT) [outer] JOIN 表2
ON 连接条件
WHERE 条件
讲白了就是以哪一方为主体来连接
13、聚合函数
1.count()-计数 2.sum()-求和 3.max()-最大值 4.min()-最小值 5.avg()-平均值
SELECT 聚合函数<字段>
FROM 表名
[WHERE 条件]
[GROUP BY 聚合函数]
14、嵌套查询
例:select * from students where cls_id = (select cls_id from students where name = ‘刘德华’);
和刘德华同班的同学
15、any/some嵌套
查看赵老师所带的学生信息
使用ANY关键字允许cls_id与子查询返回的任何一个值匹配,这意味着如果一个学生属于由“赵老师”教授的任何一个班级,他/她的记录就会被选中。此外,这条语句假设了每个表(teachers、classes、students)中相应的列(id、name、teacher_id、cls_id)都存在且数据类型匹配
16、all子查询
>all:赵老师不带的班级的学生
select * from students where cls_id >= all(select id from classes where teacher_id = (select id from teachers where name='赵老师'));
17、exist子查询
DROP TABLE IF EXISTS temp;
例: 查看王老师存在的班级表
exist接收的返回值为1即可
18、not exist子查询
示例:创建教师表
create table IF NOT EXISTS teachers(
id int primary key,
name varchar(20)
);
作用:避免重复创建