day002-----------mysql语法规范,查询操做,分组函数,连接查询

mysql 专栏收录该内容
5 篇文章 0 订阅

***一、SQL语言分类

  1. DQL语言(数据查询语言)select
  2. DML语言(数据操纵语言)insert update delete
  3. DDL语言(数据定义语言)create alter drop
  4. DCL语言(数据控制语言)commit rollback

二、Mysql语法规范

  • ***不分大小写
  • ;结尾
  • 单行注释:#
  • 单行注释:–
  • 多行注释:/* */
  • sql语句可以写在一行或多行,各子句一般分行写
  • 关键字不能缩写不能分行
  • 用缩进提高语句的可读性

三、SQLyog使用

删除表 创建表 执行sql语句 保存sql语句 打开sql文件


四、查询操作练习

导入数据
在这里插入图片描述

  1. 基础查询:
SELECT 100;
SELECT 'john';     /*显示常量*/
SELECT 98*23;         /*显示表达式*/
SELECT LENGTH('john');
SELECT VERSION();          /*显示函数(方法)*/
SELECT last_name FROM employees;  /*显示表中的字段*/
SELECT last_name,phone_number,first_name,salary,commission_pct,manager_id FROM employees;  /*显示表中的多个字段*/
SELECT * FROM employees;     /*显示表中所有字段*/
select last_name AS,first_name ASFROM employees;          /*起别名*/
select last_name 姓,first_name 名 FROM employees;          /*起别名*/
select last_name  "out name"  FROM employees;             /*起别名*/
SELECT DISTINCT department_id FROM employees;              /*去重  查询employees中的所有部门编号*/

在这里插入图片描述
注意事项:SELECT 显示; 起别名 as 去重 DISTINCT
2. 条件查询
语法: select 字段 from 表名
where 条件;
分类: <=>安全等于
and && or || not |
优先级:not>and>or

#一、按条件表达式查询
#案例1:查询月薪>5000的员工信息
SELECT * FROM employees WHERE salary>5000;
#二、按逻辑表达式查询
#案例1:查询月薪在5000到12000的员工工资和姓名
SELECT salary,last_name FROM employees WHERE salary>= 5000 ANDsalary<=12000;

3. 模糊查询

1.like
一般搭配着通配符使用,用作字符型的判断通配符:
% 任意多个字符
_ 任意单个字符 1
2.between and
特点:在…之间
①等价于 使用 字段>=值1 and 字段<=值2
②两个临界值是包含的 [1,10]
③两个临界值不能颠倒顺序
3.in
特点:判断某个字段的值是否在某个列表内in(值1,值2,…)
等价于 or
4.is null/is not nul

#查询姓名中包含字符E的员工信息   like
select *from employees
where last_name LIKE '%e%'#显示出表employees部门编号在80-100之间 的姓名、职位  betweenand
SELECT last_name,job_id,department_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
WHERE department_id BETWEEN 100 AND 80; 
#案例1:显示出表employees的manager_id 是 100,101,110 的员工姓名、职位 in
SELECT last_name,job_id,manager_id
FROM employees
WHERE manager_id IN(100,101,110);
#案例1:查询没有奖金的员工   is null/is not null
SELECT * FROM employees
WHERE commission_pct IS NULL;

4. 排序查询
语法:
select 字段|表达式|常量
from 表
【where 条件】
order by 排序的字段;
1.升序 asc
降序 desc
默认是 升序asc
2.可以按表达式、函数、别名、多个字段进行排序
3.一般来讲order by放到查询的语句的最后,在不使用分页的情况下

#一、按单个字段进行排序
SELECT * FROM employees ORDER BY salary ;
SELECT * FROM employees ORDER BY salary DESC;
#二、按多个字段进行排序
SELECT * FROM employees
ORDER BY salary DESC,employee_id ASC;
#三、按表达式排序
#案例:按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
#四、按别名排序
#案例:按年薪降序
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;
#五、按函数排序
#案例:按姓名中的字节长度大小降序
SELECT last_name,LENGTH(last_name)
FROM employees
ORDER BY LENGTH(last_name) DESC;
***
## ***

五、分组函数与查询**

分组函数
分类:
max():最大值min():最小值sum():和avg():平均值count():计算非空的个数这些是通用的,sqlserver、oracle、mysql 都是一样的
特点:
1、sum、avg只支持数值型,count、max、min支持任何类型
2、这几个分组函数,都忽略null值
3、count()分组函数,支持以下写法count() 建议使用count(1)表示 查询结果集的行数
注意:count(1)性能没有count(
)高
因为count(*),sql服务器对其进行了优化 效率高
分组查询
分组查询一般都会用到分组函数
语法:
select 分组函数 别名,分组后的字段
from 表
【where 分组前筛选】
group by 分组的字段
【having 分组后筛选】
【order by 排序的字段】
从上到下依次顺序,不能颠倒顺序
分组查询的特点:
1、按多个字段分组,字段间用逗号隔开,没有顺序要求
2、可以和分组函数一起查询的字段,只能是分组后的字段,不能是任意字段
3、分组筛选 针对的表 位置 使用的关键字
分组前筛选 原始表 group by的前面 where
分组后筛选 分组后的结果集 group by的后面 having
顺序:where——group by——having
4、having和group by支持别名

#一、普通的分组查询
#01 案例:查询各部门的最高工资和部门号
SELECT MAX(salary),department_id FROM employees
GROUP BY department_id;
#二、按多个字段分组
#案例:查询每个工种、每个部门的平均工资
SELECT AVG(salary),job_id,department_id
FROM employees
GROUP BY job_id,department_id;
#三、分组查询+筛选having
#筛选条件分两类:
#分组前筛选:筛选的条件针对的是原始表
#分组后筛选:筛选的条件针对的是分组后的结果集
#  针对的表         位置                   使用的关键字
#分组前筛选     原始表              group by的前面      where
#分组后筛选     分组后的结果集     group by的后面  having
#where——group by——having
#案例1:查询有奖金的,每个部门的最高奖金率
SELECT MAX(commission_pct) 最高奖金率,department_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY department_id;
#四、having子句支持别名
#案例:查询每个地区的部门个数,求个数大于2的部门个数和地区号
SELECT COUNT(*) 个数,location_id 
FROM departments
GROUP BY location_id
HAVING 个数>2;
#五、排序 order by 支持别名
#案例:查询员工姓名中包含字符a,每个部门的最低工资高于3000的部门编号
,按照最低工资降序排序
SELECT department_id,MIN(salary) 最低工资
FROM employees
WHERE last_name LIKE '%a%'  
GROUP BY department_id
HAVING MIN(salary)>3000
ORDER BY 最低工资 DESC;

*** 六、连接查询*****

概念:查询的字段来自于多个表
语法:
select
字段1,字段2
from 表1,表2
【where 连接条件】
笛卡尔乘积:
产生原因:没有加连接条件,导致结果为 表1 的行数*表2 的行
解决方法:添加上有效的`myemployees
分类:
一、传统模式的多表连接
等值连接(where)——非等值连接
二、sql99推出的标准,使用join关键字实现连接
内连接——外连接
三、自连接
一、传统模式的多表连接也叫等值连接
特点有
①表的顺序没有要求
②n表连接,至少需要n-1个连接条件
③一般需要为表起别名,这样可以提高语句简洁度,并且防止字段有歧义
④可以添加分组、排序、筛选,一起混合使用

#①案例1:查询员工名、部门名
SELECT `last_name`,`department_name`
FROM `employees`,`departments`
WHERE`employees`.`department_id`=`departments`.`department_id`;

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

dai1770359801

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值