数据库的基本查询(二)

目录

    • 一、简单查询
    • 二、高级查询
      • 2.1 分页
      • 2.3 结果集排序
      • 2.4 去重
    • 三、条件查询
      • 3.1 算术运算符
      • 3.2 比较运算符
      • 3.3 逻辑运算符
      • 3.4 按位运算符
      • 3.5 WHERE子句的注意事项

一、简单查询

# 查询t_emp表的所有字段
SELECT * FROM t_emp;

# 查询t_emp表的指定字段
SELECT ename, empno FROM t_emp;

# 为sal*12列名起一个名字叫incom
SELECT empno, sal*12 AS "incom" FROM t_emp;

执行顺序: 词法分析与优化->FROM->SELECT

二、高级查询

2.1 分页

看朋友圈,只会加载少量的部分的信息,不用一次性加载全部的朋友圈,那样会浪费CPU、时间,内存和网络带宽

如果结果集很多,则可以使用LIMIT关键字限定结果集的数量。

# 分页处理
# SELECT ... FROM ... LIMIT 起始位置,偏移量;
# 起始位置不写,默认是0
SELECT empno, ename FROM t_emp LIMIT 0, 5;

执行顺序: FROM->SELECT->LIMIT

2.3 结果集排序

# 查出来的结果排序, ORDER BY 字段名称,默认升序
SELECT empno, ename, sal, deptno FROM t_emp ORDER BY sal;
# 降序排列  DESC   升序:ASC
SELECT empno, ename, sal, deptno FROM t_emp ORDER BY sal DESC;

多字段排序:

# 当指定的排序字段一致时,默认再按照主键的升序排序
# 但是可以指定多关键字排序
SELECT empno, ename, sal, hiredate FROM t_emp ORDER BY sal DESC, hiredate ASC;

排序+分页

# 例子:查出公司工资前5的员工
SELECT empno, ename, sal FROM t_emp ORDER BY sal DESC LIMIT 0, 5;

执行顺序: FROM->SELECT->ORDER BY->LIMIT

2.4 去重

DISTINCT的使用: 结果集中的重复记录 ——>去除重复记录

  1. DISTINCT只能有一个字段,当查询有多个字段时,DISTINCT会失效
  2. DISTINCT关键字只能在SELECT子句中使用一次
  3. DISTINCT关键字必须加在第一关键字前面,也只能有一个关键字

例子: 想要看看员工一共有哪几种工作,这时要求不重复显示

SELECT DISTINCT job FROM t_emp;

三、条件查询

SELECT empno, ename, sal FROM t_emp WHERE (deptno=10 OR deptno=20) AND sal >= 2000;

例子:找出部门为10, 年收入(sal+comm)超过15000并且工龄超过20年的员工

SELECT empno, ename, sal, hiredate 
FROM t_emp
WHERE deptno=10 AND (sal + IFNULL(comm,0))*12>=15000 AND DATEDIFF(NOW(),hiredate)/365>=20;

注意:

  1. 任何值与NULL加减乘除之后依然时NULL

  2. IFNULL()函数,如果第一个参数为NULL,返回第二个参数

  3. DATEDIFF()两个日期参数,返回天数

  4. NOW()函数返回当前的日期和时间

3.1 算术运算符

+ - * / %

3.2 比较运算符

>, <, >=, <=, =, !=, IN

IN为包含

表达式 意义 例子
IS NULL 为空 comm IS NULL
IS NOT NULL 不为空 comm IS NOT NULL
BETWEEN AND 范围 sal BETWEEN 2000 AND 3000
LIKE 模糊查询 ename LIKE “A%”
REGEXP 正则表达式 ename REGEXP “[a-zA-Z]{4}”

注释: LIKE“A%” 指的是以A开头,“%A”表示以A结尾,“%A%”表示字段中包含A

# 在部门10,20,30中查找工作不是销售,入职日期在1985-01-10之前的
SELECT empno, ename, sal, deptno, hiredate
FROM t_emp
WHERE deptno IN(10, 20, 30) AND job != "SALESMAN" AND hiredate<"1985-01-10";

例子: 查找佣金不为空的员工,并且底薪是2000到3000,并且名字以A开头的员工

SELECT ename, comm, sal
FROM t_emp 
WHERE comm IS NOT NULL 
AND sal BETWEEN 2000 AND 3000 
AND ename LIKE "A%";

3.3 逻辑运算符

AND, OR, NOT, XOR `

例子: 查询不在10,20部门的员工

SELECT ename, deptno
FROM t_emp
WHERE NOT deptno IN(10, 20);

3.4 按位运算符

二进制运算

& | ~ ^ << >>

3.5 WHERE子句的注意事项

  1. WHERE子句中,条件执行的顺序是从左到右的。所以应该把索引条件,或者筛选掉最多的条件写在最左侧
  2. 条件优先级:索引条件、筛选掉最多的记录的条件、普通检索条件

执行顺序: FROM->WHERE->SELECT-> ORDER BY->LIMIT

你可能感兴趣的:(MySQL,数据库,mysql)