MySQL学习(二)—— 数据库的基本查询

记录查询

最基本的查询语句是由SELECT和FROM 关键字组成的
SELECT * FROM t_emp; // 查询t_emp表下所有
SELECT empno,ename FROM t_emp; // 查询t_emp表下empno,ename

SELECT语句屏蔽了物理层的操作,用户不必关心数据的真实存储,交由数据库高效的查找数据

使用列别名

通常情况下,SELECT子句中使用了表达式,那么这列的名字就默认为表达式,因此需要一种对列名重命名的机制

SELECT
	empno,
	sal*12 AS "income"
FROM t_emp;
查询语句的子句执行顺序
  1. 语法分析与优化,读取SQL语句
  2. FROM 选择数据来源
  3. SELECT选择输出内容
数据分页

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

SELECT ...... FROM ....... LIMIT 起始位置,偏移量;
SELECT ename FROM t_emp LIMIT 20,20;  // 从第20条往后查20条
数据分页的简写用法

如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0

SELECT empno FROM t_emp LIMIT 10; // 等同于
SELECT empno FROM t_emp LIMIT 0,10;

优先级

FROM => SELECT => LIMIT
结果集排序

如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用ORDER BY子句

SELECT ...... FROM ....... ORDER BY 列名 [ASC(默认) | DESC]

SELECT ename FROM t_emp ORDER BY sal DESC;
排序关键字
  • ASC代表升序(默认),DESC代表降序
  • 如果排序列是数字类型,数据库就按照数字大小排序,如果是日期类型就按照日期大小排序,如果是字符串就按照字符集序号排序
排序字段内容相同的情况
  • 默认情况下,如果两条数据排序字段内容相同,那么排序会按照主键排序
  • 我们可以使用ORDER BY 规定首要排序条件和次要排序条件。数据库会先按照首要排序条件排序,如果遇到首要排序内容相同的记录,那么就会启用次要排序条件接着排序
SELECT
	empno,ename,sal,deptno
FROM t_emp
ORDER BY deptno,sal DESC;


SELECT
	empno,ename,sal,deptno
FROM t_emp
ORDER BY sal DESC,empno LIMIT 0,5;
排序+分页

ORDER BY 子句书写的时候放在LIMIT 子句的前面
FROM => SELECT => ORDER BY => LIMIT

去除结果集重复记录

如果我们需要去除重复的数据,可以使用DISTINCT关键字来实现

SELECT DISTINCT 字段 FROM ......;

SELECT DISTINCT job FROM t_emp;
注意事项
  • 使用DISTINCT 的SELECT子句中只能查询一列数据,如果查询多列,完全一样才去重
  • DISTINCT 关键字只能在SELECT子句中使用一次
条件查询 WHERE
SELECT ...... FROM ...... WHERE 条件 [ AND | OR ] 条件

SELECT ename,sal FROM t_emp
WHERE deptno=10 AND sal >= 2000;

算数运算符
+、-、*、/、%
与null运算返回null

10*IFNULL(null,0)
// DATEDIFF 相差多少天
DATEDIFF(NOW(),hiredate)/365>=20

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

比较运算符

表达式意义例子
>大于
>=大于等于
<小于
<=小于等于
=等于
!=不等于
IN包含deptno IN(10,30,40)
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}”

例:

SELECT
	ename,comm,sal
FROM t_emp WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000
AND ename LIKE "_LIKE"

SELECT
	ename,comm,sal
FROM t_emp WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000
AND ename REGEXP "^[\\u4e00-\\u9fa5]{2,4}$";

逻辑运算符

表达式意义例子
AND与关系age > 18 AND sex = “男”
OR或关系
NOT非关系NOT deptno = 20
XOR异或关系age > 18 XOR sex = “男” (两边都一样才为true,例如都为true或都为false)
SELECT
	emane, deptno
FROM t_emp
WHERE NOT deptno IN(10,20) XOR sal>=2000;

二进制按位运算

二进制位运算的实质是将参与运算的两个操作数,按对应的二进制数逐位进行逻辑运算。

WHERE 子句的注意事项

WHERE子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最多的条件写在最左侧

SELECT empno,ename FROM t_emp
WHERE ename = "FORD" AND sal >= 2000;

SELECT empno,ename FROM t_emp
WHERE deptno = 10 AND sal >= 2000;
各种子句的执行顺序

FROM => WHERE => SELECT => ORDER BY => LIMIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值