MySql基础

廖清远

目录

  • 1 软件
    • 1.1 软件
  • 2 数据库
    • 2.1 数据库
  • 3 第一单元
    • 3.1 聚合查询
    • 3.2 条件查询
    • 3.3 多表连接查询
    • 3.4 分类汇总与排序
    • 3.5 综合练习1
    • 3.6 综合练习2
    • 3.7 综合练习3
    • 3.8 第五课时
多表连接查询
  • 1 基础知识
  • 2 任务挑战

多表连接查询


等值连接

    找Bookstore数据库中客户订购的图书书名,订购册数和订购时间。

   SELECT  Book.书名, Sell.订购册数, Sell.订购时间

                FROM  Book, Sell 

               WHERE Book.图书编号=Sell.图书编号; 


Join内连接

    要实现上一题的结果,可以使用以下语句:

SELECT  Book.书名, Sell.订购册数, Sell.订购时间

        FROM  Book inner join Sell 

              ON Book.图书编号=Sell.图书编号; 

当ON后面的字段相同时,还可以写成:

SELECT  Book.书名, Sell.订购册数, Sell.订购时间

   FROM  Book join sell  using(图书编号);


三表连接:

    用JOIN关键字表达下列查询:查找购买了“网页程序设计”且订购数量大于5本的图书和会员姓名和订购册数。

SELECT Book.图书编号, 会员姓名, 书名, 订购册数

    FROM  Sell  JOIN  Book  ON  Book. 图书编号= Sell.图书编号

          JOIN   Members   ON  Sell.身份证号 = Members.身份证号

                  WHERE 书名 = '网页程序设计'  AND 订购册数>5 ;


自表连接

    作为特例,可以将一个表与它自身进行连接,称为自连接。若要在一个表中查找具有相同列值的行,则可以使用自连接。使用自连接时需为表指定两个别名,且对所有列的引用均要用别名限定。

【例】 查找BookStore数据库中订单不同、图书编号相同的图书的订单号、图书编号和订购册数。

  SELECT  a.订单号,a.图书编号,a.订购册数

        FROM  Sell  AS  a  JOIN  Sell  AS  b 

             ON  a. 图书编号=b. 图书编号

                where a. 订单号!=b. 订单号;

左外连接(LEFT OUTER JOIN)

    结果表中除了匹配行外,还包括左表有的但右表中不匹配的行,对于这样的行,从右表被选择的列设置为NULL。

【例】查找所有图书的图书编号、数量及订购了图书的会员身份证号,若从未订购过,也要包括其情况。

  SELECT Book.图书编号,Book.数量,身份证号

     FROM Book LEFT OUTER JOIN Sell

         ON Book.图书编号= Sell.图书编号;

右外连接(RIGHT OUTER JOIN):

    结果表中除了匹配行外,还包括右表有的但左表中不匹配的行,对于这样的行,从左表被选择的列设置为NULL。 

【例】查找订购了图书的会员的订单号、图书编号和订购册数以及所有会员的会员姓名。   

   SELECT 订单号,图书编号,订购册数, Members.会员姓名

       FROM Sell RIGHT JOIN Members 

           ON Members.身份证号= Sell.身份证号;