SQL复习专题

请结合B站-技术蛋老师 视频学习

核心语法

一、增:数据库/表格

create

create database 数据库名;

#创建表(列名+类型)
mysql> create table eggs_record(
    -> id int,
    -> egg_name varchar(10),
    -> sold date
    -> );
这里 ,用来隔开列名,最后一列后无(date类型格式 年-月-日)

还可以设置默认条件 NOT NULL、NULL、AUTO_INCREMENT自动递增 
一般情况下会设置 PRIMARY KEY主键,给每一行进行约束,使得MySQL可以更准确找到对应数据,设置其中一个列名为主键,设置后列名的数据需要是唯一的,例:id是递增的,肯定是唯一的,因此会加上主键(主键一定不为NULL)

mysql> create table eggs_record(
    -> id int primary key auto_increment,
    -> egg_name varchar(10) not null,
    -> sold date null
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> desc eggs_record;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| egg_name | varchar(10) | NO   |     | NULL    |                |
| sold     | date        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.03 sec)

insert into 数据库名.表格名

mysql> insert into egg.eggs_record (id,egg_name,sold)
    -> values (1,'鸡蛋','2024-3-25');
Query OK, 1 row affected (0.00 sec)

mysql> insert into egg.eggs_record (id,egg_name,sold)
    -> values (2,'鸭蛋','2024-3-26');
Query OK, 1 row affected (0.00 sec)

mysql> insert into egg.eggs_record (id,egg_name,sold)
    -> values (DEFAULT,'鸭蛋',NULL);
Query OK, 1 row affected (0.00 sec)


####  DEFAULT:设置默认值,前面添加了递增的关键字
mysql> select * from eggs_record;
+----+----------+------------+
| id | egg_name | sold       |
+----+----------+------------+
|  1 | 鸡蛋     | 2024-03-25 |
|  2 | 鸭蛋     | 2024-03-26 |
|  3 | 鸭蛋     | NULL       |
+----+----------+------------+
3 rows in set (0.05 sec)

 二、改:更新表格

alter table 需要新增一列

mysql> alter table eggs_record
    -> add stock int null;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc eggs_record;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| egg_name | varchar(10) | NO   |     | NULL    |                |
| sold     | date        | YES  |     | NULL    |                |
| stock    | int         | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.03 sec)

update  set where 修改具体数据

mysql> update egg.eggs_record
    -> set sold = '2024-01-01'
    -> where id =3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from egg.eggs_record;
+----+----------+------------+-------+
| id | egg_name | sold       | stock |
+----+----------+------------+-------+
|  1 | 鸡蛋     | 2024-03-25 | NULL  |
|  2 | 鸭蛋     | 2024-03-26 | NULL  |
|  3 | 鸭蛋     | 2024-01-01 | NULL  |
+----+----------+------------+-------+

三、 删:数据/表格/库

delete from

drop

mysql> delete from egg.eggs_record
    -> where id = 1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from egg.eggs_record;
+----+----------+------------+-------+
| id | egg_name | sold       | stock |
+----+----------+------------+-------+
|  2 | 鸭蛋     | 2024-03-26 | NULL  |
|  3 | 鸭蛋     | 2024-01-01 | NULL  |
+----+----------+------------+-------+
2 rows in set (0.05 sec)

四、查:选择/去重/排序/过滤

用例:新冠感染月份表-汇总表

select * from 表格名

