Sql select where

Sql查询

以下例子均以这个表emp为例:
http://blog.ps-ef.cn/usr/uploads/2020/03/898686646.jpg

基础查询:

SELECT语句用于从表中选取数据,结果被存储在一个表中;
语法:SELECT 列名称/ FROM 表名称;(为通配符,表示查询所有列)

    查询表中所有员工的信息:
    SELECT * FROM emp;    //表示查询所有列
    SELECT NAME,JOB FROM emp;    //表示查询指定列

如果查询的结果中,存在大量重复的记录,如何剔除重复记录,只保留一条;

    在select之后、列名之前,使用DISTINCT 剔除重复的记录:
    select distinct dept,job from emp;

Where子查询:

WHERE子句查询语法:SELECT 列名称 | * FROM 表名称 WHERE 列 运算符 值

        --查询emp表中薪资大于3000的所有员工,显示员工姓名、薪资:
        select name,sal from emp where sal>3000;
        --查询emp表中总薪资(薪资+奖金)大于3500的所有员工,显示员工姓名、总薪资:
        select name,sal+bonus from emp where sal+bonud > 3500;
        --ifnull(列, 值)函数: 判断指定的列是否包含null值,如果有null值,用第二个值替换null值:
        select name,sal+ifnull(bonus,0) from emp where sal+ifnull(bonud,0) > 3500;
        --使用as可以为表头指定别名:
        select name,sal+ifnull(bonus,0) as 总薪资 from emp where sal+ifnull(bonud,0) > 3500;
        --另外as可以省略:
        select name,sal+ifnull(bonus,0) 总薪资 from emp where sal+ifnull(bonud,0) > 3500;
        --查询emp表中薪资在3000和4500之间的员工,显示员工姓名和薪资:
        Select name,sal from emp where sal>=3000 and sal<=4500;
        Select name,sal from emp where sal between 3000 and 4500;//使用between…and…;
        --查询emp表中薪资为 1400、1600、1800的员工,显示员工姓名和薪资;
        Select name,sal from emp where sal in (1400,1600,1800);
        --查询薪资不为1400、1600、1800的员工:
        Select name,sal from emp where sal not in(1400,1600,1800);
        --如何查询有部门的员工:
        Select name,sal from emp where dept_id  is not null;

模糊查询:

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式,可以和通配符(%、_)配合使用,其中"%"表示0或多个任意的字符。"_"表示一个任意的字符。

语法:SELECT 列 | * FROM 表名 WHERE 列名 LIKE 值:

    示例:
    --查询emp表中姓名中包含"涛"字的员工,显示员工姓名:
        Select name from emp where name like ‘%涛%’;
    --查询emp表中姓名中以"刘"字开头的员工,显示员工姓名:
        Select name from emp where name like ‘刘%’;
    --查询emp表中姓名以"刘"开头,并且姓名为两个字的员工,显示员工姓名:
        Select name from emp where name like ‘刘_ _’;

多行函数查询

常见的多行函数有:

COUNT( 列名 | * ) 统计结果集中某一列或记录行的行数。
MAX( 列名 ) 统计结果集中某一列值中的最大值
MIN( 列名 ) 统计结果集中某一列值中的最小值
SUM( 列名 ) 统计结果集中某一列所有值的和
AVG( 列名 ) 统计结果集中某一列值的平均值
提示:(1)多行函数不能用在where子句中(2)多行函数和是否分组有关,分组与否会直接影响多行函数执行的结果。
示例:

        --统计emp表中薪资大于3000的员工个数:
            Select count(*) from emp where sal > 3000;
        --求emp表中的最高薪资
            Select max(sal) from emp;
        --统计emp表中所有员工的薪资总和(不包含奖金)
            Select sum(sal) from emp;
        --统计emp表员工的平均薪资(不包含奖金)
            Select avg(sal) from emp;

分组查询:

GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT,SUM,AVG,MAX,MIN等函数。

如果查询结果中的数据经过分组(分的组不止一个),多行函数会根据分的组进行统计,有多少个组,就会统计出多少个结果。

--统计各个岗位的人数:
    Select count(*),job from emp group by job;
--对emp表按照部门进行分组,求每个部门的最高薪资(不包含奖金),显示部门id和最高薪资
    Select dept_id,max(sal) from emp group by dept_id;

排序查询:

使用 ORDER BY 子句将结果集中记录根据指定的列排序后再返回

语法:SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];ASC(默认)升序,即从低到高;DESC 降序,即从高到低。

    --对emp表中所有员工的薪资进行升序(从低到高)排序,显示员工姓名、薪资。
        Select name,sal from emp order by sal asc;
    --对emp表中所有员工的奖金进行降序(从高到低)排序,显示员工姓名、奖金。
        Select name,bonus from emp order by bonus desc;

分页查询:

在mysql中,通过limit进行分页查询:limit (页码-1)*每页显示记录数, 每页显示记录数

    --查询emp表中的所有记录,分页显示:每页显示3条记录,返回第 1 页。
        select * from emp limit 0,3; -- 查询第1页
        select * from emp limit 3,3; -- 查询第2页
        select * from emp limit 6,3; -- 查询第3页
        select * from emp limit 9,3; -- 查询第4页

多表查询

部门表:
http://blog.ps-ef.cn/usr/uploads/2020/03/1755743504.jpg
员工表:
http://blog.ps-ef.cn/usr/uploads/2020/03/1381632952.jpg

连接查询:

--查询部门和部门对应的员工信息:
Select * from emp,dept where emp.dept_id=dept.id;
Select * from emp inner join dept on emp.dept_id=dept.id;//和上边语句执行结果一致。

左外连接查询

--查询所有部门和部门下的员工,如果部门下没有员工,员工显示为null:
Select * from dept left join emp on dept.id=emp.dept_id;// 左外连接查询,会查询出左边表的所有数据.

http://blog.ps-ef.cn/usr/uploads/2020/03/471668099.jpg

右外连接查询

--查询部门和所有员工,如果员工没有所属部门,部门显示为null:
Select * from dept right join emp on dept.id=emp.dept_id;

http://blog.ps-ef.cn/usr/uploads/2020/03/2475815132.jpg

本文链接:

http://blog.ps-ef.cn/Java/31.html
1 + 8 =
快来做第一个评论的人吧~