1、了解SQL&MySQL
SQL
1、MySql面向所有主要的数据管理系统(DBMS),数据库是通过DBMS创建和操纵的容器
2、数据库存储层级:字段-->数据表--->数据库
3、表名唯一性,在相同数据库中不能两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。
4、SQL是结构化查询语言(Structured QueryLanguage)的缩写。SQL是一种专门用来与数据库通信的语言。
5、主键(primary key)一一列(或一组列),其值能够唯一区分表中每个行。
主键条件:
任意两行都不具有相同的主键值;
每个行都必须具有一个主键值(主键列不允许NULL值)。
在使用多列作为主键时,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。
MySQL
1、数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。MySQL是一种DBMS,即它是一种数据库软件。
命令输入在mysql>之后;
命令用;或\g结束,换句话说,仅按Enter不执行命令;
输入help或\h获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入help select获得使用SELECT语句的帮助);
输入quit或exit退出命令行实用程序。
2、基本命令
use 数据库名;
database changed;
show databases;
show tables;
show columns from 表名=describe 表名;
SHOW STATUS,用于显示广泛的服务器状态信息;
SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;
SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。
检索数据
(1)检索单个列:select 列名 from 表名;
(2)检索多个列:select 列名1,列名2,列名3,列名4,列名5 from 表名;
(3)检索所有列:select * from 表名;
(4)检索不同的行(distinct ):select distinct 列名 from 表名;
DISTINCT关键字应用于所有列而不仅是前置它的列。
(5)限制行数(limit ):select 列名1,列名2,列名3,列名4,列名5 from 表名 limit 行数;
可指定要检索的开始行和行数:select 列名1,列名2 from 表名 limit 5:5;
第一个数为开始位置,第二个数为要检索的行数;
检索出来的第一行为行0而不是行1。因此,LIMIT 1, 1将检索出第二行而不是第一行。
MySQL 5支持LIMIT的另一种替代语法, LIMIT 4 OFFSET 3 意为从行3开始取4行,
3、order 排序子句
(1)select 列名1,列名2,列名3,列名4,列名5 from 表名
order by 列名1,列名2;----默认以asc升序
(2)select 列名1,列名2,列名3,列名4,列名5 from 表名
order by 列名1,列名2 desc;----以列名2降序
(3)select 列名1,列名2,列名3,列名4,列名5 from 表名
order by 列名1desc,列名2;----以列名1降序
(4)select 列名1,列名2,列名3,列名4,列名5 from 表名
order by 列名1desc,列名2 desc;----以列名1,列名2降序,降序方向从左到右
4、where过滤子句
在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后;








为什么要使用IN操作符?其优点具体如下:
在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
IN操作符一般比OR操作符清单执行更快。
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句
5、用通配符进行过滤
(1)百分号(%)通配符
找出所有以词jet起头的产品:

搜索模式'%anvil%'表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符:

找出以s起头以e结尾的所有产品:

注意尾空格尾空格可能会干扰通配符匹配;
注意NULL虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配用值NULL作为产品名的行。
(2)下划线(_)通配符
下划线只匹配单个字符而不是多个字符,eg:

VS

5、正则表达式
文本1000的所有行:

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

可使用BINARY关键字区分大小写,eg:
WHERE prod_name REGEXP BINARY 'JetPack .000'
使用|为搜索两个串之一,|为正则表达式的OR操作符:

匹配任何单一字符,可通过指定一组用[和]括起来的字符来完成:

这里,使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3

字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。eg:[^123]
范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。

为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.


匹配\为了匹配反斜杠(\)字符本身,需要使用\\\



等同一下语句



6、计算字段
(1)拼接字段Concat()

(2)删除数据左/右侧多余的空格
LTrim()函数:去掉串左边的空格
RTrim()函数:去掉串右边的空格

(3)使用别名
别名(alias)是一个字段或值的替换名。别名用AS关键字赋予,别名有时也称为导出列



7、函数
(1)文本处理函数


(2)日期和时间处理函数

(3)数值处理函数

(3)聚集函数

AVG()函数:
只用于单个列,为了获得多个列的平均值,必须使用多个AVG()函数
忽略列值为NULL的行
COUNT()函数 :
使用COUNT(*)对表中行的数目进行计数
使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值
VS 
MAX()函数 VS MIN()函数:
在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行,而MIN()返回最前面的行。
MAX()和MIN()函数忽略列值为NULL的行。
SUM()函数:
SUM()函数忽略列值为NULL的行。
- ALL为默认ALL参数不需要指定,因为它是默认行为。如果不指定DISTINCT,则假定为ALL
- 如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*),因此不允许使用COUNT(DISTINCT),否则会产生错误。
(4)组合聚集函数

8、分组数据
(1)创建分组---GROUP BY子句

如果列中有多行NULL值,它们将分为一组。
GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。
使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值

(2)过滤分组----HAVING子句
WHERE VS HAVING:
WHERE过滤行,而HAVING过滤分组;
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤;
WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组;


(3)分组和排序
一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法

9、联结表
外键(foreign key):某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
笛卡儿积(cartesian product):由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
INNER JOIN:内连接
LEFT JOIN:左连接
RIGHT JOIN:右连接
组合查询----UNION
- UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔;
- UNION中的每个查询必须包含相同的列、表达式或聚集函数,各个列不需要以相同的次序列出;
- 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型;
- UNION从查询结果集中自动去除了重复的行,如果想返回所有匹配行,可使用UNION ALL;
- 在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。
10、创建和操纵表
(1)创建表

主键 PRIMARY KEY
- 主键值必须唯一,表中的每个行必须具有唯一的主键值。
- 如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
- 主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。

自动增量AUTO_INCREMENT
- AUTO_INCREMENT指本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量,适用作主键值。
指定默认值DEFAULT
- 不允许使用函数作为默认值,它只支持常量。
- 使用默认值而不是NULL值。
引擎类型
- InnoDB是一个可靠的事务处理引擎;
- MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
- 外键不能跨引擎,使用一个引擎的表不能引用具有使用不同引擎的表的外键。
(2)操纵表
建议在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销。
更新表:ALTER TABLE

删除表:DROP TABLE

重命名表:RENAME TABLE

这篇博客详细介绍了MySQL的基础知识,包括SQL语言的概念、MySQL数据库的特点,以及如何使用MySQL进行数据检索、排序、过滤、计算字段和分组。还涵盖了创建与操纵表的基本命令,如主键设置、自动增量、指定默认值等。

215

被折叠的 条评论
为什么被折叠?



