`
kree
  • 浏览: 128854 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Mysql数据库的高级查询 多表查询,联表查询

阅读更多

最近在做一个PHP+MYSQL的项目,说实话,第一次呢

不断查资料,觉得有些资料值得收藏一下

Mysql数据库的高级查询

查询emp表中,emp_name为啸天的全部信息
mysql> select * from emp where emp_name='啸天';

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

查询emp表中,emp_sal,工资在5000以上的全部信息
mysql> select * from emp where emp_sal>5000;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
| 100002 | 丽鹃 | 27 | 8000 | 1979-12-31 | fmale |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.00 sec)

查询emp表中在1978年1月1日之后出生的
mysql> select * from emp where emp_bir>'1978-01-01';

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
| 100002 | 丽鹃 | 27 | 8000 | 1979-12-31 | fmale |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.00 sec)

查询emp表中在1979年12月1日之前出生,工资在5000以上的
mysql> select * from emp where emp_bir<'1979-12-01' and emp_sal>5000;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

2.6.2 字段查询

CEO查看员工工资情况
mysql> select emp_name,emp_sal from emp;

查询结果显示如下:
+----------+---------+
| emp_name | emp_sal |
+----------+---------+
| 啸天 | 4000 |
| 红枫 | 9000 |
| 丽鹃 | 8000 |
+----------+---------+
3 rows in set (0.00 sec)

查看1978年后出生的人的姓名、工资和性别
mysql> select emp_name,emp_sal,emp_sex from emp where emp_bir>"1977-12-31";

查询结果显示如下:
+----------+---------+---------+
| emp_name | emp_sal | emp_sex |
+----------+---------+---------+
| 啸天 | 4000 | male |
| 丽鹃 | 8000 | fmale |
+----------+---------+---------+
2 rows in set (0.00 sec)

2.6.3 查询结果排序

用ORDER BY语句对emp表中所有员工工资高低顺序查询结果(默认是从低到高——升序)
mysql> select * from emp order by emp_sal;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
| 100002 | 丽鹃 | 27 | 8000 | 1979-12-31 | fmale |
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
3 rows in set (0.00 sec)

用DESC关键字来进行从高到低排序——降序
mysql> select * from emp order by emp_sal desc;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
| 100002 | 丽鹃 | 27 | 8000 | 1979-12-31 | fmale |
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
3 rows in set (0.00 sec)

2.6.4 查询结果数量的限制

用LIMIT查看emp表中工资收入排名前两个员工的资料:
mysql> select * from emp order by emp_sal desc limit 2;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
| 100002 | 丽鹃 | 27 | 8000 | 1979-12-31 | fmale |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.00 sec)

查看工资排名第2到第3的员工资料:
mysql> select * from emp order by emp_sal desc limit 1,2;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100002 | 丽鹃 | 27 | 8000 | 1979-12-31 | fmale |
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.01 sec)

使用rand()抽样调查,随机抽取2个员工,查看其资料
mysql> select * from emp order by rand() limit 2;

如如下结果:(随机的)

+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.01 sec)

2.6.5 查询结果的字段联合和重新命名

mysql> select concat(emp_id," ",emp_name) from emp;

查询结果:
+------------------------------+
| concat(emp_id," ",emp_name) |
+------------------------------+
| 100005 啸天 |
| 100001 红枫 |
| 100002 丽鹃 |
+------------------------------+
3 rows in set (0.00 sec)

用AS关键字重新给输出结果命名标题
mysql> select concat(emp_id," ",emp_name) as info from emp;

查询结果如下显示:
+----------------+
| info |
+----------------+
| 100005 啸天 |
| 100001 红枫 |
| 100002 丽鹃 |
+----------------+
3 rows in set (0.00 sec)

2.6.6 日期查询的相关运算

可以通过YEAR()、MONTH()、DAYOFMONTH()函数来提取日期的组成元素

查询7月份出生的员工资料:
mysql> select * from emp where month(emp_bir)=7;

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 | 啸天 | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

可以利用英文月份来查询:
mysql> select * from emp where monthname(emp_bir)="January";

查询结果显示如下:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 | 红枫 | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

利用TO_DAYS()函数可以查询出职工们从出生到现在所经理的时间,单位是天数
mysql> select to_days(current_date) - to_days(emp_bir) as livingdays from emp;

查询后结果如下:
+------------+
| livingdays |
+------------+
| 9425 |
| 10345 |
| 9251 |
+------------+
3 rows in set (0.00 sec)

计算从现在开始经历100天后的日期
mysql> select date_add(now(),interval 100 day);

查询结果如下:
+----------------------------------+
| date_add(now(),interval 100 day) |
+----------------------------------+
| 2005-08-07 13:56:58 |
+----------------------------------+
1 row in set (0.00 sec)

计算从现在开始经历100天后的日期
mysql> select date_sub(now(),interval 100 day);

查询结果如下:
+----------------------------------+
| date_sub(now(),interval 100 day) |
+----------------------------------+
| 2005-01-19 14:00:20 |
+----------------------------------+
1 row in set (0.00 sec)

2.6.7 数据统计

使用COUNT()函数计算表中的数据数目(比如emp表中的员工数目)
mysql> select count(*) from emp;

查询结果如下:
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.01 sec)

统计工资上5000的数目
mysql> select count(*) from emp where emp_sal>5000;

查询结果如下:
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)

统计男女职工数目:(GROUP BY语句分类)
mysql> select emp_sex,count(*) from emp group by emp_sex;

查询结果如下:
+---------+----------+
| emp_sex | count(*) |
+---------+----------+
| fmale | 1 |
| male | 2 |
+---------+----------+
2 rows in set (0.01 sec)

使用数据统计函数(MIN(),MAX(),SUM(),AVG())
mysql> select
-> min(emp_sal) as min_salary,
-> max(emp_sal) as max_salary,
-> sum(emp_sal) as sum_salary,
-> avg(emp_sal) as avg_salary,
-> count(*) as employee_num
-> from emp;

查询结果如下:
+------------+------------+------------+------------+--------------+
| min_salary | max_salary | sum_salary | avg_salary | employee_num |
+------------+------------+------------+------------+--------------+
| 4000 | 9000 | 21000 | 7000.0000 | 3 |
+------------+------------+------------+------------+--------------+
1 row in set (0.00 sec)

2.6.8 从多个数据表中检索信息

根据前面的方法,分别进行如下操作:
1). 在数据库asb中建立一个新表dept,表中有两项元素:
dept_id --> varchar(6)
dept_name --> varchar(10)
2). 在表emp中插入如下一行新记录:
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100003 | 小红 | 30 | 8000 | 1976-11-11 | fmale |
+--------+----------+---------+---------+------------+---------+
3). 在新表dept中,输入如下记录
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 100005 | MTD |
| 100001 | MTD |
| 100002 | MTD |
| 100003 | HR |
+---------+-----------+

查询emp和dept这两个表中,员工的姓名和部门信息
mysql> select emp.emp_name,dept.dept_name from emp,dept
-> where emp.emp_id=dept.dept_id;

查询结果如下:
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| 啸天 | MTD |
| 红枫 | MTD |
| 丽鹃 | MTD |
| 小红 | HR |
+----------+-----------+
4 rows in set (0.00 sec)

多表查询时注意:
1). FROM子句必须给出所查询的表的全部名称
2). 选择字段时候注明其所属表的名称(如emp表中的emp_id要表示为emp.emp_id)
3). 在Where子句中必须指明查询的条件(如,emp.emp_id和dept.dept_id是相同意义的元素)

 

分享到:
评论

相关推荐

    经典mysql数据库知识整理

    ### 经典MySQL数据库知识整理 #### 概述 本文档旨在为初学者及有一定基础的用户快速掌握MySQL的核心操作提供便利。从基础的数据库创建、表结构设计,到更高级的功能如触发器、索引、函数以及存储过程等,都通过实际...

    数据库实战:MySQL数据库设计与操作教程

    - **复杂查询**:包括联表查询、子查询、聚合函数等高级用法。复杂查询有助于处理更为复杂的数据分析需求,如统计某个时间段内最热销的商品、计算用户的平均消费金额等。 ##### 4. 数据库优化 - **索引优化**:为表...

    mysql数据库中常用的sql大全

    以下是对“mysql数据库中常用的sql大全”的详细解读,旨在帮助读者深入理解并掌握MySQL中的SQL语言及其各种操作。 ### 一、SQL语言分类 #### 1. 数据定义语言(DDL) 用于创建、修改和删除数据库对象,如数据库、...

    mysql delete 多表连接删除功能

    总的来说,`DELETE`语句在MySQL中提供了强大的数据清理功能,但使用时需谨慎,尤其是涉及到多表连接删除时,必须全面考虑其可能的影响。通过了解这些知识点,您可以更安全、高效地管理数据库中的数据。

    应对sharding-jdbc结合mybatis实现分库分表功能 分表的联合查询采用将mysql的数据同步到elasticsearch进行筛选

    7. **Logstash-input插件**:“logstash-inp”标签可能是指Logstash的输入插件,这些插件用于接收来自不同源的数据,如MySQL数据库。例如,使用JDBC输入插件可以从MySQL数据库中读取数据。 综上所述,这个项目涉及...

    thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例

    除了本文所介绍的多数据库连接和跨数据库查询之外,ThinkPHP5还提供了其他许多数据库操作相关的技巧和方法,比如条件查询、聚合查询、原生SQL支持等等,这些都是值得开发者深入学习和掌握的。 除了ThinkPHP5的...

    mysql查询语句的45道练习,可以直接复制导入练习

    ### MySQL 查询语句详解与实践 ...这些练习涵盖了 SQL 查询的基本语法以及一些高级特性,如联表查询、子查询等。通过练习这些题目,你可以更好地理解和掌握 SQL 查询语句的编写技巧,从而更有效地管理和分析数据。

    Navicat for mysql使用.md

    1. **联表查询**:使用 INNER JOIN 或者 WHERE 子句实现多表关联查询。 - 查询所有信息: ```sql SELECT * FROM stu, class WHERE stu.cid = class.id; ``` - 查询学生名字及其对应的班级名称: ```sql ...

    mysql练习46题.docx

    本资源摘要信息涵盖了 MySQL 实践 46 题,旨在帮助学习者从基础到高级掌握 MySQL 的各种操作,包括增删改查、聚合联表等。 SQL 基础 MySQL 是一种关系型数据库管理系统,使用 SQL 语言进行数据的存储、查询和操作...

    MYSQL基础知识,一些常用问题

    - **子查询与联表查询**: 在某些情况下,使用联表查询代替子查询可以提高查询效率。 - **DISTINCT与GROUP BY**: 在使用这些操作时,确保相关列上有索引,以提高查询效率。 #### 六、分库分表带来的挑战 **1. ...

    什么是mysql以及学习了解mysql的意义是什么

    - **复杂查询**:通过SQL语言的支持,MySQL允许执行复杂的查询操作,比如联表查询、子查询等,这对于深入分析数据非常有用。 - **报表生成**:借助MySQL的聚合函数和排序功能,可以轻松生成各种类型的报表,为决策...

    业界最具影响力MySQL精品文章荟萃(300篇)

    - **联表查询**:包括`INNER JOIN`, `LEFT JOIN`, `RIGHT JOIN`等。 #### 三、MySQL服务器配置与优化 - **性能调优**:通过对`my.cnf`配置文件的调整来优化服务器性能。 - **内存配置**:合理设置缓冲池(`innodb_...

    jpa入门案例:单表查询,包括分页查询 使用springboot来整合实现

    Spring Data JPA是Spring对JPA的扩展,提供了更高级的查询支持。 接着,创建一个实体类,例如名为`User`,并使用`@Entity`注解标记该类为数据库表对应的实体。然后,使用`@Id`注解指定主键字段,以及可能的`@Table`...

    Wiley.MySQL.PHP.Database.Applications.Second.Edition

    - **SQL语句**:掌握基本的SQL操作,如SELECT、INSERT、UPDATE、DELETE等,以及复杂的查询技巧,如子查询、联表查询等。 - **索引优化**:理解索引的工作原理及其对查询性能的影响,学会合理创建和使用索引。 #### ...

    MySQL笔试面试题大全

    12. **SQL语句**:熟练掌握各种SQL语句,包括但不限于`SELECT`、`INSERT`、`UPDATE`、`DELETE`等,以及更复杂的子查询、联表查询等。 ### 性能调优 13. **MySQL调优**:涉及到多个层面,包括但不限于硬件调优、...

    bean-searcher-dev.zip

    3. **联表查询**:bean-searcher-dev天生支持联表查询,这是数据库操作中的常见需求,尤其是在需要从多个表中获取关联数据时。通过ORM,开发者可以更直观地构建复杂的查询,而无需手动编写JOIN语句。 4. **免DTO/VO...

    MySQL基础与实例教程非笔试申请表.doc

    - SQL脚本编写(49分):评估学生在SQL脚本编写方面的能力,涵盖数据库表的创建、视图使用、全文检索、触发器、存储过程等高级特性。 - 页面程序开发(35分):检验学生在Web应用开发方面的技能,包括用户认证、权限...

    全国银行省市支行级联最新

    在IT行业中,数据库管理和数据交互是至关...总的来说,这个项目涵盖了数据库设计、Java后端开发、数据查询优化等多个IT领域的知识点,对于理解和实现此类系统,需要对数据库原理、Java编程以及Web服务有深入的理解。

    MySQL中联表更新与删除的语法介绍

    在MySQL数据库中,联表更新和删除是两个高级操作,它们允许你在一次SQL语句中同时处理多个相关表的数据。这种技术在处理一对多、多对一或多对多关系时特别有用,能够提高效率并减少事务中的操作次数。本文将详细介绍...

Global site tag (gtag.js) - Google Analytics