简介
英文:Structured Query Language,简称SQL
结构化查询语言,是一门操作关系型数据库的编程语言
定义操作所有非关系型数据库的统一标准
对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为"方言"
通用语法
- SQL语句可以单行写或多行书写,以分号结尾
- MySQL数据库的SQL语句不区分大小写,关键字建议用大写
- 注释
- 单行注释:–注释内容 或 #注释内容(MySQL特有)
- 多行注释: /* 注释内容 */
分类
- DDL(definition) 数据定义语言,用来定义数据库对象:数据库,数据表等
- DML(manipulation)数据操作语言,用来对数据库中表的数据进行增删改
- DQL(query)数据库查询语言,用来查询数据库中表的数据
- DCL(control)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
DDL
–操作数据库
- 查询
SHOW DATABASES;
- 创建
CREATE DATABASE 数据库名称;
CREATE DATABASE IF NOT EXISTS 数据库名称;(不存在则创建)
- 删除
DROP DATABASE 数据库名称;
DROP DATABASE IF EXISTS 数据库名称;(存在则删除)
- 使用数据库
SELECT DATABASE(); 查看当前使用的数据库名称
USE 数据库名称; 使用数据库
–操作表
- 查询表
SHOW TABLES; 查询当前数据库下所有表名称
DESC 表名称; 查询表结构
- 创建表
CREATE TABLE 表名(
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
MySQL支持多种类型,分为三类:
数值,日期,字符串
类型 | 描述 |
---|---|
int | 整型 |
double | 浮点型 |
varchar | 字符串型(可变长度) |
date | 日期类型,yyyy-MM-dd |
datetime | yyyy-MM-dd HH-ss-mm |
char | 固定长度的字符串(缺少自动补空格) |
- 修改表
ALTER TABLE 表名 RENAME TO 新的表名; 修改表名
ALTER TABLE 表名 ADD 列名 数据类型; 添加一列
ALTER TABLE 表名 MODIFY 列名 新数据类型; 修改数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; 修改列名和数据类型
ALTER TABLE 表名 DROP 列名; 删除列
- 删除表
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名;
DML --操作表
- 添加
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…); 给指定列添加数据
INSERT INTO 表名(全部列名) VALUES(全部值和列名对好); 给全部列添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…; 批量添加数据
给字符串,日期类型添加值时建议使用英文单引号
- 修改
UPDATE 表名 SET 列名1=值1,列名2=值2,…[WHERE 条件];
不加where条件就是修改所有语句
- 删除
DELETE FROM 表名 [WHERE 条件];
DELETR FROM 表名 WHERE id in (2,3); 删除多行记录
不加条件就是删除所有数据
在开发中通常用下面那条语句来进行删除所有数据
TRUNCATE TABLE 表名; (属于DDL,删除表记录)
delete和truncate的区别
delete是一行一行数据删除
truncate是先删除表,在创建一张相同结构的表(先drop table 表,然后再create table 表)
DQL --查询表
基础查询
- 查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; 查询所有数据
- 去除重复记录
SELECT DISTINCT 字段名,字段名,…FROM 表名;
当有多个字段一起去重,字段值全部一样才会被去重
- 别名
SELECT 字段名1 AS 别名,字段名2 AS 别名… FROM 表名AS 表别名; 其中AS可以省略 用双引号
条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
排序方式:ASC:升序(默认) DESC: 降序
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
分组查询
聚合函数
概念:
将一列数据作为一个整体,进行纵向计算
分类:
语法:
SELECT 聚合函数名(列名) FROM 表;
注意:null值不参与所有聚合函数运算
如果字段值有null,mysql中null值和任何值相加为null,在聚合函数中不做统计,这时要用到mysql自带的函数ifnull函数
分组定义:
就是按照某一列或者某几列,把相同的数据进行合并输出
查询语法:
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意
在进行分组查询时,书写在select关键字后面的列名,要么出现在group by后面,要么使用聚合函数包含
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
SQL语句的执行顺序
from,where,group by,having,select,order by,limit