学习MYSQL之SQL语句篇 - 详解

       大龄失业后,在面试过程中几次被问到了数据库sql语句会不会,以及现场做笔试题。实际情况是回答的不理想,因此巩固复习一下,并记录。

一、SQL语句分类

序号

名称

含义

1

DDL: 数据定义语言

对数据库,表,字段的定义操作

2

DML:数据操作语言

对表中数据的增删改的操作

3

DQL:数据查询语言

对数据表中的数据进行查询操作

4

DCL:数据控制语言

对用户权限的控制和创建用户的操作

二、SQL语句的语法

2.1、DDL(数据定义语言)

2.1.1、DDL对数据库的操作

查询数据库:

查询出所有数据库:show databases;
查询当前在哪个库里面:select database();

创建数据库:

create [if not exists] database 库名称 [default charset 字符集] [collate 规则];
###[ ]里面内容可选性

使用数据库:

use 库名;
#表示进入某个指定数据库

删除数据库:

drop database 库名;

2.1.2、DDL对数据表操作

查询表:

show tables;
#进入某个数据库后,查询该数据库下所有的表。

查询表结构:

desc 表名;

查询指定表的建表信息:

show create table 表名;

创建表:

create table 表名(
字段1 类型1  [comment '注释内容'],
字段2 类型2  [comment '注释内容'],
......
字段n 类型n  [comment '注释内容']   #最后一个字段不需要逗号。
) comment '表注释';

修改表内容,添加字段:

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

修改表内容,修改字段数据类型:

alter table 表名 modify 字段名 新类型(长度);

修改表内容,修改指定字段名和字段类型:

alter table 表名 change 旧字段名 新字段名 类型(长度);

修改表内容,删除表中字段:

alter table 表名 drop 字段名;

删除表:

drop table [if exists] 表名;
删除表,并重新创建表(数据删除了,但是表在):truncate table 表名;
#注意,删除表,数据都会删除,生产环境请注意。

2.2、DML(数据操作语言)

DML主要是对表中的数据进行添加(insert)、修改(update)、删除(delete)。

2.2.1、DML的添加(insert)

表中增加数据:

添加指定的字段的值数据:
insert into 表名(字段1...字段n) values(值1..值n);
添加表中所有字段的值:
insert into 表名 values(值1,值2...,值n);
批量多条加入:
insert into 表名 (字段1,字段2,...字段n)values(值1,值2,...值n),(值1,值2,...值n)...;
insert into 表名 values (值1,值2,...值n),(值1,值2,...值n)...;

2.2.2、DML的更新(update)

表中更新数据:

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

2.2.3、DML的删除(delete)

表中数据删除:

delete from 表名 where [条件];
#这里的删除是根据条件,删除一行数据,如果要单独删除一个字段下的值,使用update进行=null。

2.3、DQL(数据查询语言)

关键字是select

格式:

select 字段列表 from 表名列表 where 条件列表  group by 分组字段 having 分组后条件 order by 排序字段列表  limit 分页参数;

2.3.1、基本查询

基本内容查询:

select 字段 from 表名;

查询去重,关键字 distinct

select  distinct 字段列表 from 表名;

2.3.2、条件查询

select 字段列表 from 表名列表 where 条件列表;
2.3.2.1、条件类型
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
between...and在...与..之间。例如:between 10 and 20。在10到20之间
in(....)符合列表中值即符合条件        where  age in (20,34) 表示age符合其中一个或者全部的行内容
like 占位符模糊匹配例如:where  name like  '%龙'  表示name字段中最后一个字是龙,符合条件。
is null

是空

and 或 &&
or 或 || 
not 或 !
2.3.2.2、聚合函数

含义:将一列数据作为一个整体,进行纵向计算。

常见聚合函数:

语法:select 聚合函数(字段类比)  from 表名;

count统计总数
max最大值
min 最小值
avg平均值
sum求和
聚合函数不统计null

2.3.3、分组查询

关键字 group by

select 字段列表 from 表名列表 where 条件列表  group by 分组字段 having 分组后条件;

where与having区别:

执行时机区别:where是分组前的过滤,不满足条件的不参与分组。having是分组后的过滤。

判断条件不同:where不能用于聚合后判断,having可聚合后判断。

分组中where执行顺序大于having。

注意:分组之后,查询的字段一般都是为聚合函数和分组字段,查询其他字段无意义。

2.3.4、排序查询

关键字order by

select 字段列表 from 表名列表 order by 排序字段列表 排序方式;

排序方式:升序:asc(默认排序)  降序 desc

2.3.5、分页查询

关键字limit

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

注意:

1、起始索引从0开始。起始索引计算公式:起始索引=(查询页数-1)*每页显示记录数。(例如:从第一页开始,每页显示10条:(1-1)*10=0,那么就是limit 10。如果从第2页,,每页10条:(2-1)*10=10,那么limit 10,10).

2、分页查询是数据库的方言(意思:不是通用语法,每个数据库不一样,mysql是用limit,例如oracle就不是用limimt)。

3、如果查询第一页,从0开始,起始索引0省略不写。

2.3.6、DQL执行顺序

执行顺序:from - where - group by - having - select - order by - limit

2.4、DCL(数据控制语言)

主要是对用户的创建和权限控制

2.4.1、用户创建和修改

系统表格中查询用户:mysql是库,user是表

use mysql;
select * from user;

创建用户:

create user '用户名'@'主机名' identified by '密码';

修改密码:

alter user '用户名'@'主机名' identified with mysql_native_password by '密码';
#WITH 认证插件,可指定密码加密方式(如mysql_native_password).

删除用户:

drop user '用户名'@'主机名';

2.4.2、权限控制

mysql中的权限列表:

all,all privileges所有权限
select数据查询权限
insert数据插入权限
update数据修改权限
delete数据删除权限
alter对表有修改权限(例如修改表中字段)
drop删除库、表、视图权限
create创建库、表权限

查询权限:

show grants for '用户名'@'主机名';

授予权限:

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

撤销权限:

revoke 权限列表 on 数据库名.表名 to '用户名'@'主机名';

待续---------

posted @ 2025-09-20 20:05  yfceshi  阅读(24)  评论(0)    收藏  举报