老师的复习回顾

1: 数据库概述
1.1.什么是数据库
1.2.什么是关系型数据库
底层以二维表的形式保存数据的库

1.3.数据库相关名词解释
数据库服务器: 将数据库软件(比如mysql)安装在计算机上,这台计算机就可以作为数据库服务器使用
一个数据库服务器中可以创建多个数据库
数据库: 每一个数据库都是存储和管理数据的仓库
比如一个网站中的所有数据库就可以存放在一个数据库中
表: 一个数据库中可以创建多张表, 每张表用于存放一类数据
emp表: 员工信息
dept表: 部门信息
student表: 学生信息
表记录: 用于存放某一个具体的数据

1.4.SQL语句
用于操作所有关系型数据库的通用的语言.
1.5.通过cmd连接mysql服务器
将cmd窗口当做是一个客户端, 首先客户端先连接上mysql服务器之后, 再通过客户端发送SQL语句去操作服务器中的数据
连接mysql:
mysql -uroot -proot
mysql -uroot -p 回车之后再输入密码
mysql -uroot -p -h主机名或ip地址 -P端口

退出连接:
	quit
	exit

2: 数据库及表的操作
2.1.数据库操作
查看所有数据库: show databases;
创建一个新的数据库: create database mydb1 charset utf8;
删除数据库(如果存在): drop database if exists mydb1;

2.2.数据表操作
查看所有的表:
首先进入到某一个库: use mydb1;
查询mydb1中的所有表: show tables;
创建一个学生表:
create table stu(
id int,
name varchar(50),
gender varchar(10),
birthday date,
score double
);
删除学生表: drop table stu;

查看表结构: desc stu;

3: 新增/修改/删除表记录
新增表记录:
insert into stu(id,name,gender,birthday,score)
values(1,‘张飞’,‘男’,‘2000-1-1’,89);
insert into stu values(2,‘赵云’,‘男’,‘2001-12-11’,75);
修改表记录:
update stu set score=score+10;
update stu set score=80 where id=1;
删除表记录:
delete from stu; – 删除stu表中的所有记录
delete from stu where id>3; – 删除复合条件的记录

4: 查询表记录(单表查询)
4.1.基础查询
select name, sal, bonus from emp;
select distinct bonus from emp; – distinct用于剔除重复记录

4.2.where子句查询
select name, sal from emp where sal>3000;
select name, sal from emp where sal>=3000;
select name, sal from emp where sal<4000;
select name, sal from emp where sal<=4000;

select name, sal from emp where sal<>5000;
select name, sal from emp where sal!=5000;

select name, sal from emp where sal>=3000 and sal<=4500;
select name, sal from emp where sal between 3000 and 4500;

4.5: 模糊查询
Like关键实现模糊查询
%: 可以通配表示0个或多个任意字符
_: 可以通配表示一个任意字符

select name from stu where name='刘';
select name from stu where name like '刘'; -- 和上面的语句效果相同

select name from stu where name like '刘%'; -- 查询以刘开头的
select name from stu where name like '刘_'; -- 查询以刘开头的,并且名字是两个字的记录

select name from stu where name like '%涛%'; -- 查询姓名中包含'涛'字的员工;

4.6: 多行函数查询
count(*|列名) – 统计查询结果有多少行记录
max(列) – 求某一列中所有值的最大值
min(列) – 求某一列中所有值的最小值
sum(列) – 求某一列中所有值的和
avg(列) – 求某一列中所有值的平均值

使用多行函数时,表记录有没有分组查询的结果有很大区别:
1)select count(*) from emp;
如果没有分组, 所有的查询结果默认是一个组,统计时,一个组就统计出一个结果

2)select count(*) from emp group by job;
如果有分组, 有多少个组就统计出多少个结果,按照职位分为可以分为3个组,此时可count(*)会分别对这三个组进行统计,因此返回三个组的统计结果。

4.7: 分组查询
根据职业对员工进行分组:
select * from emp group by job;
根据部门对员工进行分组:
select * from emp group by dept;

根据部分对员工进行分组,再统计每个组的薪资之和:
	select sum(sal) from emp group by dept;

4.7: 排序查询
order by 要排序的列
asc: 默认的, 升序, 从低到高
desc: 降序, 从高到低
select * from emp order by sal; – 按照薪资升序排序
select * from emp order by sal asc; – 按照薪资升序排序
select * from emp order by bonus desc; – 按照奖金降序排序
select * from emp order by sal+ifnull(bonus,0) desc; – 按照总薪资降序排序

