MYSQL8.0基本和常用语法

目录

一、SQL简介

二、SQL是什么

三、SQL

四、重要术语与概念

五、数据定义语言【DDL data definition language】

1、CREATE TABLE 建表

2、ALTER TABLE 修改表

 3、DROP TABLE  删除表

4、DROP DATABASE  删除数据库

5、TRUNCATE TABLE 语句

六、数据操作语言【DML data manipulation language】 

1、INSERT 语法:用要插入数据、数据的列

2、Update 语法:用于修改表中的数据

3、DELETE 语法:句用于删除表中的行

七、查询语言【QL query language】:SELECT 

八、简单SQL

1、WHERE 子句

2、引号的使用

3、AND 和 OR 运算符 

4、ORDER BY 语句

5、LIMIT (MYSQL独有)

6、LIKE 操作符

5、(NOT) IN 操作符

6、(NOT)BETWEEN AND 操作符

7、Alias

8、EXISTS 运算符

九、GROUP BY 分组查询

十、子查询

十一、连接 JOIN

十二、UNION 操作符

十三、SQL语言内的函数运算


一、SQL简介

SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。

RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。

RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如Oracle、MySQL 以及 Microsoft Access。


二、SQL是什么

  • SQL 指结构化查询语言,全称是 Structured Query Language。

  • SQL 让你可以访问和处理数据库,包括数据插入、查询、更新和删除。

  • SQL 在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项 标准,在 1987 年成为国际标准化组织(ISO)标准。


三、SQL

  • 数据定义语言【DDL data definition language】

eg:主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构, 数据类型,表之间的链接和约束等初始化工作上,他们大多在建立或修改表时使用  

  • 查询语言【QL query language】

eg:SELECT 

  • 数据操作语言【DML data manipulation language】 

eg:UPDATE、INSERT、DELETE,就像它的名字,这些条命令是用来对数据库里的数据进行操作的语言。

  • 数据控制语言【DCL data control language】 

eg:是用来设置或更改数据库用户或角色权限的语句,包括(grant授权,revoke废除授权等)语句


四、重要术语与概念

Base Table 基表

  • 关系模型中的关系【物理存在的】 

View 视图 

  • 虚表 ,通过计算得出,不是物理存在的 

数据类型 NULL 

  • 保留字:空值,NULL不是空字符串''也不是0,IS NULL,IS NOT NULL 做判断,不能使用=比较

UNIQUE 

  • 保留字:表的某个属性是否允许有重复值

DEFAULT 

  • 保留字:为某张表的某个属性默认缺省值[默认值,有时候数据不完整时,我们也要写入数据]

PRIMARY KEY 

  • 保留字:主键,PRIMARY KEY 就是NOT NULL + UNIQUE

FOREIGN KEY 

  • 保留字:外键 

CHECK 

  • 保留字:定义完整性约束,MYSQL8版本支持,低版本不支持,在开发过程中,我们基本上在 程序中约束


五、数据定义语言【DDL data definition language】

1、CREATE TABLE 建表

CREATE TABLE 语句用于创建数据库中的表。

CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)
 
  • AUTO_INCREMENT 自动递增

  • COMMENT 备注

  • CURRENT_TIMESTAMP 当前日期

2、ALTER TABLE 修改表

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

