[ナレッジベース] - 問い合わせの高度なデータデータベース_mysql:重複排除、複合クエリ、クエリに参加し、仮想テーブル

  

 

  ジェーン著者:seay

  記事ソース:  SQLリレーショナル問合せの高度なデータデータベース:重複排除、複合クエリ、クエリに参加し、仮想テーブル

  レビュー:[ナレッジベース] -データベース_mysqlクエリでの基本的なデータ:サブクエリ、グループ化クエリ、あいまいクエリ

 

  学び[チェックがテストされています]

    重複排除(DISTINCT)

    第二に、クエリの組み合わせ

    三、UNION(ユニオン)

    第四に、クエリに参加

    第五に、仮想テーブル

 

 

重複排除(DISTINCT)

  DISTINCT:唯一の違いは、値を返すために使用され、それは主にフィールドに使用されます

  文法

SELECT  DISTINCT  <列名> | *  FROM  <テーブル名>

  

- すべてのクラス名を照会
SELECT  DISTINCTクラスFROM学生

 

  

 

 

第二に、クエリの組み合わせ

  SQLクエリは、以下のキーワードの組み合わせを使用することができます動作します。

  • UNION(ユニオン):2つのクエリの結果を比較しは、すべての異なる2つの行のセットを返します。
  • INTERSECT(交差点):2つのクエリの比較結果は、左右両面出力の異なる列によってクエリ入力を返します。
  • EXCEPT(差集合):2つのクエリの比較結果は、クエリが異なる行の左右の部分が含まれていない左積集合の集合を返します。

  • :結合またはINTERSECTクエリ結果セットを除く二つの基本的なルールを使用する
    クエリの列とすべての列の順序番号は同じである必要があり、データ・タイプは互換性がなければなりません。

   文法
[ SQLクエリ式1 ] 
  UNION  |  INTERSECT  |  EXCEPT 
[ SQLクエリ式2 ]

  基本データ

- TLデータテーブルを作成する
CREATE  TABLE Tlの(int型の NULL 
    BのINTの NULL 
    C INT  NULL 
;)
- データテーブルT2を作成する
CREATE  TABLEのT2(int型の NULL 
    BのINTの NULL 
    C INT  NULLを
); 
- 地面にデータ
INSERT  INTO TlのVALUES123 );
 INSERT  INTO TlのVALUES234 )。
INSERT  INTO T1のVALUES345 )。
INSERT  INTO T1のVALUES456 )。
INSERT  INTO T1のVALUES567 )。
INSERT  INTO T2のVALUES345 )。
INSERT  INTO T2VALUES567 )。
INSERT  INTO T2のVALUES678 )。
INSERT  INTO T2のVALUES789)。

 

 

三、UNION(ユニオン)

  実施例1(重複排除)

- 検索データT1とT2は、繰り返すように
SELECT  *  FROM T1 UNION  SELECT  *  FROM T2;

 

  

  

  実施例2(重複しません)

- キーワードプラスUNIONの後に、すべてのデータT1とT2を照会し、繰り返さないALL 
SELECT  *  FROM T1 UNION  ALL  SELECT  *  FROM T2;

 

  

 

  MySQL中没有实现INTERSECT(交集)和EXCEPT(差集)

 

 

四、连接查询

  常用的连接查询有如下几种:
   内连接(INNER JOIN):返回连接的对象都满足条件的行。
   左连接(LEFT JOIN):返回左边数据所有数据,即使右边没有数据  (没有对应数据显示为NULL)。
   右连接(RIGHT JOIN):返回右边数据所有数据,即使左边没有数据  (没有对应数据显示为NULL)。
   全连接(FULL JOIN):返回左右交叉数据。
  提示:INNER JOIN 与 JOIN 是相同的。

  语法

SELECT 字段列表 FROM <数据表|视图> INNER JOIN <数据表|视图> ON 条件表达式; 

  数据

  在上一篇【知识库】-数据库_MySQL之基本数据查询:子查询、分组查询、模糊查询基础数据基础上,再增加一些数据。

INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) 
VALUES(2016010,'小夏','一班','',19,'18817716689','沈阳');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) 
VALUES(2016011,'倪妮','二班','',20,'18817716698','北京');

INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016012,1,90,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016012,2,86,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016012,3,79,1);

  

  内连接(INNER JOIN)

--查询成绩表并显示课程名称
SELECT S.Id,S.SId,C.Name,S.Grades,S.IsPassed
 FROM Scores S INNER JOIN Courses C ON S.CId=C.Id;

 

  

 

左连接(LEFT JOIN)

--查询学生信息成绩表
SELECT * FROM Students ST LEFT JOIN Scores S ON ST.Id=S.SId;

  

  

 

 

右连接(RIGHT JOIN)

--查询学生信息成绩表
SELECT * FROM Students ST RIGHT JOIN Scores S ON ST.Id=S.SId;

 

  

 

   MySQL中不支持全连接(FULL JOIN)

 

五、虚拟表

  SQL虚拟表是通过SELECT查询语句返回的一个结果集。
  当虚拟表构建出来后,可以直接当作实际数据表一样查询操作,在实际使用中会经常使用到。

  语法

SELECT 字段列表1 FROM
  (SELECT 字段列表2 FROM <表名> [WHERE子句]) <虚拟表名称> 
[WHERE子句]

  示例

SELECT * FROM ( SELECT S.Id,S.Name CName,S.Grades,S.IsPassed,S.SId,ST.Name,ST.Class 
FROM Students ST LEFT JOIN (SELECT Scores.*,C.Name FROM
 Scores LEFT JOIN Courses C ON Scores.CId=C.Id) S ON ST.Id=S.SId ) T

 

  

  【示例中的SELECT Scores.*,C.Name FROMScores LEFT JOIN Courses C ON Scores.CId=C.Id中 C 和最后面 T 就是虚拟表名称。】

 

おすすめ

転載: www.cnblogs.com/1138720556Gary/p/11221330.html