php+mysql 内联接 和 子查询
2024-09-01 06:07:54
INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录
$sql="SELECT * FROM subject as a INNER JOIN e_user as b ON a.uid=b.id"; //也可以用以下方法
SELECT article.aid,article.title,user.username FROM article,user WHERE article.uid = user.uid
LEFT JOIN (左外连):会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录
$sql="SELECT * FROM subject as a LEFT JOIN e_user as b ON a.uid=b.id";
在上面的例子中,对于右表中没有对应匹配的数据记录,其所有的列都被置为 NULL,因此要查询这部分记录(如在上面例子中体现为查找 id=4 这类无对应用户的记录),可以附加 IS NULL 条件:
$sql="SELECT * FROM subject as a LEFT JOIN e_user as b ON a.uid=b.id WHERE b.id IS NULL";
RIGHT JOIN(右外连): 会取得右表(table2)全部记录,即使左表(table2)并无对应匹配记录
$sql="SELECT * FROM subject as a RIGHT JOIN e_user as b ON a.uid=b.id";
除了常用的两个表连接之外,SQL(MySQL) JOIN 语法还支持多表连接
SELECT article.aid,article.title,user.username,type.typename FROM article INNER JOIN user
ON article.uid=user.uid INNER JOIN type ON article.tid=type.tid
//LEFT JOIN
SELECT article.aid,article.title,user.username,type.typename FROM article LEFT JOIN user
ON article.uid=user.uid LEFT JOIN type ON article.tid=type.tid
//RIGHT JOIN
SELECT article.aid,article.title,user.username,type.typename FROM article RIGHT JOIN user
ON article.uid=user.uid RIGHT JOIN type ON article.tid=type.tid
子查询
子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用
$sql = "SELECT * FROM e_user WHERE id IN (SELECT uid FROM subject WHERE fun>80)";
//等同于 SELECT * FROM e_user WHERE id IN(1,2)
标量子查询
$sql = "SELECT * FROM e_user WHERE id=(SELECT min(uid) FROM subject)";
WHERE 表达式中运算符说明:
运算符 | 说明 |
---|---|
= | 等于 |
!= | 不等于,某些数据库系统也写作 <> |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
BETWEEN … AND … | 介于某个范围之内,例:WHERE age BETWEEN 20 AND 30 |
NOT BETWEEN …AND … | 不在某个范围之内 |
IN(项1,项2,…) | 在指定项内,例:WHERE city IN('beijing','shanghai') |
NOT IN(项1,项2,…) | 不在指定项内 |
LIKE | 搜索匹配,常与模式匹配符配合使用 |
NOT LIKE | LIKE的反义 |
IS NULL | 空值判断符 |
IS NOT NULL | 非空判断符 |
NOT、AND、OR | 逻辑运算符,分别表示否、并且、或,用于多个逻辑连接。 优先级:NOT > AND > OR |
% | 模式匹配符,表示任意字串,例:WHERE username LIKE '%user' |
查询之后插入到另一个表
INSERT INTO other(id,sid,name,age,subject,total) SELECT null,s.id, s.name,s.age,j.subject,j.total from SUBJECT as j LEFT JOIN student as s on s.id=j.sid
最新文章
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
- 当shiro不进入自定义realm的权限认证方法时
- java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决
- 【HDU1730】Northcott Game(Nim问题)
- pwd, cd, ls, touch, mkdir, rmdir, rm
- ECharts 在同一个页面添加多个图表 并 给图表绑定事件
- T430 Windows 8 的USB3.0无法识别
- Android游戏开发:物理游戏之重力系统开发--圆形自由落体Demo
- win32 api ShouCursor 根据内部计数器 是否>;= 0 决定是否 显示光标,每true时计数器+1,每false-1
- UVa 11995 I Can Guess the Data Structure!
- hdoj 2035 人见人爱A^B
- Practice Round China New Grad Test 2014 报告
- zoom与scale的异同
- Spring基础篇——bean的自动化装配
- Redis 过期键删除策略
- [Swift]LeetCode939. 最小面积矩形 | Minimum Area Rectangle
- OO第二单元总结之线程大冒险第一关
- C# 获得本机IP、端口等信息地址以及服务器IP信息
- DLNg[结构化ML项目]第二周迁移学习+多任务学习
- LeetCode--107--二叉树的层次遍历II