2022313 数据库复习笔记(二)

2022313 数据库复习笔记(二),第1张

文章目录 3.关系数据库标准语言SQL3.1 SQL概述3.2 SQL的定义功能3.2.1基本表的定义:3.2.2 基本表的修改与删除3.2.3 索引的建立与删除 3.3 数据查询3.3.1 单表查询3.3.1.1 简单投影3.3.1.2 选择运算3.3.1.3 使用集函数3.3.1.4 分组 *** 作3.3.1.5 排序 3.3.2 连接查询3.3.2.1等值与非等值连接3.3.2.2 自身连接3.3.2.3 外连接3.3.2.4 复合条件连接以及多表连接3.3.2.5 集合运算连接 3.3.3 嵌套查询3.3.3.1 带有IN谓词3.3.3.2 带有比较运算符的子查询3.3.3.3 带有ANY或ALL谓词的子查询3.3.3.4 带有EXISTS谓词的子查询(难点!!!!!!!占坑!) 3.4 数据更新3.4.1 插入元组3.4.2 删除元组4.3.4 修改元组 3.5 视图3.5.1 建立视图3.5.2 删除视图3.5.3 查询视图3.5.4 更新视图

3.关系数据库标准语言SQL 3.1 SQL概述 特点:
1.高度非过程化(只需要提出做什么,无须指明怎么做)
2.功能完备并且一体化
3.语法结构统一(可用于所有用户,自含式语言和嵌入式语言)
4.语言简洁,易学易用体系结构


3.2 SQL的定义功能
create database test;  # 创建数据库
use test;    # 选中数据库
show databases; #查看所有数据库
show tables from test;#查看选中数据库中的所有表名
drop database test; #删除库
drop table 学生2 cascade ; #删除表,连同其涉及对象,否则用restrict
describe 学生2 ; # 查看数据库的某个表结构


create table 学生2 #创建表
( 学号 CHAR(8) NOT NULL UNIQUE,
  /*不能去空值和重复的值(在没有特定指定主码时,该约束等同于主码的约束)*/
  姓名 CHAR(8) , /*primary key,另一种设定主要关键字的方法*/
  性别 CHAR(2) default '男' ,#定义默认值
  出生月份 SMALLINT ,
  籍贯 CHAR(8),
  学院 CHAR(15),
  primary key(姓名,籍贯)
  #foreign key(籍贯) references 学生(籍贯) #定义外关键字
  );
  
3.2.1基本表的定义:




获取表内所有列的名称和类型:

show full columns from  学生;  #显示指定表的所有信息

3.2.2 基本表的修改与删除
alter table 学生 add column 年龄 smallint; #添加属性
alter table 学生 drop column 年龄; #删除属性
alter table 学生 modify column 学院 char(20); #修改属性数据类型
  
3.2.3 索引的建立与删除
 create unique index suoyin1 on 学生(学号); #聚簇索引用 cluster
 drop index suoyin1 on 学生; #删除索引,这里要指明哪个表

索引用于快速找出在某个列中含有某一特定值的行,否则就要采取顺序访问方式

MySQL索引分类
1.BTREE索引
2.HASH索引
3.RTREE索引
4.FULLTEXT全文索引 3.3 数据查询 3.3.1 单表查询

3.3.1.1 简单投影
   select name,home from student;
   select distinct home from student;  
   #希望在重复列仅取一次数值
   select number as 学号,year(now())-birthtime 年龄 from student; 
   #可以通过对列值进行算术运算得到表中不存在的信息,并且定义别名

3.3.1.2 选择运算

确定集合:
   select number as 学号,year(now())-birthtime 年龄 from student
   where major not in('math','english') 

字符匹配
where home like '_iang%' # %表示任意长度字符串,-表示任意单个字符
where home like 'DB\_Design' escape'\' #表示\为转义字符,其后的字符不再具有通配符含义 
空值
注意:is不能用等号代替
where home is null 
3.3.1.3 使用集函数


3.3.1.4 分组 *** 作

group by短语:
将查询结果的多行按一列或多列取值相等的原则进行分组
目的:细化集函数的作用对象,使每个组有一个函数值

having短语:分组后按一定条件进行筛选,输出满足条件的组
(where语句作用于视图或基本表,输出满足条件的元组)

3.3.1.5 排序

若没有指定,则默认按最方便的顺序(通常是元组在表中的先后顺内需)疏忽从
order by 语句:升序(ASC) 降序(DESC) , 默认升序

3.3.2 连接查询 3.3.2.1等值与非等值连接

1.连接条件中的连接字段不要求相同,但必须是可比的
2.默认不是自然连接

那自然连接是如何实现的呢? ——从select中筛选出重复列的一个就可以了

3.3.2.2 自身连接

为表取两个不同的别名即可

可知:程序先执行from语句,再执行select语句

3.3.2.3 外连接

左外连接
规定所有记录从连接语句的左侧表中返回,当右侧表中没有匹配的记录时,左表中该记录依然会返回,而对应右侧表的列值自动填充NULL值

右外连接
同理

3.3.2.4 复合条件连接以及多表连接

即where子句中有多个条件连接 *** 作

3.3.2.5 集合运算连接


intersect 、except运算都支持自动去除重复

3.3.3 嵌套查询

1.子查询的select语句中不能使用order by 子句,其永远只能对最终查询结果排序
2.由里向外一层层处理,并依照子查询是否独立父查询,分为不相关子查询与相关子查询

3.3.3.1 带有IN谓词

判断某个属性的列值是否在子查询结果中,子查询结果往往是一个集合

3.3.3.2 带有比较运算符的子查询

3.3.3.3 带有ANY或ALL谓词的子查询



3.3.3.4 带有EXISTS谓词的子查询(难点!!!!!!!占坑!) 该子查询不返回任何数据,只产生逻辑真值”true“或者逻辑假值”false”

举例如下
###略(设坑,待补充)

3.4 数据更新 3.4.1 插入元组
 insert into 学生(学号,姓名) values ('08182833','center');
  #对于没有出现的属性列将取空值,但不能包含定义时说了不能取空的列
 insert into 学生 values('1','center2','1','2001' ,'sichuan','art');
  #若没有指明任何列名,插入的记录必须在每个属性列均出现
 insert into 学生(学号,姓名) values ('2','zhu'),('3','gou');
  #批量插入元组


还可以插入子查询结果

3.4.2 删除元组

4.3.4 修改元组
update student 
set home = 'sichuan'
where number = 3

如果没有where表示修改所有元组
同样也可以带子查询(where…in…() )

3.5 视图 3.5.1 建立视图

执行建立语句时只是把视图的定义存入数据字典,并不执行子查询语句,所以视图也称作虚表

3.5.2 删除视图

3.5.3 查询视图

3.5.4 更新视图

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/993925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存