×

mysql多表查询案例

mysql多表查询案例(mysql多表查询更新)

admin admin 发表于2024-06-16 06:54:24 浏览17 评论0

抢沙发发表评论

大家好,mysql多表查询案例相信很多的网友都不是很明白,包括mysql多表查询更新也是一样,不过没有关系,接下来就来为大家分享关于mysql多表查询案例和mysql多表查询更新的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

mysql多表查询更新

假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price;另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。 在Mysql中我们有几种手段可以做到这一点,一种是update table1 t1, table2 ts ...的方式: 复制代码代码如下:UPDATE product p, productPrice pp SET pp.price = pp.price * 0.8 WHERE p.productId = pp.productId AND p.dateCreated 《 ’2004-01-01’

MySQL 数据 库多表查询统计操作,求大神相助

可以通过count函数来实现。sqlOne:select * from tablename1 where id》5;此语句查询出来多条记录,之后看做一个新的表。sqlTwo:select conut(*) from (select * from tablename1 where id》5) as tablename2;此语句即可查询出来统计的记录条数。备注:以上方法通用于所有的数据统计,如果是单表查询,可以直接通过:“select count( *) from tablename1 where id》5"的形式查询出结果。结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。

MySQL多表联合统计查询问题

创建表,数据

create table a(id int,项目号 varchar(2),总金额 int,上家单位 varchar(4));insert into a values (1,’01’,100,’AAAA’);insert into a values (2,’02’,200,’BBBB’);insert into a values (3,’03’,250,’CCCC’);create table b(id int,项目号 varchar(2),到款 int,到款时间 date);insert into b values (1,’03’,50,’2018-07-23’);insert into b values (2,’03’,100,’2018-07-24’);insert into b values (3,’01’,80,’2018-07-25’);

执行:

SELECTa.项目号,a.总金额,sum(CASEWHEN a.项目号 = b.项目号 THEN到款ELSE0END) 到款总额FROMaLEFT JOIN b ON a.项目号 = b.项目号GROUP BYa.项目号,a.总金额

结果:

PHP + Mysql多个表并行查询如何实现

在PHP-FPM处理HTTP请求时,有时会遇到一个请求需要进行多次MySQL查询(在报表类应用中比较常见)。通常我们会以串行方式查询:

$link = new mysqli();$rs1 = $link-》query(’SELECT * FROM table1’);while ($row = $rs1-》fetch_row()) { ... }$rs2 = $link-》query(’SELECT * FROM table2’);while ($row = $rs2-》fetch_row()) { ... }$rs3 = $link-》query(’SELECT * FROM table3’);while ($row = $rs3-》fetch_row()) { ... }

串行查询方式有个缺点:在MySQL返回数据之前,PHP一直是处于空等的状态,不会继续往后执行。如果数据量大或者查询复杂,MySQL响应可能会比较慢,那么以串行方式查询会有一些延迟。给用户最直接的感受就是 Loading… 的圈圈一直打转。

那么有什么办法可以减少查询MySQL的时间?用多进程并行查询不行,因为PHP-FPM 中不允许用 pcntl_fork 一类的调用。

幸好还有 mysqlnd,mysqlnd提供了类似 stream_select 的机制(见 这篇文章) ,可以做到在单进程中对MySQL并行查询。这主要运用了mysqli_poll 和 reap_async_query 两个函数。

还是通过例子来介绍MySQL并行查询的实施方法。假设要并行地向MySQL发出10个查询,最基本的代码应该是这样的:

1.  $links = ;2.  for ($i = 0; $i !== 10; $i++) {3.      $links = new mysqli(’127.0.0.1’, ’user’, ’password’, ’db1’);4.      $links-》query(’SELECT SLEEP(1)’, MYSQLI_ASYNC);5.  }6.  $allResult = ;7.  while (!empty($links)) {8.      $reads = $links;9.      $errors = $reject = ;10.     if (!mysqli_poll($reads, $errors, $reject, null)) {11.         continue;12.     }13.     foreach ($reads as $read) {14.         $idx = array_search($read, $links, true);15.         $allResult;16.         $result = $read-》reap_async_query();17.         while ($row = $result-》fetch_row()) {18.             $allResult = $row;19.         }20.         $read-》close();21.         unset($links);22.     }23. }

