目录
DDL(Data Definition Language)数据库模式定义语言
DML(Data Manipulation Language)数据操纵语言
DCL(Data Control Language)数据控制语言
DDL(Data Definition Language)数据库模式定义语言
1查询所有数据库 show databases;
2查询当前数据库 select database() ;
3创建数据库 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则] ;
4删除数据库drop database [if exists] 数据库名 ;
5切换数据库use 数据库名 ;
6查询当前数据库所有表 show tables;
7查看指定表结构 desc 表名 ;
8查询指定表的建表语句 show create table 表名 ;
创建表结构
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
......
字段n 字段n类型 [COMMENT 字段n注释]
) [COMMENT 表注释] ;
例如
create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';
DML(Data Manipulation Language)数据操纵语言
给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
查询数据
select * from 表名;
修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
DQL(Data QueryLanguage)数据查询语言
基本查询(不带任何条件)
1查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;
注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。
2字段设置别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
3去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
条件查询(WHERE)
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
聚合函数(count、max、min、avg、sum)
SELECT 聚合函数(字段列表) FROM 表名 ;
分组查询(group by)
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];
--A.根据性别分组,统计男性员工和女性员工的数量
SELECT gender, COUNT(*) AS employee_count
FROM emp
GROUP BY gender;
--B.根据性别分组,统计男性员工和女性员工的平均年龄
SELECT gender, AVG(age) AS average_age
FROM emp
GROUP BY gender;
--C.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
注意,这里需要在SELECT子句中直接使用HAVING子句来过滤分组后的结果,而不是在WHERE子句中使用别名address_count,因为WHERE子句中不能使用聚合函数的结果。
SELECT workaddress, COUNT(*) AS address_count
FROM emp
WHERE age < 45
GROUP BY workaddress
HAVING COUNT(*) >= 3;
--D.统计各个工作地址上班的男性及女性员工的数量
SELECT workaddress, gender, COUNT(*) AS employee_count
FROM emp
GROUP BY gender, workaddress;
排序查询(order by)
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
分页查询(limit)
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
举例
--查询年龄为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个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
SELECT *
FROM emp
WHERE gender = '男'
AND age BETWEEN 20 AND 40
ORDER BY age ASC, entrydate ASC
LIMIT 5;
DCL(Data Control Language)数据控制语言
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
删除用户
DROP USER '用户名'@'主机名' ;
权限控制
查询权限
Show grants for ‘用户名’@’主机名’;
授予权限
Grant 权限列表 on 数据库名.表名 TO ‘用户名’@’主机名’;
撤销权限
Revoke 权限列表 ON 数据库名.表名 from ‘用户名’@’主机名’;
注意事项:
多个权限之间,使用逗号分隔
授权时,数据库名和表名可以使用*进行通配,代表所有。
编写顺序及执行顺序
编写顺序(一般遵循的顺序):
SELECT - 指定要选择的列。
FROM - 指定数据来源的表。
WHERE - 指定数据过滤的条件。
GROUP BY - 指定分组条件。
HAVING - 对分组后的结果进行过滤。
ORDER BY - 指定结果的排序方式。
LIMIT (或 TOP, OFFSET等) - 指定返回结果的数量限制。
SELECT column1, column2
FROM table_name
WHERE condition
GROUP BY column1
HAVING condition
ORDER BY column1
LIMIT 10;
执行顺序(SQL语句实际在数据库中的执行顺序):
FROM / JOIN - 确定查询的数据来源,包括表和任何连接。
WHERE - 应用条件过滤,以减少查询的数据量。
GROUP BY - 对过滤后的数据进行分组。
HAVING - 对分组后的结果进行条件过滤。
SELECT - 确定最终输出的列。
DISTINCT - 如果有DISTINCT关键字,则去除重复的行。
ORDER BY - 对最终的结果集进行排序。
LIMIT / OFFSET - 限制返回的行数,并指定从哪一行开始。
FROM table_name
WHERE condition
GROUP BY column1
HAVING condition
SELECT column1, column2
ORDER BY column1
LIMIT 10;
数据库优化器可能会根据实际情况重新安排执行顺序以优化性能。例如,如果WHERE子句中的某些条件能够快速地过滤大量数据,优化器可能会优先执行这些条件。
标签:语句,数据库,表名,笔记,查询,字段,sql,WHERE,SELECT From: https://blog.csdn.net/lonelyxxyo/article/details/140620235