《Mysql必知必会》学习笔记

本书涵盖SQL基础知识、MySQL操作、数据检索与处理、数据过滤、计算字段、使用函数、汇总与分组数据、子查询、联结表等内容,深入浅出地讲解了数据库管理和查询的实用技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Mysql必知必会》学习笔记

第一章 了解SQL

  • 数据库(database)是保存有组织的数据的容器(通常是一个文件或一组文件)。数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。我们并不直接访问数据库,我们使用的是DBMS,它替我们访问数据库。
  • 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行。

唯一标识表中每行的这个列(或这组列)成为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值得组合必须是唯一的(但单个列的值可以不唯一)。

  • SQL: 结构化查询语言structured query language的缩写,专门与数据库通信的语言。

 

第二章 MySQL简介

本章介绍了什么是MySQL,并引入了几个客户机使用程序。

 

第三章 使用MySQL

本章介绍了如何连接和登录MySQL,如何用USE选择数据库,如何用SHOW查看MySQL数据库、表和内部信息。

  • 为了连接到MySQL,需要以下信息
    • 主机名(计算机名)--如果连接到本地MySQL服务器,为localhost;
    • 端口(如果使用默认端口3306之外的端口)
    • 一个合法的用户名
    • 用户口令(如果需要)
  • USE语句--选择数据库
    • 必须使用USE打开数据库,才能读取其中数据。
    • 双击左侧schemata列表中任一个数据库以使用它,看不到USE命令的实际执行,但会看到被选择的数据库(黑体加亮)。
  • SHOW语句—了解数据库和表
    • 数据库、表、列、用户、权限等信息被存储在数据库和表中,但内部的表一般不直接访问。可用MySQL的SHOW命令来提取和显示。
    • SHOW DATABASES;
      •  返回可用数据表的一个列表;
    • SHOW TABLES;
      • 返回所选择的数据库中表的列表;
    • SHOW COLUMNS FROM TABLE;
      • SHOW COLUMNS要求给出一个表名,对表中每个字段返回一行,包括字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息。
      • DESCRIBE语句,是使用SHOW COLUMNS FROM的一种快捷方式。如表名为score,那么DESCRIBE SCORE语句和SHOW COLUMNS FROM SCORE语句执行结果是一样的。
      • SHOW ERRORS 和 SHOW WARNINGS, 用来显示服务器错误或警告信息;

 

第四章 检索数据

本章介绍如何使用SELECT语句从表中检索一个或多个数据列。

SELECT语句,用途是从一个或多个表中检索信息。所以,必须至少给出两条信息-想选择什么信息,从什么表进行选择。

多数SQL开发人员认为将SQL语句,按照逻辑,分成多行,更容易阅读和调试。

  • 检索单列,如:SELECT prod_name FROM products;
  • 检索多列,如:SELECT prod_id,prod_name,prod_price FROM products;
    • 注意多列名之间逗号分开
  • 通配符(*)返回表中所有列,如:SELECT * FROM products;
  • 使用DISTINCT关键字对检索结果去重
    • SELECT DISTINCT vend_id FROM products; 只返回不同(唯一)的vend_id行,
    • DISTINCT必须直接放在列名的前面
    • 不能部分使用DISTINCT。DISTINCT关键字应用于所有列而不仅是前置它的列。
  • 使用LIMIT子句指定返回表中的几行数据
  • 检索单列,如:SELECT prod_name FROM products LIMIT 5; 输出结果不多于5行。
    • 如何指定检索的开始行和行数?
    • SELECT prod_name FROM products LIMIT 5,5;
      • LIMIT 5,5指示MySQL返回从行5开始的5行,第一个数是开始位置,第二个数是检索的行数。

结合数据表,以id从1开始的数据表为例,输出几行数据如下:

  • select id,Countrycode from City limit 0,1;

  • select id,Countrycode from City limit 1;(同上)

 

  • select id,Countrycode from City limit 1,1;

 

 

 

  • select id,Countrycode from City limit 5,5;

 

 

第五章 排序检索数据

本章讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据。

SELECT prod_name

FROM products

ORDER BY prod_name;

请注意,通常,ORDER BY子句中使用的列将是为显示所选择的列。但是,实际上并不一定要这样,用非检索的列进行排序也是完全合法的。

  • 按多个列排序

SELECT prod_id, prod_price ,prod_name FROM products

ORDER BY prod_price ,prod_name

重要的是理解在按多个列排序时,排序完全按所规定的顺序进行。换句话说,对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

  • 按单列降序排序

SELECT prod_id, prod_price ,prod_name

FROM products

ORDER BY prod_price DESC;

  • 按多列降序排序

SELECT prod_id, prod_price ,prod_name

FROM products

ORDER BY prod_price DESC, prod_name;

  • 特别要注意的是:
  • DESC关键字只应用到直接位于其前面的列名。如上句,只对prod_price列以降序排列,而prod_name仍然按标准升序排列。
  • 在多个列上降序排序:必须对每个列制定DESC关键字。
  • 升序关键字是ASC(ASCENDING), 但实际上并没有多大用处,因为升序是默认的。
  • 使用ORDER BY 和LIMIT组合,能够找到一个列中最高或最低的值。

请注意,在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对会产生错误信息。

 

第六章 过滤数据

