SQL基础知识(1)

一、基本查询语句

对学生管理系统中的字段进行基本的查询

1、查询所有字段

语法:select * from 表名
select * from student

2、查询指定字段

语法:select 字段名 from 表名
select name from student

3、使用as给字段起别名

语法:select 字段名 as 别名 from 表名
select name as 姓名 from student

4、使用as给表起别名

语法:select 字段名 from 表名 as 别名
select name from student as st

5、清除重复行

语法:select distinct 字段名 from 表名
select distinct age from student

二、条件查询语句

1、where

语法:select 字段名 from 表名 where 条件
查询年龄为18岁的人名
select name from student where age = 18

2、比较运算符(> < = !=)

select name from student where age != 18

3、逻辑运算符(and、or、not)

select name from student where age=18 and not gender=‘男’

4、模糊查询

like 语法:select 字段名1 from 表名 where 字段名2 like ’ like条件’
1)、%替换零个或多个
–例:查询以小开头的信息–
select * from student where name like ‘小%’
2)、下划线是一个占位符
–例:查询以小开头名字为两个字的学生信息–
select * from student where name like ‘小_’
–例:查询两个字以上的学生信息–
select * from student where name like
not like语法:select 字段名1 from 表名 where 字段名2 not like ’ like条件(上面两个例子适用)’
rlike:是正则匹配方式
1)、.单个字符
2)、*0个或者多个前一个字符
3)、^以…开头
4)、$以…结尾
5)、[abc]取一个
6)、{n}前边字符匹配n次

三、范围查询语句

1、in在一个非连续的范围内(not in)

–例:查询id号在1,3,8范围内的学生的姓名和年龄
select name,age from student where id in{1,3,8}
not in查询不在一个非连续的范围内

2、between…and…在什么到什么范围内,连续查询(not between…and…)

–例:查询年龄在18-20岁之间学生的姓名
select name from student where age between 18 and 20

3、isnull判断空(is not null)

–例:查询年龄为空的学生的姓名
select name from student where age is null

四、排序查询语句

语法:order by 字段 排列方式
——asc 从小到大 正序
——desc 从大到小 倒序
——在排列过程中遇到相同值时会按照主键进行排序

1、单个字段

–例:将年龄在18-34岁之间的男性按照年龄正序排序
select * from student where age between 18 and 34 and gender = ‘男’ order by age asc

2、多个字段

–例:按照年龄正序排序,并按照身高倒序排列
select * from student order by age asc,height desc

五、聚合函数

——count 求总数
——例:select count(name) from student
——max 求最大值
——min 求最小值
——sum 求和
——avg 求平均值
——round 四舍五入
——例:select round(avg(age),2) from student

六、分组查询

1、分组中的特殊情形

在这里插入图片描述
执行语句:select * from table group by name 语句报错
由于该表分组后拿到的虚拟表,name字段每个单元格只有一个值,而id和number字段每个单元格存在多个值,而关系数据库就是基于关系的单元格不允许有多个值,所以select * 会报错
——应用:如果出现过滤条件,可以先使用where 再group by或者 先group by再having

1、get_concat()

–在mysql中,可以使用group_concat 把分组(虚拟表)各个字段显示出来
——例:按照性别进行分组
select gender,group_concat(name,age,id) from table group by gender

2、where、having

–where是对原表数据进行判断
–having 表示对分组进行条件判断,是进行分组之后再判断
——例:select gender,group_concat(name) from student group by gender having avg(age)>8

3、多字段分组

–就是把多个字段看成一个整体
——(1,'女’)(2,‘男’)…看成整体
在这里插入图片描述

4、group by和order by同时使用

——例子:明确使用顺序
select gender,group_concat(name,age,height) from student group by gender having avg(age)>8 order by count(height)

七、分页查询

–limit start,count–直接限制查询出来的个数
——start 是从第几条开始默认是0 count时返回几条数据
——带一个参数的limit 指定从查询结果的首行开始,唯一的参数表示返回的行数,如limit n和limit 0,n等价
——带两个参数的limit可以返回从任何一个位置开始的指定行数
——例:带一个参数:查看年龄小于18岁的五条数据
在这里插入图片描述
——例:带两个参数
在这里插入图片描述
——注意:limit 必须放在最后
——顺序:where–>order by–>limit

八、连接查询

——即多表之间进行关联查询

1、内连接,即取交集

——inner join…on on意味着条件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128111945870.png
——using简化 join on
在这里插入图片描述

2、外连接

——包括左连接,右连接,全连接
——左连接
——left join … on on意味着条件
——以左表为基准查询信息,没有的默认为 null
——left 是指 left 左边的数据表
——以student为左表进行查询
在这里插入图片描述
——右连接
——right join … on on意味着条件
在这里插入图片描述
——全连接
——union 实现全连接 select 语句必须有相同数量的列,并且数据类型要相似
——union 只保留唯一值
在这里插入图片描述
——union all全部保留
在这里插入图片描述
——交叉连接
——cross join 也称笛卡尔积
——不带where条件子句,他将返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积
其实就是,左表所有的数据都和右表匹配一遍!

——自关联
在这里插入图片描述

九、子查询

子查询其实就是一个select中嵌套一个select
——查询学生表中年龄最大的学生的姓名
在这里插入图片描述
——查询学生的姓名的id在学生表中的学生的姓名
——查询出年龄等于最大值并且性别为男的学生的姓名
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值