經(jīng)典SQL語(yǔ)句

時(shí)間:2024-03-12 19:25:43 好文 我要投稿
  • 相關(guān)推薦

經(jīng)典SQL語(yǔ)句大全

經(jīng)典SQL語(yǔ)句大全1

  內(nèi)連接(inner join)。

  外連接:

  全連接(full join)、左連接(left join)、右連接(right join)。

  交叉聯(lián)接(cross join)。

  外連接與內(nèi)連接不一樣,外連接返回的查詢結(jié)果中不僅包含符合條件的行,還包括左表(左外連接),右表(右外連接)或者兩個(gè)連接表(全外連接)中的所有不符合條件的數(shù)據(jù)行。

  1.左連接 (left [outer] join)

  左外連接就是將左表的所有數(shù)據(jù)分別于右表的每條數(shù)據(jù)進(jìn)行連接組合,返回的結(jié)果除內(nèi)連接的數(shù)據(jù)外,還有左表中不符合條件的數(shù)據(jù),并在右表的相應(yīng)列中填上null值。

  SQL語(yǔ)句如下:

  select * from mt_pb_org o left join mt_pb_orgframe f on o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;

  等價(jià)語(yǔ)句:

  select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid = f.pb_orgframeid(+);

  2.右連接 (right [outer] join)

  右外連接就是將右表中的所有數(shù)據(jù)分別與左表的每條數(shù)據(jù)進(jìn)行連接組合,返回的結(jié)果除了內(nèi)連接的數(shù)據(jù)外,還有右表中不符合條件的數(shù)據(jù),并在左表相應(yīng)的列中填上null值。

  SQL語(yǔ)句如下:

  select * from mt_pb_org o right join mt_pb_orgframe on o.pb_orgframeid = f.pb_orgframeid;

  等價(jià)語(yǔ)句:

  select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid(+) = f.pb_orgframeid;

  3.全外連接 (full [outer] join)

  全外連接就是將左表的所有數(shù)據(jù)分別與右表的每條數(shù)據(jù)進(jìn)行連接組合,返回的結(jié)果除了內(nèi)連接的'數(shù)據(jù)外,還有兩個(gè)表中不符合條件的數(shù)據(jù),并在左表或者右表的相應(yīng)列中填上null值。

  SQL語(yǔ)句如下:

  select * from mt_pb_org o full join mt_pb_orgframe o.pb_orgframeid = f.pb_orgframeid;

  4.交叉連接(cross join)

  交叉連接不帶WHERE 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。

  SQL語(yǔ)句如下:

  select * from mt_pb_org o cross join mt_pb_orgframe f;

