目录
基本概念
数据库(Database)
数据库管理系统(DBMS)
数据库基本数据类型
数据库操作
数据库操作
1、查询数据库
2、创建数据库
3、使用数据库
4、删除数据库
表
1、创建表
2、察看表结构
3、删除表
4 、插入记录
5 、查找
6、指定字段起别名
7、去重
8、排序(对临时表的排序)
9、条件查询
10、分页查询
11、添加字段
12、修改字段数据类型
13、删除字段
约束
实体之间的关系
一对一
一对多
多对多
聚合查询
分组查询
联合查询
内连接
外连接
自连接
子查询
标量子查询:子查询的结果为单值
列子查询:子查询的结果为单列
行子查询:子查询的结果为单行
表子查询:子查询的结果为多行多列
合并查询 ---union,union all
mysql的内置函数
字符串函数
数值函数
日期函数
流程控制函数
数据库是存储各种数据的软件:一个购物网站,商品的各种信息,对应评论……这些各种信息就是数据,数据库用于存储这些大量的数据。
简称DB,是长期存储在计算机内,有组织的,可共享的大量数据的集合。
基本特征
数据库的信息存储:
数据库的数据存储在硬盘上存储,也就是存放在外存,数据断电后不会消失
操作和管理数据库的软件
- 关系型数据库:建立在关系模型的基础上,由多张相互联系的二维表所构成
什么是二维表:
通过表格来记录信息,一个表存储学生信息,其中存储了学号,又可以通过学号来查找对应学生的成绩,关系型数据库就是由多张相互联系的二维表所构成。
常用的关系型数据库软件:
- 非关系型数据库(NoSQL):例如键值Key-Value存储数据库,列存储数据库,文档型数据库,图形Graph数据库 ……。一般不借用SQL语言实现
- SQL-操作关系型数据库的语言
例如:89.8,就是decimal(3,1),3表示有效数字的个数,1表示小数位数
char (1)表示字符串输入1个字符,长度不可变
varchar(10) ,表示字符串最多输入10个字符
varchar和char的区别:varchar通过计算输入长度来判断是否超过指定长度,长度可变
1、查询数据库
2、创建数据库
字符集:使用数字来表示汉字,从而形成的对应关系表格,例如utf-8
数据库也可使用utf8mb4,比utf-8表示的内容多一些
3、使用数据库
4、删除数据库
1、创建表
create table 表名(列表1,列表2……)
2、察看表结构
desc 表名
3、删除表
drop table [表名]
4 、插入记录
insert (into) 表名 values(……)
into 可省略
插入日期:两种方式,字符串插入和借助now()函数
指定某列插入
多行插入
一个表的查找内容插入另外一个表
insert 目标表 select (来源表的列) from 来源表
5 、查找
全列查找
select * from 表名
数据库存放在硬盘中,也就是在外存,但是 select得到的表格是在内存中,所以select得到的是临时表,打印后就消失了,不会影响硬盘中的数据。
指定列查找
select 列名 from 表名
指定列为表达式(列和列的计算)
6、指定字段起别名
select 列名 as 新的别名 from 表名
7、去重
select distinct 列名 from 表名
8、排序(对临时表的排序)
select 列名 from 表名 order by 列名 asc/desc
asc表示升序,desc表示降序
多个列排列
9、条件查询
=表示相等,但是null=null的结果是null,结果假
<=>表示相等,null<=>null的结果是null,结果真
select 列名 from 表名 where 条件
and的优先级高于or
- 小于
- and
- in
- like
李%: 表示name必须是“李……”的格式,其中……可以是空,类似于李a,李an这种形式
%李%:表示name必须是“……李……”的格式,其中……可以是空(必须包含一个“李”字)
_ 李% :第二个字是李,不要求字数
_ 李 :第二个字是李,且只会有两个字
_ _李% :第三个字是李,不要求字数
_ _李 :第三个字是李,且只会有三个字
李_ :只会有两个字,第一个字是李
李_% :第一个字是李,不要求字数
- null空值比较
10、分页查询
数据过多,一页显示不全就会使用分页查询
11、添加字段
12、修改字段数据类型
13、删除字段
14、修改内容
例如:将总成绩前三名的数学成绩+10分
修改所有人的数学成绩*2
15、删除数据
delete from 表名 where……
- 查询用户
- 创建用户
- 修改用户密码
- 删除用户
创建好的用户没有权限,需要给定权限
- 查询权限
- 授予权限
- 撤回权限
对数据库数据的限制性要求
- not null :数据不为空
- unique:数据唯一
id 被unique约束,那么赋值时已经出现过的id就不能继续插入
- default:设置默认值
- primary key:主键约束(完整性约束),not null和unique的结合
任何一张表有且只有一个主键
主键的用法:字段唯一且不为空,可以实现序号增加(1,2,3……),称之为自增主键
mysql中设置了自增主键
- foreign key:外键约束
成绩表依赖于信息表,两张表的学号相关联,借助学号将两个表进行关联:
父表中关联的字段设置为主键约束,子表中关联的字段设置外键约束
子表插入信息:
成绩表依赖于信息表,子表中依赖于父表的信息必须在父表存在
例如:成绩表中插入学号99999,父表中不存在这个学号,就会出错
父表删除信息:
成绩表依赖于信息表,子表中依赖于父表的信息必须在父表存在,所以父表不能删除/修改已经被子表使用的信息
如何正确对外键约束进行删除或者更新
- 默认使用no action 或者restrict方式
- cascade方式
在创建表时增设条件
一个人只有一个成绩,一个成绩对应了一个人
创建方式:
一个学生只能有一个班级,一个班级有多个学生
创建方式
一个学生可以选多门课,一个课可以有多个学生
创建方式:
将表的行相关联
常见的聚合函数:
1、 count函数
null不计算
2、max---找到行的最大值
null不计算
3、min---某一行的最小值
null不计算
4、sum---行求和
null不计算
注意: 字符串类型 不能求和
5、avg---平均值
求和中null不计算,行数null也不计算
分组之前的结果进行筛选,需要使用where; 分组之后的结果进行筛选,需要使用having
分组查询一般和聚合函数相关联
1、 按照性别分组,查看男,女各有多少人
分析:按照性别分组,会划分为两组:
对于分组查询,查找除了聚合函数以外的字段没有任何实际意义,例如打印姓名,只会分别打印两个组的第一个人的信息,没有任何实际意义
2、-- 按照性别分组,查看平均年龄
3、-- 年龄小于50的人中,按照性别分组,查看在西安的人数
4、年龄小于50的人中,按照地址分组,获取所在地址处员工人数超过1的地址
将两个表结合起来---使用笛卡尔积
创建结果:新表的行数=两表行数乘积,新表的列数=两表列数之和
select (列) from 第一个表名,第二个表名 where 条件
或 select (列) from 第一个表名 join 第二个表名 on 条件
但是这些内容有的是并不匹配的
增设where条件筛选正确信息
创建表:
1、查询java101所有学生选的课程
java101:在班级表里,学生课程在学生选课表里,两个表可以通过学生表连接
或者:使用join on
2、统计男生选了多少门课,女生选了多少门课
3、统计每一个人选了多少门课
内连接:取两个表的公共部分
相当于取两个集合的交集:取绿色部分
还有一种内连接的写法:使用join on
分为左外连接和右外连接
左外连接:保留全部左边的信息,对于左边独有的信息,右边自动补null
右外连接:保留全部右边的信息
自连接可以是内连接也可以是外连接
一张表和自己连接
内连接:
左外连接:
标量子查询:子查询的结果为单值
列子查询:子查询的结果为单列
行子查询:子查询的结果为单行
表子查询:子查询的结果为多行多列
union :拼接出来的表,不会重复某一行
union all:直接拼接,不去重
select 函数
字符串函数
select concat("hello","world");
select upper("Hello");
select lpad("hello",9,"_");-- 使用_左填充字符串hello,填充完之后一个是9个长度
select trim(" hell o ");-- 去除前后空格
select substring("hello",1,3);
数值函数
生成六位随机验证码:
日期函数
流程控制函数
对于成绩表操作
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/82580.html