数据准备
右键 连接,点击 运行SQL 文件,选择 demo.SQL (获取源代码), 随后即可加载一个名为 demo 的数据库, 内含四张数据表,分别如下:
SELECT 语句
SELECT 查询字段 FROM 表名
//查询 t_emp 所有字段的数据
SELECT *FROM t_emp;
//查询 t_emp 的 empno, ename 字段的数据
SELECT empno, ename FROM t_emp;
AS 关键字
我们可以用 AS 关键字
#对字段使用别名, 比如字段是月薪,月薪*12叫做年薪
SELECT empno, sal*12 AS "annual income"
FROM t_emp;
LIMIT 关键字
LIMIT startIdx, bias 选取第 startIdx到 startIdx+bias-1 条数据,索引从0开始
#对数据进行分段,使用LIMIT start_idx, bias
SELECT empno, ename FROM t_emp LIMIT 5,5;
上面SQL语句: 从 t_emp中的选择 第6-10条empno,ename数据
ORDER BY, ASC, DESC 关键字
ORDER BY 字段名,将数据按照某一字段进行排序,字段后可以跟ASC 表示升序,DESC表示降序。
#按照某一字段的顺序进行提取,使用ORDER BY
SELECT ename, sal FROM t_emp ORDER BY sal ASC;
SELECT ename, sal FROM t_emp ORDER BY sal DESC;
也可以对多个字段进行排序,但是前面的字段排序会优先于后面的字段排序,如:
# 优先按照 sal 降序排序, 若sal相等, 则按照 hiredate 升序排序
SELECT ename, sal ,hiredate FROM t_emp ORDER BY sal DESC, hiredate ASC;
ORDER BY 与 LIMIT 联合使用
# ORDER BY 可以和 LIMIT 联合使用,找出工资排名前五的员工
SELECT
ename, sal
FROM t_emp ORDER BY sal DESC LIMIT 0, 5;
DISTINCT 关键字
DISTINCT 字段名,对某一字段内重复的元素进行去重
# 使用DISTINCT对某一列提取出来的内容去重,DISTINCT 只能对某一列起作用
SELECT DISTINCT job FROM t_emp;
WHERE 条件查询
# 条件查询,使用 WHERE 语句
# 如查询部门为10或20,月薪大于2000的员工
SELECT empno,ename sal FROM t_emp
WHERE (deptno=10 OR deptno=20) AND sal>=2000;
SQL 中可以使用AND, OR, NOT 逻辑运算符
IFNULL(字段, 默认值)若某一字段的元素为NULL, 返回一个默认值
DATEDIFF(NOW(), 过去日期) 返回现在日期与过去日期的天数差值
# 查询部门为10 且年薪大于15000,工龄大于20年的员工,年薪等于月薪*12+佣金
# 有的人佣金为NULL, 需要用IFNULL(NULL,0)返回0进行计算
# 使用DATEDIFF(NOW(),hiredate)/365计算工龄
SELECT
empno, ename, hiredate
FROM t_emp
WHERE deptno=10 AND 12*sal+IFNULL(comm,0)>=15000 AND DATEDIFF(NOW(),hiredate)/365>=20 ;
SQL 支持 +,- , *, / 运算符
IN 关键字
IN 关键字能对某一字段的元素内容进行具体的约束,只能为某几个值
#查询 部门为10, 20, 30 且职务不为"SALESMAN" 的员工信息
# 使用IN
SELECT
empno, ename, deptno
FROM t_emp
WHERE deptno IN(10,20,30) AND job!="SALESMAN";
#查询部门不为10,20的员工
# 使用NOT
SELECT
empno, ename ,deptno
FROM t_emp
WHERE NOT deptno IN (10,20);
BETWEEN关键字
BETWEEN value1 AND value2 对字段的值约束到某一范围进行查询
#查询月薪1000-2000的员工
#使用 BETWEEN
SELECT
empno, ename
FROM t_emp
WHERE sal BETWEEN 1000 AND 2000;
IS 关键字
#查询佣金 为NULL 的员工
SELECT
ename
FROM t_emp
WHERE comm IS NULL;
LIKE 模糊查询
#查询名字以A打头的员工
#使用 LIKE %
SELECT
empno, ename
FROM t_emp
WHERE ename LIKE "A%";
#查询名字中含有A的员工
#使用 LIKE %
SELECT
empno, ename
FROM t_emp
WHERE ename LIKE "%A%";
#查询名字为_LAKE的员工
#使用 LIKE %
SELECT
empno, ename
FROM t_emp
WHERE ename LIKE "_LAKE";
REGEXP 正则表达式
#查询中文名字的员工
# 使用REGEXP
SELECT
empno, ename
FROM t_emp
WHERE ename REGEXP "^[\\u4e00-\\u9f15]{2,4}$";
总结一下
关键字的执行顺序
FROM > WHERE > SELECT > ORDER BY > LIMIT
WHERE 语句执行顺序是从左到右, 应该把带索引的列, 筛选后较少的条件写在左边, 以便快速筛选