失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL数据库高级SQL查询语句(单表查询 多表联合查询)

MySQL数据库高级SQL查询语句(单表查询 多表联合查询)

时间:2019-05-22 14:19:24

相关推荐

MySQL数据库高级SQL查询语句(单表查询 多表联合查询)

目录

SQL查询语句基础查询条件查询模糊查询字段控制查询排序聚合函数分组查询having子句limit分页查询多表连接查询

SQL查询语句

数据查询语言。

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。

一些简单语法:

select 列名-------->要查询的列名称from 表名--------->要查询的表名称where 条件-------->行条件(要查询的限制条件)group by 分组列-------->对结果分组having 分组条件-------->分组后的行条件(分组以后的查询限制条件)order by 排序列-------->对结果分组limit 起始行,行数-------->结果限定(从第几行开始,查几行)。

下面来介绍查询语言的具体用法。

案例及数据库基本操作接上一篇博文:/weixin_53186633/article/details/119618990

基础查询

查询表中记录:

select 列名1,列名2,... from 表名;

例如:查询学生的学号及姓名:

select sid,sname from student;

如果要查询表中所有的记录的话,可以使用通配符‘*’来代替所有列。

select * from 表名;

例如:查询所有学生信息:

select * from student;

条件查询

select 列1,列2... from 表名 where 条件;

在where条件语句中可以使用如下运算符:

=(是)、!=(不是)、<>、<、<=、>、>=between...and...(包含端点处的值)in(集合):在集合范围内is NULL:是否是空值and:与or:或not:取反

例如:

--查询年龄小于20的女生。select * from student where sage<20 and sgender='女'; --1004 mary--查询年龄大于等于17小于等于20的学生。select * from student where sage between 17 and 20;--查询姓名不为null的学生记录。select * from student where NOT sname IS NULL;

模糊查询

select 列 from 表名 where 某列 like 条件;

其中,关于条件,SQL匹配了两种匹配方式:

(1)%:表示任意0个或多个字符

(2)_:表示任意单个字符

例如:

--查询姓名由五个字母构成,且第五个字母为e的学生信息select * from student where sname like '____e'; --alice--查询姓名以z开头的学生信息。select * from student where sname like 'z%'; --zhangSan

字段控制查询

(1)去重:使用DISTINCT

(2)将Null转换为指定的值:IFNULL(列名,值)

(3)给列添加别名:列名 as 别名

例如:

创建雇员表emp:

在查询员工工资sal时,会出现重复数据,去掉重复记录:

select DISTINCT sal from emp;

计算雇员薪资sal和佣金comm之和,并将和起名为total:

select *,sal+IFNULL(comm,0) as total from emp;

排序

对查询结果进行排序

select 列 from 表名 [where 条件] order by 列名 asc/desc;

其中,ASC表示按照升序排列,DESC表示按照降序排列。

例如:查询所有学生信息,并将学生信息按照年龄降序排列:

select * from student order by sage DESC;

聚合函数

(1)COUNT(列名):统计指定列不为NULL的记录行数;

(2)max/min:查询列的最大/最小值

(3)sum(列名):求和

(4)avg(列名):平均值

例如:

查询emp表中拥有佣金的人数:

select COUNT(comm) cnt from emp; --3

统计员工平均工资:

select AVG(sal) from emp;

分组查询

分组查询使用关键字group by

例如:查询每个部门的部门编号以及每个部门工资大于1500的人数。

select deptno,count(*) from empwhere sal>1500GROUP BY deptno;

having子句

使用having子句对分组结果进行筛选。

where与having的区别:

where是对分组前的数据进行筛选。

having是对分组后的数据进行筛选,必须和group by结合使用。

limit分页查询

分页查询,用来限定查询结果的起始行和查询行数是MySQL独有的。

select 列 from 表名 [where 条件] limit 起始行索引,查询的行数

例如:查询员工表前三行记录:

select * from emp LIMIT 0,3;

多表连接查询

(1)内连接:选出两张表中互相匹配的记录(两张表根据数据相同的字段,将两张表连接起来)

(2)外连接:包括左外连接和右外连接

左外连接:又称为左连接,查询结果中包含左边表中所有的记录,右边表中没有匹配的记录显示为NULL。

select 列 from 左表 left join 右表 on 条件;

右外连接:又称为右连接,包含右边表中所有的记录,左边表中没有匹配的记录显示为NULL。

select 列 from 左表 right join 右边 on 条件;

如果觉得《MySQL数据库高级SQL查询语句(单表查询 多表联合查询)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。