数据库的查询(结合YGGL.sql)
(如有错误,欢迎指正!)
1.select 语句查询
(1)查询employees表员工部门号和性别,要求消除重复行。
mysql> select distinct 员工部门号,性别 from employees;
+-----------------+--------+
| 员工部门号 | 性别 |
+-----------------+--------+
| 2 | 1 |
| 1 | 1 |
| 1 | 0 |
| 5 | 1 |
| 3 | 0 |
| 3 | 1 |
| 4 | 1 |
| 4 | 0 |
+-----------------+--------+
8 rows in set (0.03 sec)
(2)计算salary表每个雇员的实际收入(实际收入=收入-支出)。
mysql> select (收入-支出) as 实际收入 from salary;
+--------------------+
| 实际收入 |
+--------------------+
| 1977.7100524902344 |
| 1494.5899963378906 |
| 2662 |
| 2167.679931640625 |
| 2384.2298889160156 |
| 1880 |
| 2978.459991455078 |
| 1907.4300079345703 |
| 2119 |
| 2770.499954223633 |
| 2332.8999786376953 |
| 1958.14990234375 |
+--------------------+
12 rows in set (0.00 sec)
(3)查询employees表中员工的姓名和性别,要求sex值为1时,显示为‘男’,为0时显示为‘女’。
mysql> Select 姓名,
case
when 性别=1 then "男"
when 性别=0 then "女"
end as 性别
from employees;
+-----------+--------+
| 姓名 | 性别 |
+-----------+--------+
| 王林 | 男 |
| 伍容华 | 男 |
| 王向容 | 男 |
| 李丽 | 女 |
| 刘明 | 男 |
| 朱俊 | 男 |
| 钟敏 | 女 |
| 张石兵 | 男 |
| 林涛 | 男 |
| 李玉珉 | 男 |
| 叶凡 | 男 |
| 陈林琳 | 女 |
+-----------+--------+
12 rows in set (0.00 sec)
(4)查询employees表每个雇员的地址和电话,列标题要求显示为 address 和 telephone。
mysql> select 地址 as adress, 电话号码 as telephone from employees;
+--------------------+-----------+
| adress | telephone |
+--------------------+-----------+
| 中山路32-1-508 | 83355668 |
| 北京东路100-2 | 83321321 |
| 四牌楼10-0-108 | 83792361 |
| 中山东路102-2 | 83413301 |
| 虎距路100-2 | 83606608 |
| 牌楼巷5-3-106 | 84708817 |
| 中山路10-3-105 | 83346722 |
| 解放路34-1-203 | 84563418 |
| 中山北路24-35 | 83467336 |
| 热和路209-3 | 58765991 |
| 北京西路3-7-52 | 83308901 |
| 汉中路120-4-12 | 84468158 |
+--------------------+-----------+
12 rows in set (0.00 sec)
(5)计算salary表中员工月收入的平均数。
mysql> select avg(收入)as 月平均收入 from salary;
+-------------------+
| 月平均收入 |
+-------------------+
| 2375.566640218099 |
+-------------------+
1 row in set (0.00 sec)
(6)计算所有员工的总支出。
mysql> select sum(支出) as 总支出 from salary;
+--------------------+
| 总支出 |
+--------------------+
| 1874.1499786376953 |
+--------------------+
1 row in set (0.00 sec)
(7)显示女雇主的地址和电话。
mysql> select 姓名, 地址,电话号码 from employees where 性别=0;
+-----------+-------------------+--------------+
| 姓名 | 地址 | 电话号码 |
+-----------+-------------------+--------------+
| 李丽 | 中山东路102-2 | 83413301 |
| 钟敏 | 中山路10-3-105 | 83346722 |
| 陈林琳 | 汉中路120-4-12 | 84468158 |
+-----------+-------------------+--------------+
3 rows in set (0.00 sec)
(8)计算员工总数。
mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
| 12 |
+----------+
1 row in set (0.00 sec)
(9)显示员工的最高收入和最低收入。
mysql> Select max(收入),min(收入) from salary;
+------------------+--------------------+
| max(收入) | min(收入) |
+------------------+--------------------+
| 3259.97998046875 | 1582.6199951171875 |
+------------------+--------------------+
1 row in set (0.00 sec)
2.条件查询
(1)显示月收入高于2000元员工的员工号。
mysql> select 员工编号 from salary where 收入>2000;
+--------------+
| 员工编号 |
+--------------+
| 000001 |
| 020010 |
| 020018 |
| 102201 |
| 108991 |
| 210678 |
| 302566 |
| 308759 |
| 504209 |
+--------------+
9 rows in set (0.00 sec)
(2)查询1970年以后的员工的姓名和地址。
mysql> select 姓名,地址 from employees where 出生日期>"1970-1-1";
+-----------+--------------------+
| 姓名 | 地址 |
+-----------+--------------------+
| 伍容华 | 北京东路100-2 |
| 王向容 | 四牌楼10-0-108 |
| 刘明 | 虎距路100-2 |
| 钟敏 | 中山路10-3-105 |
| 张石兵 | 解放路34-1-203 |
| 林涛 | 中山北路24-35 |
| 叶凡 | 北京西路3-7-52 |
+-----------+--------------------+
7 rows in set (0.00 sec)
(3)显示工作年限三年以上(包含3年)、学历在本科以上(包含本科)的男性员工的信息。
mysql> select * from employees where 工作年限>=3 and (学历="本科" or 学历="硕士") and 性别 = 1;
+--------------+-----------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+
| 员工编号 | 姓名 | 学历 | 出生日期 | 性别 | 工作年限 | 地址 | 电话号码 | 员工部门号 |
+--------------+-----------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+
| 010008 | 伍容华 | 本科 | 1976-03-28 | 1 | 3 | 北京东路100-2 | 83321321 | 1 |
| 102201 | 刘明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 热和路209-3 | 58765991 | 4 |
+--------------+-----------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+
3 rows in set (0.00 sec)
(4)查找员工中倒数第二个数字为0的员工的姓名、地址和学历。
mysql> select 姓名,地址,学历 from employees where 员工编号 like "%0_";
+-----------+-------------------+--------+
| 姓名 | 地址 | 学历 |
+-----------+-------------------+--------+
| 王林 | 中山路32-1-508 | 大专 |
| 伍容华 | 北京东路100-2 | 本科 |
| 刘明 | 虎距路100-2 | 本科 |
| 朱俊 | 牌楼巷5-3-106 | 硕士 |
| 张石兵 | 解放路34-1-203 | 本科 |
| 陈林琳 | 汉中路120-4-12 | 大专 |
+-----------+-------------------+--------+
6 rows in set (0.00 sec)
(5)查询月收入在2000-3000元的员工。
mysql> select * from salary where 收入>=2000 and 收入<=3000;
+--------------+---------+--------+
| 员工编号 | 收入 | 支出 |
+--------------+---------+--------+
| 000001 | 2100.8 | 123.09 |
| 020010 | 2860 | 198 |
| 020018 | 2347.68 | 180 |
| 102201 | 2569.88 | 185.65 |
| 210678 | 2240 | 121 |
| 302566 | 2980.7 | 210.2 |
| 308759 | 2531.98 | 199.08 |
| 504209 | 2066.15 | 108 |
+--------------+---------+--------+
8 rows in set (0.00 sec)
3.多表查询
(1)查询王林的基本情况和所工作的部门名称。
mysql> select * from employees e,departments d where e.员工部门号=d.部门编号 and 姓名="王林";
+--------------+--------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+--------------+-----------------+--------+
| 员工编号 | 姓名 | 学历 | 出生日期 | 性别 | 工作年限 | 地址 | 电话号码 | 员工部门号 | 部门编号 | 部门名称 | 备注 |
+--------------+--------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+--------------+-----------------+--------+
| 000001 | 王林 | 大专 | 1966-01-23 | 1 | 8 | 中山路32-1-508 | 83355668 | 2 | 2 | 人力资源部 | NULL |
+--------------+--------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+--------------+-----------------+--------+
1 row in set (0.00 sec)
(2)查询财务部、研发部、市场部的员工信息。(预习和学习子查询相关知识)
mysql> select * from employees e,departments d where e.员工部门号=d.部门编号 and (部门名称="财务部" or 部门名称="市场部" or 部门名称="研发部");
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+--------------+
| 员工编号 | 姓名 | 学历 | 出生日期 | 性别 | 工作年限 | 地址 | 电话号码 | 员工部门号 | 部门名称 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+--------------+
| 010008 | 伍容华 | 本科 | 1976-03-28 | 1 | 3 | 北京东路100-2 | 83321321 | 1 | 财务部 |
| 020010 | 王向容 | 硕士 | 1982-12-09 | 1 | 2 | 四牌楼10-0-108 | 83792361 | 1 | 财务部 |
| 020018 | 李丽 | 大专 | 1960-07-30 | 0 | 6 | 中山东路102-2 | 83413301 | 1 | 财务部 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 热和路209-3 | 58765991 | 4 | 研发部 |
| 308759 | 叶凡 | 本科 | 1978-11-18 | 1 | 2 | 北京西路3-7-52 | 83308901 | 4 | 研发部 |
| 504209 | 陈林琳 | 大专 | 1969-09-03 | 0 | 5 | 汉中路120-4-12 | 84468158 | 4 | 研发部 |
| 102201 | 刘明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 | 市场部 |
| 102208 | 朱俊 | 硕士 | 1965-09-28 | 1 | 2 | 牌楼巷5-3-106 | 84708817 | 5 | 市场部 |
| 111006 | 张石兵 | 本科 | 1974-10-01 | 1 | 1 | 解放路34-1-203 | 84563418 | 5 | 市场部 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+--------------+
9 rows in set (0.00 sec)
(3)查询每个雇员的基本情况和薪水情况。
(找到两种方法)
mysql> Select * from employees join salary using(员工编号);
mysql> Select * from employees e,salary s where e.员工编号=s.员工编号 ;
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+---------+--------+
| 员工编号 | 姓名 | 学历 | 出生日期 | 性别 | 工作年限 | 地址 | 电话号码 | 员工部门号 | 收入 | 支出 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+---------+--------+
| 000001 | 王林 | 大专 | 1966-01-23 | 1 | 8 | 中山路32-1-508 | 83355668 | 2 | 2100.8 | 123.09 |
| 010008 | 伍容华 | 本科 | 1976-03-28 | 1 | 3 | 北京东路100-2 | 83321321 | 1 | 1582.62 | 88.03 |
| 020010 | 王向容 | 硕士 | 1982-12-09 | 1 | 2 | 四牌楼10-0-108 | 83792361 | 1 | 2860 | 198 |
| 020018 | 李丽 | 大专 | 1960-07-30 | 0 | 6 | 中山东路102-2 | 83413301 | 1 | 2347.68 | 180 |
| 102201 | 刘明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 | 2569.88 | 185.65 |
| 102208 | 朱俊 | 硕士 | 1965-09-28 | 1 | 2 | 牌楼巷5-3-106 | 84708817 | 5 | 1980 | 100 |
| 108991 | 钟敏 | 硕士 | 1979-08-10 | 0 | 4 | 中山路10-3-105 | 83346722 | 3 | 3259.98 | 281.52 |
| 111006 | 张石兵 | 本科 | 1974-10-01 | 1 | 1 | 解放路34-1-203 | 84563418 | 5 | 1987.01 | 79.58 |
| 210678 | 林涛 | 大专 | 1977-04-02 | 1 | 2 | 中山北路24-35 | 83467336 | 3 | 2240 | 121 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 热和路209-3 | 58765991 | 4 | 2980.7 | 210.2 |
| 308759 | 叶凡 | 本科 | 1978-11-18 | 1 | 2 | 北京西路3-7-52 | 83308901 | 4 | 2531.98 | 199.08 |
| 504209 | 陈林琳 | 大专 | 1969-09-03 | 0 | 5 | 汉中路120-4-12 | 84468158 | 4 | 2066.15 | 108 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+---------+--------+
12 rows in set (0.01 sec)
(4)查询研发部在1970年以前的员工姓名和薪水情况。
mysql> select e.姓名,s.收入,s.支出
from employees e,salary s,departments d
where e.员工部门号=d.部门编号
and e.员工编号=s.员工编号
and d.部门名称="研发部"
and e.出生日期<"1970" ;
+-----------+---------+--------+
| 姓名 | 收入 | 支出 |
+-----------+---------+--------+
| 李玉珉 | 2980.7 | 210.2 |
| 陈林琳 | 2066.15 | 108 |
+-----------+---------+--------+
2 rows in set, 1 warning (0.00 sec)
(5)查询employees表中员工的姓名、住址和收入水平,要求2000元以下显示为‘低收入’,2000-3000显示为‘中等收入’,3000元以上显示为‘高收入’。
mysql> select 姓名,地址,
case
when 收入<2000 then "低收入"
when 收入>3000 then "高收入"
when 收入>2000 and 收入<3000 then "中等收入"
end as "收入等级"
from employees,salary
where employees.员工编号=salary.员工编号;
+-----------+--------------------+--------------+
| 姓名 | 地址 | 收入等级 |
+-----------+--------------------+--------------+
| 王林 | 中山路32-1-508 | 中等收入 |
| 伍容华 | 北京东路100-2 | 低收入 |
| 王向容 | 四牌楼10-0-108 | 中等收入 |
| 李丽 | 中山东路102-2 | 中等收入 |
| 刘明 | 虎距路100-2 | 中等收入 |
| 朱俊 | 牌楼巷5-3-106 | 低收入 |
| 钟敏 | 中山路10-3-105 | 高收入 |
| 张石兵 | 解放路34-1-203 | 低收入 |
| 林涛 | 中山北路24-35 | 中等收入 |
| 李玉珉 | 热和路209-3 | 中等收入 |
| 叶凡 | 北京西路3-7-52 | 中等收入 |
| 陈林琳 | 汉中路120-4-12 | 中等收入 |
+-----------+--------------------+--------------+
12 rows in set (0.00 sec)
4.分类汇总与排序
(1)按部门列出该部门的员工人数。
mysql> select d.部门名称, count(e.姓名) as "员工总人数"
from employees e,departments d
where e.员工部门号=d.部门编号 group by d.部门名称;
+-----------------+-----------------+
| 部门名称 | 员工总人数 |
+-----------------+-----------------+
| 人力资源部 | 1 |
| 市场部 | 3 |
| 研发部 | 3 |
| 经理办公室 | 2 |
| 财务部 | 3 |
+-----------------+-----------------+
5 rows in set (0.00 sec)
(2)分别统计男性员工和女性员工人数。
mysql> select count(*) as "人数",
case
when 性别=1 then "男"
when 性别=0 then "女"
end as 性别
from employees group by 性别;
+--------+--------+
| 人数 | 性别 |
+--------+--------+
| 3 | 女 |
| 9 | 男 |
+--------+--------+
2 rows in set, 1 warning (0.00 sec)
(3)查找雇员数超过2人的部门名称和员工数量。
mysql> select d.部门名称, count(e.姓名) as "员工总人数"
from employees e,departments d
where e.员工部门号=d.部门编号
group by d.部门名称
having count(*)>2 ;
+--------------+-----------------+
| 部门名称 | 员工总人数 |
+--------------+-----------------+
| 市场部 | 3 |
| 研发部 | 3 |
| 财务部 | 3 |
+--------------+-----------------+
3 rows in set (0.00 sec)
(4)按员工学历分组统计各种学历人数。
mysql> select 学历,count(*) as 人数
from employees
group by 学历;
+--------+--------+
| 学历 | 人数 |
+--------+--------+
| 大专 | 4 |
| 本科 | 5 |
| 硕士 | 3 |
+--------+--------+
3 rows in set (0.00 sec)
(5)将员工信息按出生日期从大到小排序。
mysql> select * from employees order by 出生日期;
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+
| 员工编号 | 姓名 | 学历 | 出生日期 | 性别 | 工作年限 | 地址 | 电话号码 | 员工部门号 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+
| 020018 | 李丽 | 大专 | 1960-07-30 | 0 | 6 | 中山东路102-2 | 83413301 | 1 |
| 102208 | 朱俊 | 硕士 | 1965-09-28 | 1 | 2 | 牌楼巷5-3-106 | 84708817 | 5 |
| 000001 | 王林 | 大专 | 1966-01-23 | 1 | 8 | 中山路32-1-508 | 83355668 | 2 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 热和路209-3 | 58765991 | 4 |
| 504209 | 陈林琳 | 大专 | 1969-09-03 | 0 | 5 | 汉中路120-4-12 | 84468158 | 4 |
| 102201 | 刘明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 |
| 111006 | 张石兵 | 本科 | 1974-10-01 | 1 | 1 | 解放路34-1-203 | 84563418 | 5 |
| 010008 | 伍容华 | 本科 | 1976-03-28 | 1 | 3 | 北京东路100-2 | 83321321 | 1 |
| 210678 | 林涛 | 大专 | 1977-04-02 | 1 | 2 | 中山北路24-35 | 83467336 | 3 |
| 308759 | 叶凡 | 本科 | 1978-11-18 | 1 | 2 | 北京西路3-7-52 | 83308901 | 4 |
| 108991 | 钟敏 | 硕士 | 1979-08-10 | 0 | 4 | 中山路10-3-105 | 83346722 | 3 |
| 020010 | 王向容 | 硕士 | 1982-12-09 | 1 | 2 | 四牌楼10-0-108 | 83792361 | 1 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+
12 rows in set (0.01 sec)
数据库的查询(结合YGGL.sql)的更多相关文章
- 提高数据库的查询速率及其sql语句的优化问题
在一个千万级的数据库查寻中,如何提高查询效率? 1)数据库设计方面: a.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. b.应尽量避免在 ...
- 数据库基本查询语句(SQL常用增删改查语句 简单复习 mark)
SQL常用增删改查语句 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) ...
- 提高查询速度:SQL Server数据库优化方案
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...
- SQL Server数据库————连接查询和分组查询
SQL Server数据库————连接查询和分组查询 分组查询 select 列from <表名> where …… group by 列 注意:跟order by一样group ...
- 基于SQL和PYTHON的数据库数据查询select语句
#xiaodeng#python3#基于SQL和PYTHON的数据库数据查询语句import pymysql #1.基本用法cur.execute("select * from biao&q ...
- SQL Server数据库 优化查询速度
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...
- 用 SQL 对关系型数据库进行查询
前面几节中,我们已经掌握了如何向 SQLite 数据库中写入数据.这一节,我们将学习如何根据需求对数据库进行查询,进而从中获取数据.接下来的例子中会使用 data/datasets.sqlite(之前 ...
- 从数据库中查询所有表及所有字段的SQL语句
从数据库中查询所有表及所有字段的SQL语句 由于一个小项目的需要,近日完成一个从数据库中查询所有表及所有字段的方法,其实用两条SQL语句就可以完成. Sql Server版:列出当前DB中所有表:se ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 浅谈数据库优化方案--表和SQL
1.数据类型的选择 1.字段最好设置为非空.若字段为char(8),即便是NULL也会现有8个字符的空间. 2.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能, ...
随机推荐
- 使用postman发送http请求
postman使用详解: http://gold.xitu.io/entry/57597a62a341310061337885 https://www.getpostman.com/docs/writ ...
- 你必须知道的MySQL知识点
什么是索引 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构(掌握) 数据结构可视化 前置知识:树的高度越低查询效率越高 二叉树:不能自平衡,极端情况出现倾斜,查询效率和链表类似 红黑 ...
- jquery和zepto有何区别?
1.针对移动端程序,Zepto有一些基本的触摸事件可以用来做触摸屏交互(tap事件.swipe事件),Zepto是不支持IE浏览器的. 2.DOM操作的区别:添加id时jQuery不会生效而Zepto ...
- 【SPOJ QTREE4】Query on a tree IV(树链剖分)
Description 给出一棵边带权(\(c\))的节点数量为 \(n\) 的树,初始树上所有节点都是白色.有两种操作: C x,改变节点 \(x\) 的颜色,即白变黑,黑变白. A,询问树中最远的 ...
- C# WPF开源控件库:MahApps.Metro
其实站长很久之前就知道这个开源WPF控件库了,只是一直欣赏不了这种风格,但也star了该项目.每次浏览该仓库时,发现star越来越多,也看到很多网友对它的褒奖,所以今天就向大家推荐这款WPF控件库. ...
- git clone GitLab 工程报错Repository not found
有时使用git拉取gitlab上的项目时会出现如下的错误信息:Repository not found remote: Repository not found.fatal: repository ' ...
- 搞定MySQL安装难安装贵问题
背景 本方案解决了windows下安装MySQL过程繁琐的问题. 是真正的免安装绿色方法,不用配环境变量,不用执行install命令,不用配置my.ini文件. 步骤 下载 下载mysql-8.0.2 ...
- gnuplot添加直线和箭头
http://blog.csdn.net/bill_chuang/article/details/18215051 6.在图中添加直线和箭头 gnuplot> set arrow from 0. ...
- Java File类的简单使用
Java File的简单使用(创建.删除.遍历.判断是否存在等) Java文件类以抽象的方式代表文件名和目录路径名.该类本身不能用来读数据或写数据,它主要用于磁盘上文件和目录的创建.文件的查找和文件的 ...
- JavaSE18-字节缓冲流&字符流
1.字节缓冲流 1.1 字节缓冲流构造方法 字节缓冲流介绍 BufferOutputStream:该类实现缓冲输出流. 通过设置这样的输出流,应用程序可以向底层输出流写 入字节,而不必为写入的每个字节 ...