一、数据库与SQL初识
1.1 数据库是什么?有什么作用呢?
数据库就是指数据存储的库,作用就是组织数据并存储数据。
1.2 数据库如何组织数据呢?
按照:库 -> 表 -> 数据 三个层级进行组织
1.3 数据库软件是什么?我们学习哪种数据库软件呢?
数据库软件就是提供库->表->数据,这种数据组织形式的工具软件,也称之为数据库管理系统。
常见的数据库软件有:Oracle、MySQL、SQL Server、PostgreSQL、SQLite…
1.4 数据库和SQL的关系是?
数据库(软件)提供数据组织存储的能力,SQL语句则是操作数据、数据库的工具语言。
二、MySQL的安装与配置
MySQL安装详见:https://blog.csdn.net/m0_46983541/article/details/129823915?spm=1001.2014.3001.5501
MySQL图形化工具DBeaver安装与连接详见:https://blog.csdn.net/m0_46983541/article/details/129836322
三、SQL语言基础
3.1 SQL的概述
SQL全称: Structured Query Language,结构化查询语言,用于访问和处理数据库的标准的计算机语言。 SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。
经过多年发展,SQL以成为数据库领域统一的数据操作标准语言,可以说几乎市面上所有的数据库系统都支持使用SQL语言来操作。简单来说,SQL语言就是操作数据库的专用工具。
3.2 SQL语言分类
由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以,操作数据库的SQL语言,也基于功能,可以划分为4类。
名称 | 作用 |
---|---|
DDL(Data Definition Language) | 库的创建删除、表的创建删除等 |
DML(Data Manipulation Language) | 新增数据、删除数据、修改数据等 |
DCL(Data Control Language) | 新增用户、删除用户、密码修改、权限管理等 |
DQL(Data Query Language) | 基于需求查询和计算数据 |
3.3 SQL的语法特征
特征类别 | 特点 |
---|---|
语句大小写 | SQL语言,大小写不敏感 |
语句结束标志 | SQL可以单行或多行书写,最后以;号结束 |
注释 | 单行注释: – 注释内容(–后面一定要有一个空格);单行注释:# 注释内容(# 后面可以不加空格,推荐加上);多行注释:/* 注释内容 */ |
注释示例:
四、DDL(Data Definition Language)
4.1 DDL库管理语法
4.1.1 语法格式与作用
语法格式 | 作用 |
---|---|
SHOW DATABASES; | 查看数据库 |
USE 数据库名; | 使用数据库 |
CREATE DATABASE 数据库名 [CHARSET UTF8]; | 创建数据库 |
DROP DATABASE 数据库名; | 删除数据库 |
SELECT DATABASE(); | 查看当前使用的数据库 |
4.1.2 示例
#查看数据库
show databases;
# 创建一个test数据库
create database test charset utf8;
#使用test数据库
use test;
#查看当前使用数据库
select database();
#删除test数据库
drop database test;
4.2 DDL表管理语法
4.2.1 语法格式与作用
语法格式 | 作用 |
---|---|
SHOW TABLES; | 查看有哪些表 |
CREATE TABLE 表名称( 列名称 列类型, 列名称 列类型, … ); | 创建表 列类型: int(整数);float(浮点数); varchar(长度)(文本,长度为数字,做最大长度设置); date(日期类型);timestamp(时间戳类型)。 |
DROP TABLE 表名称; DROP TABLE IF EXISTS 表名称; | 删除表 |
4.2.2 示例
前提:使用一个数据库,比如:use test;
#创建表student
create table student(
id int,
name varchar(20)
);
#查看test库有哪些表
show tables;
#删除表student
drop table student;
五、DML(Data Manipulation Language)
DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新。主要有三种语法:INSERT数据插入、DELETE数据删除和UPDATE数据更新。
5.1 数据插入 INSERT
5.1.1 基础语法
5.1.2 示例
# 仅插入id数据
insert into student(id) values(1001),(1002),(1003);
# 插入多列数据
# 插入字符串数据,需要用单引号包围
insert into student(id,name,age) values(1004,'老李',18),(1005,'老赵',16);
# 插入全部列数据的快捷写法
# 插入全部列的时候,列的列表可以省略
insert into student values(1006,'老王',20);
5.1.3 注意
(1) 插入字符串数据,需要用单引号包围;
(2)插入全部列的时候,列的列表可以省略。
5.2 数据删除 DELETE
5.2.1 基础语法
5.2.2 示例
原student表内容
/*
* 条件判断:列 操作符 值
* 操作符:= < > <= >= != 等等
*/
# 删除id = 1的数据
delete from student where id = 1001;
# 删除name = '老夏'的数据
delete from student where name = '老夏';
# 删除age > 18的数据
delete from student where age > 18;
# 删除全部数据
delete from student;
5.3 数据更新 UPDATE
5.3.1 基础语法
5.3.2 示例
原student表数据
# 修改id = 1004的name为李云龙
update student set name = '李云龙' where id = 1004;
# 修改所有age为18
update student set age = 18;
六、DQL(Data Query Language)
6.1 基础查询
6.1.1 基础查询语法
含义是:从(FROM)表中,选择(SELECT)某些列进行展示。
6.1.2 示例
查询表的数据
# 查询student表的多列数据
select name,age from student;
#查询全部列的快捷写法
select * from student;
6.1.3 过滤查询的语法
6.1.4 示例
查询表的数据
#查询id和name两个列,age < 19
select id,name from student where age < 19;
#查询id = 1005的全部列
select * from student where id = 1005;
6.2 分组聚合
6.2.1 基础语法
6.2.2 常见聚合函数
6.2.3 示例
# 创建teacher表
create table teacher(
id int,
name varchar(20),
age int,
gender varchar(10)
)
# 插入数据
insert into teacher values(10001,'李老师',30,'男'),(10002,'宋老师',40,'女'),
(10003,'崔老师',45,'男'),(10004,'王老师',33,'女'),(10005,'杨老师',35,'男');
# 查询teacher表数据
select * from teacher;
# 按性别分组,统计各组人数
select gender,count(*) from teacher group by gender;
# 按性别分组,统计平均年龄
select gender,avg(age) from teacher group by gender;
# 按性别分组,统计最大和最小年龄
select gender,max(age),min(age) from teacher group by gender;
6.2.4 注意
SELECT中,除了聚合函数外,GROUP BY 了哪个列,哪个列在能出现在SELECT中。
示例:
# SELECT中,除了聚合函数外,GROUP BY 了哪个列,哪个列在能出现在SELECT中
select name,max(age),min(age) from teacher group by gender;
6.3 排序分页
可以对查询的结果,使用ORDER BY 关键字,指定某个列进行排序。
6.3.1 基础语法
6.3.2 示例
# 按年龄升序排列
select * from teacher order by age asc;
# 按年龄降序排列
select * from teacher order by age desc;
# 查询id > 10003的数据,并按age升序排列
select * from teacher where id > 10003 order by age asc;
# 查询结果只保留3条
select * from teacher limit 3;
# 查询年龄最大的3位老师
select * from teacher order by age desc limit 3;
# 根据age列查询第3条开始后2条数据
select * from teacher order by age limit 3,2;
6.3.3 注意
(1)WHERE、GROUP BY、ORDER BY、 LIMIT均可按需求省略
(2)SELECT 和 FROM 是必写的
(3)执行顺序:FROM -> WHERE -> GROUP BY和聚合函数 -> SELECT -> ORDER BY -> LIMIT;
6.4 JOIN关联
6.4.1 准备关联表格
# 创建teacher表
create table teacher(
id int,
name varchar(20),
age int,
class_id int
)
# 插入老师数据
insert into teacher values(10001,'李老师',30,3),(10002,'宋老师',40,1),
(10003,'崔老师',45,1),(10004,'王老师',33,3),(10005,'杨老师',35,2);
select * from teacher;
# 创建class表
create table class(
id int,
name varchar(20)
)
# 插入班级数据
insert into class values(1,'理科一班'),(2,'理科二班'),(3,'理科三班');
select * from class;
6.4.2 多表查询-FROM多表
6.4.2.1 基础的FROM多表语法:
直接在FROM中写多个表,通过AS可以给出表别名(可以省略)。
6.4.2.2 示例
# 查询老师信息,并同步老师所在班级(非含缩写形式)
select teacher.*,class.name from teacher,class where teacher.class_id = class.id;
# 查询老师信息,并同步老师所在班级(缩写形式)
select t.*,c.name from teacher as t,class as c where t.class_id = c.id;
# 查询老师信息,并同步老师所在班级(缩写形式,省略as)
select t.*,c.name from teacher t,class c where t.class_id = c.id;
查询结果同上。
6.4.2.3 注意
不推荐使用,因为会先产生笛卡尔集,然后再过滤,效率低下。
如不加关联条件情况下:
# 查询老师信息,并同步老师所在班级(非含缩写形式)
select teacher.*,class.name from teacher,class;
6.5 内关联
直接使用FROM多表,尽管可以得到想要的结果,但是问题在于:它会让参与的表先产生笛卡尔积,然后再WHERE过滤,性能不太好。改进方式可以使用JOIN关联的写法,JOIN分为内、外两种关联方式。
6.5.1 基础语法
6.5.2 关联表格
6.5.3 示例
# 内关联查询(inner可以省略)
select t.*,c.name from teacher as t inner join class as c on t.class_id = c.id;
6.5.4 注意
内关联是交集模式,即必须双向匹配才可以,因此非匹配部分不显示,若想显示,可以用外关联方式。
6.6 外关联
关联表格同上。
6.6.1 基础语法
外关联分左右,必须选择LEFT JOIN(左外关联) 或者 RIGHT JOIN(右外关联), 二选一。
6.6.2 左外关联
# 左外关联(outer可以省略)
select t.*,c.name from teacher as t left outer join class as c on t.class_id = c.id;
6.6.3 右外关联
# 右外关联(outer可以省略)
select t.*,c.name from teacher as t right outer join class as c on t.class_id = c.id;
6.6.4 注意
(1)外关联分左右,以哪边为主,必须选择LEFT JOIN(左外关联) 或者 RIGHT JOIN(右外关联), 二选一。
(2)为主的表的全部数据都会显示在结果集中,未关联到的数据以NULL代替。
有帮助的话,整理不易,麻烦点赞收藏呦,感谢感谢!