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()

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

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

相关文章

Matlab中的脚本和函数

Matlab中的脚本和函数 文章目录 Matlab中的脚本和函数脚本创建脚本代码注释函数创建函数局部函数嵌套函数私有函数匿名函数补充知识函数句柄测试环境:Win11 + Matlab R2021a 脚本 ​ Matlab脚本是最简单的程序文件类型。它们可用于自动执行一系列 Matlab 命令,如命令行重复执…

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

深度学习理论基础(二)神经网络基础篇

目录 一、基础知识点Ⅰ 参数部分Ⅱ 模型部分 二、普通神经网络模型搭建1. 准备数据集2. 划分数据集3. 搭建模型4. 训练网络5. 测试网络6. 保存与导入模型 神经网络通过学习大量样本的输入与输出特征之间的关系&#xff0c;以拟合出输入与输出之间的方程&#xff0c;学习完成后&…

Monkey 和 TextMonkey ---- 论文阅读

文章目录 Monkey贡献方法增强输入分辨率多级描述生成多任务训练 实验局限结论 TextMonkey贡献方法移位窗口注意&#xff08;Shifted Window Attention&#xff09;图像重采样器&#xff08;Image Resampler&#xff09;Token Resampler位置相关任务&#xff08;Position-Relate…

Collection与数据结构链表与LinkedList(三):链表精选OJ例题(下)

1. 分割链表 OJ链接 class Solution {public ListNode partition(ListNode head, int x) {if(head null){return null;//空链表的情况}ListNode cur head;ListNode formerhead null;ListNode formerend null;ListNode latterhead null;ListNode latterend null;//定义…

【AXIS】AXI-Stream FIFO设计实现(四)——异步时钟

前文介绍了几种同步时钟情况下的AXI Stream FIFO实现方式&#xff0c;一般来说&#xff0c;FIFO也需要承担异步时钟域模块间数据传输的功能&#xff0c;本文介绍异步AXIS FIFO的实现方式。 如前文所说&#xff0c;AXI-Stream FIFO十分类似于FWFT异步FIFO&#xff0c;推荐参考前…

书生浦语笔记一

2023年6月&#xff0c;InternLM的第一代大模型正式发布。仅一个月后&#xff0c;该模型以及其全套工具链被开源。随后&#xff0c;在8月份&#xff0c;多模态语料库chat7B和lagent也被开源。而在接下来的9月份&#xff0c;InternLM20B的开源发布进一步加强了全线工具链的更新。…

《剑指 Offer》专项突破版 - 面试题 98、99 和 100 : 和动态规划相关的矩阵路径问题(C++ 实现)

目录 前言 面试题 98 : 路径的数目 面试题 99 : 最小路径之和 面试题 100 : 三角形中最小路径之和 前言 矩阵路径是一类常见的可以用动态规划来解决的问题。这类问题通常输入的是一个二维的格子&#xff0c;一个机器人按照一定的规则从格子的某个位置走到另一个位置&#…

软件杯 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

Java 面试宝典:请说下你对 Netty 中Reactor 模式的理解

大家好&#xff0c;我是大明哥&#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站&#xff1a;https://skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 回答 Reactor 模式是一种高效处理并发网络事件的设计模式&…

SQLite3进行数据库各项常用操作

目录 前言1、SQLite介绍2、通过SQLite创建一个数据库文件3、往数据库文件中插入数据4、数据库文件信息查询5、修改数据库中的内容6、删除数据库中的内容 前言 本文是通过轻量化数据库管理工具SQLite进行的基础操作和一些功能实现。 1、SQLite介绍 SQLite是一个广泛使用的嵌入…

GEE土地分类——基于遥感影像数据的不同作物的分类

简介 这里我们首先要更改原始代码的中的影像和研究区矢量的问题,这个为了防止我们计算的过程超限,建议先将我们的研究区影像和样本点先存在自己的assets中,然后导入到新的脚本中。然周本文就是对其进行影像进行归一化处理,然后进行样本点值提取至点,然后训练样本点,进行…

系统架构体系

一、单体架构 1.浏览器&#xff0c;DNS服务器&#xff08;解析域名&#xff0c;转换为IP地址&#xff09;&#xff0c;一台计算机就相当于一个服务器&#xff08;用端口号进行区分Tomcat&#xff08;web服务&#xff09;&#xff0c;数据库服务&#xff09; 2.本次架构解决…

3D转换1111

1.三维坐标系 1.3D位移: translate3d(x,y,z)  translform:translateX(100px)&#xff1a;仅仅是在x轴上移动  translform:translateY(100px)&#xff1a;仅仅是在Y轴上移动  translform:translateZ(100px)&#xff1a;仅仅是在Z轴上移动&#xff08;注意&#xff1…

HTTP/1.1 如何优化?(计算机网络)

有三种方法&#xff1a; 第一个思路是&#xff0c;通过缓存技术来避免发送 HTTP 请求。客户端收到第一个请求的响应后&#xff0c;可以将其缓存在本地磁盘&#xff0c;下次请求的时候&#xff0c;如果缓存没过期&#xff0c;就直接读取本地缓存的响应数据。如果缓存过期&#…

Uibot6.0 (RPA财务机器人师资培训第6天 )发票验真机器人案例实战

类似于小北的这篇博客&#xff1a;Uibot (RPA设计软件&#xff09;Mage AI智能识别&#xff08;发票识别&#xff09;———课前材料五_uibot 添加mageai-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135591297?spm1001.2014.3001.5501训练网站&#xff1a;泓江…

122、内网安全——域信息收集应用网络凭据CS插件AdfindBloodHound

文章目录 理解域域信息搜集 理解域 假设有1000台计算机&#xff0c;运维人员需要为每一台计算机进行软件的安装、环境部署&#xff0c;实际上运维人员不可能亲自对每一台计算机进行软件的安装和环境部署。实际&#xff0c;将所有1000台计算机放入一个域中&#xff0c;域内有一…

简单爬虫,爬取某东某商品评论前十页

商品链接地址&#xff1a;【博世四坑5系 6x100x160】博世&#xff08;BOSCH&#xff09;四坑5系&#xff08;1支装&#xff09;圆柄两坑两槽混凝土钻头 6x100x160mm【行情 报价 价格 评测】-京东 首先抓包&#xff0c;用搜索框搜索评论&#xff0c;看评论在哪个包中 为了好看筛…

Python - 深度学习系列31 - ollama的搭建与使用

说明 做这个的主要目的是为了搭建Langchain的本地环境&#xff0c;使用LangChain让LLM具备调用自定义函数的功能。 内容 1 安装server 以下将ollama的安装方式&#xff0c;以及使用做一个简单的说明(记录&#xff09;。之前对这个工具没有了解&#xff0c;只是从快速实践的…

【python】pip清华大学镜像

1、修改pip源为清华源&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple2、结果是自动给我创建了一个文件&#xff1a; 3、打开这个文件所在的文件夹&#xff1a; 4、打开文件&#xff1a; 5、如果不想指定清华的&#xff0c;就删掉…