• (七)MySQL数据操作DQL:单表查询1


    (1)单表查询

    1)环境准备

    mysql> CREATE TABLE company.employee5(
    id int primary key AUTO_INCREMENT not null,
    name varchar(30) not null,
    sex enum('male','female') default 'male' not null,
    hire_date date not null,
    post varchar(50) not null,
    job_description varchar(100),
    salary double(15,2) not null,
    office int,
    dep_id int
    );
    
    insert into
    company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values
    ('jack','male','20180202','instructor','teach',5000,501,100),
    ('tom','male','20180203','instructor','teach',5500,501,100),
    ('robin','male','20180202','instructor','teach',8000,501,100),
    ('alice','female','20180202','instructor','teach',7200,501,100),
    ('tianyun','male','20180202','hr','hrcc',600,502,101),
    ('harry','male','20180202','hr',NULL,6000,502,101),
    ('emma','female','20180206','sale','salecc',20000,503,102),
    ('christine','female','20180205','sale','salecc',2200,503,102),
    ('zhuzhu','male','20180205','sale',NULL,2200,503,102),
    ('gougou','male','20180205','sale','',2200,503,102);
    

    2)简单查询

    语法

    select 字段1,字段2 from 表名;
    select * from 表名;
    

    查询表中指定字段的数据

    mysql> select name,salary,post from employee5;
    +-----------+----------+------------+
    | name      | salary   | post       |
    +-----------+----------+------------+
    | jack      |  5000.00 | instructor |
    | tom       |  5500.00 | instructor |
    | robin     |  8000.00 | instructor |
    | alice     |  7200.00 | instructor |
    | tianyun   |   600.00 | hr         |
    | harry     |  6000.00 | hr         |
    | emma      | 20000.00 | sale       |
    | christine |  2200.00 | sale       |
    | zhuzhu    |  2200.00 | sale       |
    | gougou    |  2200.00 | sale       |
    +-----------+----------+------------+
    

    查询表中的所有数据

    mysql> select * from employee5;
    +----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
    | id | name      | sex    | hire_date  | post       | job_description | salary   | office | dep_id |
    +----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
    |  1 | jack      | male   | 2018-02-02 | instructor | teach           |  5000.00 |    501 |    100 |
    |  2 | tom       | male   | 2018-02-03 | instructor | teach           |  5500.00 |    501 |    100 |
    |  3 | robin     | male   | 2018-02-02 | instructor | teach           |  8000.00 |    501 |    100 |
    |  4 | alice     | female | 2018-02-02 | instructor | teach           |  7200.00 |    501 |    100 |
    |  5 | tianyun   | male   | 2018-02-02 | hr         | hrcc            |   600.00 |    502 |    101 |
    |  6 | harry     | male   | 2018-02-02 | hr         | NULL            |  6000.00 |    502 |    101 |
    |  7 | emma      | female | 2018-02-06 | sale       | salecc          | 20000.00 |    503 |    102 |
    |  8 | christine | female | 2018-02-05 | sale       | salecc          |  2200.00 |    503 |    102 |
    |  9 | zhuzhu    | male   | 2018-02-05 | sale       | NULL            |  2200.00 |    503 |    102 |
    | 10 | gougou    | male   | 2018-02-05 | sale       |                 |  2200.00 |    503 |    102 |
    +----+-----------+--------+------------+------------+-----------------+----------+--------+--------+
    

    3)避免去重distinct,通常仅用于某一个字段

    语法

    select distinct 字段 from 表名;
    

    查询雇员表中的部门,把部门字段去重

    mysql> select distinct post from employee5;
    +------------+
    | post       |
    +------------+
    | instructor |
    | hr         |
    | sale       |
    +------------+
    3 rows in set (0.00 sec)
    
    mysql> select post from employee5;
    +------------+
    | post       |
    +------------+
    | instructor |
    | instructor |
    | instructor |
    | instructor |
    | hr         |
    | hr         |
    | sale       |
    | sale       |
    | sale       |
    | sale       |
    +------------+
    10 rows in set (0.00 sec)
    

    4)通过四则运算查询,

    语法:
    select 字段1,字段2,字段数字 from 表名;
    select 字段1,字段2,字段2
    数字 as 新字段名字 from 表名
    select 字段1,字段2,字段2*数字 新字段名字 from 表名
    根据月薪水查14年薪

    mysql> select name,salary,salary*14 from employee5;   \创建一个新的年薪14薪字段(salary*14)
    mysql> select name,salary,salary*14 as annual_salary from employee5;   \给salary*14这个设置一个别名
    mysql> select name,salary,salary*14 annual_salary from employee5;   \salary*14 设定别名(annual_salary)
    
    mysql>  select name,salary,salary*14 from employee5; 
    +-----------+----------+-----------+
    | name      | salary   | salary*14 |
    +-----------+----------+-----------+
    | jack      |  5000.00 |  70000.00 |
    | tom       |  5500.00 |  77000.00 |
    | robin     |  8000.00 | 112000.00 |
    | alice     |  7200.00 | 100800.00 |
    | tianyun   |   600.00 |   8400.00 |
    | harry     |  6000.00 |  84000.00 |
    | emma      | 20000.00 | 280000.00 |
    | christine |  2200.00 |  30800.00 |
    | zhuzhu    |  2200.00 |  30800.00 |
    | gougou    |  2200.00 |  30800.00 |
    +-----------+----------+-----------+
    10 rows in set (0.00 sec)
    
    mysql> select name,salary,salary*14 as annual_salary from employee5;
    +-----------+----------+---------------+
    | name      | salary   | annual_salary |
    +-----------+----------+---------------+
    | jack      |  5000.00 |      70000.00 |
    | tom       |  5500.00 |      77000.00 |
    | robin     |  8000.00 |     112000.00 |
    | alice     |  7200.00 |     100800.00 |
    | tianyun   |   600.00 |       8400.00 |
    | harry     |  6000.00 |      84000.00 |
    | emma      | 20000.00 |     280000.00 |
    | christine |  2200.00 |      30800.00 |
    | zhuzhu    |  2200.00 |      30800.00 |
    | gougou    |  2200.00 |      30800.00 |
    +-----------+----------+---------------+
    10 rows in set (0.00 sec)
    
    mysql> select name,salary,salary*14 annual_salary from employee5;
    +-----------+----------+---------------+
    | name      | salary   | annual_salary |
    +-----------+----------+---------------+
    | jack      |  5000.00 |      70000.00 |
    | tom       |  5500.00 |      77000.00 |
    | robin     |  8000.00 |     112000.00 |
    | alice     |  7200.00 |     100800.00 |
    | tianyun   |   600.00 |       8400.00 |
    | harry     |  6000.00 |      84000.00 |
    | emma      | 20000.00 |     280000.00 |
    | christine |  2200.00 |      30800.00 |
    | zhuzhu    |  2200.00 |      30800.00 |
    | gougou    |  2200.00 |      30800.00 |
    +-----------+----------+---------------+
    10 rows in set (0.00 sec)
    

    5)定义显示格式:contcat()函数用于连接字符串

    mysql>  select concat(name,'annual salary:',salary*14) as annual_salary from employee5;
    +---------------------------------+
    | annual_salary                   |
    +---------------------------------+
    | jackannual salary:70000.00      |
    | tomannual salary:77000.00       |
    | robinannual salary:112000.00    |
    | aliceannual salary:100800.00    |
    | tianyunannual salary:8400.00    |
    | harryannual salary:84000.00     |
    | emmaannual salary:280000.00     |
    | christineannual salary:30800.00 |
    | zhuzhuannual salary:30800.00    |
    | gougouannual salary:30800.00    |
    +---------------------------------+
    

    (2)单条件查询

    语法:
    select 字段1,字段2 from 表名 where 条件;

    1)单条件查询

    mysql> select name,salary from employee5 where name='jack';
    +------+---------+
    | name | salary  |
    +------+---------+
    | jack | 5000.00 |
    +------+---------+
    

    2)多条件查询:查询工资大于5000和小于20000的姓名

    语法:
    select select 字段1,字段2 from 表名 where 条件1 and 条件2;
    select select 字段1,字段2 from 表名 where 条件1 or 条件2;

    mysql> select name,salary from employee5 where salary > 5000 and salary <20000;
    +-------+---------+
    | name  | salary  |
    +-------+---------+
    | tom   | 5500.00 |
    | robin | 8000.00 |
    | alice | 7200.00 |
    | harry | 6000.00 |
    +-------+---------+
    

    3)关键字between and

    查询工资大于等于5000和小于等于20000的姓名

    mysql> select name,salary from employee5 where salary between 5000 and 20000;
    mysql> select name,salary from employee5 where salary not  between 5000 and 20000;
    

    4)关键字 is null

    查询字段是空的值

    mysql> select name,job_description from employee5 where job_description is null;
    

    5)关键字in 集合查询

    查询工资是5000和6000的都是哪些人,和不是哪些人

    mysql> select name,salary from employee5 where salary=5000 or salary=6000;
    mysql> select name,salary from employee5 where salary in(5000,6000);
    mysql> select name,salary from employee5 where salary not in(5000,6000);
    

    6)模糊查询,关键字:like

    通配符:%,匹配任意长度字符

    mysql> select * from employee5 where name like 'al%';
    

    通配符:_ 匹配任意单个字符

    mysql> select * from employee5 where name like 'al_';
    

    (3)查询排序

    1)单列排序

    按照薪水排序
    mysql> select * from employee5 order by salary;   //升序
    按照薪水降序
    mysql> select * from employee5 order by salary desc; //降序
    

    2)按多列排序

    先按入职时间排序,再按薪水排序

    mysql> select * from employee5 order by hire_date ,salary asc;
    

    (4)限制查询的记录数

    mysql> select * from employee5 order by salary limit 5;    \取前5条数据,默认初始位置是0
    mysql> select * from employee5 order by salary limit 4,5;  \从第3条数据开始,取5条数据
    

    (5)使用集合函数查询

    count(*) 统计行数据
    max(字段) 取字段最大值
    min(字段) :取字段最小值
    avg(字段) :平均
    sum(字段) :取字段和

    mysql> select count(*) from employee5;
    mysql> select count(*) from employee5 where post='hr';
    

    查询薪水最高的人所有信息

    mysql> select * from employee5 where salary = (select max(salary) from employee5);  //子查询
    

    (6)分组查询

    1)group by和group_concat()函数一起使用

    根据部门id进行分组,把相同部门的人统计出来(拼接)

    mysql> select dep_id,group_concat(name) from employee5  group by dep_id;
    

    根据部门进行分组,把部门的每个人姓名打印出来(拼接)

    mysql> select post,group_concat(name) from employee5  group by post;
    

    2)group by和集合函数一起使用

    根据部门进行分组,取每个部门薪水最大的

    mysql> select post,max(salary) from employee5 group by post;
    

    (7)使用正则进行匹配

    mysql> select name,salary from employee5 where name regexp 'm{2}';
    mysql> select name,salary from employee5 where name regexp 'yun$';
    mysql> select name,salary from employee5 where name regexp '^m';
    
  • 相关阅读:
    hdu 5961 传递(暴力搜索)
    hdu 3577 Fast Arrangement(线段树区间修改,求区间最小值)
    hdu 5898 odd-even number(数位dp)
    Python-编码
    Golang-教程
    Python-待
    Python_每日习题_0006_斐波那契数列
    计算机网络
    Python_老男孩练习题1
    Python_内置函数2_44
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/8902457.html
Copyright © 2020-2023  润新知