SQL的基本语法

1、SQL语句可以单行或者多行书写,以分号结尾。

2、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

3、注释:

1) 单行注释:-- 注释内容 或 #注释内容(MySQL独有)

2) 多杭注释:/* 注释内容*/

 

 

SQL分类:

DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库、表、列等;

DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改;

DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据);

DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全等级、创建用户;

DDL -- 操作数据库

1、查询

查看数据库:SHOW DATABASES;

2、创建

创建数据库:CREATE DATABASE 数据库名;

创建数据库(判断,如果不存在则创建):CARETE DATABASE IF NOT EXISTS 数据库名;

3、删除

删除数据库:DROP DATABASE 数据库名;

删除数据库(判断,如果存在则删除):DROP DATABASE IF EXISTS 数据库名;

4、使用数据库

使用数据库:USE 数据库名;

查看当前使用的数据库:SELECT DATABASE();

DDL -- 操作表

创建(Create/ 查询(Retrieve/ 修改(Update/ 删除(Delete

查询表:

查询当前数据库中的所有表:SHOW TABLES;

查询表结构:DESC 表名称;

创建表:

CREATE TABLE 表名称(

字段1 数据类型1...

字段n 数据类型n

);

 

 

数值类型

MySQL 支持所有标准 SQL 数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。

作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

 

 

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

注意char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

删除表

DROP TABLE 表名;

DROP TABLE IF EXISTS 表名;(删除表时先判断表是否存在)

修改表

1、修改表名:ALTER TABLE 表名 RENAME TO 新表名;

2、添加一列:ALTER TABLE 表名 ADD列名 数据类型;

3、修改数据类型:ALTER TABLE 表名 MODIFY 列名 新数据类型;

4、修改列名和数据类型:ALTER 表名 CHANGE 列名 新列名 数据类型;

5、删除列:ALTER TABLE 表名 DROP 列名;

 

DML -- 添加数据 (INSERT INTO

1、给指定的列添加数据:

(1) INSERT INTO 表名称(列名1,列名2, ...) values(1, 2, ...);

2、给全部列添加数据:

(1) INSERT INTO 表名称 VALUES(1, 2, ...);

3、批量添加数据:

(1) INSERT INTO 表名称(列名1,列名2, ...) VALUES(1, 2, ...), (1, 2, ...)...;

(2) INSERT INTO 表名称 VALUES(1, 2, ...), (1, 2, ...);

 

DML -- 修改数据(UPDATE...SET

1、修改表数据:

(1) UPDATE 表名 SET 列名1=1, 列名2=2, ...[WHERE 条件];

注意:修改语句中如果不加条件,则将所有数据都修改!

DML -- 删除数据(DELETE

1、删除表中的数据:

(1) DELETE FROM 表名 [WHERE 条件];

注意:删除语句中不加条件,则将表中所有的数据删除!

DQL -- 查询数据(SELECT

语法:

SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组列表 HAVING 分组后条件 ORDER BY 排序字段 LIMIT 分页限定;

 

1、查询单表中所有数据:

(1) SELECT 字段名 FROM 表名称;

(2) SELECT DISTINCT 字段名 FROM 表名称;(去重)

(3) SELECT 字段名 FROM 表名称;

 

2、单表条件查询:

 

 

1、查询单表中的总记录数:

(1) SELECT COUNT(*) FROM 表名称;

(2) SELECT COUNT(*) FROM 表名称 WHERE 条件[AND/OR ...];(多条件)

 

2、单表排序查询:

(1) SELECT 字段列表 FROM user ORDER BY 排序字段;

(2) 按照数学成绩降序排列,如果数学成绩形同时,则按英语成绩升序排列

SELECT * FROM stu ORDER BY math DESC, english ASC;

注意:多字段排序时中间用,”隔开,当前面的条件一样时才会启用后面的条件。

 

3、分组查询:将一列数据作为一个整体,进行纵向计算

语法:SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY分组字段名 [HAVING 分组后条件过滤];

 

 

 

Wherehaving的区别:

 

① 执行时机不一样:where是分组之前进行限定,不满足where条件的则不参与分组,而having是分组之后对结果进行过滤;

 

② 可判定的条件不一样:where不能对聚合函数进行判定,having可以;

 

注意:

 

① null不参与任何聚合函数的运算;

 

② 分组之后查询的字段为聚合函数和分组字段,查询其他字段无意义;

 

③ 执行顺序为:where > 聚合函数 > having;

 

 

 

1、单表分页查询:

 

分页的关键字为:LIMIT

 

语法:SELECT 字段列表 FROM 表名称LIMIT 索引开始, 查询的记录数;

 

起始索引:从0开始

 

计算公式:起始索引 = (当前页码 - 1) * 每页显示的条数

 

  

提示

① 分页查询limit MySQL数据库独有的(方言)

② Oracle分页查询使用 rownumber

③ SQL Server分页查询使用top

 

1、起别名:

AS: AS 也可以省略

① SELECT u.id, u.`name`, u.gender, u.address, u.`status` FROM user AS u;

② SELECT u.id, u.`name`, u.gender, u.address, u.`status` FROM user u;

③ select name, math as 数学成绩, english as 英语成绩 FROM stu;

 

 

 

 

posted @ 2022-04-04 20:59  A_shou  阅读(1913)  评论(1编辑  收藏  举报