MySQL学习笔记

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子句]
  1. [where 条件表达式]: 可选部分,用于过滤哪些行将被包含在结果集中。只有满足条件表达式的行会被选出。对记录进行过滤,只保留满足条件的记录。

  2. [group by 列名]: 对结果集中的行进行分组。通常与聚合函数(如COUNT()SUM()AVG()等)一起使用,以对分组的数据进行汇总。

  3. [group by 列名]: 对结果集中的行进行分组

  4. [having 条件表达式]: 类似于WHERE子句,但HAVING子句用于过滤由GROUP BY子句分组的行。常用于对分组后的结果进行条件筛选。

  5. [order by 列名2 ASC|DESC]: 对查询结果进行排序。ASC表示按升序排序,而DESC表示按降序排序。

  6. [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 条件满足时应该设置的新值。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值