目录

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


SQL查询语句

数据查询语言。

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

一些简单语法:

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

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

案例及数据库基本操作接上一篇博文:

基础查询

查询表中记录:

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

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

select sid,sname from student;

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

select * from 表名;

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

select * from student;

mysql sql 插入多行查询结果 mysql dual 查询多行_表名

条件查询

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

mysql sql 插入多行查询结果 mysql dual 查询多行_sql_02


mysql sql 插入多行查询结果 mysql dual 查询多行_sql_03

字段控制查询

(1)去重:使用DISTINCT (2)将Null转换为指定的值:IFNULL(列名,值) (3)给列添加别名:列名 as 别名

例如:

创建雇员表emp:

mysql sql 插入多行查询结果 mysql dual 查询多行_表名_04


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

select DISTINCT sal from emp;

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

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

mysql sql 插入多行查询结果 mysql dual 查询多行_sql_05

排序

对查询结果进行排序

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 emp
where sal>1500
GROUP 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 条件;