(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';

(七)MySQL数据操作DQL:单表查询1的更多相关文章

  1. (七)MySQL数据操作DQL:多表查询2

    (1)准备环境 1)创建员工表 mysql> create table company.employee6( -> emp_id int auto_increment primary ke ...

  2. mysql第四篇:数据操作之单表查询

    单表查询 一.简单查询 -- 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCRE ...

  3. 06-查询操作(DQL)-单表查询

    一. 综述   查询操作主要从两个方面来说:单表查询和多表查询. 单表查询包括:简单查询.过滤查询.结果排序.分页查询.聚集函数. 二 . 案例设计   1. 设计产品表(product).包括:主键 ...

  4. mysql第四篇:数据操作之多表查询

    mysql第四篇:数据操作之多表查询 一.多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment ...

  5. Mysql基础(四):库、表、记录的详细操作、单表查询

    目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...

  6. mysql查询操作之单表查询、多表查询、子查询

    一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...

  7. 查询数据SELECT 之单表查询

    一.单表查询的语法与关键字的执行优先级""" # 单表查询# 单标查询完整与法:# select distinct(关键字,代表查询的意思,后面跟)字段1,字段2...( ...

  8. mysql四-1:单表查询

    一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...

  9. 07-查询操作(DQL)-多表查询

    一. 综述    查询操作主要从两个方面来说:单表查询和多表查询. 多表查询包括:笛卡尔积.外键约束.内连接查询.外链接查询.自连接查询. 二 . 案例设计   1.  设计产品表(product). ...

随机推荐

  1. sql数值比较

  2. luogu P2764 最小路径覆盖问题

    题目描述 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开始,长度也是任 ...

  3. [NOIP2016]换教室 期望dp

    先弗洛伊德,然后把状态拆分遗传 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  4. Ubuntu下安装LNMP之php7的安装并配置Nginx支持php及卸载php

    据了解,php7是比之前的版本性能快很多的.http://php.net/get/php-7.2.2.tar.gz/from/a/mirror 安装前也可提前将相关依赖库安装好,或者在安装php时若安 ...

  5. [8.16模拟赛] 玩具 (dp/字符串)

    题目描述 儿时的玩具总是使我们留恋,当小皮还是个孩子的时候,对玩具更是情有独钟.小皮是一个兴趣爱好相当广泛且不专一的人,这这让老皮非常地烦恼.也就是说,小皮在不同时刻所想玩的玩具总是会不同,而有心的老 ...

  6. [poj 2342]简单树dp

    题目链接:http://poj.org/problem?id=2342 dp[i][0/1]表示以i为根的子树,选或不选根,所能得到的最大rating和. 显然 dp[i][0]=∑max(dp[so ...

  7. 生产服务器环境最小化安装后Centos 6.5优化配置备忘

    生产服务器环境最小化安装后 Centos 6.5优化配置备忘 本文 centos 6.5 优化 的项有18处,列表如下: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行S ...

  8. html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍(转载)

    HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft: 设置或获取位于 ...

  9. 「6月雅礼集训 2017 Day1」说无可说

    [题目大意] 给出n个字符串,求有多少组字符串之间编辑距离为1~8. n<=200,∑|S| <= 10^6 [题解] 首先找编辑距离有一个n^2的dp,由于发现只找小于等于8的,所以搜旁 ...

  10. 【EOJ3652】乘法还原(二分图)

    题意: 思路:Orz Claris 先找出所有平方项,将与有平方项的数有关的数对暂时忽略,剩下的直接连边就是一张二分图,暴力DFS染色 将有平方项的数两边都加一个,再判字典序即可 我不会判字典序……耽 ...