日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server中常用的SQL语句

發(fā)布時間:2025/7/25 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server中常用的SQL语句 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 1、概述
  • 2、查詢概述
  • 3、單表查詢
  • 4、連接查詢
  • 5、帶有exists的相關(guān)子查詢
  • 6、SQL的集合操作
  • 7、插入操作
  • 8、刪除操作
  • 9、修改操作
  • 10、數(shù)據(jù)定義
  • 11、視圖

1、概述

名詞

笛卡爾積、主鍵、外鍵

數(shù)據(jù)完整性

  • 實體完整性:主屬性不能為空值,例如選課表中學(xué)號和課程號不能為空
  • 參照完整性:表中的外鍵取值為空或參照表中的主鍵
  • 用戶定義完整性:取值范圍或非空限制,例如:性別(男女),年齡(0-130)

  

表連接

  • 自然連接:與等值連接(a.id=b.id)相比,連接后的表只有一列id,而不是兩列(a.id和b.id)。
  • 半連接:與等值連接(a.id=b.id)相比,連接后的表只有A表的列,被B表“多次匹配”列會顯示為一行。
  • 左外連接:left join
  • 右外連接:right join
  • 全外連接:full join
  • 全內(nèi)連接:inner join

SQL語言的構(gòu)成

  • DDL語言:數(shù)據(jù)定義,定義基本表、視圖、索引;
  • DML語言:數(shù)據(jù)操縱,查詢、增加、修改、刪除
  • DCL語言:權(quán)限

  

2、查詢概述

查詢包括:單表查詢、連接查詢、帶有exists的相關(guān)子查詢、集合操作四中。select...from常用語句執(zhí)行過程

select… ⑤ 投影 from… ① table→內(nèi)存 where… ② 選取元組 group… ③ 分組 having… ④ 選擇分組 [{union|…} ⑥ 查徇結(jié)果的集 合運算 select… ] ①~⑤ order by… ⑦ 排序輸出

3、單表查詢

group by 只有出現(xiàn)在group by子句中的屬性,才可出現(xiàn)在select子句中。

用order by子句對查詢結(jié)果按照一個或多個列的值進行升/降排列輸出,升序為ASC;降序為desc,空值將作為最大值排序

having 與 where的區(qū)別

  • where 決定哪些元組被選擇參加運算,作用于關(guān)系中的元組
  • having 決定哪些分組符合要求,作用于分組

4、連接查詢

連接查詢包括:多表連接查詢、單表連接查詢(自連接)、外連接查詢、嵌套查詢4種

連接條件一

[表名1.] 列名1 比較運算符 [表名2.]列名2

連接條件二

[表名1.]列名1 between [表名2.]列名2 and [表名2.]列名3

連接條件中的列名稱為連接字段,對應(yīng)的連接字段應(yīng)是可比的。

執(zhí)行過程:采用表掃描的方法,在表1中找到第一個元組,然后從頭開始掃描表2,查找到滿足條件的元組即進行串接并存入結(jié)果表中;再繼續(xù)掃描表2,依次類推,直到表2末尾。再從表1中取第二個元組,重復(fù)上述的操作,直到表1中的元組全部處理完畢。

4.1 單表連接(自連接)

用表別名把一個表定義為兩個不同的表進行連接。

例:查找至少選修了2號和4號課程的學(xué)生的學(xué)號

select FIRST.sno from SC as FIRST, SC as SECOND where FIRST.Sno=SECOND.Sno and FIRST.cno='s2' and SECOND.cno='4'

4.2 外連接查詢

外連接查詢包括:Left join、right join、full join

4.3 嵌套查詢

  • 在select … from … where語句結(jié)構(gòu)的where子句中可嵌入一個select語句塊
  • 其上層查詢稱為外層查詢或父查詢,其下層查詢稱為內(nèi)層查詢或子查詢
  • SQL語言允許使用多重嵌套查詢
  • 在子查詢中不允許使用order by子句
  • 嵌套查詢的實現(xiàn)一般是從里到外,即先進行子查詢,再把其結(jié)果用于父查詢作為條件
4.3.1 返回單個值的子查詢

例:求與“劉力”同一個系的學(xué)生名,年齡

