【尚硅谷MySQL基础】DQL语言的学习1
五、DQL语言的学习
基础查询★
条件查询★
排序查询★
常见函数★
分组函数★
分组查询★
连接查询★
子查询√
分页查询★
union联合查询√
18:myemployees库的四张表介绍
myemployees库是尚硅谷网课附带的数据库文件。
执行myemployees.sql
右键单击root@localhost
➡ 执行SQL脚本。
找到sql文件所在位置,执行。
手动刷新。
可以看到其中有四张表:
四张表
19 ~ 27:基础查询
19:基础查询介绍
语法:
SELECT 要查询的东西【FROM 表名】;
类似于Java中:System.out.println(要打印的东西);
。
特点:
- 通过SELECT查询完的结果 ,是一个虚拟的表格,不是真实存在的;
- 要查询的东西可以是表中字段、常量值、表达式、函数。
20.1:查询单个字段:SELECT 字段名 FROM 表名;
注意操作前开头加上USE 库名;
。
20.2:查询多个字段:SELECT 字段名,字段名 FROM 表名;
多条命令存在时,要执行哪个命令就先选中哪个命令,以后都是这样。
20.3:查询所有字段:SELECT * FROM 表名;
缺点:这样无法改变表中字段顺序,可以采用手动输入所有字段的方式自己决定顺序,当然这样很麻烦。
21:细节补充
22.1: 查询常量:SELECT 常量值;
不区分字符型和字符串型,统一用''
,数值型不需要。
22.2:查询表达式:SELECT 表达式;
22.3:查询函数:SELECT 函数名(实参列表);
23:起别名:①AS,②空格
优点:
- 便于理解
- 如果要查询的字段有重名的情况使用别名可以区分开来。
如果别名中有特殊符号(空格、#等),别名外面用双引号。
24:去重:SELECT DISTINCT 字段名 from 表名;
25:+的作用:加法运算
注意:不像Java中的+
还有连接字符串的功能。
SELECT 数值+数值;
:直接运算。
SELECT 字符+数值;
:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算。
SELECT NULL+任意值;
:结果都为null。
26:使用concat函数实现连接
功能:拼接字符,实现Java中+
的功能:SELECT CONCAT(字符1,字符2,字符3,...);
。
27、【案例讲解】基础查询
缺陷:如果某一列中存在null,最终结果全部都是null。
【补充】IFNULL函数:SELECT IFNULL(expr1,expr2) FROM 表名;
功能:判断某字段或表达式(expr1)是否为null,如果为null返回指定的值(expr2),否则返回原本的值。
所以正确的解法:
28 ~ 38:条件查询
28:条件查询介绍
语法:
SELECT
查询列表
FROM
表名
WHERE
筛选条件;
分类:
一、按条件表达式筛选
简单条件运算符:> < = <>(相当于!=) >= <=
示例:salary>10000
二、按逻辑表达式筛选
逻辑运算符:and or not(&& || !)
示例:salary>10000 && salary<20000
- &&、and:两个条件都为true,结果为true,反之为false
- ||、or: 只要有一个条件为true,结果为true,反之为false
- !、not: 如果连接的条件本身为false,结果为true,反之为false
三、模糊查询
like、between and、in、is null
示例:last_name like ‘a%’
29:条件运算符的使用
30:逻辑运算符的使用
31:模糊查询—like关键字
模糊查询的特点:
- 一般和通配符搭配使用
- 通配符:
%
任意多个字符,包含0个字符;
_
任意单个字符;
- 通配符:
如果要查询的字段含有通配符(_、%等),使用转义字符来失效通配符的功能。
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '_$_%' ESCAPE '$';
# 意思是:第一个任意,第二个是_,后面的任意。
32:模糊查询—between and关键字
- 使用between and可以提高语句的简洁度;
- 包含临界值;
- 两个临界值不要调换顺序。
比如:
department_id>=100 AND department_id<=110;
可以用department_id BETWEEN 100 AND 110;
33:模糊查询—in关键字
作用:判断某字段的值是否属于in列表中的某一项
- 使用in提高语句简洁度
- in列表的值类型必须一致或兼容
- in列表中不支持通配符
34:模糊查询—is null关键字
=
或<>
不能用于判断null值,只能进行数字上的判断。is null
或is not null
可以判断null值
35:安全等于的介绍
安全等于:<=>
,既可以判断空值,又可以判断数字。
commission_pct <=>NULL;
相当于
commission_pct IS NULL;
salary <=> 12000;
相当于
salary = 12000;
比较:
IS NULL
:仅仅可以判断NULL值,可读性较高,建议使用。
<=>
:既可以判断NULL值,又可以判断普通的数值,但是可读性较低,不推荐。
36:【案例讲解】条件查询
37:测试题1讲解
38:复习
39 ~ 41:排序查询
39:排序查询介绍
语法:
SELECT
查询列表
FROM
表名
【WHERE 筛选条件】
ORDER BY 排序的字段或表达式【 ASC / DESC 】 ;
- ASC代表的是升序,因为默认是升序所以可以省略,DESC代表的是降序。
- ORDER BY子句可以支持单个字段、多个字段、别名、表达式、函数
- ORDER BY子句在查询语句的最后面,除了limit子句
40:排序查询示例
#1、按单个字段排序
SELECT
*
FROM
employees
ORDER BY salary DESC ;
#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序
SELECT
*
FROM
employees
WHERE department_id >= 90
ORDER BY employee_id DESC ;
#3、按表达式排序
#案例:查询员工信息 按年薪降序
SELECT
*,
salary * 12 * (1+ IFNULL(commission_pct, 0))
FROM
employees
ORDER BY salary * 12 * (1+ IFNULL(commission_pct, 0)) DESC ;
#4、按别名排序
#案例:查询员工信息 按年薪升序
SELECT
*,
salary * 12 * (1+ IFNULL(commission_pct, 0)) 年薪
FROM
employees
ORDER BY 年薪 ASC ;
#5、按函数排序
#案例:查询员工名,并且按名字的长度降序
SELECT
LENGTH(last_name),
last_name
FROM
employees
ORDER BY LENGTH(last_name) DESC ;
#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序
#最终效果:工资相同的人按员工id降序
SELECT
*
FROM
employees
ORDER BY salary DESC,
employee_id ASC ;