MySQL第四章 查询语句大汇总!(附带详细代码!!!)

CSDN话题挑战赛第2期
参赛话题:学习笔记

目录

一.简单查询

查询特定的列

查询所有的列

给列起别名

显示不同的记录

查询时执行计算

查询结果排序 

条件查询 

模糊条件查询

分页查询  

二.复杂查询 


!!!查询之前为大家提供一张员工表,这是我们后续查询所用到的

--设置客户端连接服务器端的编码
set names utf8;
--丢弃数据库如果存在
drop database if exists zyh;
--创建新的数据库,设置存储字符的编码
create database zyh charset=utf8;
--进入创建的数据库
use zyh;
--创建保存部门数据的表
create table dept(
	did int primary key auto_increment,
	dname varchar(16) unique
);
--插入数据
insert into dept values(10,'研发部');
insert into dept values(20,'运营部');
insert into dept values(30,'市场部');
insert into dept values(40,'测试部');
--创建保存员工数据的表
create table emp(
	eid int primary key auto_increment,
	ename varchar(16) not null,
	sex boolean default 0,  #1-男  0-女
	birthday date,
	salary decimal(8,2),   #999999.99
	deptid int,
	foreign key(deptid) references dept(did)
);
--插入数据
insert into emp values(null,'tao',default,'1973-7-15',50000,20);
INSERT INTO emp VALUES(NULL,'Tom',1,'1990-5-5',6000,20);
INSERT INTO emp VALUES(NULL,'Jerry',0,'1991-8-20',7000,10);
INSERT INTO emp VALUES(NULL,'David',1,'1995-10-20',3000,30);
INSERT INTO emp VALUES(NULL,'Maria',0,'1992-3-20',5000,10);
INSERT INTO emp VALUES(NULL,'Leo',1,'1993-12-3',8000,20);
INSERT INTO emp VALUES(NULL,'Black',1,'1991-1-3',4000,10);
INSERT INTO emp VALUES(NULL,'Peter',1,'1990-12-3',10000,10);
INSERT INTO emp VALUES(NULL,'Franc',1,'1994-12-3',6000,30);
INSERT INTO emp VALUES(NULL,'Tacy',1,'1991-12-3',9000,10);
INSERT INTO emp VALUES(NULL,'Lucy',0,'1995-12-3',10000,20);
INSERT INTO emp VALUES(NULL,'Jone',1,'1993-12-3',8000,30);
INSERT INTO emp VALUES(NULL,'Lily',0,'1992-12-3',12000,10);
INSERT INTO emp VALUES(NULL,'Lisa',0,'1989-12-3',8000,10);
INSERT INTO emp VALUES(NULL,'King',1,'1988-12-3',10000,10);
INSERT INTO emp VALUES(NULL,'Brown',1,'1993-12-3',22000,NULL);