解释下这段代码的含义:

2~5行,同时发起10个MySQL连接,并发出查询 

注意query() 的第二个参数带上了 MYSQLI_ASYNC 表示非阻塞查询

10行,使用mysqli_poll 轮询10个连接的查询有无返回 

mysqli_poll 的第一个参数$reads是个数组,包含需要轮询那些连接。mysqli_poll 执行完后,会改写$reads,改写后$reads包含的是那些已经有数据返回连接。

mysqli_poll的第四个参数,控制的是轮询的等待时间,单位是“秒”。如果像本例当中设置为null,那么mysqli_poll轮询是阻塞的:只有监听的连接中,任意一个连接有数据返回了,mysqli_poll才会返回。如果等待时间设置为0,那么每次执行mysqli_poll会立即返回,外层的while会频繁循环。

第11~19行,遍历已经有数据返回的连接 

reap_async_query和普通query一样,返回的是mysqli_result,可以一行行fetch数据

20~21行,对于已经获得了数据的连接,下次mysqli_poll就不需要再轮询这个连接了,所以关闭连接,并从$links数组删除这个连接 

当所有的连接都返回了数据,$links数组空了,while循环也就终止了。

使用并行查询的方式,可以大大缩短处理HTTP请求的时间,假设本例中的10个SQL查询,每个需要执行1秒。因为是并行,处理所有的查询,也只需要1秒左右。

如何使MYSQL多表联合查询

  1. select * from 表1 inner join 表2 on 关联条件

  2. select * from 表1 left outer join 表2 on 关联条件

  3. select * from 表1 right outer join 表2 on 关联条件 

  4. select * from 表1 cross join 表2 on 关联条件

MYSQL查询

  1. 查询平均成绩大于70分的同学的学号和平均成绩 SELECT s.id,AVG(sc.score) FROM student s,studentcourse sc WHERE s.id=sc.student_id GROUP BY s.id HAVING  AVG(sc.score)》70;

  2. 查询所有同学的学号、姓名、选课数、总成绩 SELECT id,NAMEFROM studentWHERE id NOT IN (SELECT student_idFROM studentcourseWHERE course_id IN (SELECT course.idFROM teacher,courseWHERE teacher.id=course.teacher_idAND teacher.name=’关羽’));

  3. 查询学生信息和平均成绩 SELECT s.id,s.name,s.city,s.age, c.name,sc.score,t.nameFROM student s,studentcourse sc,course c,teacher tWHERE s.id=sc.student_id AND c.id=sc.course_id AND c.teacher_id=t.id GROUP BY s.id; 

MYSQL 多表联合查询问题

//先读出所有列车信息:$query = mysql_query("SELECT * FROM A ");$a_list = array(); //这里是 所有火车信息 数组while($record = mysql_fetch_assoc($query)) { $a_list = $record;}// 读取所有货物信息$query = mysql_query("SELECT * FROM B ");$b_list = array(); //这里是 所有货物信息 数组while($record = mysql_fetch_assoc($query)) { $hid = $record; $b_list; //这里重要}// 循环 插入 对应的 货物名字 , 没有在读取数据库所以 速度快。foreach($a_list as $k=》$v) { for($i=1;$i《=30;$i++) { if($v != -1){ $it_id = $v; //货物的编号 $a_list; //创建新的元素 插入货物名称。 } }}//那么结果 $a_list 这个数组 就是你要的 结果了。//这里 NU_IT1 , NU_IT2, ...... NU_IT30 这些 就是货物名字// 这个 只是读了 2次 数据 所以 效率应该很高了。

关于mysql多表查询案例到此分享完毕,希望能帮助到您。