SQL必知必会(第一部分 前10课)

第1课.了解SQL

数据库:保存有组织的数据的容器。
数据库软件应被称为数据库管理系统(DBMS)。

:某种特定类型数据的结构化清单。
储存在表中的数据是同一种类型的数据或清单。
使表名成为唯一的。

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

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

行 = 数据库记录

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

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

  • 任意两行都不具有相同的主键值;
  • 每一行都必须具有一个主键值(主键列不允许NULL值);
  • 主键列中的值不允许修改或更新;
  • 主键值不能重用(如果某行从表中删除,她的主键不能赋给以后的新行)。

SQL(Structured Query Language 结构化查询语言),专门用来与数据库沟通的语言。
设计的目的是提供一种从数据库中读写数据的简单有效的方法。
标准SQL由ANSI标准委员会管理,称为ANSI SQL。

参照 https://blog.csdn.net/Z_zfer/article/details/82971793 更改路径,
https://blog.csdn.net/bobo553443/article/details/81383194, 安装了MySQL。
进入bin目录,按住shift键然后点击鼠标右键可以选择在该目录下打开命令窗口,或者在地址栏中输入cmd进入命令窗口。输入mysql -u root -p后回车,然后会提示输入密码,输入密码后就会进入MySQL的操作管理界面。

第2课.检索数据

1.SELECT语句
所需的列名写在SELCT关键字后,FROM关键字指出从哪个表中检索数据。

返回的数据没有特定的顺序。
多条SQL语句以分号()分隔。
不区分大小写,一般关键字大写,列名和表名小写。
所有空格都被忽略。

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

2.DISTINCT关键字,指示数据库只返回不同的值。使用时放在列名前面。
DISTINCT关键字作用于所有列,不仅仅是跟在其后的一列。

LIMIT关键字限制最多返回多少行(MySQL)。
OFFSET指定从哪儿开始以及检索的行数。
第一个被检索的行是第0行。

3.注释使用–(两个连字符)嵌在行内。–之后的文本就是注释。
在一行的开始处使用#,使得整行都成为注释。
/* */进行多行注释

第3课.排序检索数据

ORDER BY语句取一个或者多个列的名字,据此对对输出进行排序。应该保证是最后一条子句。

按多个列排序,简单指定列名,列名之间用逗号分开即可。
按列所在的相对位置排列。
DESC关键字进行降序排列,只应用到直接位于其前面的列名。

第4课.过滤数据

只检索所需数据需要指定搜索条件(过滤条件)。
SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。
支持的操作符:

  • 常见的= ,!=,<,<=,>,>=
  • <>不等于,!<不小于,!>不大于
  • BETWEEN 在制定的两个值之间,两个值用AND分割,包括开始值和结束值
  • IS NULL 为NULL值

如果将值与字符串类型的列进行比较,就需要限定引号‘ ’。

第5课.高级数据过滤

SQL允许给出多个WHERE子句,可以以AND或者OR子句的方式使用。
SQL在处理OR操作符前,优先处理AND操作符。
使用圆括号对操作符进行明确分组。

IN操作符指定条件范围,范围中的每个条件都可以进行匹配。
IN取一组由逗号分隔、括在圆括号中的合法值。
优点:

  • 比一组OR操作符执行得更快
  • 可以包含其他SELECT语句,能动态地建立WHERE子句。

WHERE子句中地NOT操作符只有否定其后所跟的任何条件

第6课.用通配符进行过滤

利用通配符(用来匹配值的一部分的特殊字符),可以创建比较特定数据的搜索模式。

为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE从操作符指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。
通配符搜索只能用于文本字段(字符串)。

1.% 表示任何字符出现任意次数,还可以匹配0个字符。
可能为了填满空格,在本文后有若干空格。 可以在搜索模式的结尾增加一个%
%不会匹配NULL

2._ 只匹配单个字符

3.[ ] 指定一个字符集,必须匹配指定位置(通配符的位置)的每一个字符。[JM] 只能匹配单个字符J或者M

4.前缀字符 ^ 表示否定

第7课.创建计算字段

