(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. [HDU6304][数学] Chiaki Sequence Revisited-杭电多校2018第一场G

    [HDU6304][数学] Chiaki Sequence Revisited -杭电多校2018第一场G 题目描述 现在抛给你一个数列\(A\) \[ a_n=\begin{cases}1 & ...

  2. P3434 [POI2006]KRA-The Disks

    题目描述 For his birthday present little Johnny has received from his parents a new plaything which cons ...

  3. P4467 [SCOI2007]k短路

    题目描述 有 n 个城市和 m 条单向道路,城市编号为 1 到 n .每条道路连接两个不同的城市,且任意两条道路要么起点不同要么终点不同,因此 n 和 m 满足 m \le n(n-1)m≤n(n−1 ...

  4. P1559 运动员最佳匹配问题

    题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...

  5. [HDU5956]The Elder

    题面在这里 题意 一个王国中的所有城市构成了一棵有根树,其根节点为首都,编号为1 树有边权,城市的记者每次向祖先移动\(d\)的路程需要的代价为\(d^2\), 如果祖先不是根还需要加上\(p\),求 ...

  6. [Leetcode] search a 2d matrix 搜索二维矩阵

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  7. bootstrap和bootstrap-select去除蓝色边框outline

    /*bootstrap outline设置*/ .btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.fo ...

  8. Android开发注意点小记

    暂时主要讨论以下几点: Android引用外部包,报NoClassDefFoundError异常崩溃 同名包引用关系问题 程序图标 9patch图片素材 Android引用外部包,程序报java.la ...

  9. HDU1151:Air Raid(最小边覆盖)

    Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  10. Codeforces Round #520 (Div. 2) C. Banh-mi

    C. Banh-mi time limit per test:1 second memory limit per test:256 megabytes 题目链接:https://codeforc.es ...