一、数据库概述
1、什么是数据库
存储数据的仓库,并且可以管理和维护。
2、数据库的分类
层次结构
网状结构
关系型结构
3、常用关系型数据库
Oracle(后面有课程学习,在企业中用的较多)
DB2
Informix
Sybase
SQL Server
ProstgreSQL面向对象数据库
MySQL(我们主要学习它,在企业中用的较多)
Access
SQLite等
二、SQL简介
1、什么是SQL
结构化查询语言 Structured Query Language
是一种定义和操作数据库的语法,绝大多数关系型数据库都支持。
2、SQL的作用
与数据库建立联系,进行沟通
3、SQL的标准
ANSI制定的一个:SQL-2003标准
4、SQL的组成
数据定义语言 DDL ***
数据操作语言 DML *****
数据查询语言 DQL *****
事务控制语言 TPL
数据控制语言 DCL
指针控制语言 CCL
三、MySQL的入门
1、mysql的安装与配置
2、数据库服务器,数据库和表的关系
3、数据和数据库中表的关系
javabean:由一些属性和get/set方法组成的原始java类。
分为实体javabean和表单javabean。
实体javabean:与数据库中表的字段一一对应。
该javabean的一个对象表明是表的一条记录。
这种javabean也称为:
do data object
vo value object
pojo plain old java object
javabean的5大特征:
类都是公有的
都有默认的构造函数
属性都是私有的
都提供公有get和set方法
一般都实现序列化接口。(带着这个问题,听第9天的课程)
四、DDL数据定义语言 (练一遍就行)
1、库操作(创建库,编辑库,删除库)
练习:
创建一个名称为mydb1的数据库。
create database MYDB1;
查看有多少数据库:
show databases;
查看数据库创建细节:
show create database MYDB1;
创建一个使用gbk字符集的mydb2数据库。
create database MYDB2 character set gbk;
创建一个使用gbk字符集,并带校对规则的mydb3数据库
查看gbk字符集下有什么校对规则
show collation like 'gbk%';
create database MYDB3 character set gbk collate gbk_chinese_ci;
删除前面创建的mydb3数据库
drop database MYDB3;
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
show databases;
alter database MYDB2 character set utf8;
2、表结构操作(创建表结构,编辑表结构和删除表结构)
练习:
创建一个员工表:
字段 类型
Id 整型
name 字符型
gender 字符型
birthday 日期型
Entry_date 日期型
job 字符型
Salary 浮点数型
resume 大文本型
create table EMPLOYEE(
ID int,
NAME varchar(50),
GENDER varchar(10),
BIRTHDAY date,
ENTRY_DATE date,
JOB varchar(100),
SALARY float(7,2),
RESUME longtext
);
查看表详情:desc table_name;-----------//table_name指的是表的名称。
desc EMPLOYEE;
在上面员工表的基本上增加一个image列。
alter table EMPLOYEE add IMAGE blob;
修改job列,使其长度为60。
alter table EMPLOYEE modify JOB varchar(60);
删除image列。
alter table EMPLOYEE drop IMAGE;
表名改为user。
alter table EMPLOYEE rename to USER;
查看库中所有表。
show tables;
修改表的字符集为utf8。
alter table USER character set utf8;
列名name修改为username。
alter table USER change NAME USERNAME varchar(50);
五、DML数据操作语言 (重要)
1、插入数据操作 insert
练习:
使用insert语句向表中插入三个员工的信息。
insert into USER values(1,'zs','nan','1999-10-01','2011-10-10','ceo',10000,'hello');--//插入的字段与表的字段必须一一对应,必须所有字段都有值。
insert into USER(id,name,gender,birthday,entry_date,job,salary) values(4,'aaa','nan','1999-10-01','2011-10-10','ceo',10000);//--可以选择性插入
insert into USER(id,username,gender,birthday,entry_date,job,salary,resume)values(3,'张三','nan','1999-10-01','2011-10-10','ceo',10000,'你好');
在MySQL中一共有6个地方使用了字符集。可以通过命令查看:
show variables like 'character%';
修改客户端的字符集:
set character_set_client=gbk;
设置结果集用gbk编码:
set character_set_results=gbk;
2、更新数据操作 update
练习:
将所有员工薪水修改为5000元。
update USER set SALARY=5000;
将姓名为’zs’的员工薪水修改为3000元。
update USER set SALARY=3000 where USERNAME = 'zs';
将姓名为’aaa’的员工薪水修改为4000元,job改为ccc。
update USER set SALARY=4000,JOB='ccc' where USERNAME='aaa';
将'张三'的薪水在原有基础上增加1000元。
update USER set SALARY=SALARY+1000 where USERNAME='张三';
3、删除数据操作 delete
练习:
删除表中名称为’zs’的记录。
delete from USER where USERNAME='zs';
删除表中所有记录。
delete from USER;
使用truncate删除表中记录。
truncate table USER;
六、DQL数据查询语言 (重要)
1、查询数据操作 select
练习:
查询表中所有学生的信息。
select * from STUDENT;
查询表中所有学生的姓名和对应的英语成绩。
select NAME,ENGLISH from STUDENT;
过滤表中重复数据。
select distinct ENGLISH from STUDENT;
练习:(使用表达式和列(表)别名)
在所有学生数学分数上加10分特长分。
select NAME as '学生姓名',MATH as '数学成绩',MATH+10 as '特长成绩' from STUDENT;
统计每个学生的总分。
select NAME as 学生姓名,CHINESE+MATH+ENGLISH 总分 from STUDENT;
使用别名表示学生分数。
select NAME 学生姓名,CHINESE '语文成绩',MATH as 数学成绩,ENGLISH as '英语成绩' from STUDENT;
练习:(使用条件进行过滤查询)
查询姓名为王五的学生成绩
select * from STUDENT where NAME = '王五';
查询英语成绩大于90分的同学
select * from STUDENT where ENGLISH > 90;
查询总分大于200分的所有同学
select * from STUDENT where CHINESE+MATH+ENGLISH>200;
查询英语分数在 80-90之间的同学。
select * from STUDENT where ENGLISH between 80 and 90;
查询数学分数为89,90,91的同学。
select * from STUDENT where MATH in(89,90,91);
查询所有姓李的学生成绩。
select * from STUDENT where NAME like '李%';
查询数学分>80,语文分>80的同学。
select * from STUDENT where MATH>80 and CHINESE>80;
练习:(将查询结果排序)
对数学成绩排序后输出。
select NAME,MATH from STUDENT order by MATH;
对总分排序后输出,然后再按从高到低的顺序输出。
select NAME,CHINESE+MATH+ENGLISH as TOTALSCORE from STUDENT order by TOTALSCORE desc;
对姓李的学生成绩排序输出。
select NAME,CHINESE,MATH,ENGLISH,CHINESE+MATH+ENGLISH as TOTALSCORE from STUDENT where NAME like '李%' order by TOTALSCORE;
七、数据完整性和多表设计 (重要)
1、数据完整性的概述
2、数据完整性的主要分类
2.1、实体完整性(主键)
练习:
创建带主键的表(四种方式)
第一种:写在字段后
create table T1(
id int primary key,
name varchar(20)
);
第二种:写在所有字段后
create table T2(
id int,
name varchar(20),
primary key(id,name)
);
第三种:使用alter添加
create table T3(
id int,
name varchar(20)
);
alter table T3 add primary key(id);
第四种:使用自增长 不建议使用
create table T4(
id int primary key auto_increment,//是mysql独有的
name varchar(20)
);
2.2、域完整性(数据类型,非空和唯一)
练习:
创建带主键,非空约束和唯一约束的表
create table T5(
id int primary key,
name varchar(50) not null,
gender varchar(10) not null,
phone varchar(15) not null unique,
idcard varchar(18) unique
);
2.3、参照完整性(多表设计)
练习:
创建一对多关系的表,使用外键
创建多对多关系的表,使用外键
八、DQL的复杂查询 (重要)
1、连接查询(显示和隐式)
练习:
a、交叉连接:cross join
select * from customer,orders;//隐式交叉连接
select * from customer cross join orders;//显式交叉连接
b、内连接:inner join
select * from customer c,orders o where c.id=o.customer_id;//隐式
select * from customer c inner join orders o on c.id = o.customer_id;//显式
c、外连接:
左外连接:
select * from customer c left outer join orders o on c.id=o.customer_id;
右外连接:
select * from customer c right outer join orders o on c.id=o.customer_id;
2、子查询
练习:
查询“马化腾”的所有订单信息
形式一:多条查询语句
select id from CUSTOMER where name='马化腾';
select * from orders where customer_id = 1;
形式二:subselect(子查询)
select * from orders where customer_id=(select id from CUSTOMER where name='马化腾');
查询订单价格大于100的有哪些客户
select * from customer where id in (select customer_id from orders where price>100);
3、常用聚合函数
练习:
统计一个班级共有多少学生?
select count(*) from STUDENT;
统计数学成绩大于90的学生有多少个?
select count(*) from STUDENT where MATH>90;
统计总分大于250的人数有多少?where可以使用表达式
select count(*) from STUDENT where CHINESE+MATH+ENGLISH>250;
统计一个班级数学总成绩?
select sum(MATH) from STUDENT;
统计一个班级语文、英语、数学各科的总成绩
select sum(CHINESE),sum(ENGLISH),sum(MATH) from STUDENT;
统计一个班级语文、英语、数学的成绩总和
select sum(CHINESE+MATH+ENGLISH) from STUDENT;
统计一个班级语文成绩平均分
select avg(CHINESE) from STUDENT;
select sum(CHINESE)/count(*) from STUDENT;
练习:(分组(报表)查询)
对订单表中商品归类后,显示每一类商品的总价
select product_name,sum(price) from PRODUCT group by product_name;
查询购买了几类商品,并且每类总价大于100的商品
select product_name from PRODUCT group by product_name having sum(price)>100;
4、其他函数
九、数据库的备份与恢复 (练一遍就行)
1、数据库的备份
2、数据库的恢复