一、SQL 语言概述
数据库就是指数据存储的库,作用就是组织数据并存储数据,数据库如按照:库 -> 表 -> 数据三个层级进行数据组织,而 SQL 语言,就是一种对数据库、数据进行操作、管理、查询的工具,通过SQL 语言,可以完成对数据的增删改查等操作。
数据库软件就是提供库 -> 表 -> 数据,这种数据组织形式的工具软件,也称之为数据库管理系统,常见的数据库软件有: Oracle 、 MySQL 、 SQLServer 、 PostgreSQL 、 SQLite ,本文使用MySQL 软件进行学习,同时用第三方图形化工具DBeaver操作 MySQL。
SQL 全称是“ Structured Query Language ”,即“结构化查询语言”,用于访问和处理数据库的标准的计算机语言。SQL 语言 1974 年由 Boyce 和 Chamberlin 提出,并首先在 IBM 公司研制的关系数据库系统 SystemR 上实现,经过多年发展, SQL 已经成为数据库领域统一的数据操作标准语言,几乎市面上所有的数据库系统都支持使用 SQL 语言来操作。
MySQL安装:手把手教你安装MySQL(最新版本安装)_哔哩哔哩_bilibili
DBeaver安装:【黑马程序员python教程,8天python从入门到精通,学python看这套就够了】 【精准空降到 03:06】 https://www.bilibili.com/video/BV1qW4y1a7fU/?p=130&share_source=copy_web&vd_source=b7e4ae388f33cefa375c8fb8789aa3bc&t=186
二、SQL基础语法
2.1 SQL 的语法特征
SQL 的语法特征:
- 大小写不敏感
- 字符串的值必须要用单引号包围起来
- 可以单行或多行书写,最后以分号( ; )号结束
- SQL 支持注释:
- 单行注释: -- 注释内容( -- 后面一定要有一个空格)
- 单行注释: # 注释内容( # 后面可以不加空格,推荐加上)
- 多行注释: /* 注释内容 */
我们打开DBeaver,来验证一下:
首先打开编辑器,如下图所示。
输入“SHOW DATABASES;”(查看数据库),如下图所示,无论是大写,小写,还是大小写混杂,得到的输出结果相同,证明SQL 确实大小写不敏感。
运用3种注释方式,运行正常:
2.2 SQL 语言的分类
由于数据库管理系统(数据库软件)功能众多,不仅仅是存储数据,还包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以,操作数据库的 SQL 语言,也基于功能,可以划分为 4 类:
- 数据定义: DDL ( Data Definition Language )
- 库的创建删除、表的创建删除等
- 数据操作: DML ( Data Manipulation Language )
- 新增数据、删除数据、修改数据等
- 数据控制: DCL ( Data Control Language )
- 新增用户、删除用户、密码修改、权限管理等
- 数据查询: DQL ( Data Query Language )
- 基于需求查询和计算数据
2.2.1 DDL(数据定义)
2.2.1.1 DDL库管理
基础语法:
SHOW DATABASES; # 查看数据库
USE 数据库名称; # 使用数据库
CREATE DATABASE 数据库名称 [CHARSET UTF8]; # 创建数据库,方框[ ]的意思是里面的内容是可选的
DROP DATABASE 数据库名称; # 删除数据库
SELECT DATABASE(); # 查看当前使用的数据库
我们在DBeaver中应用一下DDL库管理基础语法:
1.创建数据库test
create database test charset utf8;-- 创建数据库test
运行后:
2.创建数据库后,我们接着查看数据库,验证数据库test是否已存在。
create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
运行后:
3.使用数据库test,再查看当前使用的数据库是否是test
create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
use test;-- 使用数据库test
select database ();-- 查看当前使用的数据库
运行后:
4.删除数据库test后,我们接着查看数据库,验证数据库test是否已不存在。
create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
use test;-- 使用数据库test
select database ();-- 查看当前使用的数据库
drop database test;-- 删除数据库test
show databases;-- 查看数据库
运行后:
2.1.1.2 DDL表管理
基础语法:
SHOW TABLES; # 查看表(需要先选择数据库)
CREATE TABLE 表名称 (
列名称 列类型,
列名称 列类型,
……
); # 创建表
DROP TABLE 表名称; # 删除表
DROP TABLE IF EXISTS 表名称; # 删除表
其中在创建表时提到了列类型,列类型有:
- int --整数
- float --浮点数
- varchar(长度) --文本,长度为数字,作最大长度限制
- data --日期类型
- timestamp --时间戳类型
我们在DBeaver中应用一下DDL表管理基础语法:
1.在前面建立的数据库test中建立表student,然后查看。
use test;# 一定先选择数据库
create table student(id int,name varchar(10),age int
);
show tables;
运行后:
2.在左边数据库导航栏中打开表student查看。
3.删除表student(在2.2.1DDL中我们只学习基础语法,在后面学习添加数据)
注意:在第2步中,打开了表student,要关闭表student后才能删除。
2.2.2 DML(数据操作)
关键字:
- 插入 INSERT
- 删除 DELETE
- 更新 UPDATE
基础语法:
# 数据插入
INSERT INTO 表[(列1,列2,列3,列4,……,列N)] VALUES(值1,值2,值3,值
4,……,值N)[,(值1,值2,值3,值4,……,值N),……,(值1,值2,值3,值4,……,值N)]; #方框[ ]的意思是里面的内容是可选的
# 数据删除
DELETE FROM 表名称 [WHERE 条件判断];
#数据更新
UPDATE 表名称 SET 列=值 [WHERE 条件判断];
条件判断:列 操作符 值
操作符:= 、<、 >、 <=、 >=、 !=
DML语法应用:
1.在数据库test表student中插入数据。
use test;
create table student(ID int,name varchar(10),age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
# 仅插入ID列数据
insert into student (ID) values(04),(05);
运行后在左边数据库导航栏中打开表student查看,可以看到,2次插入数据成功,仅插入的ID数据“04”和“05”所对应的name和age为空。
如果我们要插入的数据,每组都包括表中所有属性,可以写得更简便。
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
可以写成:
# 插入全部列数据
insert into student values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
这也是列名加上了方括号的原因。
2.在表student中删除数据。
use test;
create table student(ID int,name varchar(10),age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
# 仅插入ID列数据
insert into student (ID) values(04),(05);
#删除name为乔恩的数据
delete from student where name='乔恩';
#删除age<3的数据
delete from student where age<3;
运行后:
注意:
# 数据删除
DELETE FROM 表名称 [WHERE 条件判断]
在数据删除的语法中,“WHERE 条件判断”在方框内,是可选的,如果我们不选,就会删除全部数据。
3.更新表student中的数据。
use test;
create table student(ID int,name varchar(10),age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23)
#将ID=03的name修改为Mary
update student set name='Mary' where ID=03;
运行后:
2.2.3 DQL(数据查询)
下面我们将从基础查询、分组聚合、排序分页3个方面认识DQL。
我们先建立一个表info:
use test;
create table info(ID int,name varchar(10),sex varchar(10),age int
);
insert into info(ID,name,sex,age) values(01,'张三','男',26),(02,'李四','女',16),(03,'王五','男',56),(04,'小明','男',6),(05,'coco','女',36);
生成的图表:
下面的操作基于此表。
2.2.3.1基础查询
通过 SELECT 关键字开头的 SQL 语句,进行数据的基础查询,语法如下:
SELECT 字段列表 |* FROM 表; #从(FROM)表中选择(SELECT )某些列进行展示
SELECT 字段列表 |* FROM 表 WHERE 条件判断; #从(FROM)表中选择(SELECT )某些符合条件的列进行展示 ,也称为过滤
基于表info进行查询:
代码:
#查询name和age两个列
select name,age from info;
#查询全部列
select ID,name,sex,age from info;
#查询全部列的简便写法
select * from info;
过滤查询:
代码:
#查询ID和name两个列,年龄<30岁
select ID,name from info where age<30;
#查询全部列,name为coco
select ID,name,sex,age from info where name='coco';
#简便写法
select * from info where name='coco';
2.2.3.2分组聚合
分组聚合应用场景非常多,如:统计班级中,男生和女生的人数。按需要分组并统计每个组的人数,这就称之为:分组聚合。
基础语法:
SELECT 字段 | 聚合函数 FROM 表 [WHERE 条件判断] GROUP BY 列;
聚合函数:
- SUM(列) 求和
- AVG(列) 求平均值
- MIN(列) 求最小值
- MAX(列) 求最大值
- COUNT(列 | *) 求数量
基于表info进行分组查询:
注意:SELECT 中,除了聚合函数外, GROUP BY后面出现了哪个列,哪个列在能出现SELECT 中。
代码:
#按照性别分组,统计各组人数
select sex ,count(*) from info group by sex;
#按照性别分组,统计平均年龄
select sex,avg(age) from info group by sex;
#按照性别分组,统计最大最小年龄
select sex,max(age),min(age) from info group by sex;
2.2.3.3排序分页
使用 ORDER BY 关键字可以对查询的结果指定某个列进行排序。
语法:
SELECT 字段 | 聚合函数 FROM 表
WHERE 条件判断
GROUP BY 列
ORDER BY 列 [ASC|DESC];
基于表info进行查询,并对查询结果进行排序:
代码:
#按照年龄升序排列结果
select * from info order by age asc;
#按照ID降序排列结果
select * from info order by ID desc;
使用 LIMIT 关键字可以对查询结果进行数量限制或分页显示。
语法:
SELECT 字段 | 聚合函数 FROM 表
WHERE 条件判断
GROUP BY 列
ORDER BY 列 [ASC|DESC]
LIMIT n [,m];
基于表info进行查询,并对查询结果进行限制:
代码:
#查询结果只保留3条
select * from info limit 3;
#找出年龄最大的2个人
select * from info order by age desc limit 2;
#从第3条开始,取后面2条
select * from info limit 3,2;
注意:
- 关键字WHERE 、 GROUP BY 、 ORDER BY 、 LIMIT 均可按需求省略。
- SELECT 和 FROM 是必写的。
- 执行顺序:FROM -> WHERE -> GROUP BY 和聚合函数 ->SELECT -> ORDER BY -> LIMIT