数据库
首页 > 数据库> > mysql学习笔记-DQL-数据查询

mysql学习笔记-DQL-数据查询

作者:互联网

一、查询语法介绍

# 1、查询多个字段
语法  SELECT 字段1,字段2,字段3…… FROM 表名;
语法  SELECT * 表名;

# 2、设置别名 ,AS可省略
语法  SELECT 字段1[AS别名1],字段2[AS别名2],字段3[AS别名3] …… FROM 表名;

# 3、删除重复数据
语法  SELECT DISTINCT 字段列表 FROM 表名;


二、简单查询
-- 数据准备
# 切换到itcast数据库
use itcast
# 创建表
CREATE TABLE emp  (
  `id`                     int NULL                     COMMENT '编号',
  `workno`             varchar(10) NULL     COMMENT '工号',
  `name`                 varchar(10) NULL     COMMENT '姓名',
  `gender`             char(1) NULL             COMMENT '姓别',
  `age`                 tinyint unsigned NULL COMMENT '年龄',
  `idcard`             char(18) NULL            COMMENT '身份证号',
  `workaddress` varchar(255) NULL COMMENT '工作地址',
  `entydate`         date                          COMMENT '入职时间'
) COMMENT = '员工表';

# 插入数据
insert into epm(id,workno,name,gender,age,idcard,workaddress,entydate)
values(………………)
+------+--------+--------+--------+------+--------------------+-------------+------------+
| id   | workno | name   | gender | age  | idcard             | workaddress | entydate   |
+------+--------+--------+--------+------+--------------------+-------------+------------+
|    1 | 10001  | 罗时   | 男     |   32 | 110115199010012899 | 北京        | 2007-00-20 |
|    2 | 10002  | 余尧   | 男     |   23 | 110115199910013971 | 上海        | 2006-09-20 |
|    3 | 10003  | 熊彪   | 男     |   30 | 110115199210013881 | 武汉        | 2010-02-20 |
|    4 | 10004  | 秦良   | 男     |   35 | 110115198710013764 | 北京        | 2003-07-20 |
|    5 | 10005  | 范炎   | 男     |   13 | 110115200910012611 | 福州        | 2009-09-20 |
|    6 | 10006  | 钱家   | 男     |   32 | 110115199010013379 | 武汉        | 2010-00-20 |
|    7 | 10007  | 崔安   | 男     |   12 | 110115201010012183 | 北京        | 2010-00-20 |
|    8 | 10008  | 彭之饭 | 男     |   28 | 110115199410012222 | 上海        | 2009-04-20 |
|    9 | 10009  | 朱昱   | 男     |   27 | 11011519951001336X | 江苏        | 2002-05-20 |
|   10 | 10010  | 叶谊   | 男     |   21 | 110115200110013837 | 厦门        | 2009-01-20 |
|   11 | 10011  | 韩艳   | 女     |   12 | 110115201010013728 | 北京        | 2004-00-20 |
|   12 | 10012  | 夏咛   | 女     |   28 | 110115199410013621 | 上海        | 2004-04-20 |
|   13 | 10013  | 顾英   | 女     |   14 | 110115200810011376 | 上海        | 2002-08-20 |
|   14 | 10014  | 朱丽云 | 女     |   20 | 110115200210013016 | 福州        | 2008-02-20 |
|   15 | 10015  | 姜盈   | 女     |   25 | 11011519971001145X | 武汉        | 2009-07-20 |
|   16 | 10016  | 顾心林 | 女     |   28 | 110115199410011314 | 北京        | 2012-04-20 |
|   17 | 10017  | 薛烟   | 女     |   25 | 110115199710011583 | 上海        | 2008-07-20 |
|   18 | 10018  | 吴媱   | 女     |   36 | 110115198610012222 | 北京        | 2001-06-20 |
|   19 | 10019  | 萧俪   | 女     |   12 | 110115201010012009 | 武汉        | 2003-00-20 |
|   20 | 10020  | 邓菊   | 女     |   31 | NULL               | 福州        | 2006-01-20 |
+------+--------+--------+--------+------+--------------------+-------------+------------+

# 1、查询指定字段name,workno,age返回
select name,workno,age from emp;

# 2、查询所有字段并返回,项目中尽量写出查询字段,方便后期维护

select id, workno, name, gender,age,idcard,workaddress,entydate from emp;

select * from emp;

# 3、查询所有员工工作地址,取别名。as可以省略
select workaddress as '工作地址'from emp;
select workaddress '工作地址'from emp;

# 4、查询员工的上班地址(不要重复)
select distinct workaddress from emp;


三、条件查询WHERE
语法 select 字段列表 from 表名 where 条件列表;

-- 1、查询年龄=20的员工
select * from emp where age=20;
-- 2、查询年龄>20岁的员工
select * from emp where age>20;
-- 3、查询年龄<=20岁的员工
select * from emp where age<=20;
-- 4、查询没有身份证号的员工
select * from emp where idcard is null;
-- 5、查询有身份证号的员工
select * from emp where idcard is not null;
-- 6、查询年龄不等于20岁的员工
select * from emp where age<>20;
select * from emp where age!=20;

