131.【MySQL_基础篇】(二)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 131.【MySQL_基础篇】

(二)、SQL 编程语言

1.SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾
  2. SQL语句可以使用空格缩进来增强语句的可读性。
  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  4. 注释:
  • 单行注释: - -注释内容 或 # 注释内容(MySQL特有)
  • 多行注释: / * 注释内容 * /

2.SQL 四大分类

  1. Data Definition Language(DDL):数据定义语言,用来定义数据库对象(数据库,表,字段)。
  2. Data Manipulation Language(DML): 数据操纵语言,用来对数据库表中的数据进行增删改
  3. Data Query Labguage(DQL): 数据查询语言,用来查询数据库中表的记录。
  4. Data Control Language(DCL): 数据控制语言,用来创建数据库用户、控制数据库的访问权限

3.DDL (数据定义语言)

(1).数据库操作 ->(增删改查)

1.查询

show databases;  #查询所有的数据库
select database(); #查询当前数据库

2. 创建

create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]; #假如不存在这个数据库我们就进行创建

3.删除

drop database [if exists] 数据库名; # 假如存在这个数据库就删除

4. 使用

use 数据库名;  # 使用我们指定的数据库

(2).表操作 -> (增删改查)
  1. DDL_表操作_查询

1. 查询当前数据库所有表

show tables; # 展示所有的表

2.查询表结果

DESC 表名;

3.查询指定表的建表语句

show create table 表名;

  1. DDL_表操作_创建

1.表的创建

create table 表名(
  字段1 字段1类型 [comment '字段1注释'],
  字段2 字段1类型 [comment '字段2注释'],
  字段3 字段3类型 [comment '字段3注释']
)[comment '表注释'];
create table tb_user(
   id int(4) comment '编号',
   name varchar(20) comment '姓名',
   age int(4) comment '年龄',
   gender varchar(4) comment '性别'
 ) comment '用户表';
  1. DDL_表操作_添加

1.给表中添加字段

alter table 表名 add 字段名 字段类型(长度) [comment 注释] [约束];
  1. DDL_表操作_修改

1.修改数据类型

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

2.修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 新/旧类型(长度) [comment 注释] [约束];
• 1

3.修改表名

alter table 表名 rename to 新表名;
  1. DDL_表操作_删除

1.删除字段

alter table 表名 drop 字段名;

2.删除表,数据和表结构都删除

drop table[if exists] 表名;

3.删除指定表,并重新创建该表

truncate table 表名;

4.DML (数据操纵语言)

DML英文全称是 Data Manipulation language (数据操纵语言),用来对数据库中的数据记录进行增删改操作。

  • 添加操作 (insert)
  • 修改操作(update)
  • 删除操作(delete)
(1).DML_添加数据
  1. 给指定字段添加数据
insert into (字段名1,字段名2...) values(值1,值2...);  # 给字段添加数据
  1. 给全部字段添加数据
insert into 表名 values(值1,值2...);
  1. 批量添加数据
insert into 表名(字段1,字段2...) values(值1,值2...),(值1,值2...)
insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...);

注意:

  1. 插入数据时,指定的字段顺序需要与值得顺序是一一对应的。
  2. 字符串和日期型数据应该包含在引号中。
  3. 插入的数据大小,应该在字段的规定范围内。
(2).DMl_修改数据

1.多个字段数据修改

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

2.单个字段数据修改

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

注意:

  1. 如果不加where条件的话,默认会修改整个表的数据。
  2. 如果加了where条件的话,默认只会修改单个字段的数据。
(3).DML_删除数据
delete from 表名 [where 条件]

注意:

  1. delete语句的条件可以有,也可以没有,如果没有的话,则会删除整张表的所有数据。
  2. delete 语句不能删除某一个字段的值(可以使用update)

5.DQL (数据查询语言) -执行顺序在这 ⭐

DQL 英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

