SQL语句一本通

命令行操作

net stop mysql服务名
net start mysql服务名
mysql -h 主机名 -P端口 -u用户名 -p密码 //无-h则默认本机,无-P则默认3306,实际工作中3306一般修改
quit

# 备份数据库(DOS执行命令行)
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql #mysqldump.exe在mysql安装目录\bin
# 恢复数据库(进入MySQL命令行再执行 mysql -u root -p)。 备份文件就是对应sql语句
Source 文件名.sql #或将备份文件内容sql语句贴入查询编辑器中执行一遍
# 备份库的表
mqsqldump -u 用户名 -p密码 数据库 表12 表n > d:\\文件名.sql

数据库操作

# 创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] #[]代表可选。如果不存在则创建,存在则不创建,不写[IF NOT EXISTS]条件存在则报错
create_specification:
[DEFAULT] CHARACTER SET charset_name #指定字符集,默认utf8
[DEFAULT] COLLATE collation_name #指定字符集校对规则(常用的utf8_bin[区分大小写]、默认utf8_general_ci[不区分大小写])

# 查看数据库
SHOW DATABASES #显示当前数据库服务器中的所有数据库
SHOW CREATE DATABASE db_name #显示数据库创建的定义信息
#CREATE DATABASE `hsp_db01` /*!40100 DEFAULT CHARACTER SET utf8 */ #创建数据可和表的时候,使用``规避关键字, /*代表数据库版本要在4以上,该语句方可执行

# 删除数据库
DROP DATABASE [IF EXISTS] db_name #慎用

表操作

# 创建表
CREATE TABLE table_name
(
	field1 datatype,
	field2 datatype,
	field3 datatype
)character set 字符集 collate 校对规则 engine 引擎

# 修改表
# 添加列
ALTER TABLE tablename ADD (columnname datatype [DAEFAULT expr][, column datatype]...); #列名/类型/默认值/表达式/列... 无需括号
# ALTER TABLE emp ADD image VARCHAR(32) NOT NULL DEFAULT '' [FIRST | AFTER 'resume'; #注意引号,新添加的列名无,原有的列名有
# 修改列
ALTER TABLE tablename
MODIFY    (column datatype [DEFAULT expr][, column datatype]...);
# ALTER TABLE employee CHANGE `name` user_name VARCHAR(32) NOT NULL DEFAULT ''; #修改列名
# 删除列
ALTER TABLE tablename
DROP    (column);
查看表结构:desc 表名; -- 可以查看表的列
# 修改表名:
Rename table 表名 to 新表名
# 修改表字符集:
alter table 表名 character set 字符集; 

# 删除表
DROP TABLE tablename;

CURD

# 添加数据
INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]);
# 注意:
-- 字符和日期型数据应包含在单引号中;
-- 列可以插入空值(前提是该字段允许为空)
INSERT INTO tablename value (NULL);
# 添加多条记录
INSERT INTO tablename (column1, column2, column3...) VALUES (v1, v2, v3), (u1, u2, u3), (w1, w2, w3);
--如果是给表中所有字段添加数据,可以不写前面的字段名称
--当不给某个字段值时,如果允许为空,有默认值就会添加默认值,没有报错;创建表时可以指定希望的默认值

# 更新数据
UPDATE tbl_name SET col_name=expr1 [, col_name2=expr2 ...] [WHERE where_definition] # 不写where条件代表修改表的所有记录/数据/行,慎用

# 删除数据
DELETE FROM tbl_name [WHERE where_defination] #无where条件代表删除所有数据/记录/行

# 查找数据
SELECT [DISTINCT] *|{column1, column2, column3...} FROM tablename; #distinct去重,*代表查询所有列
SELECT *|{column1 | expression, column2 | expression...} FROM tablename; #使用表达式对查询的列进行运算
SELECT columnname AS 别名 from tablename;
# SELECT `name` (chinese + math + english) AS total_score FROM student;
SELECT column1. column2, column3... FROM tablename [WHERE where_defination] ORDER BY columnx asc|desc; # 默认asc升序 ascending/descending