本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件。

  • 用WHERE子句进行过滤数据,WHERE子句必须在表名(FROM子句)之后给出。
  • 在同时使用ORDER BY 和 WHERE子句时,应该让ORDER BY位于WHERE之后,否则会报错。
  • WHERE子句操作符

 

  • 使用BETWEEN操作符,需要设定两个值,即范围的开始值和结束值。这两个值必须用AND关键字分隔。BETWEEN匹配范围中所有的值,包括制定的开始值和结束值,同【numberA ,numberB】,闭括号。.
  • SELECT prod_name,prod_price From products WHERE prod_price BETWEEN 5 AND 10;
  • IS NULL 子句,检查是否具有NULL值的数据。如,SELECT prod_name From products WHERE prod_price IS NULL;

 

第七章 数据过滤

本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件。同时学习如何使用NOT 和IN操作符。

  • AND用在WHERE子句中,用来只是检索满足所有给定条件的行。可以添加多个过滤条件,每添加一条就要使用一个AND,
  • OR操作符,检索匹配任一条件的行。
  • WHERE子句中运算顺序:( )优先于AND 优先于 OR。在多个过滤条件的情况下,不要过分依赖默认计算次序,多使用圆括号,消除歧义,便于代码阅读。
  • IN
  • 功能与OR相当,但各方面优于OR.
  • 例子:

同代码:

输出结果一致。

  • NOT

NOT操作符有且只有一个功能,否定它之后所跟的任何条件。

MySQL支持使用NOT对IN, BETWEEN,EXISTS子句取反。

            

 

第八章 用通配符进行过滤

本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。

百分号(%)通配符:%表示任何字符出现任意次数

%b: 以b结尾的字符

b%:以b开头的字符

%b%:中间含有b的字符

s%e:以s开头,e结尾的字符

通配符不能匹配NULL

下划线(_)通配符:下划线通配符的用途与%一样,但是下划线只匹配单个字符而不是多个字符。下划线_ 总是匹配一个字符,不能多也不能少

 

第十章 创建计算字段

  • 串拼接:将值联结一起构成单个值。使用Concat()函数。

使用RTRIM()函数去除参数右侧空格:

  • Trim函数:RTrim( ) 去除右侧空格; LTrim( )去除左边空格

Trim( ) 去掉左右两边的空格

  • 关键字AS赋予别名,即一个字段或值得替换名

  • 执行算术计算

 

 

第十一章 使用数据处理函数

本章介绍什么是函数,MySQL支持何种函数,以及如何使用这些函数。

  • 常见的文本处理函数

 

  • SOUNDEX:将任何文本串转换为描述其语音表示的字母数字模式的算法。其考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。

例子:如人名拼写输入错误,无法正确检索到。但可以通过发音检索。

  • 常用的时间和日期处理函数

  • 为了避免歧义,日期格式推荐为yyyy-mm-dd
  • 如果要的是日期,请使用DATE()。

  • 数值处理函数

 

第十二章 汇总数据

本章介绍什么是SQL的聚集函数以及如何利用它们汇总表的数据。

  • 聚集函数(aggregate function)是指运行在行组上,计算和返回单个值的函数。

SQL聚集函数

  • COUNT()函数两种方式
  • 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
  • 使用COUNT(COLUMN)对特定列中具有值得行进行计数,忽略NULL值

  • MAX()函数
    1. 对非数值数据使用MAX()。虽然MAX()一般用来找到最大的数值或日期值,但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行。
  • MIN()函数
    1. 在用于文本数据时,如果数据按相应的列排序,则MIN()返回最前面的一行。

 

第十三章 分组数据

本章将介绍如何分组数据,以便能汇总表内容的子集。这涉及两个新SELECT语句子句,分别是GROUP BY子句和HAVING子句。

  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。
  • GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
  • WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。在分组统计数据下面再进行统计汇总。
  • HAVING子句。WHERE子句过滤行,而HAVING过滤分组。
    1. 这里有另外一种理解,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。这是一个重要的区别,WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组。
  • SELECT子句及其顺序

 

 

第十四章 使用子查询

本章介绍什么是子查询以及如何使用它们。

  • 子查询:嵌套在其他查询中的查询。
  • 在WHERE子句中使用子查询能够编写出功能很强并且很灵活的SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。
  • 子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等。
  • 小TIP:逐渐增加子查询来建立查询。子查询的调试很有技巧性,最可靠的方法是逐渐进行。先建立和测试内层的查询,然后,用硬编码数据建立和测试外层查询。这样做仅给构造查询增加了一点点时间,但节省了查找不正常/错误问题的大量时间,极大地提高了查询一开始就正常工作的可能性。

 

第十五章 联结表

本章将介绍什么是联结,为什么要使用联结,如何编写使用联结的SELECT语句。

  • 外键(foreign key)外键为某个表中的一列,它包含另一表的主键值,定义了两个表之间的关系。

  • 可伸缩性(scale) 能够适应不断增加的工作量而不失败。
  • 完全限定列名 在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分割的表名和列名)。如果引用一个没有用表名限制的具有二义性的列名,MySQL将返回错误。
  • 笛卡尔积(cartesian product)

WHERE子句作为过滤条件,可以限定匹配和联结的行。

如果没有WHERE子句,第一个表中的行将会与第二个表中的每个行进行配对,而不管这些数据在逻辑上是否可以配对。

笛卡尔积:由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值