- 3.关系数据库标准语言SQL
- 3.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 更新视图
- 特点:
1.高度非过程化(只需要提出做什么,无须指明怎么做)
2.功能完备并且一体化
3.语法结构统一(可用于所有用户,自含式语言和嵌入式语言)
4.语言简洁,易学易用 - 体系结构
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) , 性别 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全文索引
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 null3.3.1.3 使用集函数
group by短语:
将查询结果的多行按一列或多列取值相等的原则进行分组
目的:细化集函数的作用对象,使每个组有一个函数值
having短语:分组后按一定条件进行筛选,输出满足条件的组
(where语句作用于视图或基本表,输出满足条件的元组)
若没有指定,则默认按最方便的顺序(通常是元组在表中的先后顺内需)疏忽从
order by 语句:升序(ASC) 降序(DESC) , 默认升序
1.连接条件中的连接字段不要求相同,但必须是可比的
2.默认不是自然连接
那自然连接是如何实现的呢? ——从select中筛选出重复列的一个就可以了
3.3.2.2 自身连接为表取两个不同的别名即可
可知:程序先执行from语句,再执行select语句
-
左外连接
规定所有记录从连接语句的左侧表中返回,当右侧表中没有匹配的记录时,左表中该记录依然会返回,而对应右侧表的列值自动填充NULL值
-
右外连接
同理
即where子句中有多个条件连接操作
intersect 、except运算都支持自动去除重复
1.子查询的select语句中不能使用order by 子句,其永远只能对最终查询结果排序
2.由里向外一层层处理,并依照子查询是否独立父查询,分为不相关子查询与相关子查询
判断某个属性的列值是否在子查询结果中,子查询结果往往是一个集合
- 该子查询不返回任何数据,只产生逻辑真值”true“或者逻辑假值”false”
举例如下
###略(设坑,待补充)
insert into 学生(学号,姓名) values ('08182833','center');
#对于没有出现的属性列将取空值,但不能包含定义时说了不能取空的列
insert into 学生 values('1','center2','1','2001' ,'sichuan','art');
#若没有指明任何列名,插入的记录必须在每个属性列均出现
insert into 学生(学号,姓名) values ('2','zhu'),('3','gou');
#批量插入元组
还可以插入子查询结果
update student set home = 'sichuan' where number = 3
如果没有where表示修改所有元组
同样也可以带子查询(where…in…() )
执行建立语句时只是把视图的定义存入数据字典,并不执行子查询语句,所以视图也称作虚表



