MySql笔记 - Go语言中文社区

MySql笔记


MySql笔记

01 基础

学习的是YouTube上面的一个up主,B站也有同步课程,有兴趣可以关注一下,视频讲的更加详细。
YouTube链接:https://www.youtube.com/channel/UCRCqgMdsAHK3yfvW4en6JpA

基础知识

  • Database中包含多个相关的table,每个Table中有行和列。
  • Table中包含Primary Key(主键)和Foreign Key(外键)。主键是独一无二的,并且是有唯一存在的,不可以重复或空。给一个主键,可以找出一条独一无二的记录。 主键可以不止有一个信息。
  • 主键是唯一的,用于标识一张表。外键可以有多个,用于建立表和表的关系。

在这里插入图片描述

之后会用到的示例数据库:

在这里插入图片描述

SELECT&FROM

语法:

SELECT * FROM table_name; --选择所有列(*为通配符)

SELECT column_name1,column_name2 FROM table_name;  --选择两列

SELECT DISTINCT column_name FROM table_name; --提取出该列独一无二的数值,去除重复

SELECT column_name  FROM table_name LIMIT 5 OFFSET 4  --检索五行,从第四行开始(不包含第4行)

语句结束之后要加分号:

WHERE&AND

  • 数据库中很少需要检索所有行,通常只会根据指定操作或报告的需要提取表数据的子集。只检索所需要的条件需要指定搜索条件(过滤条件)。

  • 可以使用的操作符有:“=”、“<>” “ !=” “ <” “>” “BETWEEN” “Like” “IN” “IS NULL”等

例:

SELECT * FROM Employee WHERE Salay>70000 AND Salary<85000;--检索工资大于70000且小于85000的行

SELECT * FROM Employee WHERE Salarry IN (70000,85000);-- 检索工资为70000或者85000的行

SELECT * FROM Employee WHERE Name LIKE%an%;  --检索名字中包含an的行

LIKE后面需要写单引号

GROUP BY

SELECT DepartmentID,COUNT(Name) FROM Employee GROUP BY DepartmentId; 
--COUNT是按照GROUP BY计数的,并不是按照COUNT内的计数,但是输出的列名会是COUNT(Name),也可以对这列重新命名,语句如下:

SELECT DepartmentID,COUNT(Name) AS Number_Empolyee FROM Employee GROUP BY DepartmentId;
--AS 后面跟的是重命名之后的名字,也可以跟其他函数,比如

SELECT DepartmentID,COUNT(Salary) AS Total,MIN(Salary) AS MinSalary,Max(Salary) AS MaxSalary FROM Employee GROUP BY DepartmentId;

HAVING &ORDER BY

  • HAVING 一定要和GROUP BY一起用,一定要在分好组的基础上用。
SELECT DepartmentID FROM Employee GROUP BY DepartmentId HAVING COUNT(*) >3;  
-- 按照DepartmentID,并且选择数量大于3个的。

SELECT Name,Salary,DepartmentId FROM Employee ORDER BY Salary,DepartmentId;  
--从小到大排序,根据Salary排序,如果Salary重复或相等,则按照DepartmentId排序。

SELECT Name,Salary,DepartmentId FROM Employee ORDER BY Salary DESC; 
--降序排(默认是升序)

02 提高篇

表之间的连接方式:
在这里插入图片描述
所有内容都是基于以下表:

在这里插入图片描述

INNER JOIN

  • 返回两个table同时存在的内容。可以理解为求一下并集(满足条件的)
  • FROM Left_table_Name INNER JOIN Right_Table_Name

示例语句:

SELECT Employee.Id AS Id,Employee.Name AS Name,Employee.Salary AS Salary,Employee.DepartmentId AS DepartmentId,Department.Name AS DepartmentName FROM Employee INNER JOIN Department ON Employee.DepartmentId = Department.Id;
--ON后面跟的是条件,选取符合条件的,然后内连接。

执行之后的结果为:
在这里插入图片描述

LEFT JOIN

  • LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行,没有输出为空(<N/A>)。
  • 用法:SELECT column_name(s) FROM table_name1
    LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

示例:

SELECT Employee.Id AS Id,Employee.Name AS Name,Employee.Salary AS Salary,Employee.DepartmentId AS DepartmentId,Department.Name AS DepartmentName FROM Employee LEFT JOIN Department ON Employee.DepartmentId = Department.Id;

返回结果:

在这里插入图片描述

需要注意的点:在写SELECT时,后面要写成table.column,而不是直接写列的名字。比较好的习惯是利用AS重命名一下列名。

RIGHT JOIN & OUTER JOIN

RIGHT JOIN

  • RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
  • 关键字用法:
    SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

示例:

SELECT Employee.Id AS Id,Employee.Name AS Name,Employee.Salary AS Salary,Employee.DepartmentId AS DepartmentId,Department.Name AS DepartmentName FROM Employee RIGHT JOIN Department ON Employee.DepartmentId = Department.Id;

输出结果:

在这里插入图片描述

**OUTER JOIN **

  • 把所有的内容都保留,与INNER JOIN相反

UNION

  • UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
  • UNION 命令只会选取不同的值,如果有重复值只会选出来一个。
  • UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

示例:

在这里插入图片描述

SELECT title as Position,Name,Salary FROM professor UNION SELECT title as Position,Name,Salary FROM RTA;

结果:

在这里插入图片描述

注意:

注意UNION 和 UNION的区别;
列的顺序和数量要一样;

补充

update 函数

Update 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43527611/article/details/103190848
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