My SQL 连接查询

来源:互联网 发布:c语言入门经典(第四版) 编辑:程序博客网 时间:2024/06/05 15:01

 1.FROM子句进行多表查询

    查询分数信息,显示玩家昵称,游戏名称和分数(用FROM +查询分数显示的类型)

SELECT user_name,gname,scoreFROM users,games,scoresWHERE users.user_qq=scores.user_qqAND games.gno=scores.gno


2.内连接

    特点:

    2.1 相连接的两张表地位平等

    2.2 如果一张表中在另一张表中不存在对应数据,则不做连接

    2.3 FROM子句后面直接出现多个表名,这种连接方式即属于内连接,是隐式内连接

SELECT user_name,scoreFROM users,scoresWHERE users.user_qq=scores.user_qq
    2.4内连接的格式

SELECT user_name,gname,scoreFROM games INNER JOIN scoresON games.gno=scores.gnoINNER JOIN usersON scores.user_qq=users.user_qq
      games这张表取内连接scores这张表,连接条件是games.gno=scores.gno,最后scores这张表再去连接users这张表,连接条件是scores.user_qq=users.user_qq

   

     例:查询每一位玩家的昵称,总分和平均分

SELECT user_name AS '昵称',SUM(score) AS '总分',AVG(score) AS '平均分'FROM users INNER JOIN scoresON users.user_qq=scores.user_qqGROUP BY users.user_qq,users.user_name
       先内连接,再分组统计
     

     例:查询平均分数大于3500的分数信息,显示玩家昵称,总分数,平均分数,并按平均分数降序排列

SELECT user_name AS '昵称',SUM(score) AS '总分',AVG(score) AS '平均分'FROM users INNER JOIN scoresON users.user_qq=scores.user_qqGROUP BY users.user_qq,users.user_nameHAVING AVG(score)>2500ORDER BY AVG(score) DESC
        后头加两个排序语句即可

3.外连接

    外连接的格式:

SELECT user_name,gno,scoreFROM users LEFT JOIN scores//以分数表为基础表外连接用户表ON users.user_qq=scores.user_qqAND gno=5
     查询所有玩家关于5号游戏的分数信息

 内外连接方式的区别:外连接有基础表,基础表中的数据一定出现,内连接无基础表,当内连接中的数据没有匹配到时,则不会显示到查询结果集中

0 0