数据库的简单查询和复杂查询

  1. 简单查询
    a) 模糊条件查询
    示例:查询员工姓名中含有字母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个或者是多个字符,和like才有匹配功能 >=0
    _匹配任意一个字符 =1
    以上两个匹配的符合只能结合LIKE使用
    b) 分页查询
    查询的结果集有太多数据,一次显示不完可以做成分页显示
    需要有两个已知的条件:当前的页码和每页的数据量
    开始查询的值 = (当前的页码-1)* 每页的数据量
    语法:
    SELECT * FROM emp LIMIT 开始查询的值,每页的数据量;
    假设每页显示5条数据
    第一页:SELECT * FROM emp LIMIT 0,5;
    第二页:SELECT * FROM emp LIMIT 5,5;
    第三页:SELECT * FROM emp LIMIT 10,5;
    分页查询中的开始查询的值和每页的数据量必须是数值型,不能添加引号。

  2. 复杂查询
    (1)聚合查询和分组查询
    示例:查询出所有员工的数量
    SELECT count(eid) FROM emp; #推荐使用主键列
    练习:通过部门编号这一列查询员工的数量
    SELECT count(deptld) FROM emp;
    练习通过姓名查询所有男员工的数量
    SELECT count(ename) FROM emp WHERE sex=1;
    聚合函数,函数是一个功能体,可以接收若干个数据,返回处理的结果-饺子机
    count() /sum()/ avg()/ max()/ min()
    数量 总和 平均 最大 最小
    练习:查询出所有员工工资的总和
    SELECT sum(salary) FROM emp;
    练习:查询出所有员工的平均工资
    SELECT avg(salary) FROM emp;
    练习:查询出男员工的最低工资
    SELECT min(salary) FROM emp WHERE sex = 1;
    练习查询出年龄最小的员工的生日
    SELECT max(birthday) FROM emp;

分组查询中只能查询聚合函数和分组条件
示例:查询出每个部门员工的最高工资,最低工资,平均工资
SELECT max(salary),min(salary),avg(salary),deptld FROM emp GROUP BY deptld;
练习:查询出男女员工的数量,工资总和,平均工资
SELECT count(eid),sum(salary),avg(salary),sex FROM emp GROUP BY sex;
(2)子查询
示例:查询研发部的员工有哪些
步骤1:查询出研发部的部门编号是多少
SELECT did FROM dept WHERE dname=’研发部’;
步骤2:查询出部门编号为10的员工有哪些
SELECT * FROM emp WHERE deptld=10;

综合:
	SELECT * FROM emp WHERE deptld=( SELECT did FROM dept WHERE dname=’研发部’);
练习:查询出比tom工资高的员工有哪些
	SELECT salary FROM emp WHERE ename=’tom’;
	SELECT * FROM emp WHERE salary>6000;
综合:
		SELECT * FROM emp WHERE salary>( SELECT salary FROM emp WHERE ename=’tom’;);

练习:查询出和tom同一年出生的员工有哪些
  1. 查询出tom出生的年份
    SELECT year(birthday) FROM emp WHERE ename=’tom’;
    2.查询出生年份是1990年的
    SELECT * FROM emp WHERE year(birthday) = 1990;
    综合:
    SELECT * FROM emp WHERE year(birthday)=( SELECT year(birthday) FROM emp WHERE ename=’tom’)AND ename!=’tom’;

year() 获取日期中的年份
示例:查询所有员工出生的年份
SELECT year(birthday) FROM emp;
(3)多表查询
示例:查询所有的员工姓名及其部门名称
SELECT ename,dname FROM emp,dept;
产生笛卡尔积,需要添加查询的条件才可以避免
SELECT ename,dname FROM emp,dept WHERE deptld=did;
存在的问题:无法查询出没有部门的员工,也无法查询出没有员工的部门。

新增的多表查询语法
(1) 内连接——inner join,与之前没有变化,是一种新增的语法
SELECT ename,dname FROM emp inner join dept on deptld = did;
(2) 左外连接
先写哪一个表,哪一个就是左,显示里边所有的记录,即使没有对应的
SELECT ename,dname FROM emp left outer join dept on deptld = did;
(3) 右外连接 right outer join
后写哪一个表,哪一个就是右,显示里边所有的记录,即使没有对应的
SELECT ename,dname FROM emp right outer join dept on deptld = did;
左外和右外连接中的outer关键字可以省略

(4) 全连接
full join
mysql不支持这种连接

左外和右外的结果组合起来
union (联合) 合并相同的记录
union all 不合并相同的记录
(SELECT ename,dname FROM emp left outer join dept on deptld = did)
union
(SELECT ename,dname FROM emp right outer join dept on deptld = did);

	项目中的日期时间
			时间戳:距离计算机元年(1970-1-1)的毫秒数
	1秒=1000毫秒
			2020-1-1和1970年相差50
			50*365*24*60*60*1000 = 1576800000000
		使用bigint才可以存下的

性别 1/0 男/女 man/woman 男孩/女孩

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值