1.数据的查询
首先看一下表的内容

1.1 select count(1) from 表名; 显示出表中有多少个数据

1.2 group by 关键字分组
select sex from person group by sex 按照年龄来分组

select sex as "性别",count(1) as "人数" from person group by sex;

模糊查询,大量的搜索的时候使用 like 后面跟 %或者 _
语法格式
select * from person where 字段 like %;
“小_”这个_是一个占位符,只要前面一个字大后面这个字就会模糊匹配。
% 不管你有几个字符,都可以匹配到
select * from person where name like "小%";

分组是用来统计的,一定要记住一般和count(1)一块使用
按照性别进行分组,找出来性别个数大于2 的性别
分组以后,还有条件,这个是时候用having
select sex,count(1) from person group by sex having count(1) > 2;

2.数据约束(建表时候)
2.1默认值和非空
default 默认值 表示当不传入数据的时候,这个数据就为默认值的数据
not null 表示不为空,插入数据的时候必须要加的

2.2唯一
unique关键字

2.3主键(唯一和非空的集合)
primary key
在以后设计表的时候,用于标识唯一数据表的一个字段,说明这个字段和特殊,很有用。
为了找到这行数据而存在的,在数据库设计中,一般会使用一个和业务逻辑无关系的字段,设置为主键。

2.4自增长
auto_increment
3.外键的约束
假如有学生的表

可以看到有许多学生在同一所学校,造成了一定的数据冗余,不利于查找
这时候我们可以再设置一个表sch专门放置学校的数据

用这些学校的编号可以替代学生表中学校的名字了,不过咱们需要在建表的时候将他们进行关联,所以最好是再建一张表,建好以后可以看到关联上了至于(怎么关联的可以往下看级联操作),不过可以发现当我们需要删除一个学校的时候,必须把在这个学校的学生都删除了,这个学校才可以删除掉,十分麻烦,也不符合我们日常生活的逻辑
如果添加了外键的约束,会有以下特征:
#1.先添加主表【部门表】,再添加从表【员工表】
#2.先删除从表【员工表】,再删除主表【部门表】
#3.先修改从表【员工表】,再修改主表【部门表】
#4.查询和外键约束没有半毛线关系。
所以就出现了级联操作
首先创建学校表
create table sch (
id int primary key auto_increment,
sch_name varchar(32) not null );
在创建学生表
create table stu ( //创建学生表
id int primary key auto_increment, //设置主键
stu_name varchar(32) not null, // 设置学生名字
schID int not null, 设置学校id
regTime timestamp default current_timestamp, 设置时间戳
constraint fk_stu_sch foreign key(schID) references sch(id) 设置外键关联
on delete cascade 设置删除的级联操作
on update cascade 设置修改的级联操作
);
在学校的表中插入数据

在学生表中插入数据

这时候修改学校表中的幸福路小学(编号为3)编号改为4,再查看学生表中是否编号也改为4了

接着咱们删除 东风路小学(编号为2),再查看学生表中的数据

可以看到编号为2的也都删除了
4.联合查询
select a.id,a.stu_name,b.sch_name,a.regTime
from stu a,sch b //起别名 stu 为a sch为b
where a.schID = b.id; //约束条件 对应数据

也可以同时对字段进行起别名

4.1内连接查询
语法格式:select 表名.字段 from 表名 inner join 表名 on 约束条件;

4.2外连接查询
4.2.1左外连接查询
左外连接
语法格式:select * from 表名1 left outer join 表名2 on 约束条件
左边的表(表1)要全部显示,右边表去匹配左边表,如果没有匹配到就显示为null
左外连接,以sch这个表为主,如果左边表去匹配右边表,
但是右边表里面没有左边表的约束的数据,那么右边表补上null

4.2.2右外连接查询
右外连接
语法格式:select * from 表名1 right outer join 表名2 on 约束条件
右边的表(表2)要全部显示,左边表去匹配右边表,如果没有匹配到就显示为null

4.3一对多或者多对一查询
一个学生对应着一个学校 这个是一对一的关系

一个学校对应着多个学生 这就是一对多的关系

4.4多对多的查询
课程和学生的关系,多个学生可以选择多个课程选修
首先创建三个表 学生表 student 课程表 class 中介表 s_c
接着给这三个表中插入数据
插入后分别为
student表:

class表:

s_c表:

接着咱们可以通过内连接进行查询
(1)查询所有的学生选择的课程

(2)查询张三选择的课程

(3)查询选择音乐鉴赏的同学

这可一简单理解为三张表进行关联,假如四张表进行关联查询的话和这个思想是一样的,一步一步往下查,把握住规律,无论怎么扩展都可以写出来
4.5sql权限管理
一个项目也有很多数据表,但是开发的时候分模块开发,
一个程序员开发的时候只需要用到表有三张,项目经理就给你分配三个权限,你只能对这三张表进行增删改查。甚至有的人,不会给你分配增删改的权限。为了保证数据的安全性!!
4.5.1创建一个用户
create user 用户名 identified by 密码
4.5.2进行授权
grant all on 数据库的名字.表的名字 to 用户名
all :写select 或者 update insert delete 都可以的
all的话就是所有的增删改查的权限都给你



使用创建好的用户名和密码进行登录,并查看数据库和表格,可以看到只有root用户给你权限的数据库和此数据库中的三张表,如果想要全部表的权限可以 (数据库名字.*)

4.5.3删除用户


本文详细介绍了SQL中的数据查询技巧,包括数据计数、分组查询、模糊查询及分组条件筛选。同时,讲解了数据约束的概念,如默认值、非空、唯一性、主键和自增长。此外,还探讨了外键约束及其级联操作,以及在实际场景中的应用。最后,讨论了SQL的联合查询,包括内连接、外连接和多对多查询的实现,并简要提及了SQL权限管理。

1689

被折叠的 条评论
为什么被折叠?



