第一章 关系型数据库管理系统简介
数据库是在计算机上集中存放数据的地方。
数据库集中式控制的优点:1.降低存储数据的冗余度 2.更高的数据一致性 3.存储的数据可以共享 4.可以建立数据库所遵循的标准 5.便于维护数完整性 6.能够实现数据的安全性 7.用户可以添加、修改或查询数据
在数据库中数据以结构化的格式被组织和分类,这种格式成为元数据(meta data),元数据是标书被存储的数据的数据。
关系模型把世界看做是由实体和联系组成的。实体是指客观存在并相互区别的事物,实体具有的特性称为属性,实体可以通过属性来描述。
数据库发展史上出现的数据模型:层次模型、网状模型、关系模型、对象模型。
关系模型用组成数据的表的行和列结构。关系型数据中的主键(primary key)是每一行的唯一标志,外键(forergn key)与其他表的主键相连,用来表达表和表之间的关联关系。
以关系模型创建的数据库成为关系型数据库(relationnal database)表是关系型数据库的核心单元,是数据存储的地方。在表的内部数据被分成行(row)和列(column),每一行为一个实体(0到多个),每一列代表实体的一个属性(1到多个,说明数据的名称,同时也限定了数据类型)。关系型数据库中允许某些值为空,即null。
表之间有三种基本关系:一对一关系、一对多关系、多对多关系
数据库管理系统(database management system 简称DBMS)。
关系型数据库管理系统(relational database management system 简称RDBMS)是管理、操作和维护关系型数据库的一种软件程序。分为本地(local)和服务器(server)数据库管理系统两种类型。
SQL即结构化查询语言(structured query language 简称SQL),是一种用于管理关系型数据库并与数据库中的数据进行通讯的计算机语言,可以通过编写SQL语句访问和操纵数据库中的数据。
SQL语句分为:数据定于语言DDL(Data Definition Language):用于创建(create database、create table、create index)、修改和重命名(alter table、rename table)、删除(drop database、drop table、drop index)数据库内的数据结构。
数据查询语言DQL(Data Query Language):用于从数据库中的表中查询指定的数据。使用select语句。
数据操作语言DML(Data Manipulation Language):用于修改数据库中的数据,包括插入(insert)、更新(update)、删除(delete)数据。
数据控制语言DCL(Data Contral Language):用于控制对数据库的访问。使用grant语句授权访问,使用revoke语句禁止访问。
目前流行的关系型数据库管理系统有:甲骨文公司的MySQL、Orace、微软的SQL Server
第二章 管理数据库的表
数据类型:整数型(int)、浮点型(float、double)、字符串型(char、varchar)、日期和时间类型(date、datetime)和其他一些类型。
创建数据库语句:create database 数据库名;
连接到数据库语句:use 数据库名;在用户界面中可以直接点。
删除数据库语句:drop database 数据库名;
创建表语句:create table 表名(列名 列的数据类型 (列的约束),列名 列的数据类型 (列的约束),……,列名 列的数据类型 (列的约束));
1.创建表时首先需要选中某一个数据库 2.每个属性之间用,隔开3.最后一个属性不加符号结束
修改编码格式:CREATE TABLE 表名( 列的各种数据 )DEFAULT CHARSET utf8;
删除表语句:drop table 表名;
创建临时表语句:在正式 表名 前加#或##。当创建本地临时表时加#,创建全集临时表时加##。
复制表语句:select*into 新表名 from 原表名;
修改表语句:加一列 alter table 表名 add 列名 列的数据类型 (列的约束);
改类型 alter table 表名 modify 列名 要改的东西;
删除列 alter table 表名 drop column 列名;
alter table语句同其他选项一起可以更改表结构。包括增删改列、主键、外键或其他约束等。
创建索引语句:create index 索引名 on 表名 (列名1,列名1,……);
删除索引语句:drop index 表名.列名 on index;
第三章 保证数据完整性
关系型数据库必须确保数据的完整性,即数据的可靠性和准确性。
根据数据完整性实施的方法分:实体完整性、域完整性、引用完整性、自定义完整性。
实体完整性保证表中的每一行都是不同的实体,域完整性保证输入到每一列数据的正确性和准确性,引用完整性保证标间关系的正确性和准确性。
数据完整性的实现:创建非空约束 not null;设置主键约束 primary key (自增长:auto_increase);设置唯一约束 unique;指定默认值 default;设置检查约束 check(逻辑表达式);
使用外键约束连接的两个列必须是相同的数据类型,如果要删除一个被其他表引用的表,首先必须去掉引用关系。
第四章 使用DML语句更改数据
向表中添加数据语句:insert into 表名(列名列表)
values(值列表); -- 列名列表中各参数之间用逗号隔开,其中参数可以为1到多个;值列表可以有1到多个,当使用value时只能有一个值列表。如果不指定列名,values列表中的值必须和表中列的顺序、个数一样。
插入多行的语句:insert into 表名 (列名列表)select select语句; -- 其实质为赋值,但是两个表的列名和列数不一定相同,列名列表 也可以省略不写。该语句中列的数目必须等于从select语句返回的列数,列的数据类型必须和返回的对应数据类型一直。
复制表语句:create table 新表名 select * from 原表名;-- * 代表所有列。复制表的结构和数据。
select 列名 into 新表名 from 原表名;-- MySQL中不支持该语句。
更新数据语句:update 表名 set 新列值列表 where 过滤条件; -- 如果不指定where则更新全表数据
update 表名 set 列1=新值1,列2=新值2,…… where 过滤条件;--前面两个列之间要用逗号隔开,and只能用在where后的条件中
通过更新删除列中的数据,即把列值更新为null。
设置空:赋值为null或者赋值为单引号
删除数据语句:delete from 表名 where 过滤条件; -- 如果不指定where则删除全表数据
delete 关键字只能删除整行数据,要删除单个字段可以使用语句:update 列=null where 条件 。
delete 关键字只能删除表中的数据,不能删除表。删除表要用 drop table 表名;
truncate table 表名; -- 删除表中的所有行,但是表的结构、列、约束、索引等不会被改动。数据被永久删除,不可回滚。不适用有外键约束的表。
第五章 简单的数据查询
投影操作是指在SQL查询中,使用select语句,选择将对表中的哪些列进行操作,这些列将出现在结果中。
语句结构:select 列名列表 from 表名; -- 单个列直接写,多个列名之间用逗号隔开,全部列用*号代替。
表名前缀结构:表名.列名 表、列别名:select 列A as a,列B as b from 表名 as T;
例如:select T.列A as a, T.列B as b from 表名 as T; -- 其中as可以省略
列计算语句:例如 select A, B,A*B as AB from T; -- 在SQL语句中可以对列执行一般的加减乘除数学运算
去重语句:select distinct 列名 from 表名;
多列情况:select distinct 列A,列B from 表名; -- 此处 列A、列B要同时满足才算满足条件(即都重复才算重复)
返回限定行数的查询: select top rowcount columnA,columnB from table;
例如:select top 10 columnA,columnB from table; -- 返回前10行的A、B列数据
select top 10 percent columnA,columnB from table; -- 返回前10%行的A、B列数据
查询操作就是在SQL查询中,通过where子句指定查询条件,只从表中提取或显示满足条件的数据。语句:select 列名列表 from 表名 where 条件;
单条件查询语句:select 列A,列B from 表名 where 列C 比较运算符(=、!=、>、<、>=、<=)值;
多条件查询语句:select 列A,列B from 表名 where 条件1 链接关键字(and、or、and not) 条件2;
范围查询语句:select 列A,列B from 表名 where 列C (not) between 下限 and 上限; -- 上限和下限顺序不可颠倒,between前可加not
集合查询语句:select 列A,列B from 表名 where 列C in (值集合); -- 值集合可以是几个常量,也可以是select语句
模糊查询语句:select 列A,列B from 表名 where 列C like 模式; -- 模式由字符常量加上通配符组成,通配符_代表一个或%代表任意个字符。
含有limit的语句:limit num1,num2;num1是索引从0开始,num2是要查询的行数,当num1省略时默认值为0。limit放在语句最后。
显示修改后的查询结果语句:select f_age+10 from 表名 where 查询条件; -- 显示加10后的年龄
限制不同的语句:select distinct pk_id,f_name from t_student1 where f_age between 18 and 25 ;-- 不同的限制加前面
空值数据处理:select 列A,列B from 表名 where 列C is (not) null; -- 与空值有关的处理必须使用is,其他都不对,null=null结果是false,空值之间并不相等
排序语句:select 列A,列B from 表名 order by 列A(排序方法),列B(排序方法),列C(排序方法)…… asc(desc); -- by 后面为排序条件,多个条件时,按条件先后书序执行排列,asc为升序可省略,desc为降序不可省
如果表名或列名是SQL关键字或是保留字,则需要用中括号或双引号括起来。
第六章 聚合函数与分组
常用的聚合函数有:count、sum、avg、max、min。都可以取别名,不能用来计算字符串型数据
计数规范关键字:* 计数所有选择的行; all 列 计数指定列的所有非空值行;distinct 计数指定列的所有唯一非空值行。
语句:select count(计数规范) as 别名 from 表名;-- count(*)返回所有结果的行数。select count(distinct 列名) from table;-- 先去重再计数
select sum(计数规范) as 别名 from 表名;
select avg(计数规范) as 别名 from 表名;
select max(计数规范) as 别名 from 表名;
select min(计数规范) as 别名 from 表名;
select round(聚合函数,int(int为保留个小数位数)) from 表;-- 不写int参数默认保留整数
concat( )拼接:select concat(,,,,) FROM 表;
分组:select 列A,列B,聚合函数 from 表名 where 过滤条件 group by 列C;-- 分组后看到的是每组的第一个实体的内容
select 列A,列B,聚合函数 from 表名 where 过滤条件 group by 列C having 聚合函数过滤条件; -- where过滤条件发生在聚合函数计算之前,所以聚合函数计算不能放在过滤条件的位置
SQL语句的执行顺序:from——where——group by——select——having——order by——limit
书写顺序:select、from、where、group by、order by、having、limit
第七章 组合查询
子查询:嵌套在其他查询中的查询,也称为内部查询,分相关子查询和非相关子查询,包含子查询的语句称为外部查询。非相关子查询总共执行一次,执行完将值传给外部查询;相关子查询,外部查询返回一行就执行一次。
嵌套查询的相关结构: select (相关子查询) from (子查询、必须取别名) where (非相关子查询);
where 子句中的子查询:select 列A from table where column =(子查询);
返回多个结果的子查询:select 列A from table where column in (子查询);
子查询中使用运算符: select 列A from table where exists(子查询);
select 列A from table where column > all(子查询); -- all运算符与子查询和比较运算符(=、>、<等)一起使用。
select 列A from table where column > any(子查询); 在子查询返回的值中,只要有一行满足比较运算(=、>、<等),表达式就为真。
组合查询:union 运算符:查询语句1 union 查询语句2;
例如:select columnA from tableA union select columnB from tableB;
保留重复行使用 union all 运算符:查询语句1 union all 查询语句2;
例如:select columnA from tableA union all select columnB from tableB;
第八章 联接
表联接可以分为:内联接、外联接、交叉联接和自联接。
内联接(inter):使用=、>、<等的比较运算符,包括相等联接、非相等联接和自然联接。
select tableA.column1,tableB.column2 from tableA inner join tableB on tableA.column1=tableB.column2;
外联接(outer):分左外联接、右外联接和全外联接。左外联接(left join 或者left outer join)以左表为基准;右外联接(right join 或者right outer join)以右表为基准;全外联接(full join 或者 full outer join)返回左表和右表中的所有行,没有数据的返回null。
select * from tableA left outer join tableB on tableA.column1=tableB.column2;
select * from tableA right outer join tableB on tableA.column1=tableB.column2;
select * from tableA full outer join tableB on tableA.column1=tableB.column2;