sql server 的T-SQL 學習筆記(七)


/************************* 多表連接查詢 2017-7-21 13:51:26*******************************/

-- 多表瞭解查詢
-- 多表連接的類型
-- 多表連接的綜合運用

  select * from Student , ClassRoom where Student.classId = ClassRoom.classId
  select studentId ,studentName ,borthDay,studentScore,studentAddress,studentSex,className from Student,ClassRoom where Student.classId = ClassRoom.classId
  select studentId ,studentName ,borthDay,studentScore,studentAddress,studentSex,c.className from Student as s,ClassRoom as c where s.classId = c.classId

  -- 查詢學生ID 姓名 班級名稱 科目編號 成績
  select 
    studentId as '學生ID',
    studentName as '學生姓名' ,
    c.className as '班級名稱',
    s.courseId as '課程科目編號',
    studentScore as '成績' 
  from 
    Student as s , 
    ClassRoom as c
  where 
    s.classId = c.classId 


  -- 查詢學生ID 姓名 班級名稱 科目名稱 成績
  select 
    studentId as '學生ID',
    studentName as '學生姓名' ,
    c.className as '班級名稱',
    cou.courseName as '課程科目編號',
    studentScore as '成績' 
  from 
    Student as s,
    ClassRoom as c,
    Course as cou
  where
    s.classId = c.classId
    and s.courseId = cou.courseId

  -- 查詢學生id,姓名 班級名稱 科目名稱 成績 顯示不及格或者及格
  select 
    s.studentId as '學生id',
    s.studentName as '學生姓名',
    c.className as '班級名稱',
    cou.courseName as '科目名稱',
    s.studentScore as '分數'
  from 
    Student as s,
    ClassRoom as c,
    Course as cou
  where 
    s.classId = c.classId
    and s.courseId = cou.courseId

 -- ************************ 內連接 **********************
   -- 內連接也稱之爲等同連接 返回兩個表中所有相匹配的數據
   --  select .....from table_name1 [inner] join table_name2 on  <表達式>
   -- 查詢學生id 姓名 班級名稱
     select s.studentId,s.studentName,c.className from Student as s inner join ClassRoom as c on s.classId = c.classId
   -- 查詢學生ID 姓名 班級名稱 科目編號 成績(兩張表內連接)
     select 
       s.studentId ,s.studentName ,c.className,s.courseId ,s.studentScore 
     from Student as s  
       inner join ClassRoom as c on s.classId = c.classId
   -- 查詢學生id 姓名 班級名稱 科目名稱,成績 (三表及三表以上內連接) 不及格人數
     select 
       s.studentId ,s.studentName,c.className,cou.courseName ,s.studentScore 
     from Student as s 
       inner join ClassRoom as c on s.classId = c.classId 
       inner join Course as cou on s.courseId = cou.courseId
     where s.studentScore < 60


-- ******************** 外連接 *********************************
  -- 填補沒有的數據 (eg:學生考試缺考時候打印成績表)
  -- 外連接就是在滿足表連接關係的情況下不但可以查找出匹配的數據,還可以包含左表、右表或者兩表的數據
    -- 左外連接
    -- 右外連接
    -- 全外連接
  -- 將inner修改爲outer 同時outer可以省略

  -- 左外連接 left [outer] join
    select * from ClassRoom as c left outer join Student as s on s.classId = c.classId
  -- 右外連接 right [outer] join
    select * from ClassRoom as c right outer join Student as s on s.classId = c.classId 
  -- 全外連接 full [outer] join
    select * from ClassRoom as c full outer join Student as s on c.classId = s.classId

-- *********** union 運算符***************
  -- union 運算符進行集合的並運算
  -- union 拼接的列相同
  -- union 拼接的列屬性相同
  -- union 可以用在相同的表 也可以用在不同的表
    -- union all 
    select * from Student where studentId < 4
      union all select * from Student where studentId < 7
    -- union 
    select * from Student where studentId < 4
      union select * from Student where studentId < 7
   -- 拼接的列相同(可以添加自定義的)

     select studentId ,studentName from Student where studentId <3
       union 
       select 111,'chencongchencong' 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章