mysql 简单查询

本文详细介绍了MySQL中的查询方法,包括排序、聚合函数、IFNULL、LIMIT分页、WHERE子句、BETWEEN、IN操作、LIKE模糊查询、空值测试、GROUP BY分组、HAVING过滤、DISTINCT去重、保存查询结果到新旧表等,是MySQL查询操作的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySql常用查询方式以及一些常用的聚合函数

1、排序。排序默认是ASC降序。(DESC为升序)

    1).语法格式:
    SELECT 列名1[,列名2…列名n]
    FROM 表名ORDER BY 表达式 [ASC|DESC]

    2).示例:
    #查询emp表中的empon,ename,sal 列,按照sal降序,empno升序
    select empno,ename,sal from emp order by sal,empno;

    select empno,ename,sal from emp order by sal desc,empno;
    select empno,ename,sal from emp order by sal desc,empno desc;
    select empno,ename,sal,hiredate from emp order by hiredate;

    3).select语句的总结:
    SELECT [ALL|DISTINCT] 列名1 别名,列名2 别名…
    FROM 表1 
    [WHERE 条件表达式]
    [GROUP BY 列名]
    [HAVING 条件表达式]
    [ORDER BY 列名 [ASC|DESC]] 

    [LIMIT [start_row,]row_count];

2、sql函数ifnull(comm,0) 功能是判断表达式是否为null, 为null则返回0, 否则返回comm自身。

#查询emp表中员工的总工资(总工资=工资+奖金),并按照工资降序,

select empno,ename,sal,comm,sal+ifnull(comm,0) from emp order by sal+ifnull(comm,0);

3、limit 子句用户限制返回行数,常用于分页。(limit 子句放在查询语法的后边)

    1).语法:limit[分页起始索引], 每页记录数
    2).分页的公式:select * from emp limit(页码-1)*页大小,页大小;
    例如查询商品表中第三页的数据,每页记录10条记录。

    select * from 商品表 limit (3-1)*10,10;

    select empno,ename from emp limit 10,5;

4、where 子句。(where 子句可以分为5类:简单比较测试、范围测试、组成员测试、模式匹配测试、空值测试)
 

    1).简单比较  表达式结合 比较运算符和关系运算符   =  <  > <=  >=   <>  !=   关系运算符:与(and) 或    (or) 非(not)

    select * from emp where sal>1000 and sal <2000;

    2).范围运算符。(between  and)

    #查找emp表中工资1000-2000的员工信息

    select * from emp where sal between 1000 and 2000;

5、between and 语句。(使用BETWEEN… AND…关键字可以方便的限制查询数据的范围)

    1).语法格式:
        SELECT 列名1[,列名2…列名n]
        FROM 表名
        WHERE 表达式 [NOT] BETWEEN 表达式1 AND 表达式2
 

    2).示例:SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 1000 AND 3000; 

6、in 语句(not in)。

    1).语法格式:
        SELECT 列名1[,列名2…列名n]
        FROM 表名

        WHERE 表达式 [NOT] IN (表达式1,表达式2[,…表达式n])

    2).示例(组成员测试):

        #在emp表中查询编号为10、20、30三个部门的员工的部门编号、员工编号和员工姓名信息
        SELECT deptno,empno,ename FROM EMP WHERE deptno IN (10,20,30);

        相当于:SELECT deptno,empno,ename FROM EMP WHERE deptno=10 OR deptno=20 OR deptno=30;

7、模式匹配测试(模糊查询)SQL提供了LIKE子句来进行这类模糊搜索。

    1).语法格式:

        SELECT 列名1[,列名2…列名n] FROM 表名 WHERE 表达式 [NOT] LIKE 条件;

    2).LIKE 子句通配符。

        * %(百分号) 表示从0-n 个任意字符。

        *_ (下划线) 表示单个的任意字符。

    3).示例:

        #在emp表中查询名字中包含字母“A”的员工的员工编号、员工姓名信息:
        SELECT empno,ename FROM emp  WHERE ename LIKE '%A%';

        #在emp表中查询名字中第二个字母不为“A”的员工的员工编号、员工姓名信息:

        SELECT empno,ename FROM emp  WHERE ename NOT LIKE '_A%';

