1、插入数据/新增数据记录
#不指定具体字段名
insert into 表名 values('值1',‘值2’,...)
表中定义了几个字段,insert语句中就应该对应有几个值,插入顺序与表中字段顺序一致
#插入到指定字段
insert into 表名(字段名1,字段名2,...)
values('值1',...),("记录2"),("记录3"),...
insert语句中字段名顺序可与表定义时的顺序不同,相应的插入的值的顺序也随着改变
2、修改数据/记录
update 表名
set 字段名1=取值1,字段名2=取值2,...
where 条件表达式
将指定表中满足where条件表达式的记录的字段的值按照set语句更新/修改
3、删除数据/记录
#写日志
delete from 表名
where 条件表达式
删除指定表中满足where条件表达式的记录(若不加where条件表达式则会删除指定表中的所有数据)
delete语句每次删除1行并在事务日志中为所删除的每行记录一项
#不写日志,完全清空指定表
truncate table 表名
4、单表查询
select 字段列
from 表名
[where 条件表达式]
[group by 列名]
[having 条件表达式]
[order by 列名2 ASC|DESC]
[limit子句]
-
[where 条件表达式]
: 可选部分,用于过滤哪些行将被包含在结果集中。只有满足条件表达式的行会被选出。对记录进行过滤,只保留满足条件的记录。 -
[group by 列名]
: 对结果集中的行进行分组。通常与聚合函数(如COUNT()
、SUM()
、AVG()
等)一起使用,以对分组的数据进行汇总。 -
[group by 列名]
: 对结果集中的行进行分组 -
[having 条件表达式]
: 类似于WHERE
子句,但HAVING
子句用于过滤由GROUP BY
子句分组的行。常用于对分组后的结果进行条件筛选。 -
[order by 列名2 ASC|DESC]
: 对查询结果进行排序。ASC
表示按升序排序,而DESC
表示按降序排序。 -
[limit子句]
: 指定查询结果返回的行数。在MySQL中,LIMIT
子句用于此目的。其他数据库系统可能有不同的语法。
WHERE
子句是在数据分组之前执行的,而HAVING
子句是在分组之后执行的。这意味着HAVING
可以对分组后的结果进行条件限制,比如可以过滤掉某些分组,这种操作在WHERE
子句中是无法实现的。
如
SELECT column1, COUNT(*)
FROM table_name
WHERE column2 > 10 -- 先过滤
GROUP BY column1 -- 然后分组
HAVING COUNT(*) > 2 -- 在分组后过滤
ORDER BY column1 -- 排序
LIMIT 10; -- 最后限制结果数量
4.1简单查询
4.1.1去重存唯一
select distinct 字段名 from 表名
distinct关键字可以去除重复的查询记录,只保留唯一
4.2为表和字段取别名
select 字段名 [as] 别名 from 表名 [as] 别名
4.3 高级查询
4.3.1分组查询
select * from 表名
group by 字段
having 条件表达式
having表达式作用于分组后的记录,限制分组后输出的结果
where作用于表,作用于分组前
4.3.2对查询结果排序
select * from 表名
order by 字段名 [ASC|DESC]
按照字段名进行升序|降序
4.3.3限制查询结果数量
select * from 表名
order by 字段名
limit 2,8
limit表示从2+1行开始,取8行
5、多表查询
5.1内连接查询
5.1.1等值查询——join on
select *
from sc
join course
on sc.id =course.id
5.2外连接查询
5.2.1左连接——left join 右表名 on
select t.name,IFNULL(e.unique_id, 0)
from Employees t
left join EmployeeUNI e
on t.id=e.id
结果包含左表所有记录,若右表中没有满足连接条件的记录则返回null
IFNULL()
函数会检查e.unique_id
字段是否为 NULL。- 如果
e.unique_id
不是 NULL,那么函数返回该字段的值。 - 如果
e.unique_id
是 NULL,那么函数返回 0。
GROUP_CONCAT()
是 MySQL 中一个非常有用的聚合函数,它可以将来自多行的列值组合成一个单独的字符串。这个函数经常用在需要将多个记录合并成一个列表的场景,尤其是当你需要对结果进行分组时。
函数的基本语法如下:
GROUP_CONCAT(DISTINCT column_name ORDER BY column_name DESC SEPARATOR ', ')
DISTINCT
:可选,用来确保所有合并的值都是唯一的。column_name
:需要合并的列名。ORDER BY
:可选,用来排序合并的值。SEPARATOR
:用来分隔值的字符或字符串。默认','
UPDATE salary
SET
sex = CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END;
为什么 CASE
表达式后面加 sex
?
这是因为 CASE
表达式是用来评估 sex
列的当前值的。在 CASE
表达式中,sex
是一个列名,它代表 salary
表中的 sex
列。在 CASE
表达式内部,sex
不是关键词或标识符,而是一个普通的列名,用于指定要评估的条件列。
这里的 sex
只是指定了 CASE
表达式应该评估的列,而不是指代任何特定的值。在 CASE
表达式的每个 WHEN
分支中,sex
都是一个占位符,表示你要评估的是 salary
表中的 sex
列的值。在 ELSE
分支中,sex
不再是一个条件,而是一个普通的列名,用于指定当没有任何 WHEN
条件满足时应该设置的新值。