方法一: select Sname, Sage from student where Sdept = (select sdept from student where Sname = "劉力");方法二: select FIRST.Sname, FIRST.Sage from Student FIRST, Student SECOND where FIRST.Sdept = SECOND.Sdept AND SECOND.Sname = "劉力";
4.3.2 返回一組值的子查詢

例:求選修“C6”課程且成績超過90分的學(xué)生

方法一: select * from student where sno IN (select sno from SC where Cno="C6" AND Grade>90);方法二(連接查詢 ): select student.* from student,SC where Student.Sno=SC.Sno AND Cno="C6" AND Grade>90;

例:求比計算機系中某一學(xué)生年齡小的其他系的學(xué)生

方法一: select * from student wheresdept!="CS" AND sage < ANY (select Sage from Student where Sdept="CS");方法二: select * from Student where Sdept!=’CS’ AND Sage < (select MAX(Sage) from Student where Sdept="CS");
4.3.3 多重子查詢

例:求D01部門中工資與國貿(mào)系中任意職工相同的職工姓名和工資

表結(jié)構(gòu): Teacher(tno, tname, salary, dno) Department(dno, dname)查詢語句: select Tname,Salary from Teacher where Dno = "D01" AND salary IN(select salary from teacherwhere Dno =(select DNO from department where Dname="國貿(mào)"));

例:求工資介于“張三”與“里司”兩個之間的職工

