msql 必知必会笔记
Mysql 必知必会
第一章 理解SQL
- 什么是数据库
- 数据库(database) 保存有组织的数据的容器
- 什么是表
- 一组特定类型的数据的结构化清单
- 什么是模式
- 数据库和表的布局及特性的信息
- 什么是列
- 表中的一个字段,所有的表都是由一个或者多个列组成
- 什么是数据类型
- 所容许的数据类型, 每个表的每个字段都有指定的字段和类型。
- 什么是行
- 表中的一个记录
- 什么是主键
- 一列或者一组列,其值能够唯一区分表中每一行
- 主键的规则
- 主键不能重复
- 主键不能为空
- 什么是SQL
- 结构化查询语言(Structured Query
Language) 专门用来与数据库进行通信的
- 结构化查询语言(Structured Query
- SQL 的优点
- 非某门语言专有
- SQL简单易学
- SQL 灵活,且可以进行非常复杂和高级的数据库操作
第二章 mysql 简介
- 什么是mysql
- MySQL是一种DBMS,即它是一种数据库软件。
- 为什么使用mysql
- 成本 免费
- 性能 可以搭建集群
- 可信赖 很多大公司也在用
- 简单 操作简单通用
- 客户机-服务器模型
- 服务器处理,客户机请求
第三章 使用MySQL
连接 ,如何连接到mysql服务器上
- 计算机名或者以ip
- 端口 默认3306
- 合法用户名
- 用户密码
root 密码
- 最高权限,可建库删库操作
选择数据库
- USE product_db
了解数据库和表
- 使用show 命令查看
- SHOW DATABASES; 查看所有的数据库
- SHOW TABLES 当前数据库中所有的表
- SHOW COLUMNS FROM USER 查看当前表的所有字段信息
- DESCRIBE USER 也可查看当前表中的所有字段
- SHOW STATUS 显示服务器的状态信息
- SHOW GRANTS 用来显示授予用户
第四章 检索数据
SELECT 语句
- 用途是从一个或多个表中检索
信息。
- 用途是从一个或多个表中检索
检索单个列
- SELECT isvalid FROM user_db.
user
;
- SELECT isvalid FROM user_db.
- SQL 语句和大小写 SQL是不区分大小写的,但是还是在书写的时候规范
- 处理SQL时 其中所有的空格都被忽略掉
- 检索多个列
- SELECT username,
password
FROM user_db.user
;
- SELECT username,
- 检索所有列
- SELECT * FROM user_db.
user
;
- SELECT * FROM user_db.
- 检索不同的行,相同的不显示
- SELECT DISTINCT fk_employee FROM user_db.
user
;
- SELECT DISTINCT fk_employee FROM user_db.
- 限制返回结果
- SELECT fk_employee FROM user_db.
user
LIMIT 2; - SELECT fk_employee FROM user_db.
user
LIMIT 2, 6;
- SELECT fk_employee FROM user_db.
- 使用全路径表名
- SELECT user_db.
user
.isvalid FROM user_db.user
;
- SELECT user_db.
第五章 排序检索数据
- 明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句ORDER BY子句取一个或多个列的名字
SELECT prod_name FROM products ORDER BY product_name; - 按多个列排序
SELECT prod_name FROM products ORDER BY product_price, product_name;
-指定排序方向
SELECT prod_name FROM products ORDER BY product_name DESC;
ASC没有多大用处,因为升序是默认的 - 使用ORDER BY和LIMIT的组合
SELECT prod_name FROM products ORDER BY product_name DESC LIMIT 1;
第六章 过滤数据
- 使用WHERE子句
SELECT prod_name FROM products WHERE product_price = 2.50 - WHERE子句操作符
操 作 符 说 明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
大于
= 大于等于
BETWEEN 在指定的两个值之间
- 检查单个值
SELECT prod_name FROM products WHERE product_price = 2.50
SELECT prod_name FROM products WHERE product_price < 2.50
SELECT prod_name FROM products WHERE product_price <= 2.50 - 不匹配检查
SELECT prod_name FROM products WHERE product_price <> 2.50
SELECT prod_name FROM products WHERE product_price != 2.50 - 范围值检查
SELECT prod_name FROM products WHERE product_price BETWEEN 2.50 AND 5.0 - 空值检查
SELECT prod_name FROM products WHERE product_price IS NULL
第七章 数据过滤
- 组合WHERE子句
使用 以AND子句的方式或OR子句的方式 - AND操作符
SELECT prod_name FROM products WHERE product_price = 2.50 AND id = 1003 - OR操作符
SELECT prod_name FROM products WHERE product_price = 2.50 OR id = 1003 - 计算次序 任意AND 和OR 操作的顺序
SELECT prod_name FROM products WHERE product_price = 2.50 OR id = 1003 AND product_price < 1.00
**SQL(像多数语言一样)在处理OR操作符前,优先处理AND操
作符**
可以使用 括号提高优先级
SELECT prod_name FROM products WHERE (product_price = 2.50 OR id = 1003 ) AND product_price < 1.00 - IN操作符
SELECT prod_name FROM products WHERE WHERE id in(1003, 1005) ORDER BY prod_name
上下两者相同 SELECT prod_name FROM products WHERE WHERE id = 10003 OR id = 1005 ORDER BY - NOT操作符
SELECT prod_name FROM products WHERE WHERE id NOT IN (1003, 1005) ORDER BY prod_name
第八章 用通配符进行过滤
- LIKE操作符
LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较 - 百分号(%)通配符
%表示任何字符出现任意次数
SELECT prod_id , prod_name FROM products WHERE prod_name LIKE ‘jet%’
‘%jet%’
‘%jet’
‘j%t’ - 下划线(_)通配符
SELECT prod_id , prod_name FROM products WHERE prod_name LIKE ‘jet_’ - 使用通配符的技巧
- 不要过度使用通配符
- 不要把它们用在搜索模式的开始处
- 仔细注意通配符的位置
第九章 用正则表达式进行搜索
第十章 创建计算字段
创建表中没有的字段,我们可以对这些字段进行定义和创建
- 拼接字段
SELECT Concat(vend_name, ‘()’, vend_country, ‘)’)
FROM vendors
ORDER BY vend_name - 使用别名
SELECT Concat(vend_name, ‘()’, vend_country, ‘)’) AS vend_title
FROM vendors
ORDER BY vend_name - 执行算术计算
SELECT prod_id, product_price * product_item AS all_price
FORM orderitems
WHERE order_num = 20005.
MySQL算术操作符 - 加
- 减
- 乘
/ 除
第十一章 使用数据处理函数
大多数SQL实现支持以下类型的函数。
- 用于处理文本串
- 用于在数值数据上进行算术操作
- 用于处理日期和时间值并从这些值中提取特定成分
- 返回DBMS正使用的特殊信息
文本处理函数
SELECT vend_name , Upper(vend_name) as vend_name_upcase
FROM vendors
ORDER BY vend_name常用的文本处理函数
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值 //相似发音搜索出
SubString() 返回子串的字符
Upper() 将串转换为大写日期和时间处理函数
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
SELECT cust_id, order_enum
FROM orders
WHERE Date(order_date) = ‘2005-09-01’
SELECT cust_id, order_enum
FROM orders
WHERE Date(order_date) BETWEEN ‘2005-09-01’ AND ‘2005-09-30’
- 数值处理函数
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
SELECT COS(rectucle) AS rectucle_cos FROM orders
十二章 汇总数据
- 聚集函数
- 运行在行组上, 计算和返回单个的函数
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
- AVG()函数 求特定列值之和
SELECT AVG(price) AS avg_price
FROM products
SELECT AVG(price) AS avg_price
FROM products WHERE id = 1003;
CONUT() 函数 计数确定表中行的数目是否符合
- COUNT(*)对表中行的数目进行计数
SELECT CONUT(*) AS count_price
FROM products - 用COUNT(column)对特定列中具有值的行进行计数
SELECT CONUT(price) AS count_price
FROM products
- COUNT(*)对表中行的数目进行计数
MAX()函数 返回列中的最大值
SELECT MAx(price) AS max_price
FROM productsMIN()函数 返回列中的最小值
SELECT Min(price) AS min_price
FROM productsSUM()函数 返回列值的和
SELECT SUM(price) AS sum_price
FROM products
第十三章 分组数据
数据分组
使用了GROUP BY,就不必指定要计算和估值的每个组了。系统
会自动完成。GROUP BY子句指示MySQL分组数据,然后对每个组而不是
整个结果集进行聚集
SELECT vend_id , COUNT(*) AS num_prods
FROM products
GROUP BY vend_id过滤分组
过滤分组不使用where关键字而是使用HAVING字段来代替
SELECT vend_id , COUNT(*) AS num_prods
FROM products
GROUP BY vend_id
HAVING COUNT(*) >= 2列出具有2个(含)以上、价格为10(含)以上的产品的供应商
SELECT vend_id , COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2分组和排序
GROUP BY和ORDER BY的区别
SELECT vend_id , COUNT(*) AS num_prods
FROM products
WHERE prod_price >= 10
GROUP BY vend_id
HAVING COUNT(*) >= 2
ORDER BY vend_idSELECT子句顺序
一个查询中字句中的关键字的顺序
子 句 说 明 是否必须使用
SELECT 要返回的列或表达式 是
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤 否
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤 否
ORDER BY 输出排序顺序 否
LIMIT 要检索的行数 否
第十四章 使用子查询
- 子查询
- 嵌套在其他查询中的查询
我们可以对下面的这两条SQL合并为一条SQL
SELECT order_num
FROM orderiterms
WHERE prod_id = ‘TNT2’
SELECT cust_id
FROM orders
WHERE order_num IN(20005 , 2007)
我们可以这样合并这两个SQL语句
SELECT cust_id
FROM orders
WHERE order_num IN( SELECT order_num
FROM orderiterms
WHERE prod_id = ‘TNT2’)
- 作为计算字段使用子查询
SELECT COUNT(*) AS orders
FROM orders
WHERE cust_id = 10001
SELECT cust_name,
cust_state,
(SELECT COUNT(*) AS orders
FROM orders
WHERE orders.cust_id = customers.cust_id )
FROM customers
ORDER BY cust_name
第十五章 联结表
- 什么是联结表
- 关系型数据库,每张表可以想象为一个单个的对象。我们可以通过对每个对象之间的属性关系建立连接。相当于每张表根据特定属性联系起来
- 外键(foreign key)
- 外键为某个表中的一列,它包含另一个表
的主键值,定义了两个表之间的关系。
- 外键为某个表中的一列,它包含另一个表
- 为什么使用联结
- 联结是一种机制,用来在一条SELECT
语句中关联表,因此称之为联结
- 联结是一种机制,用来在一条SELECT
- 一个最简单的联结表查询
SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = porducts.vend_id
ORDER BY vend_name, prod_name;
SELECT vend_name, prod_name, prod_price
FROM vendors, INNER JOIN products
ON vendors.vend_id = porducts.vend_id
ORDER BY vend_name, prod_name;
上面两种联结方式相同的
mysql 在运行关联表时是十分耗费资源的,当联结的表越多,性能下降的越厉害
十六章 创建高级联结
使用表别名,
- 缩短SQL语
- 允许在单条SELECT中多次使用相同的表
SELECT cust_name, cust_contact
FROM customers AS c , orders AS o, orderiterms AS oi
WHERE c.cust_id = o.cust_id
AND oi.order_num = o.order_num
AND prod_id = ‘TNT2’
使用不同类型的联结
- 自联结
- 自然联结
- 外部联结
- 自联结
- 自己可以关联自己的查询
- 外部联结
- left Join
- right join
外部联结语法类似。为了检索所有客户,包括那些没有订单的客户
第十七章 组合查询
组合查询的作用
MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个
查询结果集返回
- 创建并使用UNION
可以将上面两个查询合并为一个查询
我们也可以不使用UNION,而是使用WHERE字句来构造相同的查询
UNION 规则
- UNION必须由两条或两条以上的SELECT语句组成,语句之间用关
键字UNION分隔 - UNION中的每个查询必须包含相同的列、表达式或聚集函数
- 列数据类型必须兼容
在默认的情况下,UNION操作会取消掉重复的行
如果想返回所有匹配行,可使用UNION ALL而不是UNION
- UNION必须由两条或两条以上的SELECT语句组成,语句之间用关
对组合查询结果排序
使用ORDER By但是要在最后一个SELECT语句之后
第十八章 全文本搜索
MyISAM和InnoDB,前者支持全文本搜索,而后者不支持
为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改
变不断地重新索引
- 启用全文本搜索支持
- CREATE语句演示了FULLTEXT子句的使用
- 进行全文本搜索
- 使用两个函数Match()和Against()执行全文本搜索,
其中Match()指定被搜索的列,Against()指定要使用的搜索表达式。
- 使用两个函数Match()和Against()执行全文本搜索,
搜索不区分大小写
第十九章 插入数据
- 插入完整的行
INSERT INTO Customers
VALUES (
‘MAN’,
‘CHINA’,
‘IT’,
NULL
) - 指定列名插入数据,较为繁琐但是比较安全
INSERT INTO Customers
(femlai,
country,
career,
name
)
VALUES (
‘MAN’,
‘CHINA’,
‘IT’,
NULL
)
使用两种插入方式时需要注意的一些事项
如何一次性插入多行数据
INSERT INTO Customers
(femlai,
country,
career,
name
)
VALUES (
‘MAN’,
‘CHINA’,
‘IT’,
NULL
),
(
‘MAN’,
‘USA’,
‘TERCHER’,
‘JACK MA’
)
第二十章 更新和删除数据
在使用UPDATE DELETE 时一定要加上WHERE字句,否则它会将你整张表进行修改
UPDATE customers
SET email = ‘1010@QQ.com’
WHERE id = 10002
DELETE FROM customers
WHERE id = 1006
DELETE 删除表中的内容,DROP是删除整张表,包括表结构
第二十一章 创建和操纵表
- 如何创建表
- 使用客户端工具
- 使用命令行脚本
- 几种常见的数据库引擎
- InnoDB 可处理事务引擎
- MyISAM 性能极高的引擎,支持全文本搜索
- 更新表
使用ALTER TABLE更改表结构 - 删除表
DROP TABLE customers2 - 重命名表
RENAME TABLE customers2 TO customer;
第二十二章 使用视图
- 为什么要使用视图
- 视图的规则和限制
- 使用视图
第二十三章 使用存储过程
msql 必知必会笔记的更多相关文章
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- MySQL必知必会(第4版)整理笔记
参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...
- 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...
- 【SQL必知必会笔记(2)】检索数据、排序检索数据
上个笔记中介绍了一些关于数据库.SQL的基础知识,并且创建我们后续练习所需的数据库.表以及表之间的关系,从本文开始进入我们的正题:SQL语句的练习. 文章目录 1.检索数据(SELECT语句) 1.1 ...
- 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入
文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...
- MySQL必知必会1-20章读书笔记
MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...
随机推荐
- AX_SysExcel
void KTL_CPeng_ImportCustStamp() { str file; FileNameFilter filter = ...
- Python基础整理
第一章 Python介绍 1.3 基本类型 操作符 +,-,*,/,%,**(幂),divmod(除法) divmod(10,3)=(3,1) None表示出错 表示假: None,0,0.0,&qu ...
- MySQL 三 二进制安装
二进制格式安装 何谓二进制格式安装? 二进制格式安装,编译好的打包在tar文件里,安装时需要下载后解包至编译时指定的位置,然后进行相关配置,完成安装 版本信息:CentOS 7.4 安装m ...
- 【git 报错】Could not read from remote repository.Please make sure you have the correct access rights.
我们在使用git clone 或其他命令的时候,有时候会遇到这类问题,如图: and the repository exists. fatal: Could not read from remote ...
- 《mysql必知必会》学习_第19章_20180809_欢
第19章 插入数据 P132 insert into customers VALUES(NULL,'Pep E.Lapew','100 Main Street',,Los Angeles','CA', ...
- Docker基础-使用Dockerfile创建镜像
1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # This dockerfile uses the ubuntu image # VERSION 2 - ED ...
- Centos7部署Kubernetes集群
目录贴:Kubernetes学习系列 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作系统采用Centos7.3 64位,细节如下. [root@localhost ~]# uname -a ...
- 【leetcode】 算法题2 两数相加
问题 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
- java之ArrayList详细介绍
1 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List ...
- 文件上传和WAF的攻与防
Author:JoyChouDate:20180613 1. 前言 本文的测试环境均为 nginx/1.10.3 PHP 5.5.34 有些特性和 语言及webserver有关,有问题的地方,欢迎大家 ...