-- 7、查询年龄15-20岁的员工,包含15,20
select * from emp where age>=15 && age<=20;
select * from emp where age>=15 and age<=20;
# between 后最小值,and后跟的是最大值
select * from emp where age between 15 and 20;
-- 8、性别为女,且年龄小于20岁
select * from emp where gender='女' and age<20;
-- 9、查询年龄等于18 or 28 or 30
select * from emp where age=18 or age=28 or age=30;
select * from emp where age in (18,28,30);
-- 10、查询名字为三个字的员工
select * from emp where name like '朱_';
select * from emp where name like '朱%';
-- 11、身份证号最后一位为X的员工
select * from emp WHERE IDCARD LIKE '%X';
select * from emp WHERE IDCARD LIKE '_________________X';

四、聚合函数
-- 1、聚合函数 作用于某一列 null不参与运算
-- count,max,min,avg,sum
语法 select 聚合函数(字段列表)from 表名;

-- 1、统计该企业员工数量
select count(*) from emp;
select count(id) from emp;
select count(idcard) from emp;
-- 2、统计员工平均年龄
select avg(age) from emp;
-- 3、统计员工最大年龄
select max(age) from emp;
-- 4、统计员工最小年龄
select min(age) from emp;
-- 5、统计武汉区域所有员工年龄之和
select * from emp where workaddress = '武汉';
select sum(age) from emp where workaddress = '武汉';


五、分组查询(group by

语法 select 字段列表 from 表名 [where 分组前过滤条件] group by 分组字段名 [having 分组后过滤条件]
-- where和having区别
-- 1、执行时机不同,where是分组之前过滤,不满足where的条件,不参与分组;而having是分组之后对结果进行过滤。
-- 2、判断条件不同,where不能对聚合函数进行判断,而having可以

-- 1、根据性别分组,统计为男性员工和女性员工的数量。
select count(*) from emp group by gender;
select gender, count(*) from emp group by gender;
-- select gender,name, count(*) from emp group by gender,name;
-- 2、根据性别分组,统计为男性运功和女性员工的平均年龄。
select gender, avg(age) from emp group by gender;
-- 3、查询年龄小于25岁的员工,并根据工作地址分组,获取员工大于等于3的工作地址。
select * from emp where age<45;
select workaddress, count(*) from emp where age<45 group by workaddress having count(*)>=3;
# 别名用法
select workaddress, count(*)as address_count from emp where age<45 group by workaddress having address_count>=3;

六、排序查询order by

语法 select 字段列表 form 表名 order by 字段1 排序方式1,字段2 排序方式2……;
-- 排序方式
--         asc:升序(默认值)
--         desc:降序
--    多字段排序,当第一个字段值相同,才会根据第二个字段排序。

-- 1、根据年龄对公司的员工进行升序排序
select * from emp order by age;
select * from emp order by age asc;
select * from emp order by age desc;
-- 2、根据入职时间对员工进行降序排序
select * from emp order by entydate desc;
-- 3、根据年龄对公司员工进行升序排序,年龄相同,再根据入职时间进行降序排序。
select * from emp order by age asc , entydate desc;
-- 先年龄升序,年龄相同,再入职升序
select * from emp order by age asc , entydate asc;
select * from emp order by age , entydate;


七、分页查询 LIMIT

语法 select 字段列表 from 表名 limit 起始索引,查询记录数; 语法 select 字段列表 from 表名 [where 条件] [order by 字段1 排序方式1,字段2 排序方式2]limit 起始索引,查询记录数; 注意: 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。 分页查询是数据的方言,不同的数据库有不同的方法,mysql使用的是limit。 如果查询的是第一页数据,起始索引是可以省略的,直接简写limit 10。 -- 1、查询第一页的员工数据,每页展示10条数据 select * from emp limit 0, 10; select * from emp limit 10; -- 2、查询第二页员工数据,每页展示10条数据 select * from emp limit 3, 3; select * from emp limit 10, 10; 八、DQL案例 -- 1、查询年龄为10,21,22,23岁的员工信息 select * from emp where age in (10,21,22,23); -- 2、查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工 select * from emp where gender = '男' and (age between 20 and 40) and name like '___'; -- 3、统计员工表中,年龄小于30岁的,男性员工和女性员工的人数。 select* from emp where age<30; select gender, count(gender) from emp where age<30 group by gender; -- 4、查询所有年龄小于等于25岁员工姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序 select name,age from emp where age<=25 order by age asc,entydate desc; -- 5、查询性别为女,且年龄在10-30岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同的按入职时间升序排序。 select * from emp where gender = '女' and (age between 10 and 30) order by age asc, entydate asc limit 0,5; 九、DQL语句执行顺序 执行顺序: 4 select 字段列表 1 from 表名列表 2 where 条件列表 3 group by 分组字段列表 having 分组后条件列表 5 order by 排序字段列表 6 limit 分页参数 -- 查询年龄大于15的员工姓名,年龄,根据年龄进行升序排序。 select e.name,e.age from emp as e where e.age>15 order by age;

 

标签:20,--,age,笔记,emp,mysql,DQL,where,select
来源: https://www.cnblogs.com/zxzxq/p/16464301.html