MySql教程

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;

 

这篇关于mysql学习笔记-DQL-数据查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!