MySQL基本sql语句

SQL语句

SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。

分类:

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

DDL

数据库

操作语法:

-- 查询所有数据库
show databases;

-- 查询当前数据库
select database();

-- 使用/切换数据库
use 数据库名;

-- 创建数据库
create database [if not exists] 数据库名 [default charset utf8mb4];

-- 删除数据库
drop database [if exists] 数据库名;

上述语法中的database,也可以替换成 schema。如:create schema db01; MySQL8版本中,默认字符集为utf8mb4。


MySQL客户端工具-图形化工具:

介绍:DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgreSQL的理想解决方案。
官网:https://www.jetbrains.com/zh-cn/datagrip/
安装:参考资料中提供的《DataGrip安装手册》


表结构-创建

创建表的语法:

create table tablename(
字段1 字段类型 [约束] [comment 字段1注释],
......
字段2 字段类型 [约束] [comment 字段2注释]
)[comment 表注释];

约束:

image-20250104122017946


数据类型:

  • 数值类型

image-20250104122203160

  • 字符类型

image-20250104122232306

char:表示定长,适用于存储固定长度的数据,如身份证号码。如果长度为10,你存储了5个字符,实际占用空间也是10

varchar:表示变长,适用于变长度的数据,如用户名。如果长度为10,你存储了5个字符,实际占用空间也是5

  • 时间

image-20250104122350561


表结构-查询、修改、删除

查询数据库表的具体的语法:

-- 查询当前数据库的所有表
show tables;

-- 查看指定的表结构
desc 表名 ;   -- 可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息

-- 查询指定表的建表语句
show create table 表名 ;

修改数据库表结构的具体语法:

-- 添加字段
alter table 表名 add  字段名  类型(长度)  [comment 注释]  [约束];

-- 比如: 为tb_emp表添加字段qq,字段类型为 varchar(11)
alter table tb_emp add  qq  varchar(11) comment 'QQ号码';

-- 修改字段类型
alter table 表名 modify  字段名  新数据类型(长度);

-- 比如: 修改qq字段的字段类型,将其长度由11修改为13
alter table tb_emp modify qq varchar(13) comment 'QQ号码';

-- 修改字段名,字段类型
alter table 表名 change  旧字段名  新字段名  类型(长度)  [comment 注释]  [约束];

-- 比如: 修改qq字段名为 qq_num,字段类型varchar(13)
alter table tb_emp change qq qq_num varchar(13) comment 'QQ号码';

-- 删除字段
alter table 表名 drop 字段名;

-- 比如: 删除tb_emp表中的qq_num字段
alter table tb_emp drop qq_num;

-- 修改表名
rename table 表名 to  新表名;

-- 比如: 将当前的emp表的表名修改为tb_emp
rename table emp to tb_emp;

删除表结构:

-- 删除表
drop  table [ if exists ]  表名;

-- 比如:如果tb_emp表存在,则删除tb_emp表
drop table if exists tb_emp;  -- 在删除表时,表中的全部数据也会被删除。

DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

  • 添加数据(INSERT)
  • 修改数据(UPDATE)
  • 删除数据(DELETE)

添加数据(INSERT)语法:

-- 向指定字段添加数据
insert into 表名 (字段名1, 字段名2) values (值1, 值2);  # 建议使用

-- 全部字段添加数据
insert into 表名 values (值1, 值2, ...);

-- 批量添加数据(指定字段)
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2); # 建议使用

-- 批量添加数据(全部字段)
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);

修改数据(UPDATE)语法:

update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;

⭕注意:一定要加上 where条件,否则会出现全表更新,很危险!


删除数据(DELETE)语法:(在实际的业务过程中,一般不会进行数据的删除,而是通过添加字段,比如is_del,通过update修改此字段的值来标记此数据已删除)

delete from 表名  [where  条件] ;

⭕注意:一定要加上 where条件,否则会出现全表删除,很危险!

扩展:

  • 格式化表:先把表删了,再按原来的表结构创建一个新表,适合删除大数据量表
TRUNCATE TABLE 表名;

DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。

查询关键字:SELECT

查询操作是所有SQL语句当中最为常见,也是最为重要的操作。在一个正常的业务系统中,查询操作的使用频次是要远高于增删改操作的。当我们打开某个网站或APP所看到的展示信息,都是通过从数据库中查询得到的,而在这个查询过程中,还会涉及到条件、排序、分页等操作。


DQL查询语句,语法结构如下:

SELECT
        字段列表
FROM
        表名列表
WHERE
        条件列表
GROUP  BY
        分组字段列表
HAVING
        分组后条件列表
ORDER BY
        排序字段列表
LIMIT
        分页参数;
  • 基本查询(不带任何条件)
  • 条件查询(where)
  • 分组查询(group by)
  • 排序查询(order by)
  • 分页查询(limit)

基本查询(不带任何条件)

-- 查询多个字段
select 字段1, 字段2, 字段3 from  表名;

-- 查询所有字段(通配符)
select *  from  表名;  

-- 设置别名
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ]  from  表名;

-- 去除重复记录
select distinct 字段列表 from  表名;

⭕补充:

  • *号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)
  • as关键字可以省略,别名建议不要起中文,但是要有意义

条件查询(where)

select  字段列表  from   表名   where   条件列表 ; -- 条件列表:意味着可以有多个条件

学习条件查询就是学习条件的构建方式,而在SQL语句当中构造条件的运算符分为两类:

  • 比较运算符
  • 逻辑运算符

常用的比较运算符如下:

image-20250104124638382

常用的逻辑运算符如下:

image-20250104124700333

⭕注意:查询为NULL的数据时,不能使用 = null 或 !=null 。得使用 is null 或 is not null。


聚合函数

之前我们做的查询都是横向查询,就是根据条件一行一行的进行判断,而使用聚合函数查询就是纵向查询,它是对一列的值进行计算,然后返回一个结果值。(将一列数据作为一个整体,进行纵向计算)

常用聚合函数:

image-20250104125003297

⭕注意 : 聚合函数会忽略空值,对NULL值不作为统计。

  • count :按照列去统计有多少行数据。
    • 在根据指定的列统计的时候,如果这一列中有null的行,该行不会被统计在其中。
  • sum :计算指定列的数值和,如果不是数值类型,那么计算结果为0
  • max :计算指定列的最大值
  • min :计算指定列的最小值
  • avg :计算指定列的平均值

分组查询(group by)

  • 分组: 按照某一列或者某几列,把相同的数据进行合并输出。
    • 分组其实就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类完的数据进行合并计算。
    • 分组查询通常会使用聚合函数进行计算。
select  字段列表  from  表名  [where 条件]  group by 分组字段名  [having 分组后过滤条件];

注意事项:

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
  • 执行顺序:where > 聚合函数 > having

where与having区别(面试题)

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

排序查询(order by)

排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。

select  字段列表  
from   表名   
[where  条件列表] 
[group by  分组字段 ] 
order  by  字段1  排序方式1 , 字段2  排序方式2 … ;
  • 排序方式:
    • ASC :升序(默认值)
    • DESC:降序

注意事项:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序


分页查询(limit)

分页操作在业务系统开发时,也是非常常见的一个功能,日常我们在网站中看到的各种各样的分页条,后台也都需要借助于数据库的分页操作。

select  字段列表  from  表名  limit  起始索引, 查询记录数 ;

注意事项:

  1. 起始索引从0开始。 计算公式 :起始索引 = (查询页码 - 1)* 每页显示记录数
  2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
  3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数
posted @ 2025-03-09 20:53  zhangfff  阅读(142)  评论(0)    收藏  举报