函数

分组统计
group by 对查询结果分组统计(示意图)
having 子句用于限制分组显示结果

多表操作

内连接:同时满足多表条件
自连接,将同一张表看作多张表

# 写出正确的过滤条件:多表查询条件不能少于表数-1,否则会出现笛卡尔集
SELECT column1, table1_column2 FROM table1, table2 WHERE table1.column2 = table2.column2;
SELECT emp, sal, grade FROM emp, salgrade WHERE sal BETWEEN losal AND hisal;

外连接
左外连接:左侧的表完全显示
右外连接:右侧的表完全显示

常见基础问题

1 drop和delete的区别是什么?

DROP命令:
DROP是用来删除数据库中的对象,如表(TABLE)、视图(VIEW)、索引(INDEX)、约束(CONSTRAINT)等。
一旦使用DROP命令删除了某个对象,该对象以及与之相关的所有数据都会被永久移除,且通常无法恢复,除非有专门的备份。
DROP命令是不可逆的,慎用,通常需要先进行备份。
例如,使用DROP TABLE命令可以删除一个表及其所有数据。

DELETE命令:
DELETE是用来删除表中的数据记录,而不是表结构本身。
使用DELETE命令时,表的结构仍然存在,只是表中的数据被删除。
DELETE命令可以删除表中满足特定条件的所有记录,但不会删除表结构、索引、约束等。
DELETE命令可以指定删除所有记录(使用DELETE FROM table_name),或者删除满足特定条件的记录(使用DELETE FROM table_name WHERE condition)。
通常情况下,执行DELETE操作前应该先使用SELECT语句检查要删除的记录。

简而言之,DROP用于删除数据库中的对象,而DELETE用于删除对象中的数据。使用时需要根据实际需求和权限谨慎操作,避免不必要的数据丢失。

2 where和having的区别是什么?

都是SQL查询语句中的子句,用于过滤数据
执行时机:
WHERE子句在数据分组之前执行。这意味着它用于过滤整个记录行,在分组操作之前确定哪些行将被包括在分组中。
HAVING子句在数据分组之后执行。它用于过滤由GROUP BY子句创建的组,允许你根据聚合值的结果来筛选组。
过滤对象:
WHERE子句过滤的是表中的行。它不能用于过滤聚合函数的结果,如SUM()、COUNT()等。
HAVING子句可以过滤聚合函数的结果。它通常与GROUP BY子句一起使用,以便对分组后的结果进行条件筛选。
使用的列:
WHERE子句可以引用表中的任何列,以及聚合函数。
HAVING子句只能引用聚合函数和GROUP BY子句中指定的列。
语义:
WHERE子句通常用于过滤数据以选择特定的行,例如基于某个字段的值。
HAVING子句通常用于对分组后的结果进行条件筛选,例如选择平均值大于某个值的组。
例子:
如果你想要选择年龄大于30的所有人,你会使用WHERE子句:

SELECT * FROM people WHERE age > 30;

如果你想要选择平均年龄大于30的所有组,你会使用HAVING子句:

SELECT group_name, AVG(age) as avg_age
FROM people
GROUP BY group_name
HAVING AVG(age) > 30;

总结来说,WHERE子句用于过滤行,而HAVING子句用于过滤由GROUP BY分组的聚合结果。两者都是用于数据筛选的重要工具,但应用场景和用法有所不同。

内连接和外连接的区别?

内连接(Inner Join)和外连接(Outer Join)是SQL中用于合并两个或多个表中数据的两种方式。它们的主要区别在于如何处理存在于一个表中但不在另一个表中的数据行。