一.简单查询

  1. 查询特定的列

    1. 示例: 查询出所有员工的编号和姓名
    2.   select eid,ename from emp;
    3. 练习:查询出所有员工的姓名,性别,生日,工资
    4. select ename,sex,birthday,salary from emp;
  2. 查询所有的列

    1. select * from emp;
  3. 给列起别名

    1. as 用于设置别名,as也可以省略,保留空格即可。
    2. 示例:查询出所有员工编号和姓名,使用一个字母作为别名
    3.  select eid as a,ename as b from emp;
    4. 练习:查询出所有员工姓名、生日、工资,使用一个字母作为别名
    5.  select ename a,birthday b,salary c from emp;
  4. 显示不同的记录

    1. distinct  不同的,有区别的,显示不同的记录。
    2. 示例:查询出员工都分布在哪些部门
    3. select distinct deptid from emp;
    4.  练习:查询出都有哪些性别的员工
    5.   select distinct sex from emp;

  5. 查询时执行计算

    1. 示例:计算2+3+4*5+7*3
    2.  select 2+3+4*5+7*3;
    3. 练习:查询出所有员工的姓名及其年薪
    4. select ename,salary*12 from emp;

    5. 练习:假设每个员工的工资增长2000,年终奖30000,查询出所有员工的姓名及其年薪,使用一个字母作为别名
    6.  select ename a,(salary+2000)*12+30000 b from emp;
  6. 查询结果排序 

    1. order by(排序) asc(升序) desc(降序)
    2. 示例:查询出所有的部门,结果按照编号升序排列
    3. select * from dept order by did asc;  
    4. 示例:查询出所有的部门,结果按照编号降序排列
    5.   select * from dept order by did desc; 

  7. 条件查询 

    1. and / &&   两个条件都满足  or / ||   两个条件满足一个
    2. 示例:查询出编号为5的员工 
    3.  select * from emp where eid=5;
    4. 练习:查询出没有明确部门的员工
    5. select * from emp where deptid is null;
    6. 练习:查询出有明确部门的员工
    7.   select * from emp where deptid is not null;
    8. 练习:查询出20号部门或者30号部门的员工有哪些
    9. select * from emp where deptid=20 or deptid=30;
      select * from emp where deptid in(20,30);
    10. 练习:查询出不在20号部门并且不在30号部门的员工有哪些
    11. select * from emp where deptid!=20 and deptid!=30;
      select * from emp where deptid not in(20,30);

  8. 模糊条件查询

    1.  
      1. %  匹配任意个字符  >=0
      2. _  匹配任意1个字符  =1
      3. 以上两个匹配符号必须结合like关键字使用
    2. 示例:查询出姓名中含有字母e的员工有哪些
    3. select * from emp where ename like '%e%';
    4. 练习:查询出姓名中以e结尾的员工有哪些
    5.  select * from emp where ename like '%e';
    6. 练习:查询出姓名中倒数第2个字符是e的员工有哪些
    7.   select * from emp where ename like '%e_';
  9. 分页查询  

    1. 查询的结果有太多的数据,一次显示不完可以做出分页显示
       需要两个已知的条件:当前的页码每页的数据量
    2. 每页开始查询的值 = (当前的页码 - 1)*每页的数据量
    3. select * from emp  limit  开始查询的值, 每页的数据量

二.复杂查询 

  1. 聚合查询
    1. count()/sum()/avg()/max()/min()
    2. 示例:查询出所有员工的数量
    3.   select count(*) from emp;
    4. .练习:使用员工的编号查询数量
    5.   select count(eid) from emp;  #推荐使用主键列
  2.  分组查询
    1. 分组查询通常只是用来查询分组条件和聚合函数
    2. group  by  列名称      按照某一个列进行分组
    3. 示例:查询出男女员工的数量、平均工资分别是多少
    4. select count(eid),avg(salary),sex from emp group by sex;
    5. 练习:查询出各部门的工资总和,最高工资,最低工资
    6.  select sum(salary),max(salary),min(salary), deptid from emp group by deptid;

  3. year()  获取日期中的年份部分 
    1. 示例:查询出所有员工出生的年份
    2.    select year(birthday) from emp;
    3. 练习:查询出1993年出生的员工所有的列
    4.  select * from emp where year(birthday)=1993;
  4. 子查询
    1. 是多个查询命令的组合,把其中一个的结果作为另一个的条件来使用
    2. 示例:查询出工资最高的员工
    3. 步骤1:查询出工资的最高值 —— 50000
    4.   select max(salary) from emp;
    5. 步骤2:查询工资最高值对应的员工.
    6.    select * from emp where salary=50000;
    7. 综合:
    8.  select * from emp where salary=(select max(salary) from emp);

  5.  多表查询
    1. 要查询的列分布在多个表中,前提表之间已经建立了关联
      1. 防止列名称相同,在列名称的前边加上表名称。
      2.  示例:查询出所有员工的姓名及其部门名称
      3. select emp.ename,dept.dname from emp,dept where emp.deptid=dept.did;
    2. 内连接
      1. select ename,dname from emp inner join dept on deptid=did;
      2. 和之前(1)的查询结果是一样的
    3. 左外连接
      1. select ename,dname from emp left outer join dept on deptid=did;
      2. 显示主表中所有的记录
    4. 右外连接
      1. select ename,dname from emp right outer join dept on deptid=did;
      2. 显示副表中所有的记录
    5. 全连接:full join … on
      1. mysql不支持全连接
      2. 解决方法:将左外连接和右外连接进行联合,合并相同记录。
      3. (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);

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张的俊.

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值