mysql语法笔记

一.简单搜索

1.模糊条件查询

用于搜索功能
示例:查询出姓名中含有字母e的有哪些

select *from emp where ename like '%e%';  

练习:查询姓名中以e结尾的员工有哪些

select *from emp where ename like '%e';

查询姓名中倒数第二个字符是e的员工

select *from emp where ename like '%e_';

% 匹配任意个字符 >=0
_ 匹配任意一个字符 =1
以上必须结合like使用

2.分页查询

查询结果中有太多数据,一次显示不完可以做成分页显示
需要两个已知的条件:当前的页码,每页的数据量
算法:每页开始查询的值=(当前的页码-1)*每页数据量
语法:select *from emp limit 开始查询的值,每页的数据量;
练习:假设每页显示5条数据,查询出前四页的数据
第一页:select *from emp limit 0,5;
第二页:select *from emp limit 5,5;
第三页:select *from emp limit 10,5;
第四页:select *from emp limit 15,5;
注意事项:开始查询的值和每页的数据量必须是数值型,不能加引号

二.复杂查询

1.聚合查询/分组查询

示例:查询出所有员工的数量

select count(*) from emp;

练习:使用编号列查询员工的数量

select count(eid) from emp;(推荐使用主键列)

练习:使用部门编号列查询员工的数量

select count(deptId) from emp;

练习:查询男员工的工资总和

select sum(salary) from emp where sex=1;

练习:查询出20号部门的平均工资

select avg(salary) from emp where deptId=20;

练习:查询女员工最高工资

select max(salary) from emp where sex=0;

练习:查询年龄最大员工生日

select min(birthday) from emp;

通常分组查询只用于查询聚合函数和分组条件
示例:查询出男女员工数量,工资总和

select count(eid),sum(salary),sex from emp group by sex;

练习:查询出各部门的平均工资,最高工资,最低工资

select avg(salary),max(salary),min(salary),deptId from emp group by deptId;

函数:是一个功能体,需要提供若干数据,返回结果。
聚合函数
count()/sum()/avg()/max()/min()
数量 总和 平均 最大 最小
year() 获取日期中的年份
示例:查询所有员工出生的年份

select year(birthday) from emp;

练习:查询1993年出生的员工有哪些

select * from emp where year(birthday)=1993;

2.子查询

示例:查询出工资最高的员工
步骤1:查询工资的最高值
步骤2:查询出工资最高值对应的员工

select * from emp where salary=(select max(salary) from emp);

子查询:是多个SQL命令的组合,把一个命令的结果作为另一个的查询条件
练习:查询出比king工资高的员工有哪些

select *from emp where salary>(select salary from emp where ename='king');

练习:查询出和tom同一年出生的员工有哪些

select *from emp where year(birthday)=(select year(birthday) from emp where ename='tom') and ename!='tom';

3.多表查询

要查询的列分布在多个表中,前提是表之间是有关联的
示例:查询所有员工的姓名及其部门名称

select emp.ename,dept.dname from emp,dept where emp.daptId=dept.did;

内连接

select ename,dname from emp inner join dept on deptId=did;和之前查询结果一致

左外连接 左侧表内所有内容都显示

select ename,dname from emp left outer join dept on deptId=did;

显示左侧表中所有记录,先写哪个表哪个表就是左
右外连接

select ename,dname from emp right outer join dept on deptId=did;

显示右侧表中所有记录,后写哪个表哪个表就是右
左外和右外连接中的outer关键字可以省略
全连接
full join …on
同时显示左侧和右侧表中所有的记录
mysql不支持全连接
联合
union 合并相同的记录
union all 不合并相同的记录

(select ename,dname from emp left outer join dept on deptId=did)
union
(select ename,dname from emp right outer join dept on deptId=did)

全连接的解决方案:将左外连接和右外连接联合,合并相同的记录

学习一门编程类语言基本步骤

1.了解背景知识:历史,现状,特点,应用场景
2.搭建开发环境,编写hello world
3.变量和常量
4.数据类型
5.运算符
6.逻辑结构
7.通用的小程序
8.函数和对象
9.第三方的库和框架
10.个人项目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值