經(jīng)典SQL語(yǔ)句大全2

  單表的MySQL UPDATE語(yǔ)句:

  UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]

  多表的UPDATE語(yǔ)句:

  UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]

  UPDATE語(yǔ)法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要給予哪些值。WHERE子句指定應(yīng)更新哪些行。如果沒(méi)有WHERE子句,則更新所有的行。如果指定了ORDER BY子句,則按照被指定的順序?qū)π羞M(jìn)行更新。LIMIT子句用于給定一個(gè)限值,限制可以被更新的行的數(shù)目。

  MySQL UPDATE語(yǔ)句支持以下修飾符:

  如果您使用LOW_PRIORITY關(guān)鍵詞,則UPDATE的執(zhí)行被延遲了,直到?jīng)]有其它的客戶端從表中讀取為止。

  如果您使用IGNORE關(guān)鍵詞,則即使在更新過(guò)程中出現(xiàn)錯(cuò)誤,更新語(yǔ)句也不會(huì)中斷。如果出現(xiàn)了重復(fù)關(guān)鍵字沖突,則這些行不會(huì)被更新。如果列被更新后,新值會(huì)導(dǎo)致數(shù)據(jù)轉(zhuǎn)化錯(cuò)誤,則這些行被更新為最接近的合法的值。

  如果您在一個(gè)表達(dá)式中通過(guò)tbl_name訪問(wèn)一列,則UPDATE使用列中的當(dāng)前值。例如,以下語(yǔ)句把年齡列設(shè)置為比當(dāng)前值多一:

  MySQL> UPDATE persondata SET ageage=age+1;

  MySQL UPDATE賦值被從左到右評(píng)估。例如,以下語(yǔ)句對(duì)年齡列加倍,然后再進(jìn)行增加:

  MySQL> UPDATE persondata SET ageage=age*2, ageage=age+1;

  如果您把一列設(shè)置為其當(dāng)前含有的值,則MySQL會(huì)注意到這一點(diǎn),但不會(huì)更新。

  如果您把被已定義為NOT NULL的列更新為NULL,則該列被設(shè)置到與列類型對(duì)應(yīng)的默認(rèn)值,并且累加警告數(shù)。對(duì)于數(shù)字類型,默認(rèn)值為0;對(duì)于字符串類型,默認(rèn)值為空字符串(');對(duì)于日期和時(shí)間類型,默認(rèn)值為“zero”值。

  UPDATE會(huì)返回實(shí)際被改變的行的.數(shù)目。MySQL_info() C API函數(shù)可以返回被匹配和被更新的行的數(shù)目,以及在UPDATE過(guò)程中產(chǎn)生的警告的數(shù)量。

  您可以使用LIMIT row_count來(lái)限定UPDATE的范圍。LIMIT子句是一個(gè)與行匹配的限定。只要發(fā)現(xiàn)可以滿足WHERE子句的row_count行,則該語(yǔ)句中止,不論這些行是否被改變。

  如果一個(gè)UPDATE語(yǔ)句包括一個(gè)ORDER BY子句,則按照由子句指定的順序更新行。

  您也可以執(zhí)行包括多個(gè)表的UPDATE操作。table_references子句列出了在聯(lián)合中包含的表。以下是一個(gè)例子:

  SQL>UPDATE items,month SET items.price=month.price

  WHERE items.id=month.id;

  以上的例子顯示出了使用逗號(hào)操作符的內(nèi)部聯(lián)合,但是multiple-table UPDATE語(yǔ)句可以使用在SELECT語(yǔ)句中允許的任何類型的聯(lián)合,比如LEFT JOIN。

  注釋:您不能把ORDER BY或LIMIT與multiple-table UPDATE同時(shí)使用。

  在一個(gè)被更改的multiple-table UPDATE中,有些列被引用。您只需要這些列的MySQL UPDATE權(quán)限。有些列被讀取了,但是沒(méi)被修改。您只需要這些列的SELECT權(quán)限。

  如果您使用的multiple-table UPDATE語(yǔ)句中包含帶有外鍵限制的InnoDB表,則MySQL優(yōu)化符處理表的順序可能與上下層級(jí)關(guān)系的順序不同。在此情況下,語(yǔ)句無(wú)效并被 回滾。同時(shí),更新一個(gè)單一表,并且依靠ON UPDATE功能。該功能由InnoDB提供,用于對(duì)其它表進(jìn)行相應(yīng)的修改。

  目前,您不能在一個(gè)子查詢中更新一個(gè)表,同時(shí)從同一個(gè)表中選擇。

經(jīng)典SQL語(yǔ)句大全3

  1、查詢語(yǔ)句:主要是由select關(guān)鍵字完成

  2、事務(wù)控制語(yǔ)句:主要由commit、rollback和savepoint三個(gè)關(guān)鍵字完成

  3、DML(數(shù)據(jù)操作語(yǔ)言)語(yǔ)句:主要由、update和三個(gè)關(guān)鍵字完成

  4、DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句:主要由create、alter、drop和truncate四個(gè)關(guān)鍵字完成

  5、DCL(數(shù)據(jù)控制語(yǔ)言)語(yǔ)句:主要由grant、revoke兩個(gè)關(guān)鍵字完成

經(jīng)典SQL語(yǔ)句大全4

  1、創(chuàng)建數(shù)據(jù)庫(kù): create database 數(shù)據(jù)庫(kù)名

  如:create database student;

  2、連接到一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù): use 數(shù)據(jù)庫(kù)名

  如:use student;

  3、刪除數(shù)據(jù)庫(kù):drop database 數(shù)據(jù)庫(kù)名

  如: drop database student;

  4、創(chuàng)建表:create table 表名列名列的數(shù)據(jù)類型列的約束])

  如:create table stuInfo(stuId int primary key,stuName var20) not null)

  5、刪除表: 表名

  如: stuInfo;

  6、修改表:alter table

  給表添加新列: alter table 表名 add 列名列的`數(shù)據(jù)類型

  添加多列,中間用逗號(hào)隔開(kāi)

  如:alter table stuInfo add stuGender var10)

  修改某列的數(shù)據(jù)類型:alter table 表名 modify 列名新數(shù)據(jù)類型

  如:alter table stuInfo modify stuGender int

  修改列名:alter table 表名 change 老列名新列名數(shù)據(jù)類型

  如:alter table stuInfo change stuName stuAddress var30)

  刪除列:alter table 表名 drop 列名

  如: alter table stuInfo drop stuGender

  7、將創(chuàng)建的表的語(yǔ)句反向?qū)С觯?show create table 表名

  8、查詢表的所有內(nèi)容:select * from 表名

  查詢表的部分內(nèi)容: select 列名列表 from 表名

  9、查詢表結(jié)構(gòu):show columns from 表名

  10、插入單行數(shù)據(jù): into 表名列名列表) values(值列表)

  11、插入多行數(shù)據(jù):作用相當(dāng)于將數(shù)據(jù)從一個(gè)表復(fù)制到另一個(gè)表

   into 表名 (列名列表) select

  如將stuInfo表中的所有的學(xué)生姓名復(fù)制到students表中的stuName列中: into students(stuName) select stuName from stuInfo

  12、刪除數(shù)據(jù): from 表名 where過(guò)濾條件

  如刪除stuID為4的人的數(shù)據(jù): from stuInfo where stuId=4

經(jīng)典SQL語(yǔ)句大全5

  1.Top排序問(wèn)題.

  我們經(jīng)常要對(duì)表某個(gè)字段進(jìn)行排序,然后取前N名.所以我們會(huì)寫(xiě)如下的SQL語(yǔ)句:

  selecttop100*from表

  orderbyScoredesc

  如果表非常大的話,那么這樣的操作是非常消耗資源的,因?yàn)镾QLSERVER要對(duì)整個(gè)表進(jìn)行排序,然后取前N條記錄.這樣的造作是在Temdb里邊進(jìn)行的,所以極端的時(shí)候會(huì)報(bào)Log已滿這樣的錯(cuò)誤.為了避免進(jìn)行全表的排序,我們要做的僅僅是在Score上建立索引,這樣因?yàn)镾core索引的葉級(jí)是有序的,只要在Score所以的`頁(yè)級(jí)取前100個(gè),然后根據(jù)書(shū)簽查找到實(shí)際的記錄,這樣對(duì)DB的性能就會(huì)有極大的提升.

  2.同一天問(wèn)題.

  我們經(jīng)常要查找和一個(gè)日期同一天的記錄,所以我們回寫(xiě)如下的SQL語(yǔ)句;

  declare@DateTimedatetime

  set@DateTime=getdate()

  select*from表

  whereconvert(10),F_Time,120)=convert(10),@DateTime,120)

  但是這樣寫(xiě)的SQL語(yǔ)句帶來(lái)的問(wèn)題就是不能使用F_Time上的索引了.為了近可能的使用F_Time上的索引,我們可以使用時(shí)間段查詢的方式來(lái)代替上邊的語(yǔ)句.

  declare@startdatetime

  declare@enddatetime

  declare@datetimedatetime

  set@datetime=getdate()

  tart=convert(10),@datetime,120)--一天的其始時(shí)間

  set@end=dateadd(ss,-1,dateadd(d,1,@start))--一天的結(jié)束時(shí)間

  select*from表whereF_Timebetween@startand@end

  這樣就解決了使用不上索引的問(wèn)題.

  3.利用索引進(jìn)行分組操作.】我們經(jīng)常要對(duì)某一字段進(jìn)行分組,而對(duì)另外一些字段進(jìn)行聚合操作.如果我們對(duì)分組的字段合理的使用索引,可以加快我們分組的速度.下邊以Northwind的Orders表為例:

  --orders表的EmployeeID上建有索引.

  selectEmployeeID,count(*)

  fromorders

  groupbyEmployeeID

  --查看執(zhí)行計(jì)劃,此查詢利用了EmployeeID上的索引.如改成如下查詢:

  selectEmployeeID,sum(Freight)

  fromorders

  groupbyEmployeeID

  --查看執(zhí)行計(jì)劃,此查詢則沒(méi)有使用EmployeeID上的索引.而是使用了全表掃描.那么原因是什么呢?是因?yàn)镕reight沒(méi)有在EmployeeID的索引上,所以通過(guò)索引不能得到結(jié)果.而如果通過(guò)書(shū)簽查詢的成本太高,所以SQLSERVER選擇了使用全表掃描.而如果我們執(zhí)行在EmployeeID和Freight上建立復(fù)合索引呢?

  createindexidx_EmployeeIDonorders(EmployeeID,Freight)

  --再次執(zhí)行第二個(gè)查詢.查看執(zhí)行計(jì)劃.SQLSERVER使用的我們建立的索引.只需要使用索引就可以查詢到結(jié)果,極大的提高了我們的查詢速度.

