在刷了上百道sql题后,发现所有的题目都是基于某一个或几个知识点来做考察的,所以理清基础的知识细节,才能在题目考察到任意知识点时,找到解决线索。

温故而知新,学习在于总结,于是我再次对已经学习过的mysql的知识进行梳理,得到基础进阶两篇知识框架的总结。如果对你有帮助,建议点赞收藏!

本文是MySQL基础知识的总结,主要涵盖增、删、改、查四个方面

内容大纲:

一、增

  • 创建数据库:create database 数据库名称
create database taobao;

  • 创建表:create table 表名(列 格式 null设置,·····),主键设置:primary key (主键列)
CREATE TABLE ProductIns(
product_id char(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER ,
regist_date DATE,
PRIMARY KEY (product_id));

  • 根据查询创建新表:create table 表名 as select ·············
create table user_lc AS select count(DISTINCT user_id) as "第一天新增用户数"
from userbehavior
where dates = '2017-11-25';

  • 创建新列:alter table 表名 add column 列名 格式
alter table lc_copy add column ListingId  varchar(20);

二、删(慎用)

  • 删除数据库:drop database 数据库名称
drop database school;

  • 删除数据表:drop table 表名
drop table product;

  • 只删数据不删表:delete from 表名(指定条件:+ where)
delete from product
where sale_price >=400

三、改

  • 修改表名:alter table 旧表名 rename to 新表名
alter table score rename to score2;

  • 向表中插入数据:insert into 表名(列名···)values(‘数据’,····)
INSERT INTO productins(id,name,type)
VALUES('001','T恤衫','衣服');

  • 从其他表复制数据插入:insert 新表 (列名···)select 列名··from 旧表
insert into producttype(pr_type,sum_sale,sum_purchase)
select pr_type,sum(sale),sum(purchase)
from product
group by type;

  • 修改列值:update 表名 set 列名 = 表达式

指定条件:+ where

多列更新:set 列名1 = 表达式,列名2= 表达式

update product set regist_date ='2009-10-10'
where product_id ='008';

四、查(重点)

基本select

  • 某列:select 列名 from 表名
select id from score;

  • 全表:select * from 表名
select * from score;

  • 去重:select distinct 列名 from 表名
--查询不同ID
select distinct id from score;--统计不同ID个数
select count(distinct id) from score;--优化写法
select count(*) from
(select distinct id from score) as a

聚合

  • count/sum/avg/max/min
-- 统计最大/最小/平均薪水
select  max(salary), min(salary),avg(salary)
from employee

分组

  • group by
--查询每个班平均成绩
select avg(score) from student
group by class;

筛选

  • where:指定行对应条件,不可用聚合函数
select score from student
where id ='001';

  • having:指定组对应条件,可用聚合函数
select avg(score) from student
group by class
having avg(score)>80;

排序

  • order by

升序:Asc 降序:Desc

多个排序:order by 列名1,列名2(从左到右优先原则)

SELECT 学号,成绩 from score2
ORDER BY 成绩 Desc;

  • limit:从查询结果中取出指定行

进阶:

limit N:返回 N 条记录

offset M:跳过 M 条记录,M 默认为 0

limit M,N:跳过M条记录,返回 N 条记录

SELECT 学号,成绩 from score2
ORDER BY 成绩 Desc
LIMIT 1,2;

表连接(重点)

两张学生表:

左表
右表

join/ inner join:内连接,左表右表都匹配的记录

SELECT a.id,年龄,性别
from student1 a join student2 b
on a.id=b.id;

left join :左连接,以左表位置准,向右表匹配对应字段,有多条则逐次列出,无匹配,则显示NULL。

SELECT a.id,年龄,性别
from student1 a LEFT JOIN student2 b
on a.id=b.id;

right join :右连接,以右表位置准,向左表匹配对应字段,有多条则逐次列出,无匹配,则显示NULL。

SELECT b.id,年龄,性别
from student1 a RIGHT JOIN student2 b
on a.id=b.id;

outer / full join:全连接,包含两个表全部连接结果,左、右表缺失的数据会显示为NULL。

cross join:交叉连接 / 笛卡尔积,生成3X3结果的表格

SELECT a.id,年龄,性别
from student1 a CROSS JOIN student2 b;

表合并

合并两表相同字段:

  • union:去重合并
  • union all:非去重合并
course
course2
-- 去重合并
select * from course
UNION
SELECT * from course2;

-- 非去重合并
select * from course
UNION ALL
SELECT * from course2;

视图

视图是不保存实际数据的临时表,相当于直接调用由select语句查询结果,在实际工作中,视图可以减少写sql语句时的嵌套。

create view 视图名称 as + select··········

示例:如下图,创建一个名为“用户行为”的临时表

create view 用户行为 as
select user_id,count(behavior)as 用户行为总数,
sum(if(behavior = 'pv',1,0))as 点击量,
sum(if(behavior = 'fav',1,0))as 收藏数,
sum(if(behavior = 'cart',1,0))as 加购数,
sum(if(behavior = 'buy',1,0))as 购买量
from userbehavior
group by user_id;

后续可以直接写sql语句调用该表

select
sum(点击量) as "总点击量",
sum(收藏数) as "总收藏数",
sum(加购数) as "总加购数",
sum(购买量) as "总购买量"
from 用户行为;

复杂查询

  • 子查询:也就是常说的嵌套,即将定义视图的select语句直接用于from子句中。子查询层数无上限。
score
select 学号
from (select * from score GROUP BY 学号)as a

  • 标量子查询:返回1行1列结果的子查询(可在select和where中使用)
-- 查询高于平均成绩的学号及对应信息
select *
from score
where 成绩>(select avg(成绩) from score);

  • 关联子查询:where中使用子查询
SELECT 学号,课程号,成绩
from score as s1
WHERE 成绩>(
SELECT avg(成绩)
FROM score as s2
-- 关联条件,按课程号来对表分组,同一组的数据,与这一组的平均成绩进行比较
WHERE s1.课程号 = s2.课程号
GROUP BY 课程号);

sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础相关推荐

  1. sql server 多条记录数据合并为一条_面试必备sql知识点——MySQL基础

    在刷了上百道sql题后,发现所有的题目都是基于某一个或几个知识点来做考察的,所以理清基础的知识细节,才能在题目考察到任意知识点时,找到解决线索. 温故而知新,学习在于总结,于是我再次对已经学习过的my ...

  2. hive 日期函数_数据分析面试必备——SQL窗口函数你会了吗?

    之前写过一篇sql的文章,面向基础的sql操作(无眠:数据分析面试必备--SQL你准备好了吗?),目前已经有12000+收藏(收藏是点赞的5倍,你们可真狠心哪),也可以看出众多同学对sql学习的热情. ...

  3. pandas使用rename函数重命名dataframe中数据列的名称、从而创建一个包含重复列名称的dataframe数据集

    pandas使用rename函数重命名dataframe中数据列的名称.从而创建一个包含重复列名称的dataframe数据集 目录

  4. MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具

    这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...

  5. server sql 分组 去重 字符串拼接_SQL | 数据分析面试必备SQL语句+语法

    | 作者:无眠 | 来源:知乎 前些天在网上冲浪的时候看到一个案例咨询,问说世界500强的数据分析要不要去,评论区一片爆炸:"楼主能分享一下文科生怎么转行做数据分析吗??".&qu ...

  6. SQL | 数据分析面试必备SQL语句+语法

    关注上方"小詹学Python",选择"星标公众号", 关键时间,第一时间送达! | 作者:无眠 | 来源:知乎 前些天在网上冲浪的时候看到一个案例咨询,问说世界 ...

  7. 面试必备SQL调优方案

    前言 以我个人做的项目为例,因为早期开发项目上线以后用户量还不是很大,之前考虑过数据量大时是否做sql优化,但是一直因为项目还在开发中没来得及细心的调优下SQL,由于业务前期数据量比较小,基本都能满足 ...

  8. php 二维数组根据键值合并二维数组_php数组根据某键值,把相同键值的合并最终生成一个新的二维数组...

    匿名用户 1级 2013-12-29 回答 php数组根据某一个键值,把相同键值的合并生成一个新的二维数组 源数据: $infos = array( array( 'a' => 36, 'b' ...

  9. 考研数据结构之线性表(1.7)——练习题之A和B两个顺序表中相同元素组成一个新的从大到小的有序顺序表C的算法(C表示)

    题目 设A和B是两个顺序表,其元素按递增的顺序排列.编写一个将A和B中相同元素组成一个新的从大到小的有序顺序表C的算法. 分析 在归并算法的基础上稍加改动,只需要将当前扫描到的相等元素归入C表即可. ...

最新文章

  1. android监听器在哪里创建,[转载]android开发中创建按钮事件监听器的几种方法
  2. Gym迎来首个完整环境文档,强化学习入门更加简单!
  3. VS报错:此项目需要缓解Spectre漏洞的库
  4. 基于xilinx异构平台上视频采集分析
  5. python 文本处理库_推荐8种目前Python使用率最高的文本处理工具
  6. 微信小程序图片上下有等值空白问题
  7. 【java】Java中TypeReference用法说明
  8. 蓝桥杯51单片机之数码管从点亮到动态时钟的实现【单片机开发初学者必掌握】
  9. Python教学与学习过程中应注意的九句话
  10. ORM Model查询页生成
  11. 计算机毕业设计中用Java实现在线考试系统
  12. iOS基础 - UIScrollView
  13. java简单的小程序_编写一个简单的入门java小程序
  14. 解决keil注册机和编译错误的问题2020-12-28
  15. 中国34个省级行政区2000年-2021年逐月NDVI统计分析结果
  16. Android真正的静默安装
  17. Cadence16.6 PSpice仿真步骤---以分立器件搭建的H桥电路仿真为例
  18. 推荐 5 个优秀的 Javascript 图标库
  19. 【每日AI】什么是机器学习(ML)?
  20. python:实现恩尼格玛密码机算法(附完整源码)

热门文章

  1. 你必须知道的Docker镜像仓库的搭建
  2. GitHub推出包管理服务,npm与Nuget全支持
  3. 树莓派也跑Docker和.NET Core
  4. .NET Core 如何为项目提供高性能解决方案?
  5. ASP.NET Core 2调用Azure云上的PowerBI报表展示
  6. aspnetcore.webapi实践k8s健康探测机制 - kubernetes
  7. .NET Core 1.1 Preview 1上线:支持macOS 10.12/Linux Mint 18
  8. 从业十余年谈谈对dotnet看法与坚持
  9. mysql qps如何查看_mysql状态查看 QPS/TPS/缓存命中率查看
  10. 项目中引入composer包