




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MySql 多表联合查询目录多表查询:1多表联查例子:2inner join方法:2多表插入:2多表更新:31、内连接查询42、左外联结53、右外连接64、完全外连接6Mysql多表查询,多表插入和多表更新多表查询:CREATE TABLE IF NOT EXISTS contact(contact_id int(11) NOT NULL AUTO_INCREMENT,user_name varchar(255),nom varchar(255),prenom varchar(255),mail varchar(64),passcode char(64),PRIMARY KEY(contact_id);CREATE TABLE IF NOT EXISTS droit(droit_id int( 11 ) NOT NULL AUTO_INCREMENT ,droit varchar(255),PRIMARY KEY(droit_id);CREATE TABLE IF NOT EXISTS contactdroit(contactdroit_id int(11) NOT NULL AUTO_INCREMENT,contact_id int( 11 ),droit_id int( 11 ),PRIMARY KEY( contactdroit_id );Insert into contact(contact_id, user_name) values(1,user1);Insert into contact(contact_id, user_name) values(2,user2);Insert into contact(contact_id, user_name) values(3,user3);Insert into droit(droit_id, droit) values(1,admin);Insert into droit(droit_id, droit) values(2,superuser);Insert into contactdroit(contact_id, droit_id) values(1, 1);Insert into contactdroit(contact_id, droit_id) values(2, 1);Insert into contactdroit(contact_id, droit_id) values(3, 2);SELECT c.contact_id, d.droit_id, d.droit FROM contact c, contactdroit cd, droit dwhere c.contact_id = cd.contact_idand cd.droit_id = d.droit_id;结果:contact_id droit_id droit1 1 admin2 1 admin3 2 superuser多表联查例子:两个方法都可以,inner join on 更好点。表结构没贴出来,但比较好懂了。简单方法:select c.nom, e.nomfrom consultant c, affaire a, besoin b, salarie sa, site s, entreprise ewhere c.consultant_id=a.consultant_id and a.besoin_id=b.besoin_id and b.salarie_id=sa.salarie_id and sa.site_id=s.site_id and s.entreprise_id=e.entreprise_idinner join方法:select c.nom, e.nomfrom consultant cinner join affaire a on c.consultant_id=a.consultant_idinner join besoin b on a.besoin_id=b.besoin_idinner join salarie sa on b.salarie_id=sa.salarie_idinner join site s on sa.site_id=s.site_idinner join entreprise e on s.entreprise_id=e.entreprise_id多表插入:?php$conn = mysql_connect(“localhost”,”charles”,”charles”);mysql_select_db(“test”);$query = “INSERT INTO contact(user_name,nom, prenom, mail, passcode) values(sa,se,sf, , 123)”;$result = mysql_query($query) or die(“insert contact failed:”.mysql_error();$lastid = mysql_insert_id(); /得到上一个 插入的id值echo “last insert id :”.$lastid.”;$query2 = “INSERT INTO contactdroit(contact_id, droit_id) values($lastid,11)”;echo $query2.”;$result2 = mysql_query($query2) or die(“insert contactdroit failed: “.mysql_error();if(isset($result) & isset($result2)echo “Good Insertion”;echo $lastid;?需注意的是:The mysql_insert_id() function returns the AUTO_INCREMENT ID generated from the previous INSERT operation.mysql_insert_id()函数的作用是:取得上一步 INSERT 操作产生的 ID。This function returns 0 if the previous operation does not generate an AUTO_INCREMENT ID, or FALSE on MySQL connection failure.如果先前的操作不产生一个自动增加的IDAUTO_INCREMENT ID,那么,函数返回0;如果MySQL连接失败,将返回False。多表更新:update contact c, contactdroit cdset c.user_name = $username, c.nom = $lastname, c.prenom = $firstname, c.passcode = $password, cd.droit_id = $droitidwhere c.contact_id = $id and c.contact_id = cd.contact_id;示例:【以下为引用:/problems/340 】mysql create table one(id int(10), name varchar(20);Query OK, 0 rows affected (0.03 sec)mysql create table two(id int(10), name varchar(20);Query OK, 0 rows affected (0.05 sec)mysql insert one value(1, 1);Query OK, 1 row affected (0.00 sec)mysql insert two value(22, 22);Query OK, 1 row affected (1.02 sec)mysql update one o, two t set =oo, =tt;Query OK, 2 rows affected (0.00 sec)Rows matched: 2 Changed: 2 Warnings: 0mysql select * from one;+| id | name |+| 1 | oo |+1 row in set (0.00 sec)mysql select * from two;+| id | name |+| 22 | tt |+1 row in set (0.00 sec)=学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单EmployeeTB(员工信息表):employeeid employeename deptid0001 张三 010002 李四 010003 王五 020004 赵六 020005 郑七 NULLDeptTB(部门信息表)deptid deptname01 技术部02 市场部03 工程部我们现在需要进行连接查询,连接两张表检索数据。分别检索员工信息表的员工编号、员工姓名和部门信息表中的部门名称。显然,两个表的连接条件是 员工表的部门编号=部门表的部门编号注意:郑七不属于任何部门(新来的员工,还没有分配到任何的部门),而工程部不存在任何的员工(比如是一个新成立的部门,还没有员工)1、内连接查询我们可以有两种方式,这两种是等效的一种是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid另外一个是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid检索的结果都是:employeeid employeename deptname0001 张三 技术部0002 李四 技术部0003 王五 市场部0004 赵六 市场部而“郑七”和“工程部”的信息是不会检索出来。因为采用内连接计算的时候必须要保证连接的条件e.deptid=d.deptid匹配,结果才会被检索出来。当我们连接两张检索数据的时候,检索的方式是首先逐行扫描“员工信息表”中的记录,然后根据连接条件来决定此记录是否被检索。比如对于张三,这条记录的deptid是01(部门编号),它在部门表中能找到和它匹配的编号01,而编号01的部门名称(deptname)是“技术部”所以张三这条记录会被检索,最终的结果肯定是:0001 张三 技术部同样,李四、王五、赵六也能。但是郑七的部门编号是NULL,它在部门信息表中找不到匹配的项(因为部门信息表中不存在部门编号为NULL的部门),所以郑七不会被检索。同理,没有任何人员的部门编号为03,所以工程部的记录也不会被检索2、左外联结但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。检索语句为:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid检索的结果都是:employeeid employeename deptname0001 张三 技术部0002 李四 技术部0003 王五 市场部0004 赵六 市场部0005 郑七 NULL但是在这里,工程部同样不会被检索,因为,deptname是在连接的右边的表中,“工程部”在左表中不存在任何的记录,所以不会被检索。这里关注的是“连接中的左边的表”3、右外连接有时,我们需要知道,全部部门的信息,即使它没有任何的员工。在我们的查询中部门表在连接的右边,如果我们想知道右边表中的所有记录信息,那么就可以采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段(employeeid,employeename)为NULL检索语句为:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e RIGHT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid检索的结果都是:employeeid employeename deptname0001 张三 技术部0002 李四 技术部0003 王五 市场部0004 赵六 市场部NULL NULL 工程部但在这里,郑七是不会被检索了,因为它在右表中找不到匹配项,这里关注的是“连接中的右边的表”4、完全外连接如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。关注连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。检索语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 谢在库管员授课课件
- 2025年度特许经营合同纠纷诉讼担保书样本
- 2025常年知识产权纠纷预防与应对顾问合同
- 2025版智慧城市基础设施设计合同
- 2025版全新水钻工程设计与施工监理合同范本下载
- 2025版离婚夫妻债务明确划分及财产分割协议
- 2025年度高层建筑外墙抹灰施工与维护一体化合同范本
- 2025年汽车租赁与二手车交易服务合同范本
- 2025国外工作合同协议书
- 2025劳动局劳动合同模板
- 教科版四年级上册科学全册教案
- 图形动画毕业设计
- 工会劳动竞赛课件
- 2025年建筑工程-安全员C证-安全员(C证·上海)历年参考题库典型考点含答案解析
- 光伏项目施工组织设计方案
- 2025政府采购评审专家入库题库与答案
- 仪表安全知识培训课件
- 2025年三级老年人能力评估师考试题库(附答案)
- 婴幼儿营养与喂养理论知识考核试题及答案
- 工程设计图纸技术交底
- 学科交叉教学中存在的问题及改进措施
评论
0/150
提交评论