DQL语言学习

DQL(数据查询语言)

1.查询

1、查询所有列
SELECT * FORM 表名;
2、查寻特定列
SELECT 字段名 FORM 表名;
DQL语言学习

3、列的别名
方式一:使用as
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM t_mysql_employees;
方式二:使用空格
SELECT last_name 姓,first_name 名 FROM t_mysql_employees;
4、字符串
字符串可以是 SELECT 列表中的一个字符,数字,日期。
日期和字符只能在单引号中出现。 • 每当返回一行时,字符串被输出一次。
5.去重
SELECT DISTINCT 字段名 FROM 表名;
6.+号的作用
mysql中的+号:
仅仅只有一个功能:运算符

select 100+90; 两个操作数都为数值型,则做加法运算
select ‘123’+90;只要其中一方为字符型,试图将字符型数值转换成数值型
如果转换成功,则继续做加法运算
select ‘john’+90; 如果转换失败,则将字符型数值转换成0
select null+10; 只要其中一方为null,则结果肯定为null
还有一些特殊的查询
1.查询常量值
SELECT 100;
SELECT ‘john’;
2.查询表达式
SELECT 100%98;
3.查询函数
SELECT VERSION();

2.过滤和排序数据

1、过滤
使用WHERE 子句,将不满足条件的行过滤掉。WHERE 子句紧随 FROM 子句。
2.过滤查询
1.select 列表名 from 表名 where 筛选条件;
2.按逻辑表达式筛选 如:< > <= >= != <>; or not;
3.模糊查询;
①:Like 一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
如:某某中包含某字符 like ‘%a%’; 表示筛除不包含a字符的字段
②:between and 表示在。。。和。。。之间
DQL语言学习
③:in 判断某字段的值是否属于in列表中的某一项;和or差不多;
DQL语言学习

3.order by 子句
select 查询列表 from 表名【where 筛选条件】 order by 排序的字段或表达式;
asc代表的是升序,可以省略 。desc代表的是降序。
order by子句可以支持 单个字段、别名、表达式、函数、多个字段
order by子句在查询语句的最后面,除了limit子句
1、按单个字段排序

2、添加筛选条件再排序
3、按表达式排序
4、按别名排序
5、按函数排序
6、按多个字段排序
DQL语言学习

3.分组查询

概念:分组函数作用于一组数据
类型:sum求和 avg平均值 max最大值 min最小值 count统计个数
sum和avg一般处理数值型 而其他的则能处理任何类型,并且都忽略null值,可以和distinct搭配去重运算。
如:查询部门编号为90的员工个数
DQL语言学习
group by 字句:
select 查询列表 from 表【where 筛选条件】group by 分组的字段【order by 排序的字段】;
和分组函数一同查询的字段必须是group by后出现的字段
筛选分为两类:分组前筛选和分组后筛选
分组前筛选用where 分组后筛选用 having 分组后筛选必须是和分组内容相关的。
案例:每个工种 有奖金 的员工的 最高工资>12000 的 工种编号和最高工资
DQL语言学习
这里分组前筛选了有奖金的 分组后又筛选了 工资大于12000的。
还能在分组筛选后添加排序 加上ORDER BY 排序的字段或表达式;即可

4.多表查询

如果要查询两张表 则会出现笛卡尔积的情况,为了避免这种情况,所以使用多表查询。
概念是使用连接在多个表中查询数据,这个连接则是表之间相同的字段。
在 WHERE 子句中写入连接条件。
在表中有相同列时,在列名之前加上表名前缀(别名),意识就是两个表相同的列名前面加上表的别名就能区分两个相同列名的列。另外使用别名也能简化查询。
多表查询能加入分组也能筛选也能加排序;
筛选案例:查询 城市名中第二个字符为o 的部门名和城市名
DQL语言学习
先查询 城市名 和 部门名 然后在将两个表的城市ID连接起来 然后再筛选 第二个字符为O 的城市名。

分组案例:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
DQL语言学习
先查询部门名 部门领导编号 还有最低工资 然后将部门编号连接起来 然后再写有奖金这个条件 然后再通过GROUP BY 将部门名和部门领导编号分组。

排序案例:查询 每个工种 的 工种名和员工的个数,并且 按员工个数降序;
DQL语言学习
先查询 工种名 和 员工个数 然后将工种ID连接起来 然后将工种名分组 最后再按员工个数排序。