SQL | SQL 3小时快速入门学习笔记

【【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库】 课程链接

一、SQL

1.资料库管理系统(Database Management System,简称DBMS)

是整理资料的软件。其主要功能包括数据的存储、检索、更新和删除,以及对数据进行安全性、完整性和一致性的管理。以下是资料库管理系统的一些重要特征和功能:
a. 数据定义语言(Data Definition Language,DDL):用于定义数据库中的数据结构,包括表、字段、索引等。
b. 数据操作语言(Data Manipulation Language,DML):用于对数据库中的数据进行增加、删除、修改和查询等操作。
c. 数据库查询语言(Database Query Language,如SQL):用于向数据库发出查询请求,以检索所需的数据。
d. 数据库事务管理:确保数据库操作的原子性、一致性、隔离性和持久性,以支持并发访问和数据的完整性。
e. 数据库安全性管理:包括用户认证、授权和权限管理,以确保只有授权用户可以访问和操作数据库。
f. 数据备份与恢复:提供定期备份数据库的功能,并能够在需要时将数据库恢复到先前的状态。
g. 数据库性能优化:通过索引、查询优化、分区等技术提高数据库的性能和效率。
h. 数据库监控与管理:监控数据库的运行状态、性能指标和资源利用情况,并进行必要的管理和调整。
在这里插入图片描述

2.SQL(Structured Query Language,结构化查询语言)

是一种用于管理关系数据库系统的标准化语言。它允许用户定义、操作和管理数据库中的数据,以及执行各种数据库操作,如查询、插入、更新和删除数据等。具有以下几个主要方面的功能:
a. 数据查询(Query):SQL允许用户通过使用SELECT语句从数据库中检索数据。SELECT语句可以根据用户的需求从一个或多个表中选择特定的列,并根据特定的条件过滤所需的行。
b. 数据操作(Manipulation):SQL包括INSERT、UPDATE和DELETE语句,用于向数据库中添加、更新或删除数据。这些语句使用户能够对数据库中的数据进行修改,以保持数据的最新状态。
c. 数据定义(Definition):SQL提供了一组用于定义数据库结构的语句,如CREATE TABLE、ALTER TABLE和DROP TABLE等。这些语句允许用户创建新表、修改现有表的结构,或删除不再需要的表。
d. 数据控制(Control):SQL包括用于控制对数据库对象的访问权限的语句,如GRANT和REVOKE。这些语句允许数据库管理员管理用户对数据库的访问权限,以确保数据的安全性和完整性。
e. 事务控制(Transaction Control):SQL支持事务处理,通过BEGIN TRANSACTION、COMMIT和ROLLBACK等语句,允许用户在数据库中执行一系列操作,并将它们作为一个原子单元进行提交或回滚。
在这里插入图片描述
在这里插入图片描述

二、基础

1.安装:

环境:Windows系统
官网链接: MySQL Community Downloads
在这里插入图片描述
跟教程不同选下面的:
在这里插入图片描述
在这里插入图片描述

2.table and keys:

主键和外键
在这里插入图片描述

3.创建资料库:

关于database

-- 创建 指定数据库
CREATE DATABASE `sq_tutroial`;
-- 显示 所有的数据库
SHOW DATABASES;
-- 丢掉 指定数据库
DROP DATABASE `sq_tutroial`;
-- 使用 指定数据库
USE `sq_tutroial`;

关于table

-- 创建 指定表格
CREATE TABLE `student`(`student_id` INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(20) NOT NULL,`major` VARCHAR(20) UNIQUE);
-- 描述 指定表格的结构
DESCRIBE TABLE `student`;
-- 删除 指定表格
DROP TABLE `student`;
-- 返回 指定表格所有数据
SELECT * FROM `student`;
-- 修改 指定表格数据 添加
ALTER TABLE `student` ADD gpa DECIMAL(3,2);

关于数据格式

-- 格式
INT				-- 整数
DECIMAL(m,n)	-- 有小数点的数
VARCHAR(n)		-- 字串
BLOB			-- (Binary Large Object)图片 影片 档案...
DATE			-- 'YYYY-MM-DD'
TIMESTAMP		-- 'YYYY-MM-DD HH:MM:SS'