/*
 Navicat Premium Data Transfer
 Source Server         : 我的MySQL
 Source Server Type    : MySQL
 Source Server Version : 60011
 Source Host           : localhost:3306
 Source Schema         : itcast
 Target Server Type    : MySQL
 Target Server Version : 60011
 File Encoding         : 65001
 Date: 29/08/2023 19:17:22
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp`  (
  `ID` int(11) NULL DEFAULT NULL COMMENT '编号',
  `WORKNO` varchar(10) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL COMMENT '工号',
  `NAME` varchar(10) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL COMMENT '姓名',
  `GENDER` char(1) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL COMMENT '性别',
  `AGE` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '年龄',
  `IDCARD` char(18) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL COMMENT '身份证号',
  `WORKADDRESS` varchar(50) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL COMMENT '工作地址',
  `ENTRYDATE` date NULL DEFAULT NULL COMMENT '入职时间'
) ENGINE = InnoDB CHARACTER SET = gbk COLLATE = gbk_chinese_ci COMMENT = '员工表' ROW_FORMAT = Compact;
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES (1, '1', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01');
INSERT INTO `emp` VALUES (2, '2', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01');
INSERT INTO `emp` VALUES (3, '3', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01');
INSERT INTO `emp` VALUES (4, '4', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01');
INSERT INTO `emp` VALUES (5, '5', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01');
INSERT INTO `emp` VALUES (6, '6', '杨道', '男', 28, '12345678931234567X', '北京', '2006-01-01');
INSERT INTO `emp` VALUES (7, '7', '范骚', '男', 40, '123456789212345670', '北京', '2005-05-01');
INSERT INTO `emp` VALUES (8, '8', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-01');
INSERT INTO `emp` VALUES (9, '9', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-01');
INSERT INTO `emp` VALUES (10, '10', '陈友凉', '男', 53, '123456789012345670', '上海', '2011-01-01');
INSERT INTO `emp` VALUES (11, '11', '张士诚', '男', 55, '123567897123465670', '江苏', '2015-05-01');
INSERT INTO `emp` VALUES (12, '12', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01');
INSERT INTO `emp` VALUES (13, '13', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-01');
INSERT INTO `emp` VALUES (14, '14', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-01');
INSERT INTO `emp` VALUES (15, '15', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01');
INSERT INTO `emp` VALUES (16, '16', '周芷若', '女', 18, NULL, '北京', '2012-06-01');
SET FOREIGN_KEY_CHECKS = 1;
(1).DQL语法

1.SQL的Select 执行顺序如下:

(1) FROM 
(3) JOIN 
(2) ON 
(4) WHERE 
(5)GROUP BY (开始使用SELECT中的别名,后面的语句中都可以使用) - 也就是非聚合函数可以使用了
(6) AVG,SUM.... 
(7)HAVING  
(8) SELECT 
(9) DISTINCT 
(10) ORDER BY 
(11)LIMIT

2.常见的SQL语法

select 
  字段列表
from
  表名列表
where 
  条件列表
group by
  分组字段列表
having
  分组后排序列表
order by
  排序字段列表
limit
  分页参数            
(2).DQL_基本查询

1.查询多个字段

select 字段1,字段2.. from 表名;

2.查询全部字段

select *from 表名;

3.设置别名

select 字段1 [as 别名1],字段2[as 别名2] ... from 表名;

4.去除重复记录

select distinct 字段列表 from 表名; 
(3).DQL_条件查询

1.基本语法

select 字段列表 from 表名 where 条件列表; 

2.条件

  1. 比较运算符
> >=   大于 
< <=   小于
=      等于
<> !=  不等于
between ... and ...  在某个范围之内包含本身
in(...)   在in之后的列表中的值,任选一个即可
like '占位符'  模糊匹配( 占位符是 _ 匹配单个字符, 占位符是 % 匹配任意个字符)
is null   值为空
is not null 值不为空
  1. 逻辑运算符
and &&   且条件
or  ||   或条件
not !    非,不是
(4).聚合函数

聚合函数: 将一列数据作为一个整体,进行纵向计算。

1.常见的聚合函数

count()    #统计数量->统计的是条数不是求和
max()      #最大值
min()      #最小值
avg()      #平均值
sum()      #求和

2.聚合函数语法

select 聚合函数(字段列表) from 表名;

注意:

  1. null值不参与聚合函数运算。
(5).DQL_分组查询

1.语法

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

2.where与having的区别

  • 执行时机 : where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。 也就是说where的优先级高
  • 判断条件不同 : where不能对聚合函数进行判断,而having可以。 也就是说having的优先级比较低
  1. 示列

3.1根据性别分组,同级男性员工 和 女性员工的数量

SELECT gender,COUNT(*) FROM emp GROUP BY gender;
• 1

3.2根据性别分组,同级男性员工 和 女性员工的平均年龄

SELECT gender,avg(age) FROM emp GROUP BY gender;
• 1

3.3查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

SELECT WORKADDRESS,COUNT(*) FROM emp WHERE age<45 GROUP BY WORKADDRESS HAVING  COUNT(*)>=3;
• 1

注意:

  1. 进行分组查询的时候,返回的字段通常是分组的条件,返回其他的没有意义。并不是说会报错只是没有意义。
(6).DQL_排序查询

1.支持多条件排序

先按照第一种字段进行排序,假如顺序相同那么就按照第二种字段进行排序。

select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2; #先按照第一种字段进行排序,假如顺序相同那么就按照第二种字段进行排序

2.排序方式

  • ASC: 升序(默认值)
  • DESC: 降序
  1. 示列

3.1根据年龄对公司员工进行升序排序

SELECT * FROM emp ORDER BY age ASC;

3.2 根据入职时间对员工进行降序排序

SELECT * FROM emp ORDER BY ENTRYDATE DESC;
• 1

3.3 根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

SELECT * FROM emp ORDER BY age ASC,ENTRYDATE DESC;
• 1

(7).DQL_分页查询

1.分页语法

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

注意:

  • 起始索引从0开始, 起始索引=(查询页码-1)*每页显示数
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是Limit
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10
  1. 示列

2.1 查询第一页员工数据,每页展示10条

SELECT * FROM emp LIMIT 10

2.2 查询第二页的十条数据

SELECT * FROM emp LIMIT 10,10
• 1

(8).DQL_示列

1.查询年龄为20,21,22,23岁的女性员工信息。

SELECT * FROM emp WHERE gender = '女' AND age in(20,21,22,23);
• 1

2.查询性别为男,并且年龄在 20-40 岁以内的姓名为三个字的员工。

SELECT * FROM emp WHERE gender = '男' AND name like'___' AND age BETWEEN 20 AND 40 
• 1

3.统计员工表中,年龄小于60岁的,男生员工和女性员工的人数

SELECT gender,count(*) FROM emp WHERE age<60 GROUP BY gender
• 1

4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按照入职降序排序

SELECT name,gender,age FROM emp WHERE age<=35 ORDER BY age ASC,entrydate DESC
• 1

5.查询性别为男,且年龄在20-40岁以内的前5个员工,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

SELECT * FROM emp WHERE gender='男' AND age BETWEEN 10 and 70 ORDER BY age asc, entrydate desc LIMIT 5
• 1

6. DCL (数据控制语言)

(1).DCL 介绍

DCL英文全称是 Data Controller Language (数据控制语言),用来管理数据库用户、控制数据库的访问权限。简单的说就是不同的用户具有不同的管理权限。

(2).DCL 管理用户
  1. 查询用户
use mysql;
select * from user;
  1. 创建用户
create use '用户名'@'主机名' identified by '密码'
  1. 修改用户
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码'; 
  1. 删除用户
drop user '用户名'@'主机名';

(3).DCL_权限控制

MySQL 中定义了很多中权限,但是常用的就以下几种。

1.查询权限

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

2.授予权限

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

3.撤销权限

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 关系型数据库 MySQL
mysql数据基础(1)
mysql数据基础(1)
24 1
|
8月前
|
存储 关系型数据库 MySQL
第02章 MySQL的数据目录【1.MySQL架构篇】【MySQL高级】
第02章 MySQL的数据目录【1.MySQL架构篇】【MySQL高级】
513 0
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】 MySQL数据库基础
【MySQL】 MySQL数据库基础
|
7月前
|
SQL 存储 关系型数据库
131.【MySQL_基础篇】(一)
131.【MySQL_基础篇】
43 0
|
7月前
|
SQL 存储 关系型数据库
131.【MySQL_基础篇】(三)
131.【MySQL_基础篇】
117 0
|
7月前
|
SQL 关系型数据库 MySQL
131.【MySQL_基础篇】(五)
131.【MySQL_基础篇】
48 0
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL 基础介绍】
【MySQL 基础介绍】
50 0
|
8月前
|
存储 关系型数据库 MySQL
1.MySQL架构篇【mysql高级】
1.MySQL架构篇【mysql高级】
73 0
|
7月前
|
SQL
131.【MySQL_基础篇】(四)
131.【MySQL_基础篇】
85 0
|
9月前
|
SQL JSON 关系型数据库
【MySQL】MySQL的优化(四)
【MySQL】MySQL的优化(四)
56 0