SQL入门经典+SQL必知必会

一、了解SQL
1. 关系型数据库管理系统(RDBMS)
2. 结构化查询语言(SQL)——关系型数据库进行通信的标准语言
3. ANSI标准——可移植性和易用性
4. 连接数据库:CONNECT user@database;断开连接:DISCONNECT
5. SQL命令类型:
  • 数据定义语言:DDL——用于创建重构数据库对象(撤销和修改数据模式)
  • 数据操作语言:DML——用于操作关系型数据库对象内部的数据据(增删改数据)
  • 数据查询语言:DQL(只有一个命令,此命令有很多选项和子句)——用于构成对关系数据库的查询
  • 数据控制语言:DCL——用于控制对数据库里数据的访问,通常用于创建和与用户访问相关的对象,以及控制用户的权限
  • 数据管理命令:
  • 事务控制命令:
注:许多 SQL 开发人员喜欢对 SQL 关键字使用大写,而对列名和表名使用小写,这样做使代码更易于阅读和调试。不过,一定要认识到虽然 SQL 是不区分大小写的,但是表名、列名和值可能有所不同(这有赖于具体的 DBMS 及其如何配置)。
6. 数据库系统的一般构成:
  • 数据库DB
  • 数据库管理系统DBMS
  • 数据库管理员DBA
  • 应用程序
7. 概念数据模型用于数据库的设计;逻辑(也称结构数据模型,需要形式化定义)和物理数据模型(反映数据的存储结构)用于DBMS的实现。数据模型描述数据时,的描述称为数据模式(外模式、概念模式、内模式)的描述称为实例
8. 表的构成:
  • 字段:表里的一列,如学生信息表里的名字、性别、年龄等,用于保持每条记录的特定信息
  • 行(元组):表中的一行数据,有时说为记录,正确的说法是”行“
  • 列(属性):表由列组成,包含表里特定字段的全部信息
  • 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键
注:超键包含着候选键,候选键中包含着主键。主键一定是惟一的。
  • 主键(Primary Key):唯一标识表中每行的这个列(或这几列)的记录(比如人的身份证号),用于与其他表的关联。并不总是需要主键,但是最好总是定义;主键只有一个,可以是一个或多个字段组成;主键的值不可重复或者为NULL
注:更换主键(add)前先撤销主键(drop)
  • 外键(Foreign Key):关系模式R中的某个不是R中的主键,而是另一个关系的主键,则这个字段称为关系R的外键。外键可以多个;在数据库中缩写为FK
补充:用UNIQUE标示出来的列,表示要求每一行的值不同;
用Default设置默认值;使用外键要用到reference指定引用的表名

二、建立数据库
1. 数据的隐示转换(自动)和显式转换(通过函数实现)
2. 基本数据类型:
  • 字符串类型:
  • 数值类型:
  • 时间和日期类型:
  • 二进制类型:
  • 定长字符串: CHARACTER(n),使用空格填充数量不足的字符
  • 变长字符串: CHARACTER VARYING(n ),有VARCHAR(都用)、VARINARY和VARCHAR2(Oracle用)。变长字符串不使用空格填充空白,更节约空间
  • 大对象类型:BLOB(适合存储二进制文件,如图像和mp3);TEXT(适合保存大字符集,如站点HTML的输入)
  • 数值类型:BIT、BIT VARYING、DECEMAL(p,s)//小数类型,精确度高,表示的范围小、INTEGER、SMALLINT、BIGINT、FLOAT(p,s)//p为有效位数,表示总长,s为标度、DOUBLE PRECISION(p.s)、REAL(s)//单精度浮点类型
  • 直义字符串:由用户或程序明确指定,值是已知的
  • NULL类型:表明相应的字段不需要输入数据(如果必须包含数据,就必须设置为NOT NULL)
  • 布尔值:TRUE、FALSE、NULL(只有第一种会返回数据)
注:以上数据类型在不同的SQL实现里可能具有不同的名称,但是概念是通用的
  • 自定义类型:用语句CREEATE TYPE创建自定义类型
  • 域:域是能够被有效的使用的数据类型的集合,域与数据相关联,从而只接受特定的数据

