DQL(数据查询语言)

以管理员身份打开命令行进入到MySQL目录下bin目录或使用Navicat

基本SELECT的查询语句

1,查询某张表的特定列
(注:命令行需先选择库使用use 库名
SELECT需要查询的列名(可多个逗号分隔)FROM 表名;
2,别名
起别名便于理解,如果要查询的字段有重名的情况(如连表查询),使用别名可以区分开来
SELECT 列名 别名 FROM 表名 别名;(表和列都可以使用别名)
3,去重
比如学校的学生表,想要统计有多少个班级就可以使用去重
SELECT DISTINCT 想要去重的列名(比如班级列) FROM 表名;
4,‘+’号的作用
在MySQL中‘+’号的功能只有一个做运算,如果想做拼接使用CONCAT
SELECT CONCAT(列名1,列名2) FROM 表名;

select 100+90; 两个操作数都为数值型,则做加法运算
select ‘123’+90;只要其中一方为字符型,试图将字符型数值转换成
数值型,如果转换成功,则继续做加法运算
select ‘john’+90; 如果转换失败,则将字符型数值转换成0
select null+10; 只要其中一方为null,则结果肯定为null

过滤和排序

过滤筛选就是把你需要或不需要的数据筛选出来
1,按条件表达式筛选
比如想查询工资高于10000的员工有哪些
SELECT 工资列列名,姓名列 FROM 所有员工的工资统计表 WHERE 工资列列名>10000
DQL(数据查询语言)

2,按逻辑表达式筛选(与/或/非等)
比如想查询工资在10000到20000之间的员工名、工资以及奖金
SELECT 工资列名,姓名列名,奖金列名 FROM 所有员工的工资统计表 WHERE 工资列名>10000 and(&&) 工资列名<20000

3,模糊查询
(我感觉有点与正则类似)
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符

比如想查询公司有多少姓氏为赵的员工
SELECT 姓名列 FROM 公司所有员工表 WHERE 姓名列 LIKE '赵’
4,区间筛选(与&&类似)
SELECT 工资列名,姓名列名,奖金列名 FROM 所有员工的工资统计表 WHERE 工资列名 BETWEEN 10000 AND 20000
DQL(数据查询语言)

5,列表筛选(与||类似)
SELECT 列名 FROM 表名 WHERE 条件1||条件2||条件3
DQL(数据查询语言)
SELECT 列名 FROM 表名 WHERE 需筛选的列名 in(‘条件1’,‘条件2’,‘条件3’)
DQL(数据查询语言)
6,is null和 is not null(判断值是否为null)

SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
commission_pct IS NOT NULL;

排序
order by desc升序/asc降序;
DQL(数据查询语言)

三,分组

概念:分组函数作用于一组数据,并对一组数据返回一个值。

组函数类型
分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值

3、可以和distinct搭配实现去重的运算

4、count函数的单独介绍
一般使用count(*)用作统计行数

5、和分组函数一同查询的字段要求是group by后的字段

SELECT SUM(salary) FROM t_mysql_employees

SELECT AVG(salary) FROM t_mysql_employees

SELECT MIN(salary) FROM t_mysql_employees

SELECT MAX(salary) FROM t_mysql_employees

SELECT COUNT(salary) FROM t_mysql_employees

分组查询
语法:
select 查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】;

特点:
1、和分组函数一同查询的字段必须是group by后出现的字段
2、筛选分为两类:分组前筛选和分组后筛选
针对的表 位置 连接的关键字
分组前筛选 原始表 group by前 where

分组后筛选 group by后的结果集 group by后 having

问题1:分组函数做筛选能不能放在where后面
答:不能

问题2:where——group by——having

一般来讲,能用分组前筛选的,尽量使用分组前筛选,提高效率

3、分组可以按单个字段也可以按多个字段
4、可以搭配着排序使用

多表查询

笛卡尔集指多表查询时两张表的乘积 ,这样会造成一些不必要的错误
笛卡尔集会在下面条件下产生
– 省略连接条件
– 连接条件无效
– 所有表中的所有行互相连接
• 为了避免笛卡尔集, 可以在 WHERE 加入有 效的连接条件。
等值连接
使用连接在多个表中查询数据
-在 WHERE 子句中写入连接条件。
-在表中有相同列时,在列名之前加上表名前缀
#案例:查询员工名和对应的部门名
SELECT
last_name,department_name
FROM
t_mysql_employees,departments
WHERE t_mysql_employees.department_id=t_mysql_departments.department_id

区分重复的列名
• 在不同表中具有相同列名的列可以用表的别名
加以区分。
• 如果使用了表别名,则在select语句中需要使
用表别名代替表名
• 表别名最多支持32个字符长度,但建议越少越

表的别名
• 使用别名可以简化查询。
• 使用表名前缀可以提高执行效率。

连接多个表
• 连接 n个表,至少需要 n-1个连接条件。 例如:连接
三个表,至少需要两个连接条件。

DQL(数据查询语言)