SQL语法
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释
- 单行注释: --注释内容或#注释内容(MySQL特有)
- 多行注释:/ * 注释 * /
SQL分类
- DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库,表,列等
- DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改
- DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据)
- DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
DDL
DDL操作数据库:
-
查询
SHOW DATABASES;
-
创建
/*创建数据库*/ CREATE DATABASE 数据库名称; /*创建数据库(判断,如果不存在则创建)*/ CREATE DATABASE IF NOT EXISTS 数据库名称;
-
删除
--删除数据库 DROP DATABASE 数据库名称; --删除数据库(判断,如果存在则删除) DROP DATABASE IF EXISTS 数据库名称;
-
使用数据库
--查看当前使用的数据库 SELECT DATABASE(); --使用数据库 USE数据库名称;
DDL操作表:
-
查询表
--查询当前数据库下所有表的名称 SHOW TABLES; --查询表结构 DESC 表名称;
-
创建表
CREATE TABLE 表名( 字段1 数据类型1, 字段2 数据类型2, 字段3 数据类型3, ....... 字段n 数据类型n );
-
删除表
--删除表 DROP TABLE 表名; --删除表(判断,如果存在则删除) DROP TABLE IF EXISTS 表名;
-
修改表
--1.修改表名 ALTER TABLE 表名 RENAME TO 新的表名; --2.添加一列 ALTER TABLE 表名 ADD 列名 数据类型; --3.修改数据类型 ALTER TABLE 表名 MODIFY 列名 数据类型; --4.修改列名和数据类型 ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; --5.删除列 ALTER TABLE 表名 DROP 列名;
DML
-
添加数据
--a.给指定列添加数据 INSERT INTO 表名(列名1,列名2,列名3,...) VALUE(值1,值2,值3,...); --b.给全部列添加数据 INSERT INTO 表名 VALUE(值1,值2,值3,...); --C.批量添加数据 INSERT INTO 表名(列名1,列名2,列名3,...) VALUE(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...),...; INSERT INTO 表名 VALUE(值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...),...;
-
修改数据
UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件]
-
删除数据
DELETE FROM 表名 [WHERE 条件]
DQL
查询语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
●基础查询
●条件查询(WHERE)
●分组查询(GROUP BY)
●排序查询(ORDER BY)
●分页查询(LIMIT)
基础查询
--1.查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据
--2.去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
--3.起别名
AS: AS也可以省略
条件查询
SELECT 字段列表 FROM 表名 WHERE 条伴列表;
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1], 排序字段名2 [排序方式2]...;
排序方式:
●ASC:升序排列(默认值)
●DESC:降序排列
注意:如果有多个排序条件,当前边的条件值-样时,才会根据第二条件进行排序
聚合函数
分组查询
SELECT 字段列表 FROM 表名[WHERE 分组前条件限定] GROUP BY 分组字段名[HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where和having区别:
●执行时机不一样: where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
●可判断的条件不一样: where不能对聚合函数进行判断,having可以。
执行顺序: where >聚合函数> having
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
*计算公式:起始索引= (当前页码-1) 每页显示的条数
tips:
●分页查询 limit是MySQL数据库的方言
●Oracle 分页查询使用rownumber
●SQL Server分页查询使用top
合函数进行判断,having可以。
执行顺序: where >聚合函数> having
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
*计算公式:起始索引= (当前页码-1) 每页显示的条数
tips:
●分页查询 limit是MySQL数据库的方言
●Oracle 分页查询使用rownumber
●SQL Server分页查询使用top