查看具体列数 选择列名

 distinct  不同的 位置紧跟select

 想查询涉及到那些州 (去重

order by 排序  后面+ASC(Ascending)  DESC(从高到低,大到小)

 

 

where 条件 order by 列名  过滤 

SELECT *
FROM Covid_month
WHERE Recovered >= 10000 AND Country != 'Brazil'
ORDER BY Confirmed DESC;

 

 第三个字符为b

五、查:连接 

join

内连接-并集 inner join  + on条件定位 (选择两边所有的数据,两张表合并,合并的时候以国家名作为合并的条件,出来的结果把from的表格放左边,inner join表格放右边,把左右两边的值以某个条件合并在一起)

SELECT *
FROM Covid_month
INNER JOIN Covid_total
ON Covid_month.Country = Covid_total.Country;

 union 并集

一个上一个下合并在一张表里面

左连接 left join

如果需要从表格A左连接表格B,和inner join一样,用on进行定位,左连接的时候会保留左边的表格所有选取的数据,把右边表格符合条件的合并过来

右连接 right join

 AS 定义简写,上下用到的地方都要改为简写

六、工具选择:navicat-选择新建查询-方便练习

七、聚合函数 必须搭配 group by 子句使用

1.计算每个班的人数:select class_name,count(*) from student group by class_name;
2.计算每个班级男生、女生人数:select class_name,sex,count(*) from student group by class_name,sex;
3.计算每个班平均分(重命)select class_name,avg(score) as avg_score from student group by class_name;
4.对id进行降序排序:select * from student order by id desc;

八、其他补充

alter table meishi change column meishi fresh; 改表名
ALTER TABLE student CHANGE COLUMN class_name new_class_name VARCHAR(50);  改字段名
alter table student modify column class_name varchar(60) comment '班级';   改字段属性
update orders1 set product_num=34 ,consumer_name='大理',consumption=345 where id=10; 改字段

备份表   创建相同表结构,在导入源数据

create table eggs_bak like eggs_record;
insert into eggs_bak select * from eggs_record;

九、sql优化 

  1. 避免使用 SELECT *

    我会强调避免在查询中使用 SELECT *,而是明确指定需要检索的列。这样可以减少查询返回的数据量,降低网络传输成本和数据库的负载,并且可以更好地利用索引。
  2. 使用 UNION ALL 代替 UNION

    如果查询中需要使用 UNION 操作符,我会优先选择使用 UNION ALL。因为 UNION ALL 不会进行重复的去重操作,相比于 UNION,它的执行效率更高。
  3. 控制索引的数量

    我会强调控制索引的数量,避免创建过多的索引。虽然索引可以提高查询效率,但是过多的索引会增加数据库的维护成本,影响数据的更新速度,并且可能导致性能下降。
  4. 选择合理的字段类型

    在设计数据库时,我会选择合理的字段类型和长度,以确保数据存储的效率和查询的性能。例如,对于文本型数据,我会根据实际情况选择合适的 VARCHAR 长度,避免过长的字段长度导致存储浪费。
  5. 使用连接查询代替子查询

    我会尽量使用连接查询(JOIN)来代替子查询,因为连接查询通常比子查询执行效率更高。子查询在某些情况下可能会导致数据库的性能问题,特别是在嵌套子查询的情况下。

这些优化技巧都是我在实际工作中经常应用的,通过合理地应用这些技巧,我能够提高数据库系统的性能和查询效率。

【mysql】SQL优化15种方法_mysql sql优化-CSDN博客

数据仓库【SQL优化】-CSDN博客

MySQL 中的 GROUP BY 语句及十二个例子 - 墨天轮

十、面试真题

数据是我自己编的,题目是真题

学生表四个字段 性别 姓名 年龄 班级,统计每个班级男女各有多少名?(完整sql语句)

统计一班男女各有多少名?

把一班学生的姓名按照年龄倒序排序?(desc排序不能和group by,要使用order by)

索引类型

主要有以下几种类型的索引:

  • B-Tree 索引(包括普通索引、唯一索引、组合索引等)
  • 哈希索引
  • 全文索引
  • 空间索引等

索引的作用

  • 加速数据的检索和查询速度。
  • 通过索引,数据库系统可以更快地定位到符合条件的记录,减少了数据库的查询时间,提高了查询效率。
  • 帮助数据库系统优化查询执行计划,减少磁盘 I/O 操作。

索引的工作原理

  • 不同类型的索引有不同的工作原理,但主要的原理是通过数据结构来组织数据,以便快速地检索、定位和访问数据。
  • 例如,B-Tree 索引使用平衡树的结构来组织数据,哈希索引使用哈希表等。
  • 当查询时,数据库系统会先根据索引定位到符合条件的记录,然后再根据定位到的位置获取相关的数据。

索引是越多越好吗?

  • 不是。虽然索引可以提高查询的速度,但索引也会占用额外的存储空间,并且在数据更新时需要额外的维护成本(如插入、更新、删除操作)。
  • 过多的索引可能会导致数据库性能下降,因为在更新数据时需要维护多个索引。
  • 正确的做法是根据实际情况和需求,合理地设计和选择索引,尽量避免创建过多的索引,尤其是那些不经常使用或不必要的索引。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机控制的智能轿车停车场设计

**单片机设计介绍,基于单片机控制的智能轿车停车场设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机控制的智能轿车停车场设计是一个集成了现代电子技术、自动化技术、计算机技术的综合性项目。该设计旨…

com.alibaba.boot.nacos.config.binder.NacosBootConfigurationPropertiesBinder解决记录

一直正常的服务突然启动失败了,控制台报错 查询后发现是spring-boot-starter版本2.4和nacos-config 0.2.8版本冲突了 于是看了下nacos-config版本,发现有两个如下 但是原来启动正常,看了下老版本代码发现nacos-config-springboot-autoconfig…

亚马逊跨境电商迎来崭新时代,武汉星起航携手卖家共赴新征程

随着全球经济一体化的深入发展,跨境电商已成为推动国际贸易的重要力量。据最新数据显示,2023年中国跨境电商出口规模达到1.83万亿元,同比增长19.6%,增速远超电商行业整体水平。在这一背景下,2024年有望成为中国跨境电商…

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. 系…

蓝桥 python笔记12——动态规划、二维dp、最长上升子序列、最长公共子序列

目录 动态规划 二维dp 最长上升子序列 最长公共子序列 动态规划 # dp[n]表示n个台阶方案数 # dp[n]dp[n-1]dp[n-2] # dp[1]1 dp[2]2 nint(input()) dp[0]*(n1) dp[1]1 dp[2]2 for i in range(3,n1):dp[i]dp[i-1]dp[i-2] print(dp[n])二维dp Nint(input()) a[[0]*(N1)]# 下…

【python】爬取4K壁纸保存到本地文件夹【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 图片信息丰富多彩,许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片,而手动一个个下载显然效率太低。因此,编写一个简单的网站图片爬取程序可以帮助我们…

开通幻兽帕鲁游戏多人联机服务器多少钱?价格意想不到

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

TSINGSEE青犀多模型、算力调度与智能分析AI算法中台介绍及应用

TSINGSEE青犀AI算法中台是一款平台型产品,专注于提供各行业中小场景中部署解决方案。平台具备接入广、性能强、支持跨平台、芯片国产化等特点,可提供丰富的视图接入能力和智能分析能力。平台将不同类型、不同协议前端设备,支持通过不同网络环…

动手学机器学习线性回归+习题

线性回归 矩阵求导: 左边是分子布局,右边是分母布局,一般都用分母布局 解析解与数值解: 解析解是严格按照公式逻辑推导得到的,具有基本的函数形式。给出任意的自变量就可以求出其因变量 数值解是采用某种计算方法&a…

JavaEE 初阶篇-深入了解多线程等待与多线程状态

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 线程等待 1.1 线程等待 - join() 方法 1.1.1 main 线程中等待多个线程 1.1.2 main 线程等待 t2 线程且t2 线程等待 t1 线程 1.1.3 其他线程阻塞等待 main 线程 1.…

微服务(基础篇-004-Feign)

目录 http客户端Feign Feign替代RestTemplate(1) Feign的介绍(1.1) 使用Feign的步骤(1.2) 自定义配置(2) 配置Feign日志的两种方式(2.1) Feign使用优化…

订单系统-RPC快速入门

RPC快速入门 概述 关于rpc,只需要知道他是一种协议,项目之间能够远程调用函数。 快速入门 我们前边下载好的两个包,在idea中打开之后,我们创建这么几个文件夹。 至于是干什么的,以后细说。创建好之后我们在produc…

buy me a btc 使用数字货币进行打赏赞助

最近在调研使用加密货币打赏的平台,发现idatariver平台 https://idatariver.com 推出的buymeabtc功能刚好符合使用场景,下图为平台的演示项目, 演示项目入口 https://buymeabtc.com/idatariver 特点 不少人都听说过buymeacoffee,可以在上面发…

Linux 学习之路--工具篇--yum

前面介绍了权限有关的内容&#xff0c;这里继续介绍有关Linux里面常用的工具之一yum 目录 一、简单介绍 <1> 源代码安装 <2>rpm 包安装 <3>yum / apt-get(ubuntu) 安装 二、简单使用 <1>安装包介绍 <2> yum 的基本指令 -- install <…

【C++程序员的自我修炼】基础语法篇(一)

心中若有桃花源 何处不是水云间 目录 命名空间 &#x1f49e;命名空间的定义 &#x1f49e; 命名空间的使用 输入输出流 缺省参数 函数的引用 引用的定义&#x1f49e; 引用的表示&#x1f49e; 引用的特性&#x1f49e; 常量引用&#x1f49e; 引用的使用场景 做参数 做返回值…

蓝桥杯基础练习汇总详细解析(一)——数列排序、十六进制转八进制、十六进制转十进制、十进制转十六进制、特殊回文数(代码实现、解题思路、Python)

试题 基础练习 数列排序 资源限制 内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200 输入格式 第…

ATFX汇市:欧元区的2月M1增速为-7.7%,潜在通胀下修,欧元币值受冲击

ATFX汇市&#xff1a;衡量经济体的潜在通胀指标&#xff0c;除了CPI数据、失业率数据外&#xff0c;还有M1、M3数据。昨日&#xff0c;欧洲央行公布了2月份欧元区货币发展报告&#xff0c;其中提到&#xff1a;广义货币总量M3的年增长率从1月份的0.1%上升到2024年2月的0.4%&…

MT9256 Android 智能电视解决方案

一、方案描述 智能电视&#xff0c;是基于Internet应用技术&#xff0c;具备开放式操作系统与芯片&#xff0c;拥有开放式应用平台&#xff0c;可实现双向人机交互功能&#xff0c;集影音、娱乐、数据等多种功能于一体&#xff0c;以满足用户多样化和个性化需求的电视产品。有…

JavaScript高级 —— 学习(一)

目录 一、作用域 &#xff08;一&#xff09;局部作用域 1.函数作用域 2.块作用域 &#xff08;二&#xff09;全局作用域 二、垃圾回收机制 GC &#xff08;一&#xff09;生命周期 1.内存分配 2.内存使用 3.内存回收 4.特殊情况——内存泄漏&#xff1a; 注意&…

【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】

1 问题描述 Monkey跑出的无焦点窗口的ANR问题。 特点&#xff1a; 1&#xff09;、上层WMS有焦点窗口&#xff0c;为Launcher。 2&#xff09;、native层InputDispacher无焦点窗口&#xff0c;上层为”recents_animation_input_consumer“请求了焦点&#xff0c;但是”rece…