SQL复习专题

news2024/11/15 21:05:50

请结合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 索引使用平衡树的结构来组织数据,哈希索引使用哈希表等。
  • 当查询时,数据库系统会先根据索引定位到符合条件的记录,然后再根据定位到的位置获取相关的数据。

索引是越多越好吗?

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

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

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

相关文章

【前端】代码案例

1.猜数字 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>猜数字</title> </head> <…

Flutter 旋转动画 线性变化的旋转动画

直接上代码 图片自己添加一张就好了 import dart:math;import package:flutter/material.dart;import package:flutter/animation.dart;void main() > runApp(MyApp()); //旋转动画 class MyApp extends StatelessWidget {overrideWidget build(BuildContext context) {re…

Luminar Neo:重塑图像编辑新纪元,Mac与Win双平台畅享创意之旅

在数字时代的浪潮中&#xff0c;图像编辑软件已成为摄影师和设计师们不可或缺的创作工具。Luminar Neo&#xff0c;作为一款专为Mac与Windows双平台打造的图像编辑软件&#xff0c;正以其卓越的性能和创新的编辑功能&#xff0c;引领着图像编辑的新潮流。 Luminar Neo不仅继承…

SOC 子模块---中断控制器

中断控制器对soc 中的各个外设进行中断管理&#xff0c;进行优先权排队&#xff0c;并送出IQR信号给CPU&#xff1b; 中断控制器在整个系统中的结构&#xff1a; IRQ<n>来源于不同的中断源&#xff0c;比如&#xff1a;I2C,SPI等&#xff0c;INTC收集这些中断&#xff0…

word文件如何转PDF格式?word转PDF的方法

在当今数字化时代&#xff0c;文档格式的转换已成为日常生活和工作中不可或缺的一部分。其中&#xff0c;将Word文档转换为PDF格式更是受到了广大用户的青睐。本文将详细介绍Word转PDF的方法&#xff0c;帮助读者轻松实现文档格式的转换&#xff0c;并探讨转换过程中的注意事项…

P6技巧:对计划执行纠偏措施

前言 对施工计划的滞后原因分析&#xff0c;通常采取由大到小、由高到低的方法。即首先查看总体进度偏差&#xff0c;再分析其偏差主要来源于哪部分。 项目进度评估与偏差控制 项目实施过程中&#xff0c;项目控制人员应对进度实施情况进行跟踪、采集数据&#xff0c;并根据…

图解Kafka架构学习笔记(二)

kafka的存储机制 https://segmentfault.com/a/1190000021824942 https://www.lin2j.tech/md/middleware/kafka/Kafka%E7%B3%BB%E5%88%97%E4%B8%83%E5%AD%98%E5%82%A8%E6%9C%BA%E5%88%B6.html https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html https://feiz…

数据可视化基础与应用-04-seaborn库从入门到精通01-02

总结 本系列是数据可视化基础与应用的第04篇seaborn&#xff0c;是seaborn从入门到精通系列第1-2篇。本系列的目的是可以完整的完成seaborn从入门到精通。主要介绍基于seaborn实现数据可视化。 参考 参考:数据可视化-seaborn seaborn从入门到精通01-seaborn介绍与load_datas…

CharacterController.Move called on inactive controller

【问题背景】 Unity3D中开发物体的移动&#xff0c;实现代码如下&#xff1a; public class TargetController : MonoBehaviour {private CharacterController character;private float speedRate 4f;private void Start(){character GetComponent<CharacterController&…

等保测评密评对照:一文看懂两者差异

最近&#xff0c;在去几个客户的办公室交流的方案的时候&#xff0c;都会被重点问到网络安全问题,在方案中“等保”是如何体现和落实的。而且有些客户的领导也会提到“密评”与“等保”如何衔接&#xff0c;是否有先后顺序&#xff0c;可否同时进行测评等问题。 关于“等保”与…

网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)

