数据库: 数据的集散地,有效的存储和管理数据
关系型数据库:1. 用二维表组织数据; 2. 结构化查询语言(SQL - Structured Query Language)
行:一条记录
列:一个字段
主键:能够唯一标识一条记录的字段
外键:其他表的主键(外来的主键)
Oracle
DB2
SQLServer
MySQL
学生表
学号 姓名 性别 出生日期 家庭住址
1001 骆昊 男 1980-11-28 四川成都
1002 王大锤 女 1990-1-1 四川自贡
SQL
DDL - 数据定义语言 create / drop / alter
DML - 数据操作语言 insert / delete / update
DQL - 数据查询语言 select
DCL - 数据控制语言 grant / revoke
集合论
关系代数
数据库设计 - ER图(实体关系图)
一对一 ---> 人和身份证
一对多 ---> 部门和员工、用户和订单
多对多 ---> 订单和商品、读者和图书
--删除表
drop table TbStudent;
--创建表
create table TbStudent
(
stuid integer primary key, --学号
stuname varchar(20) not null, -- 姓名
stusex char(1) default '男', --性别
stuaddr varchar(50) --家庭住址
);
--修改表
alter table TbStudent add stubirth date;
--插入记录
insert into TbStudent values (1001, '骆昊', '男', '四川成都', '1980-11-28');
insert into TbStudent (stuid, stuname) values (1002, '王大锤');
insert into TbStudent (stuid, stuname) values (1003, '王大锤');
insert into TbStudent (stuid, stuname, stusex, stubirth) values (1004, '李莫愁', '女', '1986-12-3');
insert into TbStudent values (1005, '张三丰', '男', '四川成都', '1975-5-5');
insert into TbStudent values (1006, '李二王', '女', '四川绵阳', '1988-6-6');
insert into TbStudent values (1007, '王丽', '女', '四川成都', '1992-2-2');
--删除数据
delete from TbStudent where stuid=1003;
delete from TbStudent where stuname='王大锤';
--更新数据
update TbStudent set stuaddr='四川绵阳', stubirth='1990-4-5' where stuid=1002;
update TbStudent set stuaddr='湖南长沙' where stuid=1004;
--查询所有行所有列
select * from TbStudent;
--投影操作
select stuname, stusex from TbStudent;
--在投影时别名
select stuname as 姓名, stusex as 性别 from TbStudent;
--数据筛选
select * from TbStudent where stusex='男';
select * from TbStudent where stusex='男' and stuaddr='四川成都';
select * from TbStudent where stusex='男' or stuaddr='四川成都';
select * from TbStudent where stubirth between '1985-1-1' and '1989-12-31';
select * from TbStudent where stubirth<'1980-1-1';
select * from TbStudent where stuname like '王%';
select * from TbStudent where stuname like '王_';
select * from TbStudent where stuname like '王__';
select * from TbStudent where stuname like '%王%';
--排序
select * from TbStudent order by stubirth asc;
select * from TbStudent order by stubirth desc;
select * from TbStudent order by stusex, stuid desc;
--分组
select stusex, count(stusex) from TbStudent group by stusex;
select stuaddr, count(stuaddr) from TbStudent group by stuaddr;
select stuaddr 家庭住址, count(stuaddr) as 总人数 from TbStudent group by stuaddr order by 总人数;
select count(stuid) from TbStudent;
--聚合函数/分组函数
count
max
min
avg
sum
select min(stubirth) from TbStudent;
--子查询(把一个查询的结果作为另一个查询的一部分来使用)
select stuname, stubirth from TbStudent where stubirth=(select min(stubirth) from TbStudent);
select stuname, stubirth from TbStudent where stubirth=(select max(stubirth) from TbStudent);
--连接查询
---> 内连接
---> 外连接 ---> 左外连接
---> 右外连接
---> 全外连接
pragma foreign_key=on;
-- 一对一外键关联
create table TbPerson
(
pid integer primary key,
pname varchar(20) not null,
ptel char(11) not null,
paddr varchar(50)
);
create table TbIdCard
(
cid char(18) primary key,
corg varchar(50) not null,
cvaldate date not null,
pid integer unique references TbPerson(pid)
);
--一对多外键关联
create table TbDept
(
deptno tinyint primary key,
dname varchar(10) not null,
dloc varchar(20) not null
);
insert into TbDept values (10, '会计部', '北京');
insert into TbDept values (20, '研发部', '成都');
insert into TbDept values (30, '销售部', '重庆');
insert into TbDept values (40, '运维部', '深圳');
create table TbEmp
(
empno int primary key,
ename varchar(20) not null,
job varchar(10) not null,
mgr int,
sal int not null,
dno tinyint,
foreign key (dno) references TbDept(deptno)
);
insert into TbEmp values (7800, '张三丰', '总裁', null, 9000, 20);
insert into TbEmp values (2056, '乔峰', '分析师', 7800, 5000, 20);
insert into TbEmp values (3088, '李莫愁', '设计师', 2056, 3500, 20);
insert into TbEmp values (3211, '张无忌', '程序员', 2056, 3200, 20);
insert into TbEmp values (3233, '丘处机', '程序员', 2056, 3400, 20);
insert into TbEmp values (3251, '张翠山', '程序员', 2056, 4000, 20);
insert into TbEmp values (5566, '宋远桥', '会计师', 7800, 4000, 10);
insert into TbEmp values (5234, '郭靖', '出纳', 5566, 2000, 10);
insert into TbEmp values (3344, '黄蓉', '销售主管', 7800, 3000, 30);
insert into TbEmp values (1359, '胡一刀', '销售员', 3344, 1800, 30);
insert into TbEmp values (4466, '苗人凤', '销售员', 3344, 2500, 30);
insert into TbEmp values (3244, '欧阳锋', '程序员', 3088, 3200, 20);
insert into TbEmp values (3577, '杨过', '会计', 5566, 2200, 10);
insert into TbEmp values (3588, '朱九真', '会计', 5566, 2500, 10);