一、课程介绍
《数据库的原理和应用》是一个前导课程,也是一个基础课程。是《应用程序开发》类的课程的基础课程。
二、数据库产品介绍
目前主流的数据库有:
Oracle(美国甲骨文公司),大中型应用程序。(java+Oracle)
SQL Server(美国微软公司),.NET应用程序。(C#+SQL Server)
MySQL(美国甲骨文公司),中小型网站。(Java+MySQL,PHP+MySQL)
三、MySQL基础
1、创建数据库
数据库是一个容器,里面有表、视图、存储过程等。
格式:create database <数据库名>;
查看数据库:show databases;
使用数据库:use <数据库名>;
2、创建表
表是用来存储数据,表是数据库中最重要的一个对象。
格式:create table <表名>(
<字段名> <字段类型>(宽度) ,
...
);
示例:
create table product(
id int auto_increment primary key, --auto_increment表示自动编号,primary key表示主键。
name varchar(50),
price float,
image varchar(255)
);
查看表结构:
desc <表名>
查看表数据(查询):
select * from <表名>
插入数据:
insert into <表名>(<字段名1>,<字段名2>,...) values(<值1>,<值2>,...)
一、查询语句(select)
1、基本格式:select <字段列表> from <表名>
说明:
*表示所有字段。
如果查部分字段,需要指定,字段间用逗号隔开。
指定标题使用as,如:select id as '编号', name as '名称' from product;
去重的关键字:distinct
例如:select distinct teamid from player where chinesename like '%杰克逊%'
2、条件子句where
格式:where <条件>
说明:条件是一个逻辑表达式。
比较运算符:> < >= <= !=
逻辑运算符:not and or
范围运算符:<字段> between <值1> and <值2>
in运算符:<字段> in (<值1>,<值2>,...)
like运算符:like '含通配符的字符串',主要作模糊查询
mysql的通配符:
%表示任意个字符(0~n)
_表示任意1个字符(0~1)
[]表示范围
3、排序子句
格式:order by <字段> [desc | asc]
说明: desc表示降序(值由大到小),asc表示升序(值由小到大),默认为升序。
4、limit子句
格式:limit([偏移量],<记录数>)
5、分组子句
格式:group by <字段> [having <条件>]
说明:having <条件>表示限定分组,即对分组后的结果进行筛选。
聚合函数(统计函数):
count(<字段>):记录个数
sum(<数值字段>):求和
avg(<数值字段>):求平均值
max(<数值字段>):求最大值
min(<数值字段>):求最小值
6、多表的连接查询
(1)全连接查询
格式:select <字段列表> from <表1>,<表2> where <表1>.<连接字段>=<表2>.<连接字段>
功能:从多张表查询数据
(2)join连接
a、内连接
格式:select <字段列表> from <表1> a inner join <表2> b on <表1>.<连接字段>=<表2>.<连接字段>
b、外连接
左外连接
格式:select <字段列表> from <表1>left join <表2> on <表1>.<连接字段>=<表2>.<连接字段>
右外连接
格式:select <字段列表> from <表1>right join <表2> on <表1>.<连接字段>=<表2>.<连接字段>
c、交叉连接
格式:select <字段列表> from <表1>cross join <表2>
7、子查询
概念:子查询就是一个SQL语句中嵌套的一个select语句。
(1)比较子查询
格式:select <字段列表> from <表名> where <字段> <比较运算符> <子查询>
说明:此时子查询的结果必须是单值。
举例:查询身高最高的球员的中文名和身高。
查询超过平均身高的球员的中文名和身高。
(2)in子查询
格式:select <字段列表> from <表名> where <字段> in <子查询>
说明:该子查询结果应是一个单列的结果集。
(3)exists子查询
格式:select <字段列表> from <表名> where exists <子查询>
二、数据库的基本操作:增、删、改、查
1、增(insert)
格式:insert into <表名>[(<字段列表>)] values(<值列表>)
2、删(delete)
格式:delete from <表名> where <条件>
3、改(update)
格式:update <表名> set <字段1>=<值1>,...where <条件>
三、约束(constraint)
1、主键约束(Primary Key)
主键是用来唯一地表示一个实体,为了防止出现重复的记录。
一个表只能有一个主键。
例如:学生(学号,姓名,……)
(1)在创建表时候创建主键约束
create table <表名>(
<字段1> <类型1> primary key, --列的完整性约束
<字段2> <类型2> ,
...
)
create table <表名>(
<字段1> <类型1>
<字段2> <类型2> ,
primay key(<字段1>) --表的完整性约束
)
(2)在表创建后添加主键约束
alter table <表名> add primary key(<字段名>)
2、唯一约束(unique)
限制某个字段不要出现重复值
(1)在创建表时候创建唯一约束
create table <表名>(
<字段1> <类型1> unique, --列的完整性约束
<字段2> <类型2> ,
...
)
create table <表名>(
<字段1> <类型1>
<字段2> <类型2> ,
unique(<字段1>) --表的完整性约束
)
(2)在表创建后添加唯一约束
alter table <表名> add unique(<字段名>)
3、检查约束(check)
设置某个字段取值范围。
(1)在创建表时候创建检查约束
create table <表名>(
<字段1> <类型1> check(<条件>), --列的完整性约束
<字段2> <类型2> ,
...
)
4、外键约束(参照完整性约束Foreign key)
外键不是当前表的主键,是别的表的主键。
外键一定要取自于父表的主键。
create table <表名>(
<字段1> <类型1> ,
<字段2> <类型2> ,
foreign key(<外键字段>) references <父表>(<主键字段>) --表的完整性约束
)
(2)在表创建后添加唯一约束
alter table <表名> add check(<条件>)
作业:
(一)导入数据
(1)下载study.sql文件。
链接:https://pan.baidu.com/s/13LBdCVssRBDHTesd0dnqvQ
提取码:tiuj
(2)将study.sql脚本文件复制到d盘。
(3)登录mysql服务器,进入mysql提示符状态。
(4)mysql>create database study;
(5)mysql>use study;
(6)mysql>source d:/study.sql;
(7)mysql>show tables;
(8)mysql>select * from player;
(二)完成以下查询并截图
(1)查询身高(height)220以上的球员的编号(id),姓名(chinesename),身高(height)信息。
(2)使用between..and..运算符查询球龄(playAge)10~15之间(含10和15)的球员的编号(id),姓名(chinesename),球龄(playAge)信息。
(3)查询位置(position)是'中锋'的球员的编号(id),姓名(chinesename),位置(position)信息。
(4)使用in运算符查询球队编号(teamid)为13或15或17的球队的球员的编号(id),姓名(chinesename),球队编号(teamid)信息。
4月21日作业1:
(5)从player表中查询中文姓名以"杰克逊"结尾的所有球员的编号(id),姓名(chinesename),英文名(englishname)。
(6)从player表查询英文名为"Chris Paul"的球员的编号(id),姓名(chinesename),英文名(englishname)。
(7)从player表中查询中文姓名含"詹姆斯"的所有球员的编号(id),姓名(chinesename),英文名(englishname)。
(8)如果以20条记录为1页对所有球员的记录进行分页,请查询第11页的球员的编号(id),姓名(chinesename),英文名(englishname)。
(9)查询身高(height)由高到低的前10位球员的编号(id),姓名(chinesename),身高(height)信息。
4月21日作业2:
(10)从球员表player中查询全联盟现役球员的年龄age最大值和最小的值。
(11)从球员表player中查询全联盟现役球员的平均身高。
(12)分别统计每个球队的球员数,结果字段有球队编号teamid和球员数。
(13)统计球员数大于或等于20的球队编号teamid和球员数。
4月28日作业1:
数据准备:
提示:先使用use study;切换数据库
(a)向球队表team中添加一支球队
insert into team(id,name) values(31,'啦啦队');
(b)向球员表player中添加一名球员
insert into player(id,chinesename) values(540,'周琦');
(c)分别对两表进行全连接、内连接、左外连接、右外连接和交叉连接查询,只查球员编号id,球员中文名chinesename和球队名name,并提交相应的结果截图(共5张)。
4月28日作业2:
子查询:
(1)查询球员中文名chinesename含“杰克逊”的球队的队名name。
(2)查询身高height最高的球员所在的球队的球队编号id和球队名称name。
(3)查询身高height高于全联盟平均身高的球员的球员编号id,球员中文名chinesename和身高height。
增、删、改:
创建2个表:
(a)国家表empire3
(b)武将表person
(c)添加记录
(d)删除姓名为空的记录
(e)将“关云长”的姓名改成“关羽”。
5月9日作业1:
(1)创建班级表bj,班级编号cid作主键约束且自动编号, 班级名cname作唯一约束
(2)创建学生表xs,学生编号sid作主键约束且自动编号,学生姓名sname字符串,学生的年龄sage整型作检查约束,取值范围(10-99),班级编号cid作外键约束参照班级表的班级编号
(3)输入记录
班级表bj
学生表xs