MySQL数据库8 -子查询,联合查询

一 使用IN关键字的子查询

问题: 查询游戏类型是‘棋牌类‘ 的游戏的分数信息

- 游戏分数表中并未包含游戏类型信息

思路一:采用链接查询

思路二: 分两步进行,首先找到所以‘棋牌类‘游戏的编号,再以这一组编号为查询依据完成查询

select * from scores where gno in (select gno from games where gtype =‘棋牌‘)

例:查询没有参与5号游戏的玩家QQ

select user_qq from users where user_qq not in (select user_qq from scores where gno=5)

二 使用exists 关键字的子查询

例:如果存在昵称为‘孙悟空’,则查询分数表中的数据

select * from scores where exists (select * from users user_name =‘孙悟空‘)

三 联合查询

select _statement union[all] select_statement [union[all] select_statement][...n]

作用与特点:可以把多条查询语句所产生的结果集纵向连接为一体

有ALL关键字可以显示全部数据(即重复的也显示出来)

列的数量与类型都要兼容

select user_name from users

union

select gname from games

例:查询玩家表中所有女性玩家和生日为空的玩家

select * from users where user_sex=‘女‘

union

select * from users where user_birthday is null

<<=====>> select * from users where user_sex=‘女‘ or select * from users where user_birthday is null

例:查询qq号是‘12302’的玩家所有分数并计算出总分数和平均分数,并显示到同一结果集中

select user_qq,gno,score from scores where user_qq=‘12302‘ union all select ‘总分‘,‘ ‘,sum(score) from scores union all select ‘平均分‘,‘ ‘,avg(score) from scores where user_qq=‘12302‘

时间: 2024-10-17 20:40:22

MySQL数据库8 -子查询,联合查询的相关文章

MySQL的查询,子查询,联结查询,联合查询

一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二.子查询1.where 子查询SELECT * FROM tb1 WHERE cat_id IN (SELECT max(id) FROM tb2 GROUP BY cat_id); 2.from 子查询SELECT t2_id FROM (SELECT t2_id FROM tb2 ORDER BY t2_id DESC); 3.exists

MySql学习 - 查询/子查询/连接查询/联合查询

数据库查询 设定两张数据库表 第一个表格user包含: user_id username age sex 1 Alps1992 22 man 第二个表格toy包含 user_id toyname 1 OnePiece 普通查询: 查询关键字: AS, SUM, DESC, GROUP BY, ORDER BY, AVG, MIN, MAX, COUNT, LIMIT; 关键字查询例子 select * from user as u order by age limit 5; // as 用来做别

MySql数据库之子查询和高级应用

MySql数据库中的子查询: 子查询:在一条select查询语句中嵌套另一条select语句,其主要作用是充当查询条件或确定数据源. 代码案例如下: 例1. 查询大于平均年龄的学生: select * from students where age > (select avg(age) from students); 例2. 查询学生在班的所有班级名字: select name from classes where id in (select cls_id from students where

MySQL DML操作--------多表联合查询实战

1. 背景 * 多表联合查询是把不同表的记录到一起的一种方式 * 在SQL标准中规划的联合(join)大致分内连接,外连接,全连接.其中外连接又分左外连接,右外连接. 2. 内连接例子 (inner join) [ 员工 --> 部门 ] * 查看员工表[ employees ]和部门表[ departments ]结构 mysql> desc employees; +-----------+---------------+------+-----+---------+------------

mysql数据库优化之开启慢查询日志

进入mysql数据库,使用 show variables like 'slow_query_log'; 查看是否开启了慢查询日志 value值为OFF,则慢查询日志没有开启,在开启慢查询日志之前,我们要确定mysql中是否开启了将没有使用索引的查询进行记录,使用 show variables like '%log%'; 进行查看 默认的是关闭的,首先我们要开启此配置,使用进行开启. set global log_queries_not_using_indexes=on; 接下来使用,查看mysq

Python与Mysql 数据库的连接,以及查询。

python与mysql数据库的连接: pymysql是python中对数据库的连接模块:因此应当首先安装pymysql数据库模块. 执行pip install pymysql 命令. 然后在python 中创建数据库连接表: import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='

MySQL数据库操作(6)查询

准备工作 创建并进入数据库: CREATE DATABASE `info`; USE `info`; #创建学院表: CREATE TABLE `department`( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(20) NOT NULL ); #创建学生表: CREATE TABLE `student`( `s_id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(20) NOT NU

python连接mysql数据库带where条件的查询操作

#encoding=utf-8import MySQLdbclass Sjb_data(): def __init__(self): self.url = url def mysql(self,sql): db = MySQLdb.connect(host='IP地址',port = 3306,user=r'用户名',passwd='密码',db ='数据库名',charset= 'utf8') cur = db.cursor() cur.execute(sql) #执行sql #data =

MySQL数据库中SQL对日期查询相关操作

有时我们面要统计一下数据库中指定日期的数据,如常用的,今天,昨天,明天,本周.上周.本月.上个月份的数据,还有对日期的加减, 除了我们可以使用strtotime来算还可以参考下面方法. SQL减去指定天数 SELECT * from 表名 where DATE_FORMAT(时间字段,"%Y-%m-%d") = DATE_ADD(输入时间,INTERVAL -1 DAY); /** 如果需要加指定天数把-1改为指定天数即可 */ 今天  select * from 表名 where t