MySQL必知必会(第4版)整理笔记 您所在的位置:网站首页 java个位数补充零 MySQL必知必会(第4版)整理笔记

MySQL必知必会(第4版)整理笔记

2023-06-30 03:32| 来源: 网络整理| 查看: 265

参考书籍:

BookName:《SQL必知必会(第4版)》

BookName:《Mysql必知必会(第4版)》

Author: Ben Forta

说明:本书学习笔记

1、了解SQL   1.1 数据库基础     1.1.1 数据库

      数据库是一个以某种有组织的方式存储的数据集合,即保存有组织的数据的容器(通常是一个文件或一组文件)。

      数据库软件应称为数据库管理系统(DBMS)。

    1.1.2 表

      表是一种结构化的文件,可用来存储某种特定类型的数据。

      模式,关于数据库和表的布局及特性的信息。

    1.1.3 列和数据类型

      列,表中的一个字段,存储表中的某部分信息。

      所有表都是由一个或多个列组成的。

      数据类型,所允许的数据的类型。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。

    1.1.4 行

      行,表中的一个记录。

      表中的数据都是按行存储的,所保存的每个记录存储在自己的行内。

    1.1.5 主键

      主键,一列(或一组列),其值能够唯一标识表中每一行。

      表中的任何列都可以作为主键,只要满足:

        (1)任意两行都不具有相同的主键值;

        (2)每一行都必须具有一个主键值;

        (3)主键列中的值不允许修改或更新;

        (4)主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

  1.2 什么是SQL

    SQL是Structured Query Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。

2、MySQL简介

  数据所有的存储、检索、管理和处理实际上是由数据库软件——DBMS完成的。

  MySQL是一种DBMS,即它是一种数据库软件。

  DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户机——服务器的DBMS。

3、使用MySQL   3.1 连接

    为了连接到MySQL,需要以下信息:

    (1)主机名(计算机名),如果连接到本地MySQL服务器,为localhost;

    (2)端口(如果使用默认端口3306之外的端口);

    (3)一个合法的用户名;

    (4)用户口令。

  3.2 选择数据库

    在最初连接到MySQL时,没有任何的数据库打开供使用,故在能执行任意数据库操作前,需要选择一个数据库,可使用USE关键字。

          

    这里显示出的Database changed消息是mysql命令行实用程序在数据库选择成功后显示的。

    必须先使用USE打开数据库,才能读取其中的数据。

  3.3 了解数据库和表

    数据库、表、列、用户、权限等的信息被存储在数据库和表中,可用MySQL的SHOW命令来显示这些信息。

    

    SHOW DATABASES;  返回可用数据库的一个列表。

    SHOW TABLES;  返回当前选择的数据库可用表的列表 。

    SHOW COLUMNS FROM test_demo;  SHOW COLUNNS要求给出一个表名,它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、健信息

                     、默认值以及其他信息(如字段名的auto_increment)。

    SHOW STATUS;  用于显示广泛的服务器状态信息。

    SHOW CREATE DATABASE;  用来显示创建特定数据库。

    SHOW CREATE TABLE;  用来显示创建特定表。

    SHOW GRANTS;  用来显示授权用户(所有用户或特定用户)的安全权限。

    SHOW ERRORS;和SHOW WARNINGS; 用来显示服务器错误或警告信息。

4、检索数据

  补充:(1)多条SQL语句必须以分号(;)分隔。

     (2)SQL语句不区分大小写,一般建议所有SQL关键字使用大写,而对所有列和表明使用小写。

     (3)在处理SQL语句时, 其中所有空格都被忽略;SQL语句可以在上一行给出,也可以分成许多行。

  4.1 SELECT语句

    SELECT语句,它的作用是从一个或多个表中检索信息。

    为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。

  4.2 检索单个列

    SELECT prod_name FROM products;  

    所需的列名在SELECT关键字之后给出,FROM关键字指出从其中检索数据的表名。    

  4.3 检索多个列

    在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

    SELECT prod_id, prod_name, prod_price FROM products;

    指定3个列名。

  4.4 检索所有列

    在实际列名的位置使用星号(*)通配符,SELECT语句可以检索所有的列而不必逐个列出他们。

    SELECT * FROM products;  

    虽然使用通配符可能会使人省事不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。

  4.5 检索不同的行

    SELECT vend_id FROM products;

    vend_id 为其他与products相关联的表的主键,但为products的某列。

    SELECT DISTINCT vend_id FROM products;

    DISTINCT筛选重复数据。使用DISTINCT关键字,它必须直接放在列名的前面。DISTINCT关键字应用于所有列而不仅仅是前置它的列。

  4.6 限制结果

  DISTINCT筛选重复数据。使用DISTINCT关键字,它必须直接放在列名的前面。DISTINCT关键字应用于所有列而不仅仅是前置它的列。

  4.6 限制结果

    为了返回第一行或前几行,可使用LIMIT字句。

    SELECT prod_name FROM products LIMIT 5;    --LIMIT 5 指示MySQL返回不多于5行。

    SELECT prod_name FROM products LIMIT 5,5;  --LIMIT 5,5 指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。

    其他写法:SELECT prod_name FROM products LIMIT 4 OFFSET 3;  --从行3开始取4行,同LIMIT 3,4。

  4.7 使用完全限定的表名

    表名可以是完全限定的。

    SELECT products.prod_name FROM crashcourse.products;   --products为表名,crashcourse为数据库名。

