基础术语
数据库:用来组织、存储和管理数据的仓库。
关系数据库特点:数据以表格(关系)的形式出现;行表示元组,列表示属性;许多行和列组成表格;许多表格组成database。
主码:用于在一个关系中区分不同元组
外码:一个关系中的属性包括另一个关系的主码
参照完整性:比如一个表示学校的数据库,其中有两个表,一个是教授表,教授表中存在教授所在系的名字,而系的名字又是系表的主码,所以要求教授所在系的名字,一定是存在于系表中的
索引:类似于书籍的目录,可以帮助快速访问数据库表的特定信息
MySQL管理
运行MySQL之后,输入正确的密码。
添加用户:在mysql数据库的user表中添加新用户,设置用户名,密码,以及进行授权
例如使用如下SQL语言(以分号作为结束标识):
mysql> INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');
选择需要操作的数据库
mysql> show databases;显示出所有已经创建的数据库
mysql> use university 选择其中的一个数据库进行管理
mysql> show tables;显示指定数据库的所有表
mysql> show columns from instructor;显示选定数据表的属性,看到下图的instructor表的主码是ID
使用create创建数据库,使用drop删除数据库
mysql> create database happy;
mysql> drop database happy;谨慎,所有数据都将会消失
MySQL语言
mySQL支持的数据类型:数值(int,numeric,float),日期/时间(date),字符串/字符(char ,varchar)
创建数据表
create table 表名 ( 属性名 属性类型,...);
create table dapartment
(dept_name varchar(20),
building varchar(15),
budget numeric(12,2),
primary key (dept_name));
删除数据表
drop table 表名;执行之后所有的数据都不存在了,表也将不存在
delete from 表名 ;执行之后,只将表中的数据删除,而表仍然保留
插入数据
insert into 表名 (属性1,属性2,属性3,...)
values (值1,值2,值3,...);
insert into course(course_id,title,dept_name)
values('CS-101',‘Database Systems’,‘Comp.Sci’);
查询数据
select 属性名1,属性名2.. from 表名 where 约束条件;
更新数据
update 表名
set 属性名1 = 新值1,属性名2 = 新值2,...
where 约束条件
update instructor
set salary = salary*1.05;涨工资
字符串模式匹配
匹配字符串时不区分大小写,使用like操作符进行模式匹配(模式区分大小写)
%:匹配任意字符串
_:匹配任意一个字符
select dept_name from department
where building like '%Waston%';找出建筑名称中包含子串Waston的所有系名
集合运算union,intersect,except
union:连接两个以上的select语句结果到一个新的集合中,删除重复数据
(select语句1)
union
(select语句2);
intersect:将两个或以上的select语句结果取交集到一个新的集合中,去除重复
except:select语句1执行结果减去select语句2执行结果得到的结果到一个新集合中,去除重复
聚集运算
avg:平均值
min:最小值
max:最大值
sum:总和
count:计数
select count(distinct ID)
from teachs where year = 2019; 算出这个关系中元组的个数
分组聚集
groupe by
select dept_name,avg(salary)
from instructor
group by dept_name;
第一步是分组,然后在每个分组上进行聚集运算avg
所以表示的意思是:找出每个系的平均工资
MySQL连接
使用join在多个表中查询数据
inner join:获取两个表中字段匹配关系的记录,自然连接natural join是一种内连接,该种连接可能会失去某些数据,例如将instructor表和teaches表进行自然连接,那么结果中不会出现没有教授任何一门课程的教授信息
left join:获取左表所有记录,即使右表没有对应匹配的记录
right join:获取右表所有记录,即使左表没有对应匹配的记录
null值处理
除了count遇到null也会加1外,其余都会自动忽略null