經(jīng)典SQL語(yǔ)句大全6

  SQL的意思是結(jié)構(gòu)化查詢語(yǔ)言,其主要功能是同各種數(shù)據(jù)庫(kù)建立聯(lián)系,進(jìn)行溝通.查詢指的是對(duì)存儲(chǔ)于SQL的數(shù)據(jù)的請(qǐng)求。查詢要完成的任務(wù)是:將Select語(yǔ)句的結(jié)果集提供給用戶。Select語(yǔ)句從SQL中檢索出數(shù)據(jù),然后以一個(gè)或多個(gè)結(jié)果集的形式將其返回給用戶。

  ==========================================================

  Select基本語(yǔ)法結(jié)構(gòu)

  ==========================================================

  Select[predicate]{*|table.*|[table.]]field[,[table.]field2[,...]}

  [ASalias1[,alias2[,...]]]

  [INTOnew_table_name]

  FROMtableexpression[,...]

  [Where...]

  [GROUPBY...]

  [ORDERBY...][ASC|DESC]]

  predicate-->指定返回記錄(行)的數(shù)量,可選:ALL,TOP

  *--------->指定表中所有字段(列).

  table----->指定表的名稱.

  field----->指定表中字段(列)的名稱

  [ASalias]-替代表中實(shí)際字段(列)名稱的化名.

  [INTOnew_table_name]-->創(chuàng)建新表及名稱.

  tableexpression---->表的名稱.

  [GROUPBY...]表示以該字段的值分組

  [ORDERBY...]表示按升序排列,降序選DESC;

  ------------------------------------------------------------

  1選擇列

  ------------------------------------------------------------

  sql語(yǔ)句在access中的輸入方法

  (1)選擇"查詢"-->新建-->默認(rèn)設(shè)計(jì)視圖-->點(diǎn)擊確定

  (2)關(guān)閉"顯示表對(duì)話框"

  (3)在菜單攔選擇"視圖"--->SQL視圖,就可以輸入SQL語(yǔ)句了

  示例1_1_選擇所有字段

  Select*

  FROMuseres;

  示例1_2_選擇部分字段

  Selectuser_name,real_name,submit_date

  FROMuseres;

  示例1_3查詢兩個(gè)表中的字段

  Select圖書(shū)信息表.圖書(shū)條碼,借書(shū)信息表.圖書(shū)條碼

  FROM圖書(shū)信息表,借書(shū)信息表;

  示例解讀:

  通過(guò)上面簡(jiǎn)單示例我們體會(huì)到

  (1)Select子句選擇列表,它指出查詢結(jié)果集所包含的字段(列)及其屬性,選擇所有列時(shí)用通配府*,選擇部分列時(shí)要用逗號(hào)隔開(kāi)

  (2)FROM子句指出查詢的表名,要指定多個(gè)表時(shí)中間用逗號(hào)隔開(kāi)

  ------------------------------------------------------------

  2TOP指定返回記錄數(shù)量

  ------------------------------------------------------------

  示例1_4_返回記錄數(shù)量

  SelectTOP3*

  FROMuseres;

  -------------------------------------------------------------

  3AS派生新字段

  -------------------------------------------------------------

  示例1_5_派生新字段

  Selectuser_name,(submit_date+30)ASnew_date

  FROMuseres;

  ------------------------------------------------------------

  4Where指定條件進(jìn)行篩選

  ------------------------------------------------------------

  示例1_6等號(hào)查找指定記錄

  Select*

  FROMuseres

  Whereuseres.real_name="紅紅";

  示例1_7年齡大于30的人

  Select*

  FROMuseres

  Whereage>30

  從上面可以看出,在根據(jù)條件進(jìn)行篩選時(shí),要用到運(yùn)算符,常見(jiàn)的運(yùn)算符如下所示:

  1比較運(yùn)算符

  =等于

  <>不等于

  >大于

  <小于

  <=小于等于

  >=大于等于

  2邏輯運(yùn)算符

  ALL所有條件都為true則返回true

  AND兩個(gè)條件都為true則返回true

  OR有一個(gè)條件為true則返回true

  NOT對(duì)值取反

  ANY所有條件中只要有一個(gè)為true則返回true

  BETWEEN只要操作數(shù)在指定的范圍內(nèi),則返回true

  IN只要操作數(shù)等于表達(dá)式中的一個(gè),則返回true

  LIKE如果操作數(shù)與模式相匹配,則返回true

  SOME在一系列的.比較中,有些為true則返回true

  示例1_8_某日以前注冊(cè)用戶

  Select*

  FROMuseres

  Wheresubmit_date<#20xx-12-30#

  示例1_9_某時(shí)間段注冊(cè)用戶

  Select*

  FROMuseres

  Wheresubmit_dateBETWEEN#20xx-1-1#AND#20xx-5-1#

  示例1_10_按關(guān)鍵字查找

  Select*

  FROMuseres

  Whereuseres.real_nameLIKE"*李*"

  ------------------

  IN與OR的區(qū)別

  -----------------

  示例_IN篩選字段中的記錄

  Selectreal_name,submit_date

  FROMuseres

  Wherereal_nameIn("小李","小張")

  示例_OR篩選字段中的記錄

  Selectreal_name,submit_date

  FROMuseres

  Wherereal_name="小李"orreal_name="小張"

  ------------------------------------------------------------

  5GROUPBY分組結(jié)果集

  ------------------------------------------------------------

  示例1_12_GROUPBY分組結(jié)果集

  Selectsex,SUM(age)ASage之SUM

  FROMuseres

  GROUPBYuseres.sex

  ORDERBYSUM(age)DESC;

  示例解讀:

  按字段"sex"下的記錄對(duì)新"字段"age之SUM"進(jìn)行分組.

  ORDERBY...DESC用來(lái)指定按降序排列

  本例中的sum為SQL中的聚合函數(shù)(對(duì)一組值進(jìn)行操作,返回單一的匯總值),下面是常用的幾個(gè)聚合函數(shù):

  1SUM求總和函數(shù)

  格式:

  SUM([ALL|DISTINCT]expression)

  參數(shù):

  ALL對(duì)所有值求總和,默認(rèn)為ALL

  DISTINCT求總和時(shí)排除重復(fù)項(xiàng)

  expression值或表達(dá)式,可以是變量,字段,函數(shù)等

  2AVG求平均值函數(shù)

  格式:

  AVG([ALL|DISTINCT]expression)

  參數(shù):

  ALL對(duì)所有值求平均,默認(rèn)為ALL

  DISTINCT求平均時(shí)排除重復(fù)項(xiàng)

  expression值或表達(dá)式,可以是變量,字段,函數(shù)等

  3MIN和MAX函數(shù)分別為求最小值和最大值,格式和上面類似.

  4COUNT行計(jì)數(shù)函數(shù)

  格式:

  COUNT({[ALL|DISTINCT]expression|*})

  ALL表示計(jì)算除了NULL以外的其他項(xiàng),為默認(rèn)選項(xiàng)

  DISTINCT表示COUNT返回唯一非空值的數(shù)量

  expression為表達(dá)式,不能是txte,image,ntxt和uniqueidentifier類型的數(shù)據(jù).

  示例1_13_AVG求平均值函數(shù)

  Selectsex,AVG(age)ASage之AVG

  FROMuseres

  GROUPBYuseres.sex

  ORDERBYAVG(age)DESC;

  示例1_14_COUNT返回記錄數(shù)量

  SelectCOUNT(*)

  FROMuseres

  示例1_15_按性別分組記錄數(shù)量

  Selectsex,COUNT(*)

  FROMuseres

  GROUPBYsex;

  ------------------------------------------------------------

  6DISTINCT從尾部除去重復(fù)記錄

  ------------------------------------------------------------

  SelectDISTINCTreal_name

  FROMuseres

  ------------------------------------------------------------

  7組合查詢

  ------------------------------------------------------------

  當(dāng)需要從多個(gè)表中查詢時(shí),可以使用組合查詢

  Selectuseres.real_name,logtime.log_time

  FROMuseres,logtime

  Where(((useres.real_name)=[logtime].[real_name]));

