数据库:是存储数据的仓库
数据:在计算机中的数据有哪些?
数据库的分类:关系型和非关系型数据库
关系型数据库:二维表格
常见的种类
名称 | 隶属公司 | 端口号 | 应用范围 |
---|---|---|---|
MySQL | Oracle免费 | 3306 | 大中小项目 |
Oracle | Oracle付费 | 1521 | 大型项目 |
SQLServer | 微软付费 | 1433 | 大中小项目 |
postgresql(自学) | 免费 |
非关系型数据库:not noly -->nsql,非二维数据库
常见的种类
MongoDB | 文档型数据库 |
---|---|
Redis | KV(键值对)数据库 |
Neo4j(自学) |
MySQL:是一款关系型数据库,且是Oracle公司的产品,且适用于大中小型项目,且操作比较方便
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PnI2fTOz-1621907612413)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520102002180.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJCs3pCx-1621907612414)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520101839795.png)]
DDL:数据定义语言 :其主要针对数据库层面和表格和视图等层面的操作(了解即可)
DCL:数据库控制语言 :授权、拒绝授权、撤销授权(了解即可)
DML:数据操作语言:select 、insert、update、delete
TCL:数据控制语言 : 设置保存点,回滚,提交(后续有框架)
DML语句的基本讲解:
create database mydatabase;
create database mydatabase default character utf8;指定字符集创建数据库
drop database mydatabase;
create table student(id int , name varchar(20) ,gender varchar(2)); ##创建学生表(字段名称 字段类型(长度))
drop table student;##(删除学生表)
alter table student rename teacher; ##将学生表重命名为老师表
alter table student add column age int; ##在表中添加年龄字段
select * from student; #查询全部所有的信息
select * from student where sname = '张三' ; -- 查询有where条件的信息
select * from student where sname like '张%'; -- 右模糊查询
select * from student where sname like '%三'; -- 左模糊查询
select * from student where sname like '%萧%'; -- 左右都模糊查询
select * from student where sage > 23;
select * from student where sage <> 23; # 不等于,即要么大于要么小于
select * from student where sage = 23;
select * from student where ssex = '男' and sage = '22'
select * from student where ssex = '女' or sage > 30
select * from student where sage not in(20,21,23); # not是非运算符,其意思为非
select * from student where sage between 20 and 30;
select * from student where sage+10 = 31;# 年龄加10等于31的
select t.tname,c.* from teacher t ,course c where t.tno=c.tno;
select st.*, t.tname,c.*,s.score from student st,sc s,course c ,teacher t where st.sno=s.sno and c.cno=s.cno and t.tno=c.tno;
select * from course c left join teacher t on c.tno=t.tno;
select * from course c right join teacher t on c.tno=t.tno;
select * from sc ,( select* from student where sage>=23) linShi where sc.sno=linshi.sno
select * from sc where sc.sno in (select sno from student where sage>20)
select sno
from sc
where sc.score>55-- 成绩55小于其最小的成绩59,所以可以
group by sno-- 按照学号将自己的东西归为一组
having count(sno)>=3-- 对分好组的信息再次做进一步的条件限制
SELECT * FROM sc ORDER BY score DESC
包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录
count(*):-
只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内
count(列名)
忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录
count(1)
1)如果列为主键,count(列名)效率优于count(1)
2)如果列不为主键,count(1)效率优于count(列名)
3)如果表中存在主键,count(主键列名)效率最优
4)如果表中只有一列,则count(*)效率最优
5)如果表有多列,且不存在主键,则count(1)效率优于count(*)
1)SELECT COUNT(1) FROM student WHERE sname IS null
2)SELECT COUNT(*) FROM student WHERE sname IS null
1)select count(’’) from student;-返回表的记录数
2)select count(0) from student;-返回表的记录数
3)select count(null) from student;-返回0
1)当列少的时候尽量用count(*)或者count(主键)
2)当为了提升效率的时候尽量用count(主键),因为主键是默认添加主键索引的,索引查询的时候速度快