大家好,我是寻椛。
今天开始更新MySql学习专栏,今天要讲的是操作数据库的基础之一SQL语法。
文章内容适合初学语法,需要快速预览熟悉或者已经学过但需要快速复习的朋友。
SQL语法概述
简单来说,SQL是一种用于操作、管理数据库软件的语言。
它被广泛应用于当前大部分主流数据库软件。
因此,学习数据库相关知识,学习SQL是最基本也是最重要的板块之一。
SQL语句以分号结尾,并且和大多数编程语言一样,任何符号都要使用半角输入,SQL中的关键字一般不区分大小写。
从语言实现的功能来划分,SQL语法大概可以划分为DDL,DML,DQL,DCL四个部分。
接下来一个个来看。
DDL
DLL(Data Definition Language),数据定义语言,简单来说就是操作数据库、数据表等的语言。
接下来看具体关键字及其使用:
首先是数据库相关:
show databases;
展示当前已存在的所有数据库。
select database();
用于查询当前正在操作的是哪一个数据库。
create database...;
完整语法为create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
其中中括号中的关键字表示可选项,通过create database
关键字可以创建一个数据库指定名字,还能指定默认使用的编码集和排序规则。
例如:
create database if not exists test
default charset utf8mb4;
这个语句表示如果不存在名为test的数据库,就创建一个并且指定字符集为utf8mb4。
drop database...;
完整语法为drop database [if exists] 数据库名 ;
通过drop关键字可以删除已经存在的数据库。
drop database if exists test;
执行这条语句后我们上面创建的test数据库就会被删除,其中if exists
此时可以不写,但是当该数据库不存在时会报错。
use 数据库名;
想要使用创建好的数据库,就需要用到use
关键字加数据库名字,从而切换到当前数据库进行进一步操作。
use test;
数据表相关:
show tables;
展示当前数据库中存在的数据表。
desc 表名;
查看当前数据表的结构。
show create table 表名;
和desc
功能类似,但是能够更详细地看到建表时系统默认的一些设置以及我们自己写的comment
注释。
我们可以使用
comment
关键字在语句的任何地方加上我们想要加的注释来提高代码的可读性。
create table...;
创建数据表使用如下语法:
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释 ],
字段2 字段2类型 [COMMENT 字段2注释 ],
字段3 字段3类型 [COMMENT 字段3注释 ],
......,
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
需要注意,创建最后一个字段时不加逗号。
MySql数据类型
不同的数据库对于数据类型的定义有所不同,这里使用MySql做讲解,因为其使用相对比较广泛。
数值类型
日期和时间类型
字符串类型
其中,数值类型int
最常用,字符串类型varchar
最常用。
如果想使用对应的无符号类型,只需要在相应类型后面加上
unsigned
即可。
为方便后面语句讲解,结合前面讲的一些语法,创建一个数据库和数据表来进行演示:
#创建数据库
drop database if exists demo;
create database demo charset utf8mb4;
use demo
#创建数据表
create table person(
id int comment '编号',
name varchar(32) comment '姓名',
age int comment '年龄',
height int comment '身高'
);
desc person;
执行一下:
可以看到数据库和数据表已经创建好了。
alter table...;
-
ALTER TABLE 表名 ADD 字段名 类型(长度) [ COMMENT 注释 ] [ 约束 ];
这个语句可以实现在一张表中添加字段。
alter table person add weight float comment '体重';
desc person;
可以看到,数据表发生了改变:
-
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
这个语句是用来修改数据表中某个字段的数据类型。
-
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
这个语句用来修改字段名和字段的数据类型。
-
ALTER TABLE 表名 DROP 字段名;
这个语句用来删除数据表中某个字段。
-
ALTER TABLE 表名 RENAME TO 新表名;
这个语句用来修改数据表的名称。
以上操作遵循语法规则来即可,规则类似,不做过多演示。
同时,针对数据表,也有和数据库类似的删除操作:
-
DROP TABLE [ IF EXISTS ] 表名;
删除数据表。
-
TRUNCATE TABLE 表名;
格式化原数据表。
DML
DML(Data Manipulation Language),数据操作语言,即对数据进行修改增删改等等操作。
首先是增:
insert into...;
用于给数据表插入数据。
-
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
这条语句可以针对数据表中部分字段进行数据的插入。也可以插入所有字段。
-
INSERT INTO 表名 VALUES (值1, 值2, ...);
该语句相较于上面省略了字段列表,则默认对所有字段插入数据。
需要插入多条数据时,只需要用多个括号加逗号隔开,每个括号内表示一条数据:
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;
示例:
use demo
insert into person values(1,'张三',20,178,66.5);
insert into person values(2,'李四',18,172,75.9);
insert into person values(3,'王五',36,169,60.3);
执行结果:
update 表名...;
用于更新/修改数据的关键字。
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
其中
where
关键字用于指定要操作数据需要满足的条件,不填写则默认修改所有数据,一般不会这么做。
update person set name = '张二' where name = '张三';
这条语句就会找到字段name值为'张三'的数据,并将其name字段修改为'张二'。
delete from...;
这个关键字用来删除符合条件的数据记录。
DELETE FROM 表名 [ WHERE 条件 ] ;
其中where
的使用和上面一样,如果不写条件,默认删除所有数据,和格式化类似。
举例:
delete from person where id = 1;
这条语句即为删除id值为1的数据记录。
DQL
DQL(Data Query Language),数据查询语言,即用于数据表中对数据记录进行查询。
实际开发和应用中,查询操作是出现频次最高,也最容易损耗性能的地方。
因此查询语法也更加的复杂和重要。
接下来由易到难我们来过一遍,我会结合前面创建的数据表来举例子。
现在给大家完整展示一下准备工作的sql:
#创建数据库
drop database if exists demo;
create database demo charset utf8mb4;
use demo
#创建数据表
create table person(
id int comment '编号',
name varchar(32) comment '姓名',
age int comment '年龄',
height int comment '身高',
weight float comment '体重'
);
#查看数据表结构
desc person;
#插入演示可能会用到的数据
insert into person values(1,'张三',20,178,66.5);
insert into person values(2,'李四',18,172,75.9);
insert into person values(3,'王五',36,169,60.3);
insert into person values(4,'赵六六',88,162,55.0);
insert into person values(5,'小七',12,170,49.2);
insert into person values(6,'大八八',19,155,42.2);
insert into person values(7,'老九',26,177,69.7);
insert into person values(8,'胡一',18,174,72.0);
insert into person values(9,'方二',41,168,64.8);
基础查询
这部分查询语句是最基础的,也很重要,后面的语法都会基础以下展开。
select 字段列表 from 表名;
完整语法为:
SELECT 字段1,字段2,字段3... FROM 表名 ;
其中可以只查询某一字段或多个字段:
例如:
还可以快速地使用select * from 表名来查询所有字段:
AS起别名
使用AS
关键字(可以省略)为要查询的字段起别名
使用DISTINCT去重
使用DISTINCT
去重关键字来对查询结果进行去重。
可以看到我们的age 18并没有出现两次。
条件查询
条件查询,即只查询满足条件的数据集。
使用条件查询要使用的关键字是where
。
在演示之前,大家先认识一下mysql中一些进行条件判断需要用到的运算符:
这些符号使用大同小异,接下来稍作演示:
查询age的值大于等于20的数据:
查询年龄在20到30之间,或者名字长度为3个字的数据:
其它符号也是类似的使用方法,自行了解操作即可。
聚合函数
聚合函数是对某一列进行计算的函数。
常用的有:
例如:
这个查询就相当于返回了数据表中的数据记录数量。
NULL值不参与聚合函数的计算。
分组查询
完整语法:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];
其中having
关键字是对分组后的结果进行筛选。
使用关键字group by
来实现对查询结果分组的效果:
由于我们的id各不相同,于是这个group by
语句没有产生任何效果。
当我们按age进行分组时:
可以发现另一条age为18的记录不见了,这是因为两个age为18的记录被分成一组,所以同一组的记录只会显示一条。
排序和分页查询
当我们想要使我们的查询结果有一定的顺序时,就要使用order by
关键字根据指定字段来进行排序。
-
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
其中排序方式即为升序ASC
或者倒序DESC
。
分页则是将指定查询结果进行切割并且显示。
-
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
起始索引即为 (页码-1) * 记录数。记录数则是每页显示的记录数。
下面将上面两个语法结合进行演示:
这个语句就按年龄进行升序排序,并依次显示5条数据。
DCL
DCL(Data Control Language),数据控制语言,即用来管理数据库用户和数据库的访问权限。
这一块一般并不常用,暂时不展开介绍。
以上就是本文所有内容了,看完之后记得去找一些题目来练习一下。
网上的题目也可以,不过我个人推荐leetcode,题目分类比较好而且比较全,难度层次也比较清晰。
觉得有用的话就点个赞加关注吧!
发表评论