mysql 基本操作总结 Ref

文章目录

  • mysql 基本操作 Ref
  • 0 sql的执行顺序——from [on]->where->group by -> having -> select -> order by
  • 1 表操作
    • 1.1 创建table
    • 1.2 向table中添加内容
    • 1.3 删除表
    • 1.4 修改列名
  • 2 连接操作
    • 2.1 将两个表做笛卡尔积——join,left join,inner join
    • 2.2 合并行(合并多个select语句得到的结果)——union 和 union all
  • 3 生成表操作
    • 3.1 select中保持唯一——distinct关键字
    • 3.2 聚合表——group by,经常和sum、count等函数一起使用
    • 3.3 对已生成的表进行筛选——having
  • 4 处理特定业务需求的函数(处理一列数据)
    • 4.1 求所选行(字段)的值的总和——sum()
    • 4.2 求所选行(字段)的行数——count()
    • 4.3 对日期的操作——date_add(), date_format()
    • 4.4 为null赋值——coalesce(列名, 要新赋的值)
    • 4.5 条件语句——case when 条件判断 then 结果1 (else 结果2) end

mysql 基本操作 Ref

0 sql的执行顺序——from [on]->where->group by -> having -> select -> order by

mysql 基本操作总结 Ref_第1张图片

1 表操作

1.1 创建table

create table table_name(
column1 int,
column2 varchar(255),
column3 date
)

1.2 向table中添加内容

#添加列
alter table 表名 add 列名 id int default 默认值 位置(例如first, after sex);
#为表中所有列添加值
insert into table_name values (value1, value2, value3,...);
#为表中特定列添加值
insert into table_name (column1, column2, column3,...) values (value1, value2, value3,...);

1.3 删除表

#删除整个表
drop table 表名;
#删除表中的某一列
delete from 表名称 where 列名称 =;
#删除表中内容,保留行的定义
truncate table 表名;

1.4 修改列名

alter table 表名 change column 旧列名 新列名 新列名格式;

2 连接操作

2.1 将两个表做笛卡尔积——join,left join,inner join

  • 概念:LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

2.2 合并行(合并多个select语句得到的结果)——union 和 union all

3 生成表操作

3.1 select中保持唯一——distinct关键字

  • 和select一起使用,保留唯一记录

3.2 聚合表——group by,经常和sum、count等函数一起使用

https://www.runoob.com/sql/sql-groupby.html

  • 通常和count() sum()等聚合函数连起来用

SELECT site_id, SUM(access_log.count) AS nums FROM access_log GROUP BY site_id;

3.3 对已生成的表进行筛选——having

/*
logins 表:
+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| user_id       | int     |
| client_id     | int     |
| login_date    | date    |
+---------------+---------+
*/
/*
编写一个sql语句,查询登录新用户个数不少于2个的日期,结果返回日期login_date和登录新用户个数new_user_num,以login_date升序排序。*/
select
  t1.login_date,
  count(t2.user_id) as new_user_num
from
  (
  select distinct login_date
  from logins
  ) as t1
left join 
  (
  select user_id, min(login_date) as first_date
  from logins
  group by
  user_id
  ) as t2 
on t1.login_date = t2.first_date
group by t1.login_date
having new_user_num >= 2     #对已生成的表进行筛选
order by t1.login_date;

4 处理特定业务需求的函数(处理一列数据)

用于处理一列数据,所以一般用在select中

4.1 求所选行(字段)的值的总和——sum()

4.2 求所选行(字段)的行数——count()

  • SELECT COUNT(column_name) FROM table_name;

  • COUNT(*) 函数返回表中的记录数

4.3 对日期的操作——date_add(), date_format()

  • date_add(date,interval 1 day)

    date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

  • ==date_format()==根据date查询出String类的日期

    date_format(now(),'%Y-%m-%d') as date;
    DATE_FORMAT(NOW(),'%H:%i') as time; 
    DATE_FORMAT(NOW(),'%w') as week;
    

4.4 为null赋值——coalesce(列名, 要新赋的值)

select coalesce(name,'NULL') as name,
count(name) as cnt
from fruits
group by name

得到:
mysql 基本操作总结 Ref_第2张图片

4.5 条件语句——case when 条件判断 then 结果1 (else 结果2) end

case when e.sal = d.sal then 1 else 0 end)
#计算百分比
1 select (sum(
2     case when deptno = 10 then sal end)/sum(sal)
3 )*100 as pct
4 from emp

你可能感兴趣的:(笔记,mysql,数据库,sql)