在表中添加列:ALTER TABLE table_nameADD column_name datatype删除表中的列:ALTER TABLE table_nameDROP COLUMN column_name
CREATE TABLE `user` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT
NULL COMMENT '用户登录名',
`password` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
COMMENT '用户密码md5加密',
`nickname` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT '昵称',
`realname` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT '真名',
`sex` tinyint DEFAULT '0' COMMENT '0未知,1男,2女',
`id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT '身份证号码',
`phone` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
COMMENT '绑定手机号码',
`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT
NULL COMMENT '邮箱',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`money` decimal(15,4) DEFAULT '0.0000' COMMENT '钱',
`status` tinyint DEFAULT '1' COMMENT '0禁用,1正常',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '用户创建时间',
`updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
-- ON UPDATE 在更新之后,默认插入当前时间
PRIMARY KEY (`id`),
CHECK (`sex` in (0,1,2)) 
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;

    3、DROP TABLE  删除表

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除)

DROP TABLE 表名称

4、DROP DATABASE  删除数据库

DROP DATABASE 数据库名称

不要删库跑路!!!

5、TRUNCATE TABLE 语句

如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据)

TRUNCATE TABLE 表名称

慎用,不能回滚!


六、数据操作语言【DML data manipulation language】 

1、INSERT 语法:用要插入数据、数据的列

INSERT INTO 表名称 VALUES (值1, 值2,....)[,(值1, 值2,....),(值1, 值2,....)]INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

2、Update 语法:用于修改表中的数据

UPDATE 表名称 SET 列名称 = 新值 WHERE 条件 (qualification)

3、DELETE 语法:句用于删除表中的行

DELETE FROM 表名称 WHERE 条件 (qualification)

七、查询语言【QL query language】:SELECT 

SELECT用于从表中选取数据结果被存储在一个结果表中(称为结果集)

SELECT [DISTINCT] target-listFROM relation-listWHERE qualification
  • 关系列表 relation-list 【查询设计的表】 

  • 目标列表 target-list 【要查询的东西】 

  • 条件 qualification 【布尔表达式】

  • DISTINCT 可选字符,加了的话表明要求系统对查询结果的重复元组要消除。DISTINCT 一个字段和多个字段的区别,多个字段时有NULL 值会出现什么?

    target-list 为 * 表示查询所有属性


八、简单SQL

1、WHERE 子句

WHERE 子句用于规定选择的标准。如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

下面的运算符可在 WHERE 子句中使用:

2、引号的使用

请注意,在条件值周围使用的是单引号 ''。SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。加 上不会错,但是会隐式转化

3、AND 和 OR 运算符 

AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。 

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示记录。

通过()将and和or结合起来组成复杂的表达式 ((a>1 or b<1) and c>1))and d like "%?%" 

4、ORDER BY 语句

ORDER BY 语句用于对结果集进行排序(ASC 升序,DESC 降序)。

ORDER BY 语句用于根据指定的列对结果集进行排序。 

ORDER BY 语句默认按照升序对记录进行排序。

如果你希望按照降序对记录进行排序,可以使用 DESC 关键字。

如果多个字段排序,在第一列中有相同的值时,第二列才进行排序

5、LIMIT (MYSQL独有)

语法:SELECT 列名称 FROM 表名称 LIMIT N[,M]

LIMIT 限制返回条数 

如果只存在N等价于LIMIT 0,N ==> 查询从 第1(0+1)开始,返回N条 

如果N和M同时存在 查询从N+1开始 返回M条 

结合count函数,查询分页

N = (p-1)* n 

M = n 

比如第二页(p=2),每页10条(n=10) 那么N = 1*10, M = 10 

比如第五页(p=2),每页10条(n=10) 那么N = 5*10, M = 10 

需要程序去组装数据分页记录,SQL无法一条sql完成

6、LIKE 操作符

语法:SELECT column_name FROM table_name WHERE column_name LIKE pattern;

  • % 表示任何字符出现任意次数0->n个

  • _ 有且只有一个

5、(NOT) IN 操作符

语法:SELECT column_nameFROM table_nameWHERE column_name [NOT] IN (value1,value2,...);

6、(NOT)BETWEEN AND 操作符

语法:SELECT column_nameFROM table_nameWHERE column_name [NOT] BETWEEN value1 AND value2;

(NOT) BETWEEN 操作符选取(不)介于两个值之间的数据范围内的值。这些值可以是数值、或者日期

7、Alias

表的 SQL Alias 语法

SELECT column_name(s)FROM table_nameAS alias_name

列的 SQL Alias 语法

SELECT column_name AS alias_nameFROM table_name

8、EXISTS 运算符

语法:SELECT column_name(s)FROM table_nameWHERE EXISTS(SELECT column_name FROM table_name WHERE condition);

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。



九、GROUP BY 分组查询

结构:SELECT target-listFROM relation-listWHERE qualificationGROUP BY grouping-list【将筛选后得到的结果通过group by进行分组得到grouping-list】HAVING group-qualification 【对group by 得到的组进行筛选】

概念化执行步骤 

  1. 把 FROM子句中出现的表进行笛卡尔乘积,拼接起来,单表不只执行

  2. 用where子句的qualification进行筛选

  3. 按照group-by将经过筛选后的元组进行分组

  4. 用having子句对分组进行筛选

  5. 将筛选后的组通过select子句进行运算,每一个组得到一个结果

  6. 要求,select 子句和having子句中的属性必须是group by分组属性值的子集


十、子查询

一个查询里面嵌套着查询就是子查询

  • 标量子查询

       查询结果就是单个的值

  • 表表达式

       查询结果是一张表

  • 公共表表达式

       在一些复杂的查询中,一个表表达式可能需要用到多次,将它只定义一次,多次调用结果

       用with子句可以定义公共表表达式【相当于是一个临时视图】查询结果是一张表


十一、连接 JOIN

  • 笛卡尔乘积

结果模式包括进行操作的两个表的所有属性,两张表的每条元组之间两两拼接 

  • 条件连接操作

由笛卡尔乘积和选择操作的结合

结果模式和笛卡尔乘积的模式相同

连接操作的结果的元组数比笛卡尔乘积的结果元组要少

也称为theta-join

  • 等值连接操作

一种特殊的条件连接,连接条件只有等值的条件

结果模式和笛卡尔乘积的模式类似,把等值的属性去掉一列

自然连接:两张表在所有的公共属性上做等值连接,特殊的等值连接

  • Outer joins 外连接

           解决情况:在自然连接中不满足连接操作的元组想要保留下来

分类:

  1. 左外连接:把连接运算符的左边的所有元组都要保留,找不到匹配的补空值

  2. 右外连接 把连接运算符的右边的所有元组都保留下来,找不到匹配的补空值 

  3. 全外连接 把连接运算符的左右两边的所有元组都保留下来,找不到匹配的补空值


   

十二、UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时, 每条 SELECT 语句中的列的顺序必须相同。

UNION语法:SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

UNION ALL语法:SELECT column_name(s) FROM table_name1UNION ALLSELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。


   

十三、SQL语言内的函数运算

  • COUNT(*)

统计关系里面有多少元组

如果一列值email存在NULL,那么count(email)和count(*)会有什么区别

  • COUNT([DISTINCT]A)

统计关系属性A有多少个不同的值

  • SUM——求和

  • AVG——求平均值

  • MAX——求最大值

  • MIN——求最小值​

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值