储存在数据表中的数据一般不是应用程序所需要的格式。
计算字段并不实际存在于数据库表中,是运行SELECT语句内创建的。
只有数据库知道SELECT语句中哪些列是实际的表列,哪些列是计算字段。

拼接:将值联结到一起(将一个值附加到另一个值)构成单个值。
括号将需要拼接的后面的列括起来。
用加号(+)或者两个竖杠(||)表示。
SELECT Concat(vend_name, ’ (’, vend_country,’)’)
FROM xx

PTRIM()函数 去掉值右边所有的空格
LTRIM() 函数去掉字符串左边的空格
TRIM() 去掉字符串左右两边的空格

别名 (有时称为导出列)是一个字段或者值的替换名,用关键字AS赋予。
支持 +, -, *, / 运算符
SELECT省略FROM子句后就是简单地访问和处理表达式。
Now() 函数返回当前日期和时间。

第8课.使用函数处理数据

每个DBMS都有特定的函数。

函数 语法(MySQL)
提取字符串的组成部分 SUBSTRING()
数据类型转化 CONVERT()
取当前日期 CURDATE()
  • 处理文本字符串的文本函数 。
  • 数值数据进行算术操作的数值函数。
  • 处理日期和时间值并从这些值中提取特定成分的日期和时间函数。
  • 返回DBMS正使用的特殊信息的系统函数。

常用的文本处理函数

函数 说明
LEFT() (或使用子字符串函数) 返回字符串左边的字符
LENGTH() (或使用DATALENGTH() 或 LEN() ) 返回字符串的长度
LOWER() 将字符串转换成小写
SOUNDEX() 返回字符串的SOUNDEX值

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

YEAR() 函数从日期中提取月份
WHERE YEAR(order_date) =2012;

第九课.汇总数据

有时需要汇总表中的数据,而不需要实际数据本身。

聚集函数:对某些行运行的函数,计算并返回一个值。

函数 说明
AVG() 返回某列的平均值,只用于单个列,忽略列值为NULL的行
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和
  • COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
  • COUNT(column) 对特定列(column)中具有值的行进行计数,忽略NULL值。

MAX() 要求指定列名。

  • MAX() 一般用来找出最大的数值或日期值,但许多DBMS允许用它返回任意列中的最大值,包括返回本文列中的最大值。
  • 用于文本数据时,MAX() 返回按该列排序后的最后一行。
  • MAX() 忽略列值为NULL的行。

MIN() 一切与上面的MAX() 类似。

SUM() 忽略列值为NULL的行。

以上5个聚集函数都可以如下使用。

  • 对所有行执行计算,指定ALL参数或不指定参数(ALL是默认行为)。
  • 只包含不同的值,指定DISTINCT参数。

DISTINCT只能用于COUNT(),不能用于COUNT(*)。
DISTINCT必须使用列名。

SELECT语句可根据需要包括多个聚集函数。

第10课.分组数据

使用分组可以将数据分为多个逻辑组,对每个组进行聚集计算。

  1. 分组是使用SELECT语句的GROUP BY子句建立的。

GROUP BY子句可以包含任意数目的列,因而可以对分组进行嵌套
如果GROUP BY嵌套了分组,数据将在最后指定的分组上进行汇总。
如果SELECT中使用表达式,必须在GROUP BY子句中指定相同的表达式,不能使用别名。
除聚集计算语句外,SELECT中的每一列都必须在GROUP BY子句中给出。
如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回。
GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

  1. HAVING过滤分组,WHERE过滤行。
    HAVING支持所有WHERE操作符。
    WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

ORDER BY GROUP BY
对产生的输出排序 对行分组,但输出可能不是分组的顺序
任意列都可以使用(甚至非选择的列也可以使用) 只可能使用选择列或表达式列,而且必须使用每个选项列表达式
不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用
  1. 使用的前后顺序
    SELECT FROM WHERE GROUP BY HAVING ORDER BY
发布了20 篇原创文章 · 获赞 6 · 访问量 4648

猜你喜欢

转载自blog.csdn.net/better_eleven/article/details/90344161