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

9fe5a856467b5c5a56813bacdc9dbe2a.png

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

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

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

内容大纲:

0c943b989b20817f6becb4d73bc93332.png

一、增

  • 创建数据库: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;

排序

ab44c049bee5a6242784672ab8ca7a39.png
  • order by

升序:Asc 降序:Desc

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

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

1a5afe8a5bf6c6a901ec0ef694f21116.png
  • limit:从查询结果中取出指定行

进阶:

limit N:返回 N 条记录

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

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

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

4b686b92316b7e282cffdd9c011a5ee6.png

表连接(重点)

两张学生表:

cd7ee11ad5e71b389da548120d95c83d.png
左表

e4d17857dd02a8ef7750b4421540f403.png
右表

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

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

672c8a711b805a47b6439084ac1b6ca2.png

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

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

ebc319238826f7723c67b551355ea25f.png

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

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

4fc27df931a15fd32da419058ad23ab7.png

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

0abf178d375f3290263ea28923a82663.png

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

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

245fc7c62e97082e091c49f6c018418f.png

表合并

合并两表相同字段:

  • union:去重合并
  • union all:非去重合并

a704b6fdbfb1712159190eb800db63df.png
course

625f9831813ac9b360d9db39564563e2.png
course2
-- 去重合并
select * from course
UNION
SELECT * from course2;

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

b5170a15b5ab78d6fec0ae6548312bba.png

视图

视图是不保存实际数据的临时表,相当于直接调用由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子句中。子查询层数无上限。

3a8fbc5d159559299d03b52c487ff282.png
score
select 学号
from (select * from score GROUP BY 学号)as a

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么不能除以0?

全世界只有3.14 % 的人关注了爆炸吧知识说出来你可能不信但这是真的今天学习了除法的表妹跑来问我:为什么不能除以0?就这个问题,我专门请来了高冷的Siri。同样是数字,0为什么就会这么惨呢?小学生小学老师会直接给你来一…

构造函数、析构函数

构造函数、析构函数// Employee.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <string.h> #include <iostream.h> class Employee //定义员工类Employee{ private: char EmployeeID[20]; …

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

为什么 Dictionary 没有 AddRange 方法?

咨询区 Custodio&#xff1a;我一直都有一个疑惑&#xff1f;那就是为啥 Dictionary 不提供 AddRange 方法呢&#xff1f;回答区 Rafal Zajac&#xff1a;我觉得 Dictionary 之所以没有提供 AddRange 方法&#xff0c;主要还是考虑当遇到重复key的时候该如何处理&#xff1f;比…

Android之webview与js交互

对于android初学者应该都了解webView这个组件。之前我也是对其进行了一些简单的了解&#xff0c;但是在一个项目中不得不用webview的时候&#xff0c;发现了webview的强大之处&#xff0c;今天就分享一下使用webview的一些经验。 1、首先了解一下webview。 webview介绍的原文如…

java.util.ResourceBundle使用详解

java.util.ResourceBundle使用详解一、认识国际化资源文件这个类提供软件国际化的捷径。通过此类&#xff0c;可以使您所编写的程序可以&#xff1a;轻松地本地化或翻译成不同的语言一次处理多个语言环境以后可以轻松地进行修改&#xff0c;支持更多的语言环境说的简单点&#…

12如何隐藏dock栏_iPhone边框“变色”壁纸,隐藏Dock栏

自从iOS14上线以来&#xff0c;iPhone的玩法真的是花样百出&#xff0c;今天给大家带来一组很有意思的iPhone专用壁纸&#xff0c;不仅拥有色彩边框&#xff0c;还能隐藏主屏界面底部的Dock栏。这组壁纸除了外边框自带颜色以外&#xff0c;锁屏界面的通知栏和底部两个按钮的位置…

IE开发人员工具无法使用

第一种情况&#xff1a;开发人员工具只在任务栏显示&#xff0c;桌面上看不到&#xff08;我遇到的是这种情况&#xff0c;解决方法如下&#xff09; 将鼠标放在任务栏的开发者工具&#xff0c;出现缩略图&#xff0c;也就是任务栏上方的预览图&#xff0c;可以看到开发人员工具…