select * from teacher whereSalary >= (select MIN(Salary) from teacher where Tname IN ("張三", "里司")) AND Salary <= (select MAX(Salary) from teacher where Tname IN ("張三", "里司");
4.3.4 在from語句中使用子查詢,對查詢結(jié)果定義表名及列名

例:求平均成績超過80分的學(xué)號及平均成績

select Sno, avg_G from (select Sno, avg(Grade) from SC group by Sno) AS RA(Sno, avg_G) where avg_G > 80;

AS RA(Sno, avg_G),為查詢作為定義表名(RA)和列名(Sno, avg_G)

5、帶有exists的相關(guān)子查詢

  • 不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢的稱為不相關(guān)子查詢。
  • 相關(guān)子查詢:子查詢的查詢條件依賴于外層父查詢的某個屬性值的稱為相關(guān)子查詢,帶exists 的子查詢就是相關(guān)子查詢
  • exists表示存在量詞,帶有exists的子查詢不返回任何記錄的數(shù)據(jù),只返回邏輯值“True” 或“False”

例:求所有選修了“C1”課程的學(xué)生名。

不相關(guān)子查詢: select Sname from student where sno IN ( select sno from SC where Cno = "C1" );相關(guān)子查詢 select Sname from student where exists (select * from SC where student.sno=SC.sno AND Cno = "C1" );

相關(guān)子查詢執(zhí)行過程:先在外層查詢中取student表的第一個元組(記錄),用該記錄的相關(guān)的屬性值(在內(nèi)層where子句中給定的)處理內(nèi)層查詢,若外層的where子句返回‘TRUE’值,則此元組送入結(jié)果的表中。然后再取下一個元組;重復(fù)上述過程直到外層表的記錄全部遍歷一次為止。

  • 不關(guān)心子查詢的具體內(nèi)容,因此用 select *
  • exists + 子查詢用來判斷該子查詢是否返回元組
  • 當子查詢的結(jié)果集非空時,exists 為“True”;當子查詢的結(jié)果集為空時,exists為“False”。
  • not exists :若子查詢結(jié)果為空,返回“TRUE”值,否則返回“FALSE”

例:查詢選修了所有課程的學(xué)生的姓名(續(xù))

select Sname from student where not exists (select * from Coursewhere not exists (select * from SC where student.sno=SC.sno AND Course.Cno=SC.Cno) );

例:查詢至少選修了S1所選的全部課程的學(xué)生名

select Sname from student where not exists(select *from SC SCX where SCX.sno="s1" AND not exists (select *from SC SCYwhere student.sno=SCY.sno AND SCX.Cno=SCY.Cno) );

6、SQL的集合操作

  • 屬性個數(shù)必須一致、對應(yīng)的類型必須一致
  • 屬性名可以不一致, 最終結(jié)果集采用第一個結(jié)果的屬性名
  • 缺省為自動去除重復(fù)元組,除非顯式說明ALL
  • order by放在整個語句的最后

6.1 “并”操作,例:查詢計算機系的學(xué)生或者年齡不大于19歲的學(xué)生,并按年齡倒排序。

select * from student where Sdept="CS" UNION select * from student where AGE <= 19 order by AGE desc

6.2 “交”操作,例:查詢計算機系的學(xué)生并且年齡不大于19歲的學(xué)生,并按年齡倒排序。

(select * from student where Sdept = "CS") INTERSECT (select * from student where AGE <= 19) order by AGE desc

6.3 “差”操作,例:查詢選修課程1但沒有選修課程2的學(xué)生。

select Sname, Sdept from student where sno IN ((select sno from SC where Cno="1")EXCEPT(select sno from SC where Cno="2") )

7、插入操作

格式:insert into 表名[(列名1,…)] values (列值1,…)

插入一已知元組的全部列值

insert into student values("2003001", "陳冬", 18, "男", "電商", "管理學(xué)院", "徐州");

插入一已知元組的部分列值

insert into SC(Sno,Cno) values ("2003001", "C003");

插入子查詢的結(jié)果

例:設(shè)關(guān)系S_G(Sno,avg_G),把平均成績大于80的男生的學(xué)號及平均成績存入S_G中
insert into S_G(sno,avg_G) (select sno, avg(GRADE)from SCwhere Sno IN (select Sno from Student where SEX="男")group by Snohaving avg(GRADE) > 80 );

8、刪除操作

格式: delete from 表名 [where 條件];
  • 只能對整個元組操作,不能只刪除某些屬性上的值
  • 只能對一個關(guān)系(表)起作用,若要從多個關(guān)系(表)中刪除元組,則必須對每個關(guān)系分別執(zhí)行刪除命令

9、修改操作

update語句一次只能操作一個表。

格式1: update 表名 [別名] set 列名 = 表達式, ... [where 條件];格式2: update 表名 [別名] set (列名, ...) = (子查詢) [where 條件];

例:工種為SALESMEN的職工的工資改為工種平均工資的110%

update EMPLOYEE set Salary = (select 1.1 * avg(Salary) from EMPLOYEE where JOB="SALESMEN") where JOB="SALESMEN";

例:將所有學(xué)生的年齡增加1歲

update student set Sage=Sage+1;

10、數(shù)據(jù)定義

創(chuàng)建課程表

create table SC (sno CHAR(6) not null,Cno CHAR(6) not null,Grade smallint default null ) primary key (sno,Cno) foreign key (sno) references student(sno) foreign key (Cno) references Course(Cno) check (Grade between 0 AND 100);

常用的索引:唯一索引和聚簇索引

唯一索引
  • 對于已含重復(fù)值的屬性列不能建UNIQUE索引
  • 對某個列建立UNIQUE索引后,插入新記錄時DBMS會自動檢查新記錄在該列上是否取了重復(fù)值。這相當于增加了一個UNIQUE約束
create UNIQUE INDEX Stusno ON Student(Sno ASC);
聚簇索引

建立聚簇索引后,基表中數(shù)據(jù)也需要按指定的聚簇屬性值的升序或降序存放。也即聚簇索引的索引項順序與表中記錄的物理順序一致

create CLUSTER INDEX Stusname ON Student(Sname);

在Student表的Sname(姓名)列上建立一個聚簇索引,而且Student表中的記錄將按照Sname值的升序存放。Sql server中的表示方式create clustered index。某些DMBS不支持聚簇索引,所以用前一定要查使用說明。

  • 在一個基本表上最多只能建立一個聚簇索引
  • 聚簇索引的用途:對于某些類型的查詢,可以提高查詢效率
  • 聚簇索引的適用范圍:很少對基表進行增刪操作;很少對其中的變長列進行修改操作
刪除索引

刪除索引時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)該索引的描述。

DROP INDEX [表名.]<索引名>;

例:刪除Student表的Stusname索引

DROP INDEX Student.Stusname;

11、視圖

例:建立電商系學(xué)生的視圖

create view ec_student as select sno, sname, age from student where dept="ec"

刪除視圖

DROP VIEW <視圖名>

一個視圖被刪除后,由此視圖導(dǎo)出的其他視圖也將失效,用戶應(yīng)該使用DROP VIEW語句將他們一一刪除

轉(zhuǎn)載于:https://www.cnblogs.com/jiazuzhuzhu/p/6964492.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server中常用的SQL语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。