内连接(Inner Join):
内连接是最常见的连接类型,它只返回两个表中都有匹配的行。
在内连接中,只有在两个表中的相关列有匹配值的情况下,才会返回行。
如果不存在匹配,则结果集中不会包含那些没有匹配的行。
内连接可以看作是“交集”,只返回两个表中都有的数据。
外连接(Outer Join):
外连接会返回两个表中所有行,包括那些在另一个表中没有匹配的行。
外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。
左外连接(LEFT JOIN)返回左表的所有行,即使右表中没有匹配的行。如果右表中存在匹配,则返回完整的结果集;如果不存在匹配,则右表的部分会返回NULL。
右外连接(RIGHT JOIN)返回右表的所有行,即使左表中没有匹配的行。如果左表中存在匹配,则返回完整的结果集;如果不存在匹配,则左表的部分会返回NULL。
全外连接(FULL OUTER JOIN)返回两个表中的所有行。如果左表中有匹配,则返回左表的行;如果右表中有匹配,则返回右表的行。两个表中都没有匹配的行,则返回NULL。
下面是一个简单的例子来说明内连接和外连接的区别:

假设我们有两个表:employees(员工表)和departments(部门表)。员工表中有员工的详细信息,而部门表中有部门的详细信息。员工表中的department_id字段与部门表中的id字段相关联。

内连接查询示例:

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

这个查询只返回在两个表中都有匹配department_id和id的行。
左外连接查询示例:

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

这个查询返回员工表中的所有行,即使某些行在部门表中没有匹配的行。如果存在匹配,则返回完整的员工和部门名称。

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

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

相关文章

Apache中如何配置 ws 接口

Apache中如何配置 wss 接口 在Apache中配置WebSockets的支持,你需要使用mod_proxy_wstunnel模块,该模块是Apache的一个代理模块,它允许你代理WebSocket请求。 以下是配置步骤的简要说明和示例: 确保你的Apache服务器安装了mod_…

【Python小练】求斐波那契数列第n个数

题目 输出斐波那契数列第n个数。 分析 首先我们要知道,斐波那契数列,这个数列从第三位开始等于前两个数的和,要知道数列第n个数(n>2),就要知道其前两相的值,着就需要用到递归了。来看一下吧…

【Java EE】多线程(二)Thread 类与常用方法

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

【C++】:日期类的实现 -- 日期计算器

前言 1.日期类是一种十分经典的类型。对于C的初学者,它能够帮助我们融会贯通许多C的基础知识,它涉及许多的基础语法,比如引用,函数重载,传值/传参返回,构造函数,运算符重载,const成…

【Linux】详解core dump文件的作用以及用法ubuntu20.04下无法形成core dump文件的解决办法

说明 从第三大点开始讲解ubuntu20.04下无法形成core dump文件的解决办法。 一、core与term的区别 在之前讲过的信号中,终止进程的信号的动作分为两种,一种是core,一种是term。term(全称termination)是直接终止进程&am…

1084 外观数列(测试点3分析)

solution1 测试点3是n1的情况int转string&#xff1a;str to_string(i) string转int&#xff1a;i atoi(str.c_str()) #include<iostream> #include<string> using namespace std; int main(){int n, cnt;char x;string ans, t;cin >> t >> n;…

土壤侵蚀分布数据、土壤侵蚀强度、土壤类型分布、降水量分布、坡度坡向数据、植被覆盖度、土地利用数据、土壤质地分布

引言 土壤侵蚀是指土壤或成土母质在外力作用下被破坏剥蚀、搬运和沉积的过程。土壤侵蚀强度是根据土壤侵蚀的实际情况&#xff0c;按轻微、中度、严重等分为不同级别。中国是世界上土壤侵蚀最严重的国家之一&#xff0c;主要发生在黄河中上游黄土高原地区、长江中上游丘陵地区和…

综合性练习(后端代码练习3)——留言板

目录 一、准备工作 二、约定前后端交互接口 1、需求分析 2、接口定义 &#xff08;1&#xff09;发布留言 &#xff08;2&#xff09;获取留言 三、实现服务器代码 1、lombok介绍 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;使用lombok &#xff…