微信新功能又来了,这些功能再次打开了我新世界的大门!

全世界只有3.14 % 的人关注了爆炸吧知识微信视频号&#xff0c;是一个人人都可记录和创作的内容平台&#xff0c;也是一个了解他人、了解世界的窗口。在过去一段时间里&#xff0c;视频号可能是微信迭代最多&#xff0c;变化最多&#xff0c;也受到最多关注的功能。内容创作者大…

Processing编译android的apk应用

折腾了3天&#xff0c;总算弄进去了&#xff0c;真麻烦~&#xff01; 成果如下&#xff1a; 转载于:https://www.cnblogs.com/x5115x/archive/2013/04/11/3013593.html

EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?

场景描述&#xff1a;项目中存在两个迁移 Teacher 和 TeachingPlan &#xff0c;TeachingPlan 在 Teacher 之后创建&#xff0c;并且已经执行 dotnet ef database update 将新迁移应用到数据库。此时&#xff0c;因为实体修改&#xff0c;我们希望删除 TeachingPlan 迁移然后创…

Android之DiskLruCache(缓存工具)

DiskLruCache DiskLruCache是一个十分好用的android缓存工具&#xff0c;我们可以从GitHub上下载其源码&#xff1a;https://github.com/JakeWharton/DiskLruCache DiskLruCache所有的数据都存储在/storage/emulated/0/Android/data/应用包名/cache/XXX文件夹中(你也可以修改&…

手机自动化测试:appium源码分析之bootstrap七

手机自动化测试&#xff1a;appium源码分析之bootstrap七poptest是国内唯一一家培养测试开发工程师的培训机构&#xff0c;以学员能胜任自动化测试&#xff0c;性能测试&#xff0c;测试工具开发等工作为目标。poptest测试开发工程师就业培训请大家咨询qq&#xff1a;908821478…

内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12

前面我们更多的集中在Linux系统下文件系统的介绍&#xff0c;是时候介绍一下其它文件系统了。今天我们介绍一下Windows操作系统下的文件系统&#xff0c;也就是FAT文件系统。严格的来说其实是DOS的文件系统。今天我们介绍一下FAT最古老的版本&#xff0c;FAT12文件系统的内容。…

改变世界面貌的十个数学公式

全世界只有3.14 % 的人关注了爆炸吧知识1971年5月15日&#xff0c;尼加拉瓜发行了十张一套题为“改变世界面貌的十个数学公式”邮票&#xff0c;由一些著名数学家选出十个以世界发展极有影响的公式来表彰。这十个公式不但造福人类&#xff0c;而且具有典型的数学美&#xff0c;…

【2006-1】【字符统计】

Description 输入一串字符&#xff0c;将数字字符、字母字符和其它字符分别计数&#xff0c;并输出计数的结果&#xff0c;输入的字符以“?”号结束&#xff0c;“?”号不计数。输出共有3行&#xff0c;分别为输入文件中的数字字符、字母字符和其它字符的数目。 Input 字符串…

Java开源门户

最近在研究门户&#xff0c;先整理一下开源内容 GateIn&#xff1a; 新的开源门户平台&#xff0c;由RedHat JBoss和eXo平台共同打造。目标是结合强大的企业级Java基础设施和直观友好的用户界面&#xff0c;根据客户的需求&#xff0c;提供最佳的开源门户平台的企业级Java基础设…

.NET 6新特性试用 | 最小Web API

前言如果你使用过其他一些轻量级Web框架&#xff0c;比如Node.JS&#xff0c;你就会知道&#xff0c;创建具有最小依赖项的HTTP API是多么简单&#xff1a;var express require(express) var app express()app.get(/, function (req, res) {res.send(hello My IO!) })app.lis…

Android之SparseArray<E>详解

最近编程时&#xff0c;发现一个针对HashMap<Integer, E>的一个提示&#xff1a; 翻译过来就是&#xff1a;用SparseArray<E>来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情&#xff1a;一、构造从构造方法我们可以看出&#xff0c;它和一般…

WPF/MVVM 快速开发

http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶&#xff0c;入门良药啊&#xff01; Introduction Assuming that you have a decent understanding of C#, getting started in WPF isnt too difficult. I started looking at WP…