8、空值测试。

    1).语法格式为:

        ELECT 列名1[,列名2…列名n]  FROM 表名  WHERE 表达式 IS [NOT] NULL;

    2).示例:

        SELECT empno,ename,sal,comm FROM emp  WHERE comm IS NOT NULL;

9、复合搜索条件。(多个条件表达式之间可以通过逻辑运算符进行连接)

    WHERE子句中经常使用的逻辑运算符包括:NOT(非)、AND(与)、OR(或) 

    select * from emp where comm id not null and(deptno=10 or deptno=20);

10、分组查询 group by 使用时注意  select 语句后仅允许出现如下列。
** 使用GROUP BY进行分组查询时,其他的DBMS一都具有如下的限制,SELECT语句中仅允许以下几项:
    1、分组列deptno 
    2、聚合函数 max(sal)
    3、常量

    MySQL中虽然没有这个限制,但是写上其他的列没有实际意义

    #从emp表中查询各个部门下各个工种的员工平均工资和最高工资。
    SELECT deptno, job,avg(sal), max(sal) FROM emp GROUP BY deptno,job;

    SELECT deptno,max(sal),min(sal),1000 from emp group by deptno;

11、使用列别名。(含有特殊字符(如空格),加单引号或双引号)
 

    select ename 员工姓名 from dept;

12、聚合函数。
    1).sum(表达式)    返回表达式中所有数值的总和,忽略空值。
    2).avg(表达式)    返回表达式中所有数值的平均值,忽略空值。
        SELECT avg(sal) '平 均 工 资' FROM emp;
    3).min(表达式)    返回表达式中所有数值的最小值,忽略空值。
    4).max(表达式)    返回表达式中所有数值得最大值,忽略空值。

    5)count(*|表达式)    返回满足select语句中指定的条件的记录条数;为表达式时忽略空值。

13、having子句 在分组或使用聚合函数后再进一步筛选。相当于where对select效果。 having对group by
    语法:
    SELECT 列名1[,列名2…列名n] 
    FROM 表名
    GROUP BY 列名1  
    HAVING 表达式 

    #从emp表中查询平均工资高于2000的部门编号及其平均工资。

    select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

14、distkinct 关键字,能够从返回的结果集去除重复记录。
** 在使用DISTINCT关键字后,如果表中有多个为NULL的数据,服务器会把这些数据视为相等。

** 在使用DISTINCT关键字后,如果表中有多个为NULL的数据,服务器会把这些数据视为相等。

SELECT COUNT(DISTINCT 列名)FROM 表名

#从emp表中查询员工的职位都有哪些(名称相同的只显示一次)

SELECT DISTINCT job FROM emp; 

15、保存查询结果到新表。
1).将查询的结果保存到一个新表(原来不存在)中
    -- 使用该语句可以完成很多功能:
    -- 全表数据备份
    -- 部分数据备份
    -- 表结构的复制(注意不含约束)
    语法:
CREATE TABLE <newtable> 
[AS]
SELECT 语句 
注意:查询可以涉及多个表

#查询出部门编号为10的员工信息,并将查询结果保存到一个新表emp1中

CREATE TABLE emp1 as  SELECT * FROM emp WHERE deptno=10;

16、保存查询结果到旧表。

1).将查询的结果保存到一个旧表(原来存在)中,也可以理解为是一个批量插入数据的命令。
2).当使用INSERT命令来复制表中数据的时候,两个表的结构要么完全相同,要么指定两个表中数据类型相兼容的类型进行数据复制。

语法:
    INSERT INTO target_table(column_list) 
    SELECT 语句

    #查询出部门编号为20的员工信息,并将查询结果保存到表emp1中

    INSERT INTO emp1 SELECT * FROM emp WHERE deptno=20;

                                                                                           This article is written in songyanping at 9:00 AM 2018/07/09

                                                                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值