經(jīng)典SQL語(yǔ)句大全7

  Yii2自帶一個(gè)強(qiáng)大的命令行管理工具,在windows下打卡cmd命令窗口,切換到Y(jié)ii項(xiàng)目所在目錄(包含Yii.bat),就可以在cmd中運(yùn)行Yii命令了。

  使用Yii migrate命令執(zhí)行sql語(yǔ)句:

  如在路徑為/console/migrations/m130524_201442_init.php這個(gè)文件定義了一張User表的.sql,我們要執(zhí)行這個(gè)sql來(lái)生成數(shù)據(jù)表,就運(yùn)行:

  migrate是Yii用于數(shù)據(jù)遷移的命令,這只是其中一個(gè)用法。

經(jīng)典SQL語(yǔ)句大全8

  復(fù)制代碼 代碼如下:

  ///

  /// 批量執(zhí)行SQL語(yǔ)句

  ///

  ///SQL語(yǔ)句數(shù)組

  ///SQL參數(shù)對(duì)象數(shù)組

  ///

  public static Int32 ExecuteSqls(String[] Sqlstr, Listparam)

  {

  String ConnStr = GetSqlConnection();

  using (SqlConnection conn = new SqlConnection(ConnStr))

  {

  SqlCommand cmd = new SqlCommand();

  SqlTransaction tran = null;

  cmd.Transaction = tran;

  try

  {

  conn.Open();

  tran = conn.BeginTransaction();

  cmd.Connection = conn;

  cmd.Transaction = tran;

  Int32 count = Sqlstr.Length;

  for (Int32 i = 0; i < count; i++)

  {

  cmd.CommandText = Sqlstr[i];

  cmd.Parameters.AddRange(param[i]);

  cmd.ExecuteNonQuery();

  }

  tran.Commit();

  return 1;

  }

  catch

  {

  tran.Rollback();

  return 0;

  }

  finally

  {

  cmd.Dispose();

  conn.Close();

  }

  }

  }

【經(jīng)典SQL語(yǔ)句】相關(guān)文章:

周末的語(yǔ)句02-04

鼓勵(lì)孩子的經(jīng)典語(yǔ)句03-04

鼓勵(lì)人的經(jīng)典語(yǔ)句03-08

晚安心語(yǔ)的經(jīng)典語(yǔ)句03-07

有關(guān)于晚安心語(yǔ)勵(lì)志的語(yǔ)句03-07

母親節(jié)的祝福語(yǔ)句20字03-10

哄女孩子開(kāi)心的甜言蜜語(yǔ)句子11-29