1、SQL基础
1、SQL通用语法
1、SQL语句可以单行或多行书写,以分号结束
2、SQL语句可以使用空格/缩进来增强语句的可读性
3、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4、注释:
·单行注释:--注释内容或 # 注释内容(MySQL特有)
·多行注释:/ * 注释内容 * /
2、SQL分类
1、DDL---数据库&表操作
1、数据库操作
查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
创建
CREATE DATABASE [IF NOT EXISTS]数据库名[DEFAULT CHARSET 字符集][COLLATE 排序规则];
删除
DROP DATABASE [IF EXISTS]数据库名;
使用
USE 数据库名;
2、表操作
1、查询
1、查询当前数据库所有表
SHOW TABLES;
2、查询表结构
DESC 表名;
3、查询指定表的建表语句
SHOW CREATE TABLE 表名;
2、创建
CREATE TABLE 表明( 字段1 字段1类型[COMMENT 字段1注释] 字段2 字段2类型[COMMENT 字段2注释] ... )[COMMENT 表注释];
3、数据类型
4、修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释][约束];
1、修改数据类型
ALTER 表名 MODIFY 字段名 新数据类型(长度);
2、修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释][约束];
4、删除字段
ALTER TABLE 表名 DROP 字段名;
5、修改表名
ALTER TABLE 表名 RENAME TO 新表名;
6、删除表
删除表
DROP TABLE[IF EXISTS]表名;
删除指定表并重新创建
TRUNVATE TABLE 表名;
2、DML-数据表的增删改操作
->添加数据(INSERT)
->修改数据(UPDATE)
->删除数据(DELETE)
1、添加数据
1、给指定字段添加数据
INSERT INTO 表名(字段1,字段2....)VALUES(值1,值2,....);
2、给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2...);
3、批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);
tips:
·插入数据时,指定的字段顺序需要与值的顺序是一一对应的关系。
·字符串和日期数据应该包含在引号中。
·插入的数据大小,应该在字段的规定范围内。
2、修改数据
1、修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , ...[WHERE 条件];
tips: 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
2、删除数据
DELETE FROM 表名 [WHERE 条件];
tips:
·DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的数据。
·DELETE语句不能删除某一个字段的值(可以试用UPDATE)。
3、DQL-查询数据库中表的记录
1、语法
SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMT 分页参数
查询方式:(编写顺序)
·基本查询
·条件查询(WHERE)
·聚合函数(count,max,min,avg,sum)
·分组查询(GROUP BY)
·排序查询(ORDER BY)
·分页查询(LIMT)
2、基本查询
1、查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名; SELECT * FROM 表名;
2、设置别名
SELECT 字段1 [AS 别名1],字段2[AS 别名2]...FROM 表名;
3、去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
3、条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表
条件:
4、聚合函数
将一列数据作为一个整体,进行纵向计算。
常见的聚合函数:
语法
SELECT 聚合函数(字段列表) FROM 表名;
tips:null值不参与所有聚合函数运算
5、分组查询
语法
SELECT 字段列表 FROM 表名 [WHERE 条件]GROUP BY 分组字段名[HAVING 分组后过滤条件];
where与having的区别
-> 执行时机不同:where是分组之前进行过滤,不满足where条件的不参与分组;而having是分组之后对结果进行过滤。
->判断条件不同:where不能对聚合函数进行判断,而having可以。
tips:
·执行顺序:where>聚合函数>having。
·分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无意义。
6、排序查询
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排列方式1,字段2 排列方式2;
排序方式:
->ASC:升序(默认值)
->DESC:降序
tips:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
7、分页查询
语法
SELECT 字段列表 FROM 表名 LIMT 起始索引,查询记录数;
tips:
·起始索引从0开始,起始索引 = (查询页码-1)*每页现实记录数。
·分页查询时数据库的方言,不同的数据库有不同的实现,MySQL中是LIMT。
·如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
8、执行顺序
FROM -> WHERE -> GROUP BY HAVING -> SELECT -> ORDER BY LIMT
4、DCL-权限管理
1、查询用户
USE mysql; SELECT * FROM user;
2、创建用户
CREATE USER "用户名@主机名" IDENTIFIED BY "密码";
3、修改用户密码
ALTER USER "用户名@主机名" IDENTIFIED WITH mysql_native_password BY '新密码';
4、删除用户
DROP USER "用户名@主机名";
tips:
·主机名可以试用%通配。
·这类SQL开发人员操作比较少,主要是数据库管理员使用
5、权限控制
1、查询权限
SHOW GRANTS FOR "用户名@主机名";
2、授予权限
GRANT 权限列表 ON 数据库名.表名 TO "用户名@主机名";
3、撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM "用户名@主机名";
tips:
·多个权限之间,使用逗号分隔。
·授权时,数据库名和表名可以使用*进行通配,代表所有。