MySQL 最根本的SQL語法/語句。本站提示廣大學習愛好者:(MySQL 最根本的SQL語法/語句)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL 最根本的SQL語法/語句正文
DDL—數據界說說話(Create,Alter,Drop,DECLARE)
DML—數據把持說話(Select,Delete,Update,Insert)
DCL—數據掌握說話(GRANT,REVOKE,COMMIT,ROLLBACK)
起首,扼要引見基本語句:
1、解釋:創立數據庫
Create DATABASE database-name
2、解釋:刪除數據庫
drop database dbname
3、解釋:備份sql server
--- 創立 備份數據的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開端 備份
BACKUP DATABASE pubs TO testBack
4、解釋:創立新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
依據已有的表創立新表:
A:create table tab_new like tab_old (應用舊表創立新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、解釋:刪除新表
drop table tabname
6、解釋:增長一個列
Alter table tabname add column col type
注:列增長後將不克不及刪除。DB2中列加上後數據類型也不克不及轉變,獨一能轉變的是增長varchar類型
的長度。
7、解釋:添加主鍵: Alter table tabname add primary key(col)
解釋:刪除主鍵: Alter table tabname drop primary key(col)
8、解釋:創立索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是弗成更改的,想更改必需刪除從新建。
9、解釋:創立視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、解釋:幾個簡略的根本的sql語句
選擇:select * from table1 where 規模
拔出:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 規模
更新:update table1 set field1=value1 where 規模
查找:select * from table1 where field1 like '%value1%' ---like的語法很精巧,查材料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count as totalcount from table1
乞降:select sum(field1) as sumvalue from table1
均勻:select avg(field1) as avgvalue from table1
最年夜:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、解釋:幾個高等查詢運算詞
A: UNION 運算符
UNION 運算符經由過程組合其他兩個成果表(例如 TABLE1 和 TABLE2)並消去表中任何反復行而派生
出一個成果表。當 ALL 隨 UNION 一路應用時(即 UNION ALL),不用除反復行。兩種情形下,派
生表的每行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符經由過程包含一切在 TABLE1 中但不在 TABLE2 中的行並清除一切反復行而派生出一個
成果表。當 ALL 隨 EXCEPT 一路應用時 (EXCEPT ALL),不用除反復行。
C: INTERSECT 運算符
INTERSECT 運算符經由過程只包含 TABLE1 和 TABLE2 中都有的行並清除一切反復行而派生出一個成果
表。當 ALL 隨 INTERSECT 一路應用時 (INTERSECT ALL),不用除反復行。
注:應用運算詞的幾個查詢成果行必需是分歧的。
12、解釋:應用外銜接
A、left outer join:
左外銜接(左銜接):成果集幾包含銜接表的婚配行,也包含左銜接表的一切行。
sql: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外銜接(右銜接):成果集既包含銜接表的婚配銜接行,也包含右銜接表的一切行。
C:full outer join:
全外銜接:不只包含符號銜接表的婚配行,還包含兩個銜接表中的一切記載。
13、解釋:復制表(只復制構造,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
14、解釋:拷貝表(拷貝數據,源表名:a 目的表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
15、解釋:跨數據庫之間表的拷貝(詳細數據應用相對途徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘詳細數據庫' where 前提
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
16、解釋:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或許: select a,b,c from a where a IN
(1,2,3)
17、解釋:顯示文章、提交人和最初答復時光
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from
table where table.title=a.title) b
18.解釋:外銜接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
19、解釋:在線視圖查詢(表名1:a )
select * from (Select a,b,c FROM a) T where t.a > 1;
20、解釋:between的用法,between限制查詢數據規模時包含了界限值,not between不包含
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
21、解釋:in 的應用辦法
select * from table1 where a [not] in (‘值1','值2','值4','值6')
22、解釋:兩張聯系關系表,刪除主表中曾經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where
table1.field1=table2.field1 )
23、解釋:四表聯盤問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join
d on a.a=d.d where .....
24、解釋:日程支配提早五分鐘提示
sql: select * from 日程支配 where datediff('minute',f開端時光,getdate())>5
25、解釋:一條sql 語句弄定命據庫分頁
select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段
desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段
26、解釋:前10筆記錄
select top 10 * form table1 where 規模
27、解釋:選擇在每組b值雷同的數據中對應的a最年夜的記載的一切信息(相似如許的用法可以用
於服裝論壇t.vhao.net每個月排行榜,每個月熱銷產物剖析,按科目成就排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where
tb.b=ta.b)
28、解釋:包含一切在 TableA 中但不在 TableB和TableC 中的行並清除一切反復行而派生出一個
成果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
29、解釋:隨機掏出10條數據
select top 10 * from tablename order by newid()
30、解釋:隨機選擇記載
select newid()
31、解釋:刪除反復記載
Delete from tablename where id not in (select max(id) from tablename group by
col1,col2,...)
32、解釋:列出數據庫裡一切的表名
select name from sysobjects where type='U'
33、解釋:列出內外的一切的
select name from syscolumns where id=object_id('TableName')
34、解釋:列示type、vender、pcs字段,以type字段分列,case可以便利地完成多重選擇,相似
select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C'
then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename
group by type
顯示成果:
type vender pcs
電腦 A 1
電腦 A 1
光盤 B 2
光盤 A 2
手機 B 3
手機 C 3
35、解釋:初始化表table1
TRUNCATE TABLE table1
36、解釋:選擇從10到15的記載
select top 5 * from (select top 15 * from table order by id asc) table_別號 order by
id desc
隨機選擇數據庫記載的辦法(應用Randomize函數,經由過程SQL語句完成)
對存儲在數據庫中的數據來講,隨機數特征能給出下面的後果,但它們能夠太慢了些。你不克不及
請求ASP“找個隨機數”然後打印出來。現實上罕見的處理計劃是樹立以下所示的輪回:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 這裡是履行劇本 ...
end if
objRec.MoveNext
Wend
這很輕易懂得。起首,你掏出1到500規模以內的一個隨機數(假定500就是數據庫內記載的總
數)。然後,你遍歷每記載來測試ID 的值、檢討其能否婚配RNumber。知足前提的話就履行由
THEN 症結字開端的那一塊代碼。假設你的RNumber 等於495,那末要輪回一遍數據庫花的時光可就
長了。固然500這個數字看起來年夜了些,但比擬更加穩定的企業處理計劃這照樣個小型數據庫了,
後者平日在一個數據庫內就包括了不計其數筆記錄。這時候候不就逝世定了?
采取SQL,你便可以很快地找出精確的記載而且翻開一個只包括該記載的recordset,以下所示
:
Randomize
RNumber = Int(Rnd*499) + 1
sql = "Select * FROM Customers Where ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不用寫出RNumber 和ID,你只須要檢討婚配情形便可。只需你對以上代碼的任務滿足,你自可
按需操作“隨機”記載。Recordset沒有包括其他內容,是以你很快就可以找到你須要的記載如許就
年夜年夜下降了處置時光。
再談隨機數
如今你下定決計要搾干Random 函數的最初一滴油,那末你能夠會一次掏出多條隨機記載或許
想采取必定隨機規模內的記載。把下面的尺度Random 示例擴大一下便可以用SQL應對下面兩種情形
了。
為了掏出幾條隨機選擇的記載並寄存在統一recordset內,你可以存儲三個隨機數,然後查詢
數據庫取得婚配這些數字的記載:
sql = "Select * FROM Customers Where ID = " & RNumber & " or ID = " & RNumber2 & " or
ID = " & RNumber3
假設你想選出10筆記錄(或許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或許
數學等式選出第一筆記錄和恰當數目的遞增記載。這一操作可以經由過程好幾種方法來完成,然則
Select 語句只顯示一種能夠(這裡的ID 是主動生成的號碼):
sql = "Select * FROM Customers Where ID BETWEEN " & RNumber & " AND " & RNumber & "+
9"
留意:以上代碼的履行目標不是檢討數據庫內能否有9條並發記載。
隨機讀取若干筆記錄,測試過
Access語法:Select top 10 * From 表名 orDER BY Rnd(id)
sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 order By rand() Limit n
Access左銜接語法(比來開辟要用左銜接,Access贊助甚麼都沒有,網上沒有Access的SQL解釋,只要
本身測試, 如今記下以備後查)
語法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on
table1.fd1,table2.fd1 where ...
應用SQL語句 用...取代太長的字符串顯示
語法:
SQL數據庫:select case when len(field)>10 then left(field,10)+'...' else field end as
news_name,news_id from tablename
Access數據庫:Select iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute解釋
Execute辦法
該辦法用於履行SQL語句。依據SQL語句履行後能否前往記載集,該辦法的應用格局分為以下兩
種:
(1).履行SQL查詢語句時,將前往查詢獲得的記載集。用法為:
Set 對象變量名=銜接對象.Execute("SQL 查詢說話")
Execute辦法挪用後,會主動創立記載集對象,並將查詢成果存儲在該記載對象中,經由過程Set
辦法,將記載集賦給指定的對象保留,今後對象變量就代表了該記載集對象。
(2).履行SQL的操作性說話時,沒有記載集的前往。此時用法為:
銜接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]
?RecordAffected 為可選項,此出可放置一個變量,SQL語句履行後,所失效的記載
數會主動保留到該變量中。經由過程拜訪該變量,便可曉得SQL語句隊若干筆記錄停止了操作。
?Option 可選項,該參數的取值平日為adCMDText,它用於告知ADO,應當將Execute
辦法以後的第一個字符說明為敕令文本。經由過程指定該參數,可以使履行更高效。
*BeginTrans、RollbackTrans、CommitTrans辦法
這三個辦法是銜接對象供給的用於事務處置的辦法。BeginTrans用於開端一個事物;
RollbackTrans用於回滾事務;CommitTrans用於提交一切的事務處置成果,即確認事務的處置。
事務處置可以將一組操作視為一個全體,只要全體語句都勝利履行後,事務處置才算勝利;若
個中有一個語句履行掉敗,則全部處置就算掉敗,並恢復隨處裡前的狀況。
BeginTrans和CommitTrans用於標志事務的開端和停止,在這兩個之間的語句,就是作為事務
處置的語句。斷定事務處置能否勝利,可經由過程銜接對象的Error聚集來完成,若Error聚集的成員個
數不為0,則解釋有毛病產生,事務處置掉敗。Error聚集中的每個Error對象,代表一個毛病信
息。
37、一道SQL語句面試題,關於group by
表內容:
2005-05-09 勝
2005-05-09 勝
2005-05-09 負
2005-05-09 負
2005-05-10 勝
2005-05-10 負
2005-05-10 負
假如要生成以下成果, 該若何寫sql語句?
勝 負
2005-05-09 2 2
2005-05-10 1 2
答:代碼以下:
create table #tmp(rq varchar(10),shengfu nchar(1))
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-10','勝')
insert into #tmp values('2005-05-10','負')
insert into #tmp values('2005-05-10','負')
1)select rq, sum(case when shengfu='勝' then 1 else 0 end)'勝',sum(case when shengfu='
負' then 1 else 0 end)'負' from #tmp group by rq
2) select N.rq,N.勝,M.負 from (
select rq,勝=count(*) from #tmp where shengfu='勝'group by rq)N inner join
(select rq,負=count(*) from #tmp where shengfu='負'group by rq)M on N.rq=M.rq
3)select a.col001,a.a1 勝,b.b1 負 from
(select col001,count(col001) a1 from temp1 where col002='勝' group by col001) a,
(select col001,count(col001) b1 from temp1 where col002='負' group by col001) b
where a.col001=b.col001
38、就教一個面試中碰到的SQL語句的查訊問題
表中有A B C三列,用SQL語句完成:當A列年夜於B列時選擇A列不然選擇B列,當B列年夜於C列時選擇B列
不然選擇C列。
示例以下:
select (case when a>b then a else b end ),
(case when b>c then b esle c end)
from table_name
39、一個日期斷定的sql語句?
請掏出tb_send表中日期(SendTime字段)為當天的一切記載?(SendTime字段為datetime型,包括日
期與時光)
示例以下:
select * from tb where datediff(dd,SendTime,getdate())=0
40、有一張表,外面有3個字段:語文,數學,英語。個中有3筆記錄分離表現語文70分,數學80分
,英語58分,請用一條sql語句查詢出這三筆記錄並按以下前提顯示出來(並寫出您的思緒):
年夜於或等於80表現優良,年夜於或等於60表現合格,小於60分表現不合格。
顯示格局:
語文 數學 英語
合格 優良 不合格
示例以下:
select
(case when 語文>=80 then '優良'
when 語文>=60 then '合格'
else '不合格') as 語文,
(case when 數學>=80 then '優良'
when 數學>=60 then '合格'
else '不合格') as 數學,
(case when 英語>=80 then '優良'
when 英語>=60 then '合格'
else '不合格') as 英語,
from table
41、在sqlserver2000中請用sql創立一張用戶暫時表和體系暫時表,外面包括兩個字段ID和
IDValues,類型都是int型,並說明下二者的差別?
用戶暫時表:create table #xx(ID int, IDValues int)
體系暫時表:create table ##xx(ID int, IDValues int)
差別:
用戶暫時表只對創立這個表的用戶的Session可見,對其他過程是弗成見的.
當創立它的過程消逝時這個暫時表就主動刪除.
全局暫時表對全部SQL Server實例都可見,然則一切拜訪它的Session都消逝的時刻,它也主動刪除.
42、sqlserver2000是一種年夜型數據庫,他的存儲容量只受存儲介質的限制,請問它是經由過程甚麼方
式完成這類無窮容量機制的。
它的一切數據都存儲在數據文件中(*.dbf),所以只需文件夠年夜,SQL Server的存儲容量是可以擴
年夜的.
SQL Server 2000 數據庫有三品種型的文件:
重要數據文件
重要數據文件是數據庫的終點,指向數據庫中文件的其它部門。每一個數據庫都有一個重要數據文件
。重要數據文件的推舉文件擴大名是 .mdf。
主要數據文件
主要數據文件包括除重要數據文件外的一切數據文件。有些數據庫能夠沒有主要數據文件,而有些
數據庫則有多個主要數據文件。主要數據文件的推舉文件擴大名是 .ndf。
日記文件
日記文件包括恢單數據庫所需的一切日記信息。每一個數據庫必需至多有一個日記文件,但可以不止
一個。日記文件的推舉文件擴大名是 .ldf。
43、請用一個sql語句得出成果
從table1,table2中掏出如table3所列格局數據,留意供給的數據及成果禁絕確,只是作為一個格
式向年夜家就教。
如應用存儲進程也能夠。
table1
月份mon 部分dep 事跡yj
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部分dep 部分稱號dname
--------------------------------
01 國際營業一部
02 國際營業二部
03 國際營業三部
04 國際營業部
table3 (result)
部分dep 一月份 二月份 三月份
--------------------------------------
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
------------------------------------------
1)
select a.部分稱號dname,b.事跡yj as '一月份',c.事跡yj as '二月份',d.事跡yj as '三月份'
from table1 a,table2 b,table2 c,table2 d
where a.部分dep = b.部分dep and b.月份mon = '一月份' and
a.部分dep = c.部分dep and c.月份mon = '二月份' and
a.部分dep = d.部分dep and d.月份mon = '三月份' and
2)
select a.dep,
sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end) as '三月份',
sum(case when b.mon=4 then b.yj else 0 end) as '四月份',
sum(case when b.mon=5 then b.yj else 0 end) as '蒲月份',
sum(case when b.mon=6 then b.yj else 0 end) as '六月份',
sum(case when b.mon=7 then b.yj else 0 end) as '七月份',
sum(case when b.mon=8 then b.yj else 0 end) as '八月份',
sum(case when b.mon=9 then b.yj else 0 end) as '九月份',
sum(case when b.mon=10 then b.yj else 0 end) as '十月份',
sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',
sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',
from table2 a left join table1 b on a.dep=b.dep
44、華為一道面試題
一個表中的Id有多個記載,把一切這個id的記載查出來,並顯示有若干筆記錄。
-------------------------------------------------
select id, Count(*) from tb group by id having count(*)>1
select*from(select count(ID) as count from table group by ID)T where T.count>1