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 使用集函数
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.由里向外一层层处理,并依照子查询是否独立父查询,分为不相关子查询与相关子查询
判断某个属性的列值是否在子查询结果中,子查询结果往往是一个集合
举例如下
###略(设坑,待补充)
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…() )
执行建立语句时只是把视图的定义存入数据字典,并不执行子查询语句,所以视图也称作虚表
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)