int类型的取值范围(为什么负数比正数表示的范围多一位)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C语言基本概念 &#x1f337;追光的人&#xff0c;终会万丈光芒 目录 &#x1f3dd;1.int的基本概念&#xff1a; 空间大小&#xff1a; 有符号类型的表示形式&#xff1a; &#x1f3dd;2.…

SSH远程登录实操实验!

ssh远程登录协议&#xff1a;默认端口号22 以下实验7-2是服务端&#xff0c;7-1是客户端 服务器的相关信息&#xff1a; 服务名称&#xff1a;sshd 服务端主程序&#xff1a;/usr/sbin/sshd 服务端配置文件&#xff1a;/etc/ssh/sshd_config 客户端相关信息&#xff1a; …

Java并发编程面试问题与答案

1. 什么是线程安全&#xff1f; 答&#xff1a; 线程安全意味着多个线程可以同时访问一个类的实例而不引起任何问题或不一致的结果。线程安全的代码会通过同步机制来确保所有线程都能正确地访问共享资源。 2. 解释Java中的synchronized关键字。 答&#xff1a; synchronized…

秒杀系统的挑战和应对设计

秒杀系统是日常系统开发过程中经常遇到的场景&#xff0c;那么如何可以准备哪些措施来保证秒杀过程中系统的可用性以及一致性呢&#xff1f; 秒杀活动&#xff0c;需要满足各方的需求 作为用户&#xff0c;希望能够抢到自己中意的优惠 作为商户&#xff0c;希望券不超发&#…

MATLAB 字符串

MATLAB 字符串 在MATLAB中创建字符串非常简单。实际上&#xff0c;我们已经使用了很多次。例如&#xff0c;您在命令提示符下键入以下内容- 示例 my_string ‘(cainiaojc.com)’ MATLAB将执行上述语句并返回以下结果 my_string (cainiaojc.com) MATLAB将所有变量视为数组&a…

Macos安装OrbStack

什么是OrbStack OrbStack 是一种在 macOS 上运行容器和 Linux 机器的快速、轻便和简单方法。它是 Docker Desktop 和 WSL 的超强替代品&#xff0c;所有这些都在一个易于使用的应用程序中。 在Macos M系列芯片上&#xff0c;经常遇到docker镜像不兼容的问题&#xff0c;此时使…

【初识Redis】

初识Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;它提供了一个高性能的键值存储系统&#xff0c;并且支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合等。Redis的特点包括&#xff1a; 内存存储&…

[C语言]典型例题:小蚂蚁爬橡皮筋、买汽水问题、导致单词块、菱形打印……

1、小蚂蚁爬橡皮筋问题 假设橡皮筋长4m&#xff0c;小蚂蚁从一端爬向另一端每天爬1m&#xff0c;且每爬了1m&#xff0c;橡皮筋会立马拉伸4m&#xff0c;在理想条件下&#xff0c;小蚂蚁需要爬多少天可以到达橡皮筋的另一端&#xff1f; 不仔细想&#xff0c;我们很可能认为小蚂…

2023年蓝桥杯C++A组第三题:更小的数(双指针解法)

题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串&#xff0c;下标从 0 到 n − 1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。小蓝想要将选出的…

JavaEE 初阶篇-深入了解网络原理中传输层的端口号与 UDP 协议报文格式

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 端口号概述 1.1 端口号的作用 1.2 端口号不能重复被多个进程绑定 2.0 传输层协议 - UDP 2.1 UDP 的特性 2.2 UDP 的报文格式 1.0 端口号概述 端口号是计算机网络中…

多线程事务怎么回滚

1、背景介绍 1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败…

【算法小白周赛1A】分析 - 题解与代码

题目链接&#xff1a;https://www.starrycoding.com/problem/155 题目描述 小可可最近在学数学运算&#xff01;他希望考考你&#xff0c;给你两个整数 A , B A,B A,B&#xff0c;询问 A B A\times B AB 是否是偶数。 注意&#xff0c;可能存在前导 0 0 0&#xff0c;比如…