MySQL连载一:SQL语句

本文详细介绍了SQL语言的基础操作,包括数据定义语言DDL(如创建、修改和删除数据库及表)、数据操作语言DML(添加、修改和删除数据)以及数据查询语言DQL(查询、排序和分页)。涵盖了创建表、修改表结构、基本和聚合查询,以及示例应用场景。

定义:

sql语句其实就是对数据库进行一系列操作的语言,全名为结构化查询语言。

通用语法及分类

DDL(数据定义语言)

定义:数据定义语言,用来定义数据库对象(数据库、表、字段)。

数据库操作

查询所有数据库:

SHOW DATABASES;

查询当前数据库:

 SELECT DATABASE();

 创建数据库:

CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [ COLLATE 排序规则];

 删除数据库:

DROP DATABASE [ IF EXISTS] 数据库名;

使用数据库:

USE 数据库名; 

 注意事项:

  • utf8编码可能占2个字节、3个字节、4个字节的字符,但mysql的utf8编码最多支持3字节的数据,而移动端的emoji表情数据是4个字节,无法存储,utf8mb4字符集可以解决这个问题。

 表操作

查询当前数据库所有的表:

SHOW TAVLES;

查询表结构:

DESC 表明; 

查询指定表的建表语句:

SHOW CREATE TABLE 表名; 

 创建表:

  1. CREATE TABLE 表名(
  2. 字段1 字段1类型 [COMMENT 字段1注释],
  3. 字段2 字段2类型 [COMMENT 字段2注释],
  4. 字段3 字段3类型 [COMMENT 字段3注释],
  5. ...
  6. 字段n 字段n类型 [COMMENT 字段n注释]
  7. )[ COMMENT 表注释 ];

 注意事项:

  • 最后一个字段后面没有逗号。

修改表名:

ALTER TABLE 表名 RENAME TO 新表名;

 删除表:

DROP TABLE [IF EXISTS] 表名;

删除表,并重新创建该表:

 TRUNCATE TABLE 表名;

添加字段:

 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

修改字段数据类型:

 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型:

 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

 删除字段:

ALTER TABLE 表名 DROP 字段名;

DML(数据操作语言)

定义:数据操作语言,用来对数据库表中的数据进行增删改。

添加数据

指定字段:

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

全部字段:

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

批量添加字段:

 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

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

 注意事项:

  • 字符串和日期类数据应该包含在单/双引号内
  • 插入的数据大小应该在字段数据类型的规定范围内

更新和删除数据

修改数据:

UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];

删除数据:

DELETE FROM 表名 [ WHERE 条件 ];

 DQL(数据查询语言)

定义:数据查询语言,用来查询数据库中表的记录。

语法:

SELECT

   字段列表

FROM

   表名字段

WHERE

   条件列表

GROUP BY

   分组字段列表

HAVING

   分组后的条件列表

ORDER BY

   排序字段列表

LIMIT

   分页参数 

基础查询

查询多个字段 :

SELECT 字段1, 字段2, 字段3, ... FROM 表名;

 SELECT * FROM 表名;

 注意事项:

  • 最后一个字段后不需要再加逗号

设置别名:

 SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;

 SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

去除重复记录:

SELECT DISTINCT 字段列表 FROM 表名;

转义:

 SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'

 条件查询

语法:

SELECT 字段列表 FROM 表名 WHERE 条件列表;

 条件:

 注意事项:

  • between...add...包含最小值和最大值
聚合查询(聚合函数)

常见聚合函数:

 语法:

SELECT 聚合函数(字段列表) FROM 表名;

 分组查询:

语法:

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ]; 

 where和having的区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

 注意事项:

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
排序查询

语法:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式:

  • ASC: 升序(默认)
  • DESC: 降序

注意事项:

  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
分页查询

 语法:

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

 注意事项:

  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10
 DQL执行顺序:

        FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT

综合案例:
 
# 查询年龄为20,21,22,23岁的员工信息
select * from emp where gender='女' and age in(20,21,22,23);

# 查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
select * from emp where gender='男' and age between 20 and 40 and name like '___';

# 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
select gender,count(*) from emp where age<60 group by gender;
# 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
select name,age from emp where age <= 35 order by age asc,entrydate desc;
# 查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值