MySQL必知必会(第4版)整理笔记 | 您所在的位置:网站首页 › java个位数补充零 › MySQL必知必会(第4版)整理笔记 |
参考书籍: 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 什么是SQLSQL是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 匹配特殊字符正则表达式内具有特殊意义的所有字符都必须转义‘\\’ SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name; 字段(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 日期和时间处理函数 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 分组和排序 ![]() 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 实验室设备网 版权所有 |