SQL,全称为结构化查询语言(Structured Query Language),是一种用于管理关系数据库的标准计算机语言。它可以用于数据库的创建、查询、更新和修改等操作。
SQL语言包括数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)等部分。
-- 创建表
CREATE TABLE Students (
ID INT PRIMARY KEY,
Name VARCHAR(20),
Age INT
);
-- 插入数据
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 20);
-- 查询数据
SELECT * FROM Students;
-- 更新数据
UPDATE Students SET Age = 21 WHERE ID = 1;
-- 删除数据
DELETE FROM Students WHERE ID = 1;
SQL的关键字大小写不敏感,可以以单行或多行书写,空格/缩进–增强可读性,并以分号结束
。SQL的注释有两种方式:
--
或者#
注释开始,直到行尾。/*
开始,*/
结束。注意:
虽然SQL的关键字大小写不敏感。但是,对于字符串和字符数据类型的值,是区分大小写的。
但是推荐使用小写,方便
\g
或者\G
show databases;
\g
结尾_ show databases\g
和分号效果是一样的。\G
结尾_show databases\G
以一给信息为“一段”后换行,纵向排列的DDL(Data Definition Language,数据定义语言)语句: 数据定义语言,主要是进行定义数据库、表的结构、数据类型、表之间的链接等操作。 例如:关键字有 CREATE用于创建数据表和数据表、ALTER用于修改表、DROP用于删除库和表 等。
(1)查看MySQL服务器下的所以被创建出来的数据库
(2)查看当前数据库
SELECT DATABASE()
下方的NULL是因为,没有选择数据库
在DataGrip中
我们可以选择对应的数据库即可,或者切换数据库
(3)查看指定的数据库的创建信息
show create database 数据库名称
;
创建: CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]
(1)简单创建:
有无反引号都可以
都存在
(2)不可创建同名的数据库,存在即不创建
create database if not exists 数据库名称
(3)设置指定的字符集
utf8 -存储长度 3个字节【不建议】
utf8mb4 - 4字节
create database ss default utf8mb4
如果已经存在了该库,但没指定字符集,那就指定通过修改的方式来了。
alter database 库名 default character set 字符集
DROP DATABASE [IF EXISTS] 数据库名
[IF EXISTS] 是为了进一步确认存在。
对数据库中的表结构进行增删查改等操作,在这之前我们需要准备一张数据表。
先use指令找到数据库,
(1)查询当前所有表
show tables;
(2)查询表结构
DESC 表名;
(3)查询指定表的建表语句
SHOW CREATE table 表名;
创建库–使用库–创建表
CREATE [字段类型] TABLE [if not exists]表名(
字段1 字段1类型[COMMENT 字段1注释]
字段2 字段2类型[COMMENT 字段2注释]
字段3 字段3类型[COMMENT 字段3注释]
...
字段n 字段n类型[COMMENT 字段n注释])
[COMMENT 表注释];
(1)添加字段
ALTER RABLE 表名 ADD 字段名 类型(长度) [comment 注释] [约束];
修改字段名和类型
ALTER RABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [comment 注释] [约束]
删除字段
ALTER TABLE 表名 DROP 字段名
删除:
删除表
(1)TROP TABLE [IF EXISTS]表名;
删除指定表,并重新创建该表 --剩下表结构,数据被清除
(2)TRUNCATE TABLE 表名;
(1)库操作
show databases;
create database 数据库名;
use 数据库名;
select database();
drop database 数据库名;
(2)表操作
show tables;
create table 表名(字段 字段类型 ,字段 字段类型);
desc 表名;
show create table 表名;
alter table 表名 add/modify/change/drop/rename to ..
drop table 表名;
DML(Data Manipulation Language)语句: 主要是对数据进行增加、删除、修改操作。常用的语句关键字有 INSERT添加数据、UPDATE修改数据、DELETE删除数据 等。
( 1 )给指定的字段添加
`INSERT INTO 表名(字段1.,,字段2)VALUES(值1.值2....);`
( 2 )给全部的字段添加数据
`INSERT INTO 表名 values(值1.。值b);`
( 3 ) 批量添加数据
INSERT INTO 表名(字段1.,,字段2)VALUES(值1.值2....)(值1.值2....).(值1.值2....);
INSERT INTO 表名 values(值1.。值n),(值1.。值n),(值1.。值n);
注意:
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值 2 ,[where 条件];
修改语句的条件可以有,也可无。如果没有条件,则修改整张表的所有数据。
成功完全替换掉
`DELETE FROM 表名 [WHERE 条件]`
注意: (1)条件可有可无,没有就是所有的数据
(2)DELETE 语句不能删除某个字段的值(可以用UPDATE)
(1)添加数据:
INSERT INTO 表名 (字段1,字段2,)VALUES(值1,值2,)[,(值1,值2,..)..];
(2)修改数据
UPDATE 表名 SET 字段1=值1 ,字段2 =值2 [WHERE 条件]l
(3)删除数据
DELETE FROM 表名 [WHERE 条件];
SELECT
字段列表 字段名[AS]别名
FROM
表名列表
WHERE
条件列表 分组之前过滤
GROUP BY
分组字段列表
HAVING
分组后条件列表 分组之后过滤
ORDER BY
排序字段列表 升序ASC 降序DESC
LIMIT
分页参数 起始索引从0开始
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
SELECT
字段列表
ORDER BY
排序字段列表
LIMIT
分页参数
(1)SELECT 字段1 ,字段2,字段3..FROM 表名;
(2)SELECT *FROM 表名;
SELECT* 的*为通配符,效率低
as可以省略写
SELECT 字段1[AS 别名1] ,字段2[AS 别名2],..FROM 表名;
真名和替换名使用
select id,id as stu_id,name,name as stu_name from username;
SELECT DISTINCT 字段列表 FROM 表名
去除的时候,不能在distinct前面有其他的字段,要不然“长度”不对呀,会报错
注意事项:
对于selct语句执行顺序 FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMIT
SELECT 字段列表 FROM 表名列表
‘>’ ‘>=’ '< ’ '<= ‘=’
不等于 '<> 或者 !=
BETWEEN…AND 介于某个范围之间
IN(…)介于in列表之间的某个值
LIKE 站位符 模糊查询【_匹配单个字符 ,%匹配多个字符】
IS NULL
AND 与 && 、 OR 与|| 、 NOT与 !,他们各自效果是一样的·
注意事项:
between ……and……语句 上下包含。
between…and不能写反
count 、max、 min、 avg、 sum
直接作用字段,且null值不参与聚合函数运算
SELECT 聚合函数(字段列表)FROM 表名
SELECT 字段列表 FROM[WHERE 条件]GROUP BY 分组字段名[HAVING 分组后的过滤条件];
在SQL中,WHERE,GROUP BY和HAVING都是用于筛选和分组数据的关键字,但它们的使用场景和方式有所不同。
WHERE子句用于筛选FROM子句中指定的操作所产生的行。它在数据分组之前进行筛选。WHERE不对聚合函数进行判断,但可以使用Having
GROUP BY子句用于对WHERE子句的输出进行分组。它可以将多行数据根据指定的列进行分组。
HAVING子句用于从分组的结果中筛选行。它在数据分组之后进行筛选,主要用于对分组后的数据进行条件筛选。
所以,如果你想在分组后对统计结果进行筛选,你必须使用HAVING,而不能使用WHERE
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 列名 运算符 值
GROUP BY 列名
HAVING 聚合函数(列名) 运算符 值;
注意事项
执行顺序:where > 聚合函数 > having
分组后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2,排序方式2;
(1)排序方式:
ASC:升序 (默认)
DESC:降序
(2)排序先按第一个方式,再第二个方式
SELECT 字段列表 FROM LIMIT 起始索引,查询记录数;
如果你想要实现分页查询,你可以使用OFFSET关键字,语法如下:
SELECT 列名
FROM 表名
LIMIT 数量 OFFSET 数量;
LIMIT语句的简写形式也是对的。如果你只想限制返回的记录数,而不指定起始索引,你可以直接写LIMIT 数量。
DCL(Data Control Language)是数据控制语言的缩写,主要用于控制不同数据的权限和访问级别,这种语言包括两个部分:GRANT和REVOKE。GRANT用于授予用户权限,而REVOKE用于撤销用户的权限。
use mysql;
SELECT * FROM user;
CREATE USER ‘用户名’@'主机名' IDENTIFIED BY '密码'
CREATE user 'GG'@'%' identified by '123456';
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'
ALTER USER 'HH'@'localhost' IDENTIFIED with mysql_native_password BY '10000';
DROP USER '用户名'@‘主机名’;
主机名可以用%通配;
主要有DBA数据库管理员使用
show grants for '用户名'@'主机名'
grant 权限列表 on
数据库名.表名 to '用户名'@'主机名'
revoke 权限列表 on
数据库名.表名 from
'用户名'@'主机名'
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';