4.8: 分页查询
limit (页码-1)*每页显示的记录数, 每页显示的记录数

每页显示4条,分页查询emp表中的所有记录
select * from emp limit 0, 4;
select * from emp limit 4, 4;
select * from emp limit 8, 4;
select * from emp limit 12, 4;
...

4.9: 其他函数查询
curdate() – 返回一个年月日格式的日期
curtime() – 返回一个时分秒格式的时间
sysdate() – 返回一个年月日 时分秒格式的时期加时间
now() – 返回一个年月日 时分秒格式的时期加时间

year(),month(),day(),hour(),minute(),second()
-- 上面的函数分别用于获取年月日时分秒中的年份/月份/天数/小时/分钟/秒值

concat(s1,s2,s3...sn) 
-- 将传入的多个字符串连接在一起
concat_ws(x,s1,s2,s3...sn) 
-- 将传入的多个字符串连接在一起,每两个连接时会通过x作为分隔符进行连接

5: mysql的数据类型
5.1: 数值类型
在mysql中有很多数值类型
tinyint smallint int bigint float double decimal

5.2: 字符串类型
char和varchar的区别:
1)这两个都是字符串类型, char类型是定长字符串, 范围是不能超过255个字符
varchar类型是变长字符串, 范围是不能超过65535个字节
需要注意的是, char(n) varchar(n) 中的n都表示字符数
2)char类型中如果存入的数据小于最大字符数n, 剩余的空间会使用空格填充, 所以char类型可能会造成空间浪费
因此char类型适合存储长度固定的数据(比如学生编号,员工编号,身份证号等), 这样既不会浪费空间, 存储数据的效率还比varchar略高一些!
3)varchar类型中如果存入的数据小于最大字符数n, 剩余的空间还可以留给别的数据使用, 所以varchar类型不会造成空间浪费.
因此varchar类型适合存储长度不固定的数据(用户名/密码/姓名/自我描述等…), 这样虽然存储效率不如char类型, 但至少不会浪费空间!

5.3: 日期类型
date: 日期,格式 年月日
time: 时间,格式 时分秒
datetime: 日期+时间,格式 年月日 时分秒

6: mysql的字段约束
1.主键约束(primary key)
如果一个列添加了主键约束, 那么这个列中的值就不能为空, 且不能重复
除此之外, 主键的列可以唯一的表示一行表记录(可以作为一行表记录的唯一标识, 这就和身份证类似, 身份证可以作为人的唯一标识)

	drop table if exists stu; -- 删除stu表
	create table stu( -- 重新创建stu表时,指定主键自增
	    id int,
	    name varchar(20),
	    gender char(1),
	    birthday date
	);
	desc stu; -- 查看表结构

	-- 上面的stu表没有添加主键及主键自增,现在通过修改表的语句来进行添加
	alter table stu modify id int primary key auto_increment;
	-- 如果要删除主键及自增, 先删除自增
	alter table stu modify id int; -- 这是删除自增
	-- 再删除主键约束
	alter table stu drop primary key; -- 这是删除主键约束

2.非空约束
	如果一个列添加了非空约束, 那么这个列的值就不能是空的(null), 但可以重复
	create table stu( -- 重新创建stu表时,指定主键自增
	    gender varchar(10) not null,
	);

	-- 如果建表时每天添加非空约束, 也可以在建表之后再添加!
	alter table stu modify gender char(1) not null;

3.唯一约束(unique)
	如果一个列添加了唯一约束, 那么这个列的值就是唯一的(也是这个列的值不能重复),但可以为空
	create table stu(
		email varchar(20) unique,
	);

	create table user(
		username varchar(20) unique not null,
	);

7: 外键约束
外键: 用来通知数据库 两张表数据之间具有对应关系的列
1、如何保存两张表(dept、emp)之间的关系
通常我们会在多的一方(emp)添加一个列(dept_id)来保存一的一方(dept)的主键(id)
以此来保存两张表数据之间的对应关系

2、是否需要将dept_id列添加为外键
1)如果不将dept_id列添加为外键
	不添加为外键, 就等同于不告诉数据 dept和emp表具有关系, 数据也不会帮我们去维护这个关系
	
2)如果将dept_id列添加为外键
	就等同于告诉数据库 dept和emp表具有关系, 数据库会帮我们去维护这层关系!

8: 表关系
一对多(多对一):
一对一:
多对多:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值