1.数据库和SQL
RDBMS:关系数据库管理系统
比较代表性的有:Oracle(甲骨文)、SQL Server(微软)、DB2(IBM),Postgres(开源)、MySQL(开源)
数据库由表示数据项目的列(字段)和表示行的(记录)所组成,行和列的交汇的方格是单元格,关系数据库以行为单位读取数据
SQL概要
sql通过一条语句来描述想要进行的操作,发送给RDBMS,原则上使用分号结尾
根据目的可以分为:DDL、DML、DCL
SQL语句及其种类
SQL用关键字、表名、列名等组合一条语句(SQL语句)来描述内容
DDL:数据定义语言(用来创建或者删除存储数据用的数据库以及数据库中的表等对象)
以下指令:create、drop、alter
DML:数据操纵语言(用来查询或者变更表中的记录)
用户操作增删改查(insert、delete、update、select)
DCL:数据控制语言(用来确认或取消数据库中的数据进行变更以及对RDBMS的用户是否有权限操作数据库进行设定)
commit:确认对数据库中的数据进行变更
rollback:取消对数据库中的数据进行变更
grant:赋予用户权限
revoke:取消用户的操作权限
SQL的基本书写规则
以";"结尾,关键字不区分大小写,字符串和日期需要用单引号括起来,数字常数不用
1.1 表的创建
通过create table语句创建而成指定列的数据类型(整数型,字符型,日期型)可以在表中设置约束在同一数据库中不能创建两个相同名称的表数据类型表示数据的种类,每一列不能存储与该列数据类型不符的数据(INTERGER:数字型,CHAR:定长字符型(未达到最大长度时空格补足),VARCHAR:可变长字符串,DATE:日期型)约束设置:约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能 NOT NULL(非空),PRIMARY KEY(主键)
1.2表的删除和更新
用DROP TABLE语句来删除
drop table <表名>; -- 删除表是无法恢复的
用ALTER TABLE 语句向表中添加列或者删除列
alter table <表名> add column <列的定义>; --添加 alter table <表名> drop column <列名>; --删除
2 查询基础
列的查询,从表查询使用的是SELECT语句;select列举了想查询表的名称,from制定了选取数据表的名称;用as指定别名,中文用双引号包括;
-- 删除重复的数据行用distinct,只能写在第一个列名前 select distinct 列名 from 表名; -- where语句来选择记录过滤条件 select <列名> from <表名> where <条件表达式>; -- 注释有两种一种是单行的"--",第二个是多行的"/*"和"*/"之间,可以跨多行,并且可以写在select语句中 /* 比较运算符 四则运算(可以在select语句中使用) null(所有包含null的运算都是null) 比较运算符 "1","2","3","10","11","222",按照大小顺序,分别是:"1","10","11","2","222","3",因为是字符串,类比章节1-1,2,3-10,4-1 */ 逻辑运算符 AND运算符 优于 OR运算符 A AND B OR C --先执行A和B再执行C 如果想执行A和B或者C的结果,需要加一个括号,即 A AND (B OR C) -- 逻辑积(x)和逻辑和(+),将真变为1,假变为0 --在SQL中存在既不是真也不是假的第三值就是----不确定(三值逻辑)
3 聚合与排序
3.1聚合查询
-- 使用聚合函数对表中列进行计算合计值、平均值等的汇总操作; -- 除了count函数外的聚合函数可以进行对NULL以外的对象进行汇总;count可以查出包括null在内的所有的行; count:计算表中的行数 SUM:列中数据的合计值 AVG:列中数据的平均值 MAX:列中数据的最大值 MIN:列中数据的最小值 -- 用于汇总的函数称为聚合函数,聚合就是多行汇聚成一行,所有的聚合函数都是输入一行输出一行 -- max和min函数几乎适用于所有数据类型的列,sum和avg只适用与数值型的列 -- 使用聚合函数删除重复值(distinct) select count(distinct product_type) from Product;
3.2 对表进行分组
使用group by 进行分组
select <列名>,<列名2>,<列名3>....
from <表名>
where条件
groupby <列名>,<列名2>,<列名3>
-- group by写在from语句之后(如果有where子句写在where子句后),先根据where子句指定条件过滤再汇总
select→from→where→groupby 书写顺序
from→where→groupby→select 执行顺序
使用group by子句时,select子句中不能出现聚合函数之外的列名group by子句中不能使用select子句定义的别名group by子句显示的是无序的只有select子句和having子句(以及order by)能够使用聚合函数与聚合函数Group by子句有关的常见错误只能写在字句中group by子句中不能使用select子句中列的别名,因为select执行在group by之后,所以select中定义的别名无法识别结果是无序的where子句中不能使用聚合函数
3.3为聚合结果指定条件
where 子句用来指定数据行的条件,having子句用来指定分组的条件
select → from where → group by → having -- 书写顺序
having子句能够使用的3种要素
- 常数
- 聚合函数
- group by 子句中指定的列名(聚合键)
where子句 = 指定行所对应的条件
having子句 = 指定组所对应的条件
聚合键所对应的条件应该写在where中,而不是having
3.4 对查询结果进行排序
select <列名1>,<列名2>,<列名3>...
from <表名>
orderby <排序基准1>,<排序基准2>....
select→from→where→groupby→having→orderby --书写顺序
from→where→groupby→having→select→orderby --执行顺序
本来select结果是无序的,用order by子句对结果进行排序,用asc进行升序,desc进行降序,默认升序;order by可用select子句定义列的别名,因为select执行顺序在order by之前,select中别名可以被识别可以使用select子句中未使用的列或者聚合函数在order by子句中不要使用编号指定多个排序键,并且可以同时指定不同的排序顺序,排序的列中含有NULL值时,不能对null使用比较运算符,null值会在结果的开头或者结尾显示.