目录 一、以太网数据帧&#xff08;数据链路层&#xff09; 二、DNS协议(域名解析系统&#xff0c;应用层协议) 一、以太网数据帧&#xff08;数据链路层&#xff09; 以太网横跨了数据链路层和物理层&#xff0c;这里只做简单介绍&#xff0c;因为普通程序员用不到这一块&am…

UI自动化_id 元素定位

## 导包selenium from selenium import webdriver import time1、创建浏览器驱动对象 driver webdriver.Chrome() 2、打开测试网站 driver.get("你公司的平台地址") 3、使浏览器窗口最大化 driver.maximize_window() 4、在用户名输入框中输入admin driver.find_ele…

hbase启动错误-local host is“master:XXXX“ destination is:master

博主的安装前提&#xff1a; zookeeper安装完成&#xff0c;且启动成功 hdfs高可用安装&#xff0c;yarn高可用安装&#xff0c;且启动成功 报错原因&#xff1a;端口配置不对 解决方案&#xff1a; 输入&#xff1a;hdfs getconf -confKey fs.default.name 然后把相应的…

WM8978 —— 带扬声器驱动程序的立体声编解码器(7)

接前一篇文章&#xff1a;WM8978 —— 带扬声器驱动程序的立体声编解码器&#xff08;6&#xff09; 十、音频接口 WM8978具有一个标准的音频接口&#xff0c;支持立体声数据在芯片之间的传输。该接口是一个3线标准音频接口&#xff0c;支持多种音频数据格式&#xff0c;包括I…

C++ 简单模拟实现 STL 中的 list 与 queue

目录 一&#xff0c;list 1&#xff0c; list 的节点与迭代器 2&#xff0c;list 的数据结构、一些简单的功能、构造函数 3&#xff0c;list 的对元素操作 4&#xff0c;C 11 的一些功能 5&#xff0c;完整代码&#xff1a; 二&#xff0c;queue 一&#xff0c;list std…

Visual Studio 小更新:改善变量的可见性

在 Visual Studio 2022 17.10 预览版 2 中&#xff0c;我们改善了一些小功能&#xff0c;例如&#xff1a;在调试版本中&#xff0c;变量窗口现已可以显示调用堆栈中任意帧的局部变量。 如需体验此功能&#xff0c;请直接安装最新预览版本&#xff0c;就可以知道是怎么一回事儿…

CSS及javascript

一、CSS简介 css是一门语言&#xff0c;用于控制网页的表现。 cascading style sheet:层叠样式表 二、css的导入方式 css代码与html代码的结合方式 &#xff08;1&#xff09;css导入html有三种方式&#xff1a; 1.内联样式&#xff1a;<div style"color:red&quo…

mac 系统如何生成秘钥

1.打开终端&#xff0c;输入 cd ~/.ssh 进入.ssh目录&#xff0c;输入 ls 检查是否已经存在SSH密钥。如果看到类似 id_rsa.pub 的文件&#xff0c;说明已经有一对公钥和私钥&#xff0c;不用新建&#xff0c;直接查看就可以&#xff0c;如果没有需要生成新的密钥。 2.在终端输…

Unity 视频组件 VideoPlayer

组件添加&#xff1a; 在自己定义的组件下&#xff08;例如&#xff1a;Panel&#xff09; 点击 Inspector 面板中的 AddComponent &#xff0c;输入“VideoPlayer”。 资源 这里 视频资源有两种形式&#xff0c;第一种是 VideoClip &#xff0c;需要将视频文件拖拽到该属性字段…

【C语言】【Leetcode】88. 合并两个有序数组

文章目录 一、题目二、思路再思考 一、题目 链接: link 二、思路 这题属于简单题&#xff0c;比较粗暴的做法就是直接比较两个数组&#xff0c;先把第二个数组加到第一个的后面&#xff0c;如何冒泡排序&#xff0c;这种方法简单粗暴但有效&#xff0c;可是不适用于这题&…