5、排序检索数据   5.1 排序数据

    关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

    子句,SQL语句由子句构成,有些子句是必须的,而有的是可选的;一个子句通常由一个关键字和所提供的数据组成。

    使用ORDER BY 子句明确地排序SELECT检索出来的数据。

    SELECT prod_name FROM products ORDER BY prod_name;   --指示MySQL对prod_name列以字母顺序排序数据。

    提示:用非检索的列排序数据是完全合法的。

  5.2 按多个列排序

    为了按多个列排序,只要指定列名,列名之间用逗号分开即可。

    SELECT prod_id, prod_name, prod_price

    FROM products

    ORDER BY prod_price, prod_name;  --先按prod_price排序,后按prod_name排序(当prod_price唯一时,prod_name忽略排序)

  5.3 指定排序方向

    数据排序默认为生序排序,为进行降序排序,必须指定DESC关键字。

    SELECT prod_id, prod_price, prod_name

    FROM products

    ORDER BY prod_price DESC;

    提示:(1)DESC 关键字只应用到直接位于其前面的列名;

       (2)如果想在多个列上进行降序排列,必须对每个列指定DESC关键字;

       (3)与DESC相反的关键字是ASC,在升序排序时可以指定它。

    其他:在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。

6、过滤数据

  使用SELECT语句的WHERE子句指定搜索条件

  6.1 使用WHERE子句

    只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。

    在WHERE语句中,数据根据WHERE子句中指定的搜索条件进行过滤。

    SELECT prod_name, prod_price

    FROM products

    WHERE prod_price=2.50;

    其他:在同时使用ORDER BY 和WHERE子句时,应该让ORDER BY位于WHERE之后。

  6.2 WHERE子句操作符

    说明: 不等于, != 不等于,BETWEEN 在指定的两个值之间

    6.2.1 检查单个值(, =, =)     6.2.2 不匹配检查(!= 和)     6.2.3 范围值检查

      在使用BETWEEN时,必须指定两个值,所需范围的低端值和高端值,这两个值必须用AND关键字分隔。

      SELECT prod_name, prod_price

      FROM products

      WHERE prod_price BETWEEN 5 AND 10;

    6.2.4 空值检查

      在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称为包含空值NULL。

      WHERE子句IS NULL检查具有NULL值的列。

      SELECT prod_name

      FROM products

      WHERE prod_price IS NULL;

7、数据过滤   7.1 组合WHERE子句

    为了进行更强的过滤,MySQL允许给出多个WHERE子句以AND字句的方式或OR子句的方式使用。

    7.1.1 AND操作符

      用来指示检索满足所有给定条件的行。

    7.1.2 OR操作符

      指示检索匹配任一条件的行。

    7.1.3 计算次序

      SQL在处理OR操作符前,优先处理AND操作符。

      使用圆括号明确地分组相应的操作符。

  7.2 IN操作符

    IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取的合法值是由逗号分隔的清单,全都括在圆括号中。

    SELECT prod_name, prod_price

    FROM products

    WHRER vend_id IN (1002,1003)

    ORDER BY prod_name;

  7.3 NOT操作符

    WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

    

8、用通配符进行过滤

  使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。

  8.1 LIKE操作符       8.1.1 百分号(%)通配符

      在搜索串中,%表示任何字符出现任意次数。

      SELECT prod_id, prod_name

      FROM products

      WHERE prod_name LIKE 'jet%';

      其他:(1)'%jet%'首尾   、 'je%t'中间

         (2)%代表搜索模式中给定位置的0个、1个或多个字符。

         (3)不能匹配NULL

    8.1.2 下划线(_)通配符

      下划线只匹配单个字符。

