数据库学习
数据库
数据库:存储、维护和管理数据的集合。
数据库服务器、数据库和表的关系如图所示:
SQL(结构化查询语言)
1.1 SQL语句
-
创建数据库
create database my_db1 character set utf8;
-
创建表
create table tb_user(
id int primary key,
name varchar(15)
)character set utf8; -
添加数据
insert into tb_user1(id,name) values(1,'张三');
- 列名与列值得类型、个数、顺序要意义对应
- 可以把列名当做java中的形参,把列值当做实参
- 值不要超出定义的长度
- 如果插入空值,使用null
- 插入的日期和字符一样,都使用引号括起来
- int类型的值不能使用引号括起来,字符串相关的类型才可以,引号是单引号
-
修改 表中数据
update tb_user1 set name='王婆',address='南昌' where id=1;
-
删除表中数据
delete from tb_user where id=1;
delete * from tb_user where id=1;错误语法
-
查询语句
-
查询所有的列
select * from tb_user1;
-
查询指定列
select id,name from tb_user1;
-
按条件查询,就是在查询时给出where字句,在where字句中可以使用如下运算符及关键字:
-
= != <> < <= > >=
-
between...and..(在什么范围之前)
/查询年龄在18-20之间的学生记录/
select * from tb_user where age>=18 and age<=20; -
in(set);(在什么里面)
/查询学号是1001或者是1002或者是1003的记录/
select * from tb_user where id in (1001,1002,1003);
-
is null; is not null
/查询姓名为null的记录/
select * from tb_user where name is null; -
and (与)
-
or;(或)
-
not;(非)
-
-
-
取别名
/取别名/
select id as '编号',name as '姓名',age as '年龄',gender as '性别',department as '部门' from tb_user
/简洁版/
select id '编号',name '姓名',age '年龄',gender '性别',department '部门' from tb_user/给表取别名/
select a.name from tb_user a where a.name='关羽'; -
去重查询
select distinct name from tb_user;
-
排序
/排序,默认升序,ASC升序,DESC降序/
SELECT * from tb_user order by salary asc;
SELECT * from tb_user order by salary desc; -
聚合函数
对查询的结果进行统计计算
-
分组(group by)
单独使用group by进行分组,数据只显示每一组的一个条数据
注意:在group by 后面出现的字段和select仅挨着的保持一致
/查询工资大于1500的部门名称以及人数/
select department,group_concat(name),count(*) from tb_user where salary>1500 group by department;/查询部门总工资大于9000的部门的名称和部门的人员/
select department as '部门名称',
group_concat(name) as '分组的名单',
sum(salary) as '工资总和' from tb_user group by department having sum(salary)>9000;where和having的区别:
select查询书写顺序
-
模糊查询
根据指定的关键字进行查询,使用like关键后跟通配符进行查询
通配符:
- ‘_’ 任意一个字符
- ‘%’ 任意 0-n个字符
select* from tb_user where salary like '%9%';
-
分页查询(limit)
limit用来限定查询结果的起始行,以及总行数。
- select * from emp limit 0, 5;
1.2 数据完整性
1.2.1. 实体完整性
-
主键约束
PRIMARY KEY :不允许重复,非空,每个表中要有一个主键
注意:VARCHAR()类型的主键可以为空,不能重复
创建方式:
- -- 主键1
create table tb_user2(
id int primary key,
name varchar(15)
)character set utf8; - -- 主键2
create table tb_user2(
id int,
name varchar(15),
primary key(id)
)character set utf8; - -- 主键3
create table tb_user2(
id int,
name varchar(15)
)character set utf8;
alter table tb_user2 add constraint primary key(id);
- -- 主键1
-
唯一约束
UNIQUE:数据不可以重复,可以是null值
格式:create table tb_user2(
id int primary key,
name varchar(15) unique
)character set utf8; -
自动增长约束
AUTO_INCREMENT:指定列的数据自动增长
注意:一般配合主键约束一起使用
格式:
create table tb_user2(
id int primary key auto_increment,
name varchar(15) unique
)character set utf8;
1.2.2. 域完整性
限制单元格的数据正确,不对照此列的其它单元格比较,域代表当前单元格
-
数据类型
-
非空约束
NOT NULL
-
默认值约束
DEFAULT
格式:name varchar(15) default '男'
1.2.3. 参照完整性(引用完整性)
-
主外键关联
格式:
alter table tb_student1 add constraint stu_user_fk foreign key(sid) references tb_user2(id);
1.3.表的关系
- 一对一关系
- 一对多关系
- 多对多关系
1.3.1. 连表查询
-
内连接
-
select * from tb_student,tb_score where tb_student.sid=tb_score.id;
简写写法(99查询法)
-
select * from tb_student inner join tb_score on tb_student.sid=tb_score.id
标准写法
-
-
外连接
- 左外连接
- select * from tb_student left join tb_score on tb_student.sid=tb_score.id
- 右外连接
- select * from tb_student right join tb_score on tb_student.sid=tb_score.id
- 左外连接
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步