目录
SQL
结构化查询语言(Structured Query Language),是对数据库的一种操作语言。我们可以使用SQL语句方便的对数据库中的数据 表 数据库进行操作。
SQL语句分类
- DDL:数据定义语言
- 用来定义数据库对象:数据库 、表、列等。
- 关键字:create drop alter truncate
- DML:数据操作语言
- 用来对数据库中表的数据进行增删改
- 关键字:insert delete update
- DQL:数据查询语言
- 对数据库进行查询操作的语言
- 关键字:select
- DCL:数据控制语言
- 用来定义数据库的访问权限和安全级别以及创建用户
- 关键字:GRANT REVOKE
- TCL:事务控制语言
- 用于控制数据库的事务操作
- 关键字:COMMIT SAVAPOINT ROLLBACK
DDL语句
通过DDL语句操作数据库: 创建库 显示库 修改库 删除库
通过DDL语句操作数据库表: 创建表 显示表 修改表 删除表操作
通过DDL语句操作数据库表中的列: 添加列 修改列 删除列
DDL语句操作数据库
//创建数据库
CREATE DATABASE 数据库名;
//判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名
//创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
//查看数据库
SHOW Database
//查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名
//修改数据库(修改字符集)
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
//删除数据库
DROP DATABASE 数据库名
//使用数据库
//查看正在使用的数据库
SELECT DATABASE();
//使用/切换数据库
USE 数据库名
DDL语句操作数据表
//创建表
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2…
);
//查看表
SHOW TABLES;
//查看表结构
DESC 表名;
//查看创建表的SQL语句
SHOW CREATE TABLE 表名;
//快速创建一个相同的表
CREATE TABLE 新表明 LIKE 旧表名
//删除表
DROP TABLE 表名;
//表存在则删除
DROP TABLE IF EXISTS 表名;
//修改表
//表中添加列
ALTER TABLE 表名 ADD 列名 类型;
//修改列类型
ALTER TABLE 表名 MODIFY 列名 新的类型;
//修改列名
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
//删除列
ALTER TABLE 表名 DROP 列名;
//修改表名
RENAME TABLE 表名 TO 新表名;
//修改字符集
ALTER TABLE 表名 character set 字符集;
DML语句
增
//插入全部字段
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);
//或者
INSERT INTO 表名 VALUES (值1, 值2, 值3…);
//注意:不写字段名的情况下,values后面值的顺序要和数据内字段的定义顺序要保持一致。
//注意:
//值与字段必须对应 ,个数相同,类型相同
//值的数据大小必须在字段的长度范围内
//除了数值类型外,其他的字段类型的值必须使用引号引起(建议单引号)
//如果要插入空值,可以不写字段,或者插入null
//批量插入数据
INSERT INTO 表名
(字段名1, 字段名2, ...)
VALUES
(值1, 值2, ...),
(值3, 值4, ...);
删
//不带条件的删除数据
DELETE FROM 表名;
//带条件的删除
DELETE FROM 表名 WHERE 字段名=值;
改
//不带条件的修改
UPDATE 表名 SET 字段名=值;
//带条件的修改
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
DQL语句
//简单查询
Select * from 表名
//查询某列数据
select 字段名1, 字段名2 ...from 表名
//别名查询
select 字段名1 as 别名,字段名2 as 别名 ... from 表名
//查询结果参与运算
select 列名1+固定值 from 表名
select 列名1+列名2 from 表名
去除重复值和null值处理:
//清除重复值
//清除字段名的关键字是DISTINCT
//一个select语句只能有一个distinct,且只能写在select后面
select distinct 字段名 from 表- IFNULL(表达式1,表达式2):若表达式1的值为null,则返回表达式2的结果.如果表达式1的值不为null,则返回表达式1的结果
DQL语句增强
- 判断一个变量是否为null(字段 is null )
- select * from 表名 where 列名 is null
- 比较运算符
- > 大于 < 小于 <= 小于等于 >= 大于等于
- = 等于 <> != 不等于
- select * from 表名 where 列名 比较运算符 比较值
- 逻辑运算符
- and(&&):多个条件同时满足
- or(||): 多个条件其中一个满足
- not(!) :不满足
- select * from 表名 where 条件1 逻辑运算符 条件2
- 范围
- in :in里面的每个数据都会作为一次条件,只要满足条件就会显示
- SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);
- between... and..:用于表示满足一个范围条件的数据,包头包尾
- select * from 表名 where 条件 between 值1 and 值2
- Like关键字:表示模糊查询,满足以下通配符的规则的数据就会显示出来
- % : 表示0个或多个字符(任意个字符)
- _ : 表示一个字符
//查询姓马的学生 select * from student where name like "马%"; //查询姓马的且为两个字符的学生 select * from student where name like "马_" //查询姓名含有马的学生 select * from student where name like"%马%"
- 排序(ORDER BY)
- 单列排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
- ASC: 升序, 是默认值
- DESC: 降序
- 组合排序
- 先按照第一个字段进行排序,如果第一个字段相同,按第二个字段进行排序,一次类推
-
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
- 聚合函数(写在select 后字段名的地方)
- count : 统计指定列记录数,记录为NULL的不统计
- sum : 计算指定列的数值和,如果不是数值类型,那么计算结果为0
- max : 计算指定列的最大值
- min : 计算指定列的最小值
- avg : 计算指定列的平均值,如果不是数值类型,那么计算结果为0
select 聚合函数(字段名) from 表名
- 分组
- GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,分组的目的是用来统计数量,一般分组和聚合函数一起使用.
- SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
- having与where的区别
- having是在分组后对数据进行过滤.
- where是在分组前对数据进行过滤
- having后面可以使用聚合函数
- where后面不可以使用聚合函数
limit语句
limit有限制的意思,Limit的作用是用于限制查询记录的条数,
- limit的语法格式:
- LIMIT offset,length ; 或者LIMIT length
- offset 是指跳过的记录数量 ( 学名: 偏移量 ) ,默认为0
- length 是指需要显示的总记录数
//跳过前面2条,取6条数据 SELECT * FROM student3 LIMIT 2,6;
数据库约束:
- 主键约束:PRIMARY KEY
- 用来唯一标识一条记录,每个表只能有一个主键
- 唯一约束:UNIQUE
- 唯一性,约束这个字段的值不能重复
- 非空约束:NOT NULL
- 约束某个字段不能为null值
- 默认值:DEFAULT
- 往表中添加数据的时候,不指定字段的数据,默认显示设定的值