目录
MySQL图形化管理工具
目前几个常用的MySQL图形化管理工具为:
- MySQL Workbench
- phpMyAdmin
- Navicat for MySQL
其中,本人学习此课程的工具为“Navicat for MySQL 11.1.13”,MySQL版本为8.0.32。
SQL语言的组成
在安装并配置好软件后要先理解好SQL语言的组成,其共分为4点
- 数据查询语言(DQL)主要用于查询数据,例:SELECT语句可查询数据库中的一条或多条数据
- 数据操作语言(DML)主要用于对表中的数据进行添加、删除、修改等操作,例如INSERT语句(向数据库表中插入一行或多行数据)、UPDATE语句(用于修改数据库表中已有的一行或多行数据)、DELETE语句(从数据库表中删除一行或多行数据)等。
- 数据定义语言(DDL)用于创建、修改和删除数据库对象,例如创建表、修改表结构、删除表等。例如:CREATE(用于创建数据库、数据表、视图、存储过程等)、ALTER(用于修改已有的数据表、视图、存储过程等)、DROP(用于删除数据库、数据表、视图、存储过程等)等。
- 数据控制语言(DCL)用于控制访问数据库的权限和安全性,例如:GRANT语句(用于授权用户或角色在指定的数据库对象上进行特定的操作)、REVOKE语句(用于撤销之前授予用户或角色的权限)、COMMIT语句(用于提交事务,并将之前所做的所有修改保存到数据库中)、ROLLBACK语句(用于撤销当前事务中所做的所有修改,并回滚到事务开始之前的状态)等。
SQL语言的主要特点
- SQL语言功能强大,风格统一,直观简洁,易学易用
- 高度非过程化
- 面向集合的操作方式
- 既是自含式语言,又是嵌入式语言,以同一种语法结构提供两种使用方式
- 大部分子句不分大小写
SQL语句在数据库中的基本操作
数据库的创建
使用CREATE DATABASE或CREATE SCHEMA命令创建数据库。
CREATE DATABASE mydb;
以上为使用 CREATE DATABASE [数据库名] 创建的名为“mydb”的数据库。
同时,可在 CREATE DATABASE 与 [数据库名] 中间加入 IF NOT EXISTS 语句来防止因为出现名字重复的数据库而报错。
CREATE DATABASE IF NOT EXISTS mydb;
数据库的查询
可使用以下语句查看MySQL服务器下所有的数据库
SHOW DATABASES;
可使用以下语句结构查看指定数据库的创建信息
SHOW CREATE DATABASE [数据库名];
SHOW CREATE DATABASE mydb;
注:以下数据库名为系统数据库,不建议随意修改其结构。
performance_schema
information_schema
mysql
数据库的选择
可使用 USE [数据库名] 来选择数据库,否则在不同数据库中的代码默认执行在新建查询所在的数据库中。
USE mydb;
数据库的删除
可使用 DROP DATABASE [数据库名] 来删除存在的数据库。
也可使用 DROP DATABASE IF EXISTS [数据库名] 来判定数据库是否存在?存在则删除,也防止删除的数据库因不存在而报错。
DROP DATABASE IF EXISTS mydb;
MySQL数据库的基本书写规则
-
语句要以英文分号 ; 结尾
-
语句不区分大小写
-
单词需要空格或换行进行分隔
- 常数(字符串、日期等)书写方法是固定的,字符串、日期需使用英文单引号 'xxx' 包起来
SQL语句在数据表中的基本操作
数据表的创建
使用 CREATE TABLE [表名] 命令可以创建表
CREATE TABLE mytable(
姓名 char(10) NOT NULL PRIMARY KEY,
年龄 int(10) NOT NULL,
性别 int(3) NOT NULL
);
NOT NULL || NULL:指定该列是否允许为空。如果不指定,则默认允许为空(NULL)。
PRIMARY KEY:表示将“姓名”列设置为主键。
数据的插入、更新、删除
插入
可使用 INSERT 或 REPLACE 语句在表中插入一行或多行数据
例:插入一条名为张三,年龄18岁,性别为1(男)的信息;
INSERT INTO mytable VALUES(
'张三',18,1
);
修改
可使用 UPDATE 语句修改单表或多表数据
例:将mytable表中名为张三的人的年龄修改为19岁;
UPDATE mytable
SET 年龄=19
WHERE 姓名='张三';
SET:根据 WHERE 子句中指定的条件对符合条件的数据进行修改。若语句无 WHERE 子句,则修改所有行。
WHERE :用于筛选数据,允许从表中选择特定的行,用于设定一定的条件。
删除
可使用 DELETE 语句删除数据
例:删除mytable表中姓名为李四的信息;
DELETE FROM mytable
WHERE 姓名="李四";
数据查询
基础查询
数据查询基本使用 SELECT 语句,其功能强大,有很多子句,但在语法上有着严格的排序。
例:查询class表中的所有信息;
SELECT*FROM class;
* :表示选择表的所有列
例:查询class表中所有的同学姓名及其成绩;
SELECT 姓名,成绩 FROM class;
列的别名
当希望查询结果中的列使用自己的标题时,可在列名后使用 AS 子句来更改查询结果的列名
例:查询class表中所有的同学姓名及其成绩,并将其查询结果列名显示为“学生成绩”及“C语言成绩”;
SELECT 姓名 AS 学生姓名,成绩 AS C语言成绩
FROM class;
替换查询结果的数据
例:查询class表中的学生是否成年,并将班级、姓名一并输出;
SELECT 班级,姓名,
CASE
WHEN 年龄 >=18 THEN '已成年'
ELSE '未成年'
END AS 是否成年
FROM class
注:第一张为运行结果,第二张为class表原数据;
WHERE子句
WHERE子句必须紧跟FROM子句之后
语句结构基本为 WHERE [判定运算]
其中判定运算又包含了 比较运算 逻辑运算 模式匹配 范围比较 空值比较
MySQL支持的比较运算符
=:等于 <=>:相等或等于空 <>:不等于
<:小于 <=:小于等于 !=:不等于
>:大于 >=:大于等于
例:查询class表中年龄大于等于18的学生信息;
SELECT*FROM class
WHERE 年龄>=18;
MySQL支持的逻辑运算符
NOT或! 逻辑非 OR或|| 逻辑或
AND或&& 逻辑与 XOR 逻辑异或
逻辑运算的结果为:1或0,分别代表 TRUE (真)及 FALSE (假),其使用方式与结构基本与JAVA、C等编程语言类似,这里就不过多阐述。
模式匹配介绍
主要使用 LIKE 运算符,用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar、text、datetime等类型的数据,返回逻辑值为 TRUE (真)或 FALSE (假)
使用 LIKE 进行模式匹配时,常使用 _ 或 % 进行模糊查询,% 代表0到多个字符, _ 代表单个字符。
例:查询class表中姓名开头第一个字为小的学生的信息;
SELECT * FROM class
WHERE 姓名 LIKE '小%';
注:_ 或 % 不一定要放在小的后面,也可放在前面,当然前提是小的前面要有字符。
范围比较
范围比较的关键字有 BETWEEN 及 IN 两个, BETWEEN 用于在一定范围内进行比较,IN 可以指定一个值表,当字段的值与值表中的任意一个值匹配时,则为 TRUE (真)否则为 FALSE (假)。
例:查询class表中2205~2206班的学生信息;
SELECT*FROM class
WHERE 班级 BETWEEN 2205 AND 2206;
例:查询class表中年龄为17、19岁的学生信息;
SELECT*FROM class
WHERE 年龄 IN (17 , 18);
空值比较
当想要确认一个表达式的值是否为空(NULL)时,可使用 IS NULL 关键字进行判断。
格式:[表达式] IS NULL //查询目标为空
[表达式] IS NOT NULL //查询目标不为空
例:查询class表中成绩值为空的学生的信息;
SELECT*FROM class
WHERE 成绩 IS NULL;
多表查询
多表连接
常用的连接方式有 JOIN 连接,使用 JOIN 关键字建立多表连接时,JOIN 子句中定义了如何使用JOIN 关键字连接表。
使用 JOIN 关键字的连接主要分为2种:内连接与外连接。
指定了 INNER 关键字的连接为内连接
指定了 OUTER 关键字的连接为外连接
格式为:
内连接 [表名1] INNER JOIN [表名2]
外连接 [表名1] {LEFT 或 RIGHT} OUTER JOIN [表名2]
两种连接都可在底下使用以下结构
ON [连接条件] | USING [列名]
分类、汇总、排序
聚合函数
SELECT 子句的相关表达式中可以包含聚合函数(aggregation function)
聚合函数常用与对一组数值进行计算,然后返回一个值。
注:除 COUNT 函数外,聚合函数 都会忽略空值吗,其常与 GROUP BY 子句一起使用。
COUNT函数
用于统计某个表中满足某个条件的行数或总行数。
例:查询class表中一共有几条数据;
SELECT COUNT(*)AS '目前已有数据数' FROM class;
MAX与MIN函数
用于求表达式中所有值的最大值与最小值。
例:查询class表中成绩最高分和最低分;
SELECT MAX(成绩),MIN(成绩) FROM class;
SUM与AVG函数
用于求表达式中所有值的和与平均值。
例:查询class表中成绩总和和平均分;
SELECT SUM(成绩)AS '总分',AVG(成绩)AS '平均分'
FROM class;
GROUP BY (分类)子句
主要用于根据字段进行分组
注:MySQL对GROUP BY子句进行了扩展,可在ORDER BY子句列后面使用列名+ ASC(升序)或DESC(降序) 子句指定排序方法。
例:查询class表,按班级分组进行升序排序;
SELECT 班级
FROM class
GROUP BY 班级
ORDER BY 班级 ASC;
因时间及个人水平不佳,故且先写至此处。
本文章作为“MySQL数据库技术”课程的基础语句及知识总结,由于笔者水平有限,或许有许多不足之处在所难免,敬请谅解。