数据库的基本查询(二)

文章介绍了SQL查询的基本操作,包括从简单查询所有字段到指定字段的选择,使用LIMIT进行分页处理,ORDERBY进行结果集排序,以及DISTINCT去除重复记录。还详细讲解了WHERE子句中的算术、比较、逻辑和按位运算符,以及条件查询的组合使用方法。
摘要由CSDN通过智能技术生成

一、简单查询

# 查询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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值