三、管理数据库对象
1. 规划:与数据库某个用户名相关联(规划所有者)的数据库对象集合,数据库里可以由一个或多个规划
2. 访问自己所拥有的表等数据库对象(在自己的规划里),不必引用规划名称
3. 不同规划中,可以由相同的数据库对象(所以一定要注意自己是以什么身份登录到数据库的,以免误删对象)
4. 创建表:CREATE TABLE(创建前应仔细设计表的结构,比如数据类型,NULL,主键等),可复制可新建(复制时默认相同属性)
5. 创建表时括号不是必须的,大多数SQL的实现以分号结束
6. ALTER TABLE增加列,后面加上modify为修改
7. 添加自动增加的列:MySQL中提供了SERIAL方法,SQL Server中可使用IDENTIFY类型;Oracle中可使用SEQUENCE对象加一个触发器实现
8. COMMIT:COMMIT用来将事务写入数据库
9. CREATE INDEX:CREATE INDEX用于在一个或多个列上创建索引
10. CREATE PROCEDURE用于创建存储过程(Oracle稍有不同)
11. CREATE VIEW用来创建一个或多个表上的新视图
12. DELETE从表中删除一行或多行
13. DROP永久地删除数据库对象(表、视图、索引等),加上cascade constrain表示当当前表与其他表有联系时仍然强制删除
14. INSERT为表添加一行
15. INSERT SELECT将SELECT的结果插入到一个表
16. ROLLBACK用于撤销一个事务块
17. UPDATE更新表中的一行或多行
18. SELECT:
1)条件查询:
select <列> from 表 where 查询条件 查询处理
  • 检索特定列:select 学号 from 学生;
  • 检索多个列:SELECT关键字后给出多个列名,列名之间必须以逗号分隔。// 输出次序由语句顺序决定
  • 检索全部列:select * from 学生;
在实际列名的位置使用星号(*)通配符(好处在于可以用来检索未知列)(一般而言,除非你确实需要表中的每一列,否则最好别使用*通配符。)
  • 检索不同的值(相同的值不打印):select distinct 姓名 from 学生;
使用DISTINCT关键字,顾名思义,它指示数据库只返回不同的值
  • 自定义检索出显示时的字段名:select 定义名 姓名 from 学生;
注:可以使用很多运算符,如逻辑运算符(and , or , not);特殊运算符(可读性稍差between , in , like , between...and),还可以使用空值NULL进行查找某些值是否没有填充
eg:
select 年龄 from 学生 where <=20 and 性别 !=‘女’;
select 年龄 from 学生 where 住址 in(‘四川’,‘福建’);
select * from 学生 where 学号 not like ‘_ _ _6’;
select * from 学生 where 名字 like ‘张%’;
2)查询结果排序
order by 列名 ASC/DESC;
  • select * from 学生 order by 姓名,学号 ASC/DESC;(升/降)
3)汇总信息查询—聚合函数
  • 组函数完成统计、计数等运算;如count-记录所选行数,avg—计算平均值,sum、min、max
eg: select count(*) from 学生;
select count(distinct 姓名) from 学生;
select avg(年龄) from 学生 where 年级<=3;
4)汇总信息查询—group by(通常与上面的聚合函数结合起来使用)

  • having语句,group by的限制语句
  • 与where混合使用(where限制select,having限制group by)
注:group by 分组应该是有意义的,即分组属性应该是对应的
5)连接查询操作(从几个表中查询数据)
  • 相等连接、非相等连接;自身连接、非匹配连接(外链接)
  • 注:剩余的select查询语句笔记在下一个笔记中


19. 索引的建立:create index(可使用unique、ASC、DESC等修饰)
eg:createindex unique 学生索引 on 学生
学号 DESC,
姓名 ASC
);
Drop index 学生索引;

四、完整性约束:
  • 主键约束PK(创建时创建后都可以设置)
  • 外键约束FK:外键是子表里的一个字段,引用父表里的主键(要使用 reference指定引用的表名)
注:外键引用的表名后添加ON DELETECASCADE表示层叠删除(这个表中与这个外键相关的信息都删除);添加ON DELETE restrict表示不能删除此外键;ON DELETE SET NULL,表示删除外键后自动设置为空
  • 唯一性约束UNIQUE:要求这个字段的值在每条记录里都是唯一的
  • NOT NULL约束
  • 检查约束:检查输入到特定字段的数据的有效性
注:利用ALTER TABLE里的CONSTRAINT可以去除已经定义的约束;每个字段都有自己的属性,包括数据类型和约束

没有更多推荐了,返回首页