SQL是一种结构化数据库语言,有固定的语句结构,因此记忆起来并不困难。本文主要介绍Mysql的相关知识。
一、数据库两大构成语言
组成它的语言最常用的有两类,数据定义语言DDL和数据操作语言DML,通俗易懂地讲,DDL用来定义数据库的结构或者表的结构,比如定义数据库的名称,有哪些字段等等;而DML则是对表中的具体数据进行增删改查等一系列操作的语言,比如删除某一行或者修改某个值等。我们日常使用DML更多,大概占90%。
(一)DDL
构建数据库的第一步是创建数据库,创建之后也可以对数据库结构进行修改,或者删除。表的创建,删除字段或者添加字段也同样是对结构的修改,它们分别对应Create(创建),Drop(删除),Alter(修改)这三个数据库定义语言,下面将对相应功能的语句进行介绍。
1. 创建数据库或者创建表
Create DATABASE <数据库名> charset=utf8;
-- charset=utf8是为了指定编码,mysql默认的编码无法读取中文,输入中文会乱码
-- 而utf8可以支持全世界所有国家的语言,定义之后输入中文不会乱码
Create table <表名>
( <字段名字> <数据类型> <可选约束> <无符号> <主键> <不为空> <自增>
--id int unsigned primary key not null auto_increment,
...
);
上述语句涉及到了SQL中的一些基础知识:
(1)mysql数据类型
int, bit 整数
decimal 小数
varchar,char (可变)字符串
date, time, datetime 日期时间
enum 枚举类型(比如性别,类型比较少的可以枚举
(2)mysql字段约束
primary key 主键约束
not null 非空约束(输入不能为空
unique 唯一约束 (比如身份证号
default 默认约束(比如性别,忘了填可以默认为男,如果后续发现错了可以修改
2. 删除数据库或表
-- 删除数据库
Drop DATABASE <数据库名>;
-- 删除表
Drop table <表名>;
3. 修改表结构
-- 给表添加一列
ALTER TABLE < 表名 > ADD COLUMN < 列的定义 >;
-- 删除表某列
ALTER TABLE < 表名 > DROP COLUMN < 列的定义 >;
-- 修改表某一列类型
ALTER TABLE <表名> MODIFY <列名> <要修改成为的类型>;
alter table user CHANGE new1 new4 int;
-- 修改表某一列名称
ALTER TABLE <表名> MODIFY <原列名> <新列名> <类型>;
(二)DML
DML用来查询或变更表中的记录,包括增(INSERT)删(DELETE)改(UPDATE)查(SELECT)。
1. 增,即在表中插入新的值
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
2. 删,即删除某一行
DELETE from <表名> where <条件>;
3. 改,即对指定行的某个值进行更新
UPDATE <表> SET <列1>=<值1>, <列2>=<值2>,... WHERE <条件>;
4. 查,是SQL中使用最多的语句,下面会对查询的使用进行详细的介绍。
二、SQL查询
(一)SQL语法结构与执行顺序
1. SQL语言的语法顺序如下:
select distinct <字段>
from <表名>
where <条件>
group by <分组字段>
having <条件>
order by <字段> DESC
limit <>;
2. SQL语句的执行顺序为:
from > where > group by > having > select的字段 > distinct > order by > limit
即先执行定位条件和分组条件,再将满足条件的字段提取出来,最后再对数据进行排序,limit可以约束返回结果的数量。
执行时,每个步骤都会产生一个中间表,并传入下一步作为输入,这个过程我们不可见,所以要想准确查询出想要的数据,就需要理解SQL的执行顺序。
(二)SQL基础查询
1. 各语句基本解析
DISTINCT:用于过滤重复值,筛选唯一值;
WHERE:定义过滤条件,可以筛选出满足条件的行;
GROUP BY:根据某列进行分组,要与聚合函数搭配使用,比如以性别分组,可以返回不同性别的各个聚合函数值,比如最大值,平均值等;
HAVING:也是过滤条件,与WHERE不同的是它在分组之后可以筛选出满足条件的组,比如均值大于0的组;
ORDER BY:可以使输出结果根据某字段升序或者降序排列,默认是升序;
2. SQL常用内置函数
算数函数:+,-,×,÷,ABS(),MOD(),ROUND()
字符串函数:CONCAT(),LENGTH(),CHAR_LENGTH(),LOWER(),UPPER(),REPLACE(),SUBSTRING()等
日期函数:CURRENT_DATE(),YEAR(),MONTH(),DAY(),HOUR(),MINITE(),SECOND()
转换函数:CAST(),DECIMAL()
聚合函数:MAX(),MIN(),COUNT(),SUM(),AVG()