三、实例

在这里插入图片描述

注意:先创建主体的 Employee 和 Branch 表格,再补上 Employee 的 branch_id的foreign key设定,∵有创建顺序,后者的主键是前者的外键

1.创建

-- 创建公司表格资料库
CREATE DATABASE `sq_test`;
USE `sq_test`;
SET SQL_SAFE_UPDATES = 0;
-- 创建 employee 和 branch 表格
CREATE TABLE `employee` (`emp_id` INT PRIMARY KEY,`name` VARCHAR(20),`birth_date` DATE,`sex` VARCHAR(1),`salary` INT,`branch_id` INT,`sup_id` INT);
CREATE TABLE `branch` (`branch_id` INT PRIMARY KEY,`branch_name` VARCHAR(20),`manager_id` INT,FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL);
-- 补上foreign key的设定
ALTER TABLE `employee`
ADD FOREIGN KEY(`branch_id`)
REFERENCES `branch`(`branch_id`)
ON DELETE SET NULL;
ALTER TABLE `employee`
ADD FOREIGN KEY(`sup_id`)
REFERENCES `employee`(`emp_id`)
ON DELETE SET NULL;
-- 创建 client 和 works_with 表格
CREATE TABLE `client` (`client_id` INT PRIMARY KEY,`client_name` VARCHAR(20),`phone` VARCHAR(20));CREATE TABLE `works_with` (`emp_id` INT,`client_id` INT,`total_sales` INT,PRIMARY KEY(`emp_id`, `client_id`),FOREIGN KEY(`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,FOREIGN KEY(`client_id`) REFERENCES `client`(`client_id`) ON DELETE CASCADE);
-- 增加部门资料
INSERT INTO `branch` VALUES(1, '研发', 206);
INSERT INTO `branch` VALUES(2, '行政', 207);
INSERT INTO `branch` VALUES(3, '咨询', 208);-- 增加员工资料
INSERT INTO `employee` VALUES(206, '小黄', '1998-10-08', 'F', 50000, 1, NULL);
INSERT INTO `employee` VALUES(207, '小绿', '1985-09-16', 'M', 29000, 2, 206);
INSERT INTO `employee` VALUES(208, '小黑', '2000-12-19', 'M', 35000, 3, 206);
INSERT INTO `employee` VALUES(209, '小白', '1997-01-22', 'F', 39000, 3, 207);
INSERT INTO `employee` VALUES(210, '小蓝', '1925-11-10', 'F', 84000, 1, 207);-- 增加客户资料
INSERT INTO `client` VALUES(400,'阿狗','254354335');
INSERT INTO `client` VALUES(401,'阿猫','25633899');
INSERT INTO `client` VALUES(402,'旺来','45354345');
INSERT INTO `client` VALUES(403,'露西','54354365');
INSERT INTO `client` VALUES(404,'艾瑞克','18783783');-- 增加合作资料
INSERT INTO `works_with` VALUES(206,400,'70000');
INSERT INTO `works_with` VALUES(207,401,'24000');
INSERT INTO `works_with` VALUES(208,400,'9800');
INSERT INTO `works_with` VALUES(208,403,'24000');
INSERT INTO `works_with` VALUES(210,404,'87940');

2.练习:

-- 1.取得所有员工的资料
SELECT * FROM `employee`;
-- 2.取得所有客户的资料
SELECT * FROM `client`;
-- 3.按照薪水低到高取得员工资料
SELECT * FROM `employee` ORDER BY `salary`;
-- 4.取得薪水前3高的员工的资料
SELECT * FROM `employee` ORDER BY `salary` DESC LIMIT 3;
-- 5.取得所有员工的名字
SELECT * FROM `employee` ORDER BY `name`;
-- aggregate function 聚合函数
-- 1.取得员工人数
SELECT COUNT(*) FROM `employee`;
-- 2.取得所有出生于1970-01-01之后的女性员工人数 
SELECT COUNT(*) FROM `employee` 
WHERE `birth_date` > '1970-01-01' AND `sex` = 'F';
-- 3.取得所有员工的平均薪水 
SELECT AVG(`salary`) FROM `employee`;
-- 4.取得所有员工薪水的总和 
SELECT SUM(`salary`) FROM `employee`;
-- 5.取得薪水最高的员工 
SELECT MAX(`salary`) FROM `employee`;
-- 6.取得薪水最低的员工
SELECT MIN(`salary`) FROM `employee`;
-- wildcards 万用子元  % 代表多个子元, _ 代表一个子元
-- 1.取得电话号码尾数是355的客户
SELECT * FROM `client` 
WHERE `phone` LIKE '%335';
-- 取得电话号码开头是123的客户
-- SELECT * FROM `client` WHERE `phone` LIKE '123%';
-- 取得电话号码包含是123的客户
-- SELECT * FROM `client` WHERE `phone` LIKE '%123%';
-- 2.取得姓艾的客户
SELECT * FROM `client` 
WHERE `client_name` LIKE '艾%';
-- 3.取得生日在12月的员工
SELECT * FROM `employee` 
WHERE `birth_date` LIKE '_____12%';
-- union 联合查询 并集
-- 1.员工名字 union 客户名字 1+1 同属性
SELECT `name` FROM `employee` 
UNION 
SELECT `client_name` FROM `client`;
-- 2.员工id + 员工名字 union 客户id + 客户名字
SELECT `emp_id` AS `total_id`, `name` AS `total_name` FROM `employee` 
UNION 
SELECT `client_id`, `client_name` FROM `client`;
-- 3.员工薪水 union 销售金额
SELECT `salary` AS `total_salary` FROM `employee` 
UNION 
SELECT `total_sales` FROM `works_with`;
-- join 连接
INSERT INTO `branch` VALUES(4, '偷懒', NULL);
-- 取得所有部门经理的名字
SELECT `employee`.`emp_id`, `employee`.`name`, `branch`.`branch_name` 
FROM `employee` LEFT JOIN `branch` 
ON `employee`.`emp_id` = `branch`.`manager_id`;
-- 不论 on 的条件成立与否,左面的表格都会回传全部资料,只有条件成立右边的表格才会回传资料,其他则是NULL
-- SELECT `employee`.`emp_id`, `employee`.`name`, `branch`.`branch_name` 
-- FROM `employee` RIGHT JOIN `branch` 
-- ON `employee`.`emp_id` = `branch`.`manager_id`;
-- subquery 子查询
-- 1.找出研发部门的经理名字
SELECT `name` FROM `employee` WHERE `emp_id` = (SELECT `manager_id` FROM `branch` WHERE `branch_name` = '研发'
);
-- 2.找出对单一位客户销售金额超过50000的员工的名字
SELECT `name` FROM `employee` WHERE `emp_id` IN (SELECT `emp_id` FROM `works_with` WHERE `total_sales` > 50000 
);
-- 因为超过两笔 所以用 IN
-- on delete
-- 	ON DELETE  SET NULL
-- CREATE TABLE `branch` (
-- 	`branch_id` INT PRIMARY KEY,
--     `branch_name` VARCHAR(20),
--     `manager_id` INT,
--     FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
--     );
-- manager_id 对应的 emp_id 被删掉了 就把manager_id设为NULL
--	 ON DELETE CASCADE 级联删除
-- CREATE TABLE `works_with` (
-- 	`emp_id` INT,
--     `client_id` INT,
--     `total_sales` INT,
--     PRIMARY KEY(`emp_id`, `client_id`),
--     FOREIGN KEY(`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,
--     FOREIGN KEY(`client_id`) REFERENCES `client`(`client_id`) ON DELETE CASCADE
--     );
-- CASCADE针对左表关联列为首要键所在的列,且由于首要键列不得为NULL,所以采取CASCADE的清空本行的
-- 如果某一个值同时是primary key 或者 foreign key就不能用ON DELETE SET NULL

3.sql连接python:

选用:Vscode
终端安装包:pip install mysql-connector-python
打开Vscode,

import mysql.connector

打开指定的连接

connection = mysql.connector.connect(host='localhost',port='3306',user='root',password='密码',database='指定的database名字'
)
cursor = connection.cursor()
# 创建资料库
cursor.execute("CREATE DATABASE `指定的table名字`;")
# 取得所有资料库名称
cursor.execute("SHOW DATABASES;")
records = cursor.fetchall()
for r in records:print(r)
# 选择资料库
cursor.execute("USE `指定的资料库名字`;")
# 创建表格
cursor.execute("CREATE TABLE `指定的database名字`(指定的database名字 INT);")
# 查看`branch`表里面数据
cursor.execute("SELECT * FROM `branch`;")
records = cursor.fetchall()
for r in records:print(r)
# 新增 table 数据
cursor.execute("INSERT INTO `branch` VALUES(5, 'qq', NULL);")
# 修改 table 数据
cursor.execute("UPDATE `branch` SET `manager_id = NULL WHERE `branch_id` = 4;")
# 删除 table 数据
cursor.execute("DELETE FROM `branch` WHERE `branch_id` = 5;")
cursor.close()
connection.commit() #改动资料就要加上这一句
connection.close()

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

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

相关文章

Linux(CentOS 7 )基于git、maven实现springboot自动化部署

前提 1、已安装git、maven、java环境 不清楚的可以看另一篇文章: https://blog.csdn.net/weixin_44646763/article/details/137041469 2、已为项目设置远程 git 仓库 origin (可以通过:git remote add origin https://github.com/xxx/xxx.git设置) 创…

在 KubeSphere 中玩转 KubeEdge 边缘计算

文章目录 一、边缘计算概念二、边缘计算痛点三、边缘计算应用场景四、常见边缘计算框架五、KubeEdge 架构4.1、kubeedge云端4.2、kubeedge边端4.3、安装部署4.3.1、安装 Cloudcore4.3.2、添加边缘节点4.3.3、开启Metrics& 日志 4.4、运行应用 六、云边服务互访6.1、部署 Ed…

LLM--提示词Propmt的概念、作用及如何设计提示词

文章目录 1. 什么是提示词?2. 提示词的作用3. 如何设计提示词?3.1. 提供详细的信息3.2. 指定角色3.3. 使用分隔符和特殊符号3.4. 提供示例3.5. 少量示例的思维链(COT)模型3.6. 思维树(TOT)模型3.7. 自洽性 …

论文笔记 - :MonoLSS: Learnable Sample Selection For Monocular 3D Detection

论文笔记✍MonoLSS: Learnable Sample Selection For Monocular 3D Detection 📜 Abstract 🔨 主流做法限制 : 以前的工作以启发式的方式使用特征来学习 3D 属性,没有考虑到不适当的特征可能会产生不利影响。 🔨 本…

C++刷题篇——07检测热点字符

一、题目 二、解题思路 1、使用map&#xff0c;key为元素&#xff0c;value为出现的次数 2、由于sort不适用于map&#xff0c;因此要将map的key、value放到vector中&#xff0c;再对vector排序 3、对map排序&#xff1a;方法1&#xff1a;使用二维数组vector<vector<>…

力扣 1143. 最长公共子序列

题目来源&#xff1a;https://leetcode.cn/problems/longest-common-subsequence/description/ C题解&#xff08;思路来源代码随想录&#xff09;&#xff1a;动态规划。 1. 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;长度为[0, i - 1]…

R2GenCMN中的Encoder_Decoder结构

R2GenCMN中的 Encoder_Decoder 结构 Encoder_Decoder 结构直接关系到文本的生成&#xff0c;它结构参考的transformer的结构 我们这里主要看代码的实现&#xff0c;从视觉编码器的输出开始 1. 模型结构 首先介绍一下整体结构&#xff0c;这里的baseCMN其实就是一个包装了的T…

编曲知识16:贴唱混音思路 录音 对轨 降噪

贴唱混音思路 录音 对轨 降噪小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_6607f17ae4b092c1684f438a?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 混音思路 贴唱混音、分轨混音 贴唱:由翻唱混音发展而来,指仅处理人声和伴奏…

算法学习——LeetCode力扣补充篇6(132. 分割回文串 II、673. 最长递增子序列的个数、841. 钥匙和房间、463. 岛屿的周长)

算法学习——LeetCode力扣补充篇6 132. 分割回文串 II 132. 分割回文串 II - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。 返回符合要求的 最少分割次数 。 示例 示例 1&#…

CCIE-07-OSPF_TS

目录 实验条件网络拓朴逻辑拓扑实现目标 环境配置开始Troubleshooting问题1. R22的e0/0接口配置了网络类型问题2. R22和R21之间的IP地址子网掩码长度不一致问题3. R21的e0/0口配置了被动接口问题4. R3配置了不一致的hello-time问题5. R21配置了max-metric导致路由无效问题6. R3…

深度学习评价指标(1):目标检测的评价指标

1. 简述 在计算机视觉/深度学习领域&#xff0c;每一个方向都有属于自己的评价指标。通常在评估一个模型时&#xff0c;只需要计算出相应的评价指标&#xff0c;便可以评估算法的性能。同时&#xff0c;所谓SOTA&#xff0c;皆是基于某一评价指标进行的评估。 接下来&#xff0…

【JavaWeb】Day29.SpringBootWeb请求响应——请求(二)

请求响应 4.数组集合参数 数组集合参数的使用场景&#xff1a;在HTML的表单中&#xff0c;有一个表单项是支持多选的(复选框)&#xff0c;可以提交选择的多个值。 4.1 数组 数组参数&#xff1a;请求参数名与形参数组名称相同且请求参数为多个&#xff0c;定义数组类型形参即…

IO流c++

IO流类库 输入输出流 #include <iostream> using namespace std;class InCount { public:InCount(int a 0, int b 0){c1 a;c2 b;}void show(void){cout << "c1" << c1 << "\t" << "c2" << c2 << …

Springboot Thymeleaf 实现数据添加、修改、查询、删除

1、引言 在Spring Boot中使用Thymeleaf模板引擎实现数据的添加、修改、查询和删除功能&#xff0c;通常步骤如下&#xff1a; 在Controller类中&#xff0c;定义处理HTTP请求的方法。创建Thymeleaf模板来处理表单的显示和数据的绑定。 2、用户数据添加 1、 在Controller类中…

Pytorch 下载失败原因

错误信息&#xff1a; ERROR: Could not find a version that satisfies the requirement torch (from versions: none) ERROR: No matching distribution found for torch 解决方案&#xff1a; 在官网看到&#xff0c;它需要python3.8-3.11的环境。过高和过低的版本都不…

Linux 学习之路 -- 工具篇 -- gcc / g++

在 Linux 系统中&#xff0c;gcc 和 g 是两个常用的编译工具&#xff0c;分别用于编译 C 和 C 代码。下面我将介绍gcc、g的一些基本用法 目录 一、简单的认识 二、简单了解一下编译的过程 <1> 预处理阶段 <2>编译 <3>汇编 <4>链接…

ssm012医院住院管理系统+vue

医院住院管理关系 摘 要 随着时代的发展&#xff0c;医疗设备愈来愈完善&#xff0c;医院也变成人们生活中必不可少的场所。如今&#xff0c;已经2021年了&#xff0c;虽然医院的数量和设备愈加完善&#xff0c;但是老龄人口也越来越多。在如此大的人口压力下&#xff0c;医院…

JavaAgent 技术原理及实战

JavaAgent 技术原理及实战 1、引子2、JavaAgent 简单示例&#xff1a;方法开始和结束时打印日志2.1 创建 Agent2.2 编写验证 agent 功能的测试类2.2.1 使用JavaAgent 静态加载方式2.2.2 使用 JavaAgent 动态加载方式 2.3、小结 3、JavaAgent3.1 JavaAgent是什么&#xff1f;3.2…

linux 软中断入门

在 linux 中&#xff0c;任务执行的载体有很多&#xff0c;包括线程&#xff0c;中断&#xff0c;软中断&#xff0c;tasklet&#xff0c;定时器等。但是从本质上来划分的话&#xff0c;任务执行的载体只有两个&#xff1a;线程和中断。软中断和 tasklet 的执行可能在中断中&am…

DevSecOps安全工具链介绍

目录 一、概述 二、安全工具链在平台中的定位 2.1 概述 2.2 分层定位 2.2.1 不同阶段的安全工具 2.2.2 安全工具金字塔 2.3 安全流水线集成概览 2.3.1 概述 2.3.2 标准流水线集成安全工具链概览图 三、安全工具链分类 3.1 概述 3.2 威胁建模类 3.2.1 威胁建模的概念…