mysql的简单命令(2)

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

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删除用户

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇智波波奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值