Sql新手入门 ddl-dml-dql-dcl 01

Sql新手入门 01

前言

本篇大部分内容来自csdn

https://blog.csdn.net/m0_66570338/article/details/131730913

我对此进行修改-

a5f4ea63bd6983a1d180f567908b5daa

0.Sql分类

SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表, 字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

书写规则

1
2
3
4
5
6
7
8
9
SQL语句可以单行或多行书写,以分号结尾。
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。
如果删除一个不存在的数据库,将会报错。
注释:
单行注释:-- 注释内容 或 # 注释内容
多行注释:/* 注释内容 */
————————————————

1.DDl语句

Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)

1.数据库操作

在这里插入图片描述

2.表操作

在这里插入图片描述

2.表字段类型

数值类型字符串类型日期时间类型

1.数值类型

image-20240922162704845

2.日期和时间

image-20240922162753672

3.字符串类型

image-20240922162817233

3.Dml

img

4.Dql

在这里插入图片描述

0.条件查询

image-20240922163541712

1.聚合函数查询
函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
2.分组查询

注意事项:

where与having区别
执行时机不同:where是分组之前进行过滤;having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。执行顺序: where > 聚合函数 > having。
支持多字段分组, 具体语法为 : group by 分组字段名1,分组字段名2

  • 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
1
2
select workaddress, count(*) address_count from emp where age < 45 group by 
workaddress having address_count >= 3;

img

3.排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式;

  • 排序方式类别

    • ASC:升序(默认值)
    • DESC: 降序
  • 注意事项

    • 如果是升序, 可以不指定排序方式ASC ;
    • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
  • 根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序

1
2
select * from emp order by age asc , entrydate desc;

4.分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

  • 起始索引从0开始,计算规则为:(查询页码 - 1)* 每页显示记录数。

  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

  • 查询第1页员工数据, 每页展示5条记录

1
2
3
select * from emp limit 0,5;
select * from emp limit 5;

  • 查询第2页员工数据, 每页展示10条记录 ——–> (页码-1)*页展示记录数
1
2
select * from emp limit 5,5;

疑问 分页插件做了什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Service
public class UserService {

@Autowired
private UserMapper userMapper;
/// 1 页 =多少大小 --2页多少大小
//转换为 limit x,x
public Page<User> getUsersByPage(int currentPage, int pageSize) {
// 创建 Page 对象
Page<User> page = new Page<>(currentPage, pageSize);

// 创建 QueryWrapper 对象
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("id"); // 按照 id 降序排列

// 执行分页查询
return userMapper.selectPage(page, queryWrapper);
}
}
5.复合使用

在这里插入图片描述

  • DQL语句复合使用系统执行顺序为: from ... where ... group by ... having ... select ... order by ... limit ...
1
2
3
4
5
6
7
8
9
10
关于havinggroup by以及聚合函数的执行顺序问题,整个执行顺序可以这么理解:

先执行from语句(表之间的笛卡尔积、交并差等),获得一个虚拟表
如果where语句存在,从虚拟表中筛出符合where条件的数据,不满足的被剔除
如果group by语句存在,则目前存活的数据分组;如果不存在group by,则将这些数据视为一个组
如果存在having语句,则将满足having条件的组留下,不满足的组被剔除
执行select语句:对存活下来的每个组分别执行聚合函数,形成查询结果
执行order by 语句:对剩下的数据进行排序
执行limit 语句:限制返回的数据条数
————————————————
  • 查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序, 年龄相同按入职时间升序排序。
1
2
3
4
select * from emp 
where gender = '男' and age between 20 and 40
order by age asc ,entrydate asc
limit 5 ;

6.Dcl

在这里插入图片描述

0.权限控制列表
权限 说明
ALL, ALL PRIVILEGES 所有权限
SELECT 查询数据
INSERT 插入数据
UPDATE 修改数据
DELETE 删除数据
ALTER 修改表
DROP 删除数据库/表/视图
CREATE 创建数据库/表

Sql新手入门 ddl-dml-dql-dcl 01
http://example.com/2024/09/22/mysql/基础/SQL入门(一)/
作者
John Doe
发布于
2024年9月22日
许可协议