9、用正则表达式进行搜索   9.1 正则表达式介绍

    正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。

  9.2 使用MySQL正则表达式

    MySQL仅支持多数正则表达式实现的一个很小的子集。、

    9.2.1 基本字符匹配

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP  '1000'

      ORDER BY prod_name;

      它告诉MySQL,REGEXP后所跟的东西作为正则表达式处理。

      “.”是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符。

      MySQL中的正则表达式匹配不区分大小写,为了区分大小写,可使用BINARY关键字,如WHERE prod_name REGEXP BINARY 'JetPacl .000'

    9.2.2 进行OR匹配

      为搜索两个串之一,使用‘|’,它为正则表达式的OR操作符,表示匹配其中之一。

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '1000|2000'

      ORDER BY prod_name;

    9.2.3 匹配几个字符之一

      使用一组用‘[   ] ’括起来的字符,匹配其中任意单一字符。

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '[123] Ton'

      ORDER BY prod_name;

      在集合的开始处放置一个‘^’,可否定一个字符集。

    9.2.4 匹配范围

      集合可用来定义要匹配的一个或多个字符。简化使用‘—’,例如 [123456]等同于[1-6]

    9.2.5 匹配特殊字符

      正则表达式内具有特殊意义的所有字符都必须转义‘\\’

      

      

    9.2.6 匹配字符类

      

    9.2.7 匹配多个实例

      

    9.2.8 定位符

      

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '^[0-9\\.]'

      ORDER BY prod_name;

      

10、创建计算字段   10.1 计算字段

    字段(field)与列的意思相同。

  10.2 拼接字段

    拼接(concatenate),将值联结到一起构成单个值。

    SELECT Concat(vend_name ,  ' ('   ,  RTrim(vend_country)  ,   ')'  ) AS vend_title

    FROM vendors

    ORDER BY vend_name;

    Concat()需要一个或多个指定的串,各个串之间用逗号分隔。

    RTrim()函数去掉值右边的所有空格。LTrim()函数去掉值左边的所有空格、Trim()去掉左右两边的空格。

    AS 关键字赋予别名使计算字段存储,从而被应用。

  10.3 执行算术计算

    

    

    用圆括号可以区分优先顺序。

11、使用数据处理函数   11.1 函数   11.2 使用函数     11.2.1 文本处理函数

      

       Soundex是一个将任何文本串转换为描述其语音表示的字母数字模式的算法,使其能对串进行发音比较而不是字母比较。

    11.2.2 日期和时间处理函数

      

    11.2.3 数值处理函数

      

   

12、汇总数据   12.1 聚集函数

    

    COUNT()函数如果指定列名,则指定列的值为空的行被COUNT()函数忽略,但如果COUNT()函数中用的是星号(*),则不忽略。

    AVG()、MAX()、MIN()、SUM()函数忽略列值为NULL的行。

  12.2 聚集不同值   12.3 组合聚集函数 13、分组数据   13.1 分组数据

    分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算

  13.2 创建分组

    SELECT vend_id, COUNT(*) AS num_prods

    FROM products

    GROUP BY vend_id;

    GROUP BY子句指示MySQL按vend_id排序并分组数据;

    GROUP BY 子句出现在WHERE子句之后,ORDER BY子句之前。

  13.3 过滤分组

    HAVING过滤分组,规定包括哪些分组,排除哪些分组。

    WHERE 和 HAVING 类似,但是WHERE 过滤行,HAVING 过滤分组。

    SELECT cust_id, COUNT(*)  AS orders

    FROM orders

    GROUP BY cust_id

    HAVING COUNT(*)>=2;

  13.4 分组和排序

    

  13.5 SELECT子句顺序      14、 使用子查询   14.1 子查询

    SQL允许创建子查询(subquery),即嵌套在其他查询中的查询。

  14.2 利用子查询进行过滤   14.3 作为计算字段使用子查询 15、联接表   15.1 联结     15.1.1 关系表

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

    15.1.2 为什么要使用联结

      联结,一种机制,用来在一条SELECT语句中关联表。

  15.2 创建联结

    SELECT vend_name, prod_name, prod_price

    FROM vendors, products

    WHERE vendors.vend_id = products.vend_id

    ORDER BY vend_name, prod_name;

    15.2.1 WHERE子句的重要性     15.2.2 内部联结  

      等值联结(equijoin),它基于两个表之间的相等测试。

      其他语法:

        SELECT vend_name, prod_name, prod_price

        FROM vendors INNER JOIN products

        ON vendors.vend_id=products.vend_id;

      这两个表之间的关系是FROM子句的组成部分,以INNER JOIN指定。

    15.2.3 联结多个表

      每个联结关系用AND拼接

16、创建高级联结   16.1 使用表别名

    别名除了用于列名和计算字段外,SQL还允许给表名起别名。

  16.2 使用不同类型的联结     16.2.1 自联结

    SELECT p1,prod_id, p1.prod_name

    FROM products AS p1, products AS p2

    WHERE p1.vend_id=p2.vend_id

    AND p2.prod_id = 'DTNTR';

    16.2.2 自然联结

      自然联结排除多次出现,使每个列只返回一次。

      一般是通过对表使用通配符(SELECT *),对所有其他表的列使用明确的子集来完成。

    16.2.3 外部联结

      SELECT customers.cust_id, orders.order_num

      FROM customers LEFT OUTER JOIN orders

      ON customers.cust_id=orders.cust_id;

      在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,LEFT指出的是OUTER JOIN左边的表)

  16.3 使用带聚集函数的联结 17、组合查询

  利用UNION操作符将多条SELECT语句组合成一个结果集 

  17.1 组合查询

    MySQL允许执行多个查询,并将结果作为单个查询结果集返回。这些组合查询称为并(union)或复合查询(compound query)

    两种情况下需要使用组合查询:

    (1)在单个查询中从不同的表返回类似结构的数据

    (2)对单个表执行多个查询,按单个查询返回数据

  17.2 创建组合查询

    在各条语句之间放上关键字UNION

    SELECT vend_id, prod_id, prod_price

    FROM products

    WHERE prod_price MySQL必知必会(第4版)整理笔记的更多相关文章 读书笔记汇总 - SQL必知必会(第4版)

本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名: 英文名:mysql -u root -p Enter pas ...

mysql学习--mysql必知必会1

 例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

《MySQL必知必会》[01] 基本查询

(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材 ...

mysql必知必会系列(一)

mysql必知必会系列是本人在读中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

《mysql必知必会》读书笔记--存储过程的使用

以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

mysql必知必会

春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

《MySQL必知必会》整理

目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

随机推荐 STL标准库面试题(转)

一.vector的底层(存储)机制 二.vector的自增长机制 三.list的底层(存储)机制 四.什么情况下用vector,什么情况下用list 五.list自带排序函数的排序原理 六.deque ...

Mapped Statements collection does not contain value for xxx

这是我第二次遇到的这个问题了,总结下. 第一次的问题是 mybatis的sqlSessionFactory的mapperLocations,配置的是这个路径下的所有映射文件,但是我没写的没有在该路径下 ...

其他 - PotPlayer - 基础快捷键总结

概述 尝试使用 potplayer 的快捷键 背景 最近需要反复看录像 回看 慢速 其他各种 没错, 我的需求就是 游戏复盘... 环境 os win10.1903 player potplayer. ...

RHEL/CentOS 7中Nginx的systemd service

源码安装的nginx ,没有systemd service 管理 nginx 下面教程,告诉你如何设置nginx 的systemd service nginx systemd的服务文件是/usr/li ...

nginx 启动报错找不到nginx.pid文件

这个问题的出现应该是系统找不到nginx的配置文件nginx.conf,所以,我们要告诉系统配置文件的位置:' --- 使用nginx -c /usr/local/nginx/conf/nginx.c ...

Linux内核0.11代码阅读(转)

最近决定开始阅读Linux 0.11的源代码. 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码.而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难.而Li ...

RN开发-ReactJS组件

虚拟DOM :将真实的DOM结构虚拟成json类型数据    props : 不可改变,用于数据传递    state : 组件属性,主要用来存储组件自身需要的数据,每次改变都会引起组件的更新     ...

C++构造函数和重载函数运算符如何区分

构造函数和重载函数运算符如何区分: class Distance { private: int feet; int inches; public: Distance(){ feet = ; inche ...

巨杉学习笔记 | SequoiaDB MySQL导入导出工具使用实战

本文来自社区用户投稿,感谢这位小伙伴的技术分享 巨杉数据库架构简介 巨杉数据库作为分布式数据库是计算和存储分离架构,由数据库实例层和存储引擎层组成的.存储引擎层负责数据库核心功能比如数据读写存储以及分 ...

ORA-01476: 除数为 0

假设是a/bdecode(b,0,null,a/b) 这样如果b为0,输出null,不为0输出a/b decode():将查询结果翻译成其他值,类似三目运算符 比较1个参数时      decode( ...



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有