mysql 笔记记录- day3 高级数据查询语句

本文详细介绍了SQL中的等值查询、非等值查询,以及连接查询(INNERJOIN、LEFTJOIN、RIGHTJOIN),包括它们的使用方法和示例。同时涵盖了UNION操作,子查询(where、from、avg_table和exists类型)及其在多表查询中的应用。
摘要由CSDN通过智能技术生成

.等值查询和非等值查询--多表联查

1. 等值查询
等值连接指的是,多表查询语句中的连接条件使用的是等号。例如:

SELECT employee_id, department_name
FROM employees, departments
WHERE employees.`department_id` = departments.`department_id`;

其中第3行代码,它就是连接条件,它使用了等号,称为等值连接。
 

2.非等值查询

对应地,多表查询语句中的连接条件不是使用等号的称为非等值连接

tips 其中:

与单表查询类似,都是SELECT语句;
把多个表放到FROM后,并用逗号隔开;
可使用AS关键字取别名,便于引用;
如无重名查询字段则可省略数据表的指定。
. 连接查询(多表查询)
连接查询又称多表查询,当查询的字段涉及多个表的时候,就要用到连接查询

# INNER JOIN 后加表  on 后面加判断关系
举例: 用=笛卡尔积中实现去重 ,取出两个表中都存在的且 Ssex = '男'

SELECT * from student INNER JOIN class ON student.classid= class.classid
WHERE Ssex ='男';

-- 外联查询
-- 左外联
LEFT JOIN ON  -- join 左边的表为主表,右边的表为从表
举例: 以 student 为主表 (在 )class为从表的 左联查

SELECT * FROM student
 LEFT JOIN class on student.classid=class.classid

-- 右外联

RIGHT JOIN ON   -- join 右边的表为主表左边的表为从表
SELECT sname,classname FROM class RIGHT JOIN 
select  count(字段名) from 表名 where 条件(ssex ='男');

--union

union是求两个查询的并集。 union合并的是结果集,不区分来自于哪一张表,所以可以合并多张表查询出来的数据。

语法:
select A.field1 as f1, A.field2 as f2 from <table1> A
union
(select B.field3 as f1, field4 as f2 from <table2> B)
order by 字段 desc/asc
注意:
1 列名不一致时,会以第一张表的表头为准,并对其栏目。
2 会将重复的行过滤掉。
3 如果查询的表的列数量不相等时,会报错。
4 在每个子句中的排序是没有意义的, mysql 在进行合并的时候会忽略掉。
5 如果子句中的排序和 limit 进行结合是有意义的。
6 可以对合并后的整表进行排序
举例: 查找 一二班中 排名数最大的 
SELECT * FROM student WHERE sid =(SELECT MAX(sid) from student WHERE classid=1)
UNION
SELECT * FROM student WHERE sid =(SELECT MAX(sid)  from student WHERE classid=2)

tips: union 自带去重, union all不去重  union all 是求两个查询的并集,但是不会把重复的过滤掉,而是全部显示出来。

.子查询

-- 子查询需要用()括起来 .子查询又叫内部查询

举例 :

SELECT * from student where sid = (SELECT MAX(sid) from student);

where 型子查询

举例:

 SELECT * from student where sid in( SELECT MAX(sid) FROM student GROUP BY classid )

from 型子查询

举例:

select avg_table.id,
       avg_table.avg_score,
       chapter13_user.name,
       chapter13_user.sex,
       chapter13_user.class
from
     (select id,
             avg(score) as avg_score
     from demo.chapter13_score
     group by id
     having avg_score > 600) as avg_table
left join
         demo.chapter13_user
             on demo.chapter13_user.id = avg_table.id;


exists  型子查询 :
举例 
SELECT * FROM teacher WHERE EXISTS(SELECT * from student WHERE Ssex='外星人')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值