- 浏览: 74750 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
dingchao.lonton:
自己在没有经过充分测试的情况下请不要随便放话,ff和chrom ...
自定义file类型input框样式的方法 -
redhu:
我做了个简化版,代码如下:
<html>
< ...
jQuery 鼠标经过Div底色变换(滑动变色)
查找出员工及其部门名
mysql> select employee.name as employeeName, department.name as departmentName from employee, department where employee.departmentID = department.departmentID;
+---------------+--------------------------+
| employeeName | departmentName |
+---------------+--------------------------+
| Nora Edwards | Research and Development |
| Ben Smith | Finance |
| Ajay Patel | Research and Development |
| Candy Burnett | Research and Development |
+---------------+--------------------------+
4 rows in set (0.02 sec)
实际查询的过程如下:
首先找出所有连接:
+---------------+--------------------------+
| name | name |
+---------------+--------------------------+
| Ajay Patel | Finance |
| Nora Edwards | Finance |
| Candy Burnett | Finance |
| Ben Smith | Finance |
| Ajay Patel | Research and Development |
| Nora Edwards | Research and Development |
| Candy Burnett | Research and Development |
| Ben Smith | Research and Development |
| Ajay Patel | Human Resources |
| Nora Edwards | Human Resources |
| Candy Burnett | Human Resources |
| Ben Smith | Human Resources |
| Ajay Patel | Marketing |
| Nora Edwards | Marketing |
| Candy Burnett | Marketing |
| Ben Smith | Marketing |
+---------------+--------------------------+
这个查询叫做Cartesian product,笛卡尔集
两个列名是一样的,为了改进可读性,可以修改如下:
select employee.name as employeeName, department.name as departmentName
from employee, department
where employee.departmentID = department.departmentID;
多个表之间的查询:n个表需要n-1个表达式.
比如查询哪个部门有和Telco Inc相关的业务.
mysql> select department.name from client, assignment, employee, department where client.name='Telco Inc' and client.clientID = assignment.clientID and assignment.employeeID = employee.employeeID and employee.departmentID = department.departmentID;
+--------------------------+
| name |
+--------------------------+
| Research and Development |
+--------------------------+
1 row in set (0.00 sec)
自连接
查找和'Nora Edwards'在部门工作的所有员工:
mysql> select e2.name from employee e1, employee e2 where e1.name = 'Nora Edwards' and e1.departmentID = e2.departmentID;
+---------------+
| name |
+---------------+
| Ajay Patel |
| Nora Edwards |
| Candy Burnett |
+---------------+
3 rows in set (0.00 sec)
排除掉'Nora Edwards'的查询方法
select e2.name
from employee e1, employee e2
where e1.name = 'Nora Edwards'
and e1.departmentID = e2.departmentID
and e2.name != 'Nora Edwards';
§7.2 理解不同的连接类型
*基本连接类型
笛卡尔连接又成为全连接,交叉连接,如果添加了条件则是对等连接.
如下查询:
select employee.name, department.name
from employee, department
where employee.departmentID = department.departmentID;
可以用
select employee.name, department.name
from employee join department
where employee.departmentID = department.departmentID;
替代. 也可以用CROSS JOIN or INNER JOIN 代替上面的join
*左连接和右连接
左连接,右连接对应于左右边为空的部分,如下查出没有接任务的雇员.
mysql> select * from employee;
+------------+---------------+-----------------------+--------------+
| employeeID | name | job | departmentID |
+------------+---------------+-----------------------+--------------+
| 6651 | Ajay Patel | Programmer | 128 |
| 7513 | Nora Edwards | Programmer | 128 |
| 9006 | Candy Burnett | Systems Administrator | 128 |
| 9842 | Ben Smith | DBA | 42 |
+------------+---------------+-----------------------+--------------+
4 rows in set (0.00 sec)
mysql> select * from assignment;
+----------+------------+------------+-------+
| clientID | employeeID | workdate | hours |
+----------+------------+------------+-------+
| 1 | 7513 | 2003-01-20 | 8.5 |
+----------+------------+------------+-------+
mysql> select employee.name from employee left join assignment on employee.employeeID = assignment.employeeID where clientID is null;
+---------------+
| name |
+---------------+
| Ben Smith |
| Ajay Patel |
| Candy Burnett |
+---------------+
3 rows in set (0.00 sec)
实际的运行过程是使用右边的来匹配左边的.如果左边和右边的有对应,则为相应的值,否则为null.因为clientID为key值,所以不会为空。
§7.3 书写子查询
子查询又称为嵌套查询,是MySQL 4.1新增的功能, 它并没有增加新功能,但是使用子查询比使用连接更有可读性.多表的删除和更新其实也是一种特殊的子查询.本节主要介绍select语句中的子查询.
MySQL有两种子查询:
导出表子查询和表达子式查询.前者的子查询返回一个表.后者出现于select语句中的where子句,分为两种类型.1,返回单个值或行.2,返回布尔值.
*导出表子查询
导出表子查询允许在from子句中嵌入其他查询.可以快速插入临时表,比如:
mysql> select employeeID, name from employee where job='Programmer';
+------------+--------------+
| employeeID | name |
+------------+--------------+
| 6651 | Ajay Patel |
| 7513 | Nora Edwards |
+------------+--------------+
* 单值子查询
出现在where子句中:
mysql> select e.employeeID, e.name from employee e, assignment a where e.employeeID = a.employeeID and a.hours = (select max(hours) from assignment);
+------------+--------------+
| employeeID | name |
+------------+--------------+
| 7513 | Nora Edwards |
+------------+--------------+
1 row in set (0.00 sec)
当然也可以返回一行,但是用处不大,不再讲述.
* 布尔子查询
布尔子查询一般是针对特殊功能,比如: IN, EXISTS, ALL, ANY, and SOME.
以下查询没有活干的员工.
mysql> select name from employee where employeeID not in (select employeeID from assignment);
+---------------+
| name |
+---------------+
| Ben Smith |
| Ajay Patel |
| Candy Burnett |
+---------------+
3 rows in set (0.00 sec)
EXISTS在子查询种使用了主查询的数据,又成为关联查询。如下查询没有任务的员工。
mysql> select e.name, e.employeeID from employee e where not exists (select * from assignment where employeeID = e.employeeID);
+---------------+------------+
| name | employeeID |
+---------------+------------+
| Ben Smith | 9842 |
| Ajay Patel | 6651 |
| Candy Burnett | 9006 |
+---------------+------------+
3 rows in set (0.00 sec)
查询过程: 针对employee中的每一行,在子查询中查看是否都不匹配。
ALL, ANY, and SOME
select e.name
from employee e, assignment a
where e.employeeID = a.employeeID
and a.hours > all
(select a.hours
from assignment a, employee e
where e.employeeID = a.employeeID
and e.job='Programmer');
这部分还有待理解。
SELECT 的语法请参考教材。
发表评论
-
linux下的MySQL自动备份工具-第二版
2011-10-27 20:51 866linux下的MySQL自动备份工具-第二版 第二版在第一版的 ... -
linux下的MySQL自动备份脚本-第一版
2011-10-26 22:29 1173写了个linux下的mysql备份脚本 这是第一版,只支持备份 ... -
各大数据库官方下载地址快速索引
2011-10-26 22:25 963公布各大数据库官网最新地址,方便广大DBA朋友们快速下载。 ... -
好用的mysql备份工具
2011-10-16 16:53 1034在现在的工作中,数据备份是非常有必要的,因为在进行数据库管理时 ... -
面对一个全新的环境,作为一个Mysql DBA,首先应该了解什么
2011-03-10 19:06 817面对一个全新的环境,作为一个Mysql DBA,首先应该了解 ... -
mysql常用函数
2011-03-05 16:32 716[size=medium] 一、数学函 ... -
MySQL 备份和恢复
2011-02-12 10:29 853MySQL 备份和恢复 作/译 ... -
同机MySQL数据库主从同步配置方案
2011-02-12 10:06 8911、配置主库my.ini ... -
详解MySQL5.5新特性
2010-12-10 20:53 924MySQL进入Oracle产品体系 ... -
几种获取MySQL分区表信息的常用方法
2010-12-10 11:32 11351. SHOW CREATE TABLE 可以查看创建分区表 ... -
VPS之mysql优化
2010-12-03 10:39 1056MySQL 是一个很棒的 open source 数据库引擎, ... -
在小型VPS中减少MySQL的内存消耗
2010-12-03 10:33 964# # * Fine Tuning # key_buffer ... -
用mysqldumpslow分析mysql的slow query log
2010-12-02 10:03 716mysql有一个功能就是可以log下来运行的比较慢的sql语句 ... -
实现MySQL远程连接,不得不看
2010-10-14 20:51 761以下的文章主要介绍的 ...
相关推荐
3. **数据查询语言(DQL)**:查询数据,包括`SELECT`语句,以及`WHERE`、`ORDER BY`和`GROUP BY`子句。 4. **数据控制语言(DCL)**:权限管理和用户管理,如`GRANT`和`REVOKE`。 ### 第四天:更高级的SQL使用 **...
05.MySQL高级查询缓存开启查询缓存.avi 06.MySQL高级查询缓存SELECT选项.avi 07.MySQL高级查询缓存失效场景.avi 08.MySQL高级内存优化优化原则.avi 09.MySQL高级内存优化MyISAM内存优化.avi 10.MySQL高级内存优化...
52.MySQL高级_全局查询日志.avi 51.MySQL高级_用Show Profile进行sql分析.avi 50.MySQL高级_批量插入数据脚本.avi 49.MySQL高级_慢查询日志.avi 48.MySQL高级_为排序使用索引OrderBy优化.avi 47.MySQL...
MYSQL教程 MYSQL教程MYSQL教程 MYSQL教程尚硅谷MySQL全套教程包含MySql核心技术篇和MySQL高级篇。数据库视频教程,全套视频教程。
MySQL 高级 - 课程内容介绍.mp4 │ │ 02. MySQL 高级 - Linux上安装MySQL.avi │ │ 03. MySQL 高级 - 启动及登录MySQL.avi │ │ 04. MySQL 高级 - 索引 - 概述.avi │ │ 05. MySQL 高级 - 索引 - 优势和劣势....
这份"MySQL数据库入门到高级笔记快速学习pdf版本"提供了从基础到高级的全面教程,适合不同水平的学习者。以下将详细解析其中涉及的主要知识点: 1. **基本操作**: - **启动与关闭MySQL服务**:可以通过`...
总之,这份MySQL教程提供了一个全面的学习路径,从基础操作到高级应用,帮助开发者有效地管理数据库,解决实际问题,并提升数据库性能。无论是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和实践,你将...
尚硅谷_MySQL高级_慢查询日志 · 50.尚硅谷_MySQL高级_批量插入数据脚本 · 51.尚硅谷_MySQL高级_用Show Profile进行sql分析 · 52.尚硅谷_MySQL高级_全局查询日志 · 53.尚硅谷_MySQL高级_数据库锁理论概述 ·...
本教程将引导你深入了解 MySQL 的高级特性和操作方法。 在开始之前,确保你已经在你的计算机上安装了 MySQL 服务器和客户端工具。MySQL 客户端程序 `mysql` 是一个交互式的工具,它允许用户连接到 MySQL 服务器,...
### MySQL初级与高级教程知识点概览 #### 一、MySQL基础知识 1. **数据库系统概述** - 数据库系统的组成:数据库(Data)、数据库管理系统(DBMS)、数据库管理员(DBA)。 - 关系型数据库特点:通过表格形式来...
教程名称:布尔教育Mysql高级视频教程(更新中)课程目录:【】Mysql高级.001.理解触发器【】Mysql高级.002.动手写第1个触发器【】Mysql高级.003.触发器中引用行变量【】Mysql高级.004.再谈行变量【】Mysql高级.005....
MySQL教程是最全面、最详尽的数据库学习资源之一,尤其对于初学者而言,它提供了从基础到高级的全面知识。本教程PDF旨在帮助用户掌握MySQL的各个方面,包括安装配置、数据库设计、SQL语言、存储引擎、事务处理、备份...
接下来的部分将更深入地探讨诸如数据查询、子句和函数的使用、数据类型的分类、索引的建立与优化、连接查询的不同类型及其应用、子查询和视图的应用场景、事务管理等高级主题。通过这些章节的学习,读者可以掌握...
以上内容仅是MySQL教程02的部分概览,实际的学习过程中还会涉及视图、存储过程、触发器、用户权限管理等高级主题。通过深入学习和实践,你可以掌握MySQL的精髓,成为数据库管理的专家。这些PDF文件很可能是教程的...
本教程"MySQL入门到高级-康师傅版.zip"旨在帮助初学者快速掌握MySQL的基础,并逐步提升至高级水平。尚硅谷教育机构的宋红康老师倾力打造,通过一系列深入浅出的讲解,使学习者能够全面了解和掌握MySQL的各个方面。 ...
MYSQL 高级注入 教程 渗透教程 第一课 MYSQL基础教学I 第二课 MYSQL基础教学II 第三课 MYSQL基础教学III 第四课 手工注入-联合查询篇 第五课 手工注入-MYSQL5.0暴库 第六课 手工注入-MYSQL注入高级技巧
数据库 MySQL 学习笔记高级篇.md
### MySQL++ v3.1.0 教程 #### 一、引言 MySQL++ 是一个功能强大的 C++ 封装库,它为 MySQL 的 C API 提供了一层抽象,使得开发者可以像操作 STL 容器一样轻松地处理 SQL 查询。这种设计极大地简化了与数据库交互...
- **慢查询日志**:开启慢查询日志功能后,MySQL会记录所有执行时间超过指定阈值的查询语句,这对于定位性能问题非常有帮助。 通过上述知识点的学习,开发人员可以更好地利用MySQL来构建高效稳定的Java应用程序,...