最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

MySQL學(xué)習(xí)筆記和題目:級聯(lián)刪除,子查詢語法大全,用代碼建表【詩書畫唱】

2020-08-15 20:55 作者:詩書畫唱  | 我要投稿






————————

前言:


很多東西只要記錄并且知道正確的語法,就可以迎刃而解。——詩書畫唱


——————————

mysql的數(shù)據(jù)類型:

int:整形?

varchar():字符串

boolean:是否

text:大文本

timestamp:時間戳

timestamp?

?/?ta?mst?mp/

?n. 時間戳;時間郵票





bolb:二進(jìn)制 ?


blob[bl?b][blɑ?b]

n.(尤指液體的) 一點(diǎn),一滴; (顏色的) 一小片,斑點(diǎn);vt.弄臟; 弄錯;

唯一:unique??

自增約束:auto_increments??

auto[???t??][???to?]

n.汽車;vi.乘汽車;

automatic[???t??m?t?k][???t??m?t?k]

adj.自動的; 無意識的; 不假思索的; 必然的; 當(dāng)然的;n.自動手槍(或步槍); 自動變速汽車; 自動換擋汽車;

increments[??nkr?m?nts][???kr?m?nts]

n.定期的加薪; 增量; 增加;[詞典]increment的復(fù)數(shù);



主外鍵:foreign key?

外鍵也稱為參照完整性,外鍵表的信息參照著主鍵表的信息進(jìn)行設(shè)置,主鍵表沒有的信息外鍵。

表示不能使用的非空約束:notnull??

主鍵約束:primary key

默認(rèn)值約束:default

timestamp:YYYY-MM-DD

text:大文本

Blob:二進(jìn)制數(shù)據(jù)類型,可以存儲圖片音頻視頻


BLOB的全名是Binary Large Object ,用于存儲大量的二進(jìn)制數(shù)據(jù),如圖片、視頻、音頻等。

在MySQL中,大數(shù)據(jù)對象字段數(shù)據(jù)類型有TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB等。

它們的大小容量:

TINYBLOB ≈ 255 bytes
BLOB ≈ 64KB
MEDIUMBLOB ≈ 16MB
LONGBLOB ≈ 4GB
保存數(shù)據(jù)
保存數(shù)據(jù)到表使用的關(guān)鍵方法setBinaryStream(),參數(shù)設(shè)置InputStream流。

我們只要將路徑轉(zhuǎn)換成File對象,將File轉(zhuǎn)換成InputStream對象,將InputStream對象設(shè)置成PreparedStatement對象的參數(shù)。最后就能將二進(jìn)制數(shù)據(jù)存儲到表里。




創(chuàng)建表:
學(xué)生表 stu
字段? ? ? ? ? ? ? ? 類型
xuehao(編號)? ? ? ? ? int(主鍵自增)
xingming(姓名)? ? ?? varchar(非空唯一)
sex(性別)? ? ? ? ? ? ? ? varchar(非空)
chushengriqi(出生日期)? timestamp(設(shè)置默認(rèn)為當(dāng)前時間)
beizhu? ? ? ? ? ? ? ?text(備注)


專業(yè)表 zy
zhuanyeid? ? ? ? ?int(主鍵自增)
zhuanyename? ? varchar(100)專業(yè)名稱
成績表 cj
chengjiid(成績編號)? ?? int(主鍵自增)

xuehao? ? ? ? ? ? ? ? ? ? ? ? ? ?int(學(xué)號)(外鍵)
zhuanyeid? ? ? ? ? ? ? ? ? ? ?int(專業(yè))(外鍵)
chengji? ? ? ? ? ? ? ? ? ? ? ? ? int(具體成績)




--【按照下面的順序刪除(先刪除有外鍵的表)才有用】

--drop table cj

--drop table stu

--drop table zy


create table zy(

zhuanyeid? ? int primary key auto_increment,

zhuanyename? ? varchar(100) unique

)

--設(shè)置為唯一,這樣第7,4等題的子查詢才不會錯


create table stu(

xuehao int primary key auto_increment,

xingming varchar(100)not null unique,

sex? varchar(100) not null,


chushengriqi? ?timestamp default current_timestamp,

beizhu? ? ?text

)

--timestamp default current_timestamp:設(shè)置時間默認(rèn)為當(dāng)前時間

--【注釋不可以插到執(zhí)行語句中,不然會報錯,

--如果報錯就看是錯在哪一行(看“l(fā)ine XXX”】

create table cj(


chengjiid int primary key auto_increment,


xuehao? ? ? ? ? ? ? ? ? ? ? ? ? ?int,

zhuanyeid? ? ? ? ? ? ? ? ? ? ?int,

chengji? ? ? ? ? ? ? ? ? ? ? ? ? int,

foreign key(xuehao ) references stu(xuehao ) on delete cascade,

foreign key(zhuanyeid) references zy(zhuanyeid) on delete cascade

)

--關(guān)系表的級聯(lián)更新: on update cascade

--on delete cascade 是級聯(lián)刪除的意思

--意思是 當(dāng)你更新或刪除主鍵表時,那么外鍵表也會跟隨一起更新或刪除

--——————————

--1.使用sql語句給學(xué)生表,專業(yè)表和成績表增加5條數(shù)據(jù)

insert into zy (zhuanyename ) values('計算機(jī)專業(yè)'),

('物理專業(yè)'),('醫(yī)學(xué)專業(yè)'),('哲學(xué)專業(yè)'),('美術(shù)專業(yè)');

--select * from zy

insert into? stu(xingming,sex,beizhu) values('劉六6','女','b站up主'),

('詩書畫唱1','男','b站up主'),('詩書畫唱2','男','b站up主'),

('詩書畫唱3','男','b站up主'),('詩書畫唱4','男','b站up主'),

('詩書畫唱5','男','b站up主');

insert into cj (xuehao ,zhuanyeid ,chengji ) values(6,5,50),

(1,1,100),(2,2,100),(3,3,100),(4,4,100),(5,5,100);

--select * from cj

--2.修改學(xué)生表編號為3的學(xué)生姓名為張三豐

update stu set xingming ='張三豐' where xuehao=3

--select * from stu

——————

錯誤部分:

update stu set xingming='張三豐' where xuehao=3

【這里set等關(guān)鍵字沒變藍(lán)色,說明從網(wǎng)頁復(fù)制出來時,

有錯,自到看不出來的網(wǎng)頁附加附帶的編碼格式】

——————



--3.修改成績表張三豐的成績?yōu)?0

--【下面的語句的列名和表名等不可以弄錯,

--比如update cj set chengji ='80 ' where? ? ?

--zhuanyeid? in (select zhuanyeid from cj?

--where zhuanyename='張三豐'),專業(yè)名(zhuanyename)

--不可能為”張三豐”

update cj set chengji ='80 ' where? ? xuehao = (select xuehao??

? ?from stu where xingming='張三豐')

--select * from cj

--4.將學(xué)生成績大于80的專業(yè)改為計算機(jī)專業(yè)

--update? zy set zhuanyename ='計算機(jī)'? where? ? ?zhuanyeid='

-- (select zhuanyeid from cj where chengji>80)'不行時,說明替換錯了,

--就是替換別的變量

--替換對應(yīng)的查出來的為唯一的數(shù)據(jù),比如有where的 zhuanyeid =

--(select zhuanyeid from zy where zhuanyename='哲學(xué)')

--,不應(yīng)替換會有多個內(nèi)容的變量,比如

-- zhuanyeid='(select zhuanyeid from cj where chengji>80)'

update cj set zhuanyeid =(select zhuanyeid from zy where

?zhuanyename='計算機(jī)專業(yè)') where chengji>80


--select * from cj

--5.修改張三豐的專業(yè)為計算機(jī)專業(yè)


--update? zy set zhuanyename ='計算機(jī)'? where? ? ?zhuanyeid=

-- (select zhuanyeid from cj where zhuanyename='張三豐')不行時,

--說明替換錯了,就是替換別的變量或表

update cj inner join stu on cj.xuehao=stu.xuehao set cj.zhuanyeid=(select?

zhuanyeid from zy where zhuanyename='計算機(jī)專業(yè)') where stu.xingming='張三豐'

--select * from cj

--6.修改性別為女的并且成績小于60的專業(yè)為哲學(xué)專業(yè)

--update? zy set zhuanyename ='哲學(xué)'? where? ? ?zhuanyeid=?

--(select zhuanyeid from cj where chengji<60? ?and?

?--xuehao? = (select? xuehao from stu where sex='女')) 不行時,說明替換錯了,

--就是替換別的變量或表,用上兩表查詢

update cj inner join stu on cj.xuehao=stu.xuehao set cj.zhuanyeid=(select

?zhuanyeid from zy where zhuanyename='哲學(xué)專業(yè)') where cj.chengji<60 and?

stu.sex='女'


--7.修改學(xué)生id為5的專業(yè)為計算機(jī)專業(yè)

--create table zy(

--zhuanyeid? ? int primary key auto_increment,

--zhuanyename? ? varchar(100) unique

--)

--設(shè)置為唯一,這樣第7題的子查詢才不會錯


--update? zy set zhuanyename ='計算機(jī)'專業(yè)? where? ?

?--? zhuanyeid = (select zhuanyeid from cj where xuehao=5)不行時,說明替換錯了,

--就是替換別的變量或表,用上兩表查詢

update cj inner join zy on cj.zhuanyeid=zy.zhuanyeid inner join stu?

on cj.xuehao=stu.xuehao set cj.zhuanyeid=

(select zhuanyeid from zy where zy.zhuanyename='計算機(jī)專業(yè)')

?where stu.xuehao=5

--8.刪除張三豐

--有時xingming等大略的不行,就替換上具體明確的stu.xingming

--delete? ?from? ?stu where stu.xingming='張三豐'

delete? from stu where xingming='張三豐'

--如果where等的關(guān)鍵字不變藍(lán)((說明有不可見的內(nèi)容之類,

--附在關(guān)鍵字中或周圍等),那么就把周圍的空格刪除,之后再重新加空格等



--9.刪除成績在60-70之間的學(xué)生


--chengji在cj表中,而不是在stu表才有


delete from cj where? chengji>60 and chengji<70


--10.查詢所有學(xué)生的信息,包含專業(yè)和成績

--簡寫:select * from cj inner join stu on stu.xuehao=cj.xuehao?

--inner join zy on cj.zhuanyeid=zy.zhuanyeid

select * from stu as stu


?inner join cj as cj on stu.xuehao=cj.xuehao? inner join zy as zy on zy.zhuanyeid=cj.zhuanyeid?










——————————————————————
類似題目擴(kuò)展:

創(chuàng)建商品類型表sp_type
字段 類型
sp_typeid int(主鍵自增)
sp_typename varchar(非空,唯一)
商品表sp?
字段? ? ? ? ? ? ? ?類型
sp_id? ? ? ? ? ? ?int(主鍵自增)
sp_name? ? ? varchar(非空,唯一)
sp_price? ? ? ? float
sp_riqi? ? ? ? ? ?timestamp(默認(rèn)當(dāng)前時間)
sp_jieshao? ? ?text
sp_typeid? ? ?? int







一、SQL子查詢語句

1、單行子查詢

select ename,deptno,sal from emp where deptno=(select deptno from dept where loc='NEW YORK');

2、多行子查詢

SELECT ename,job,sal FROM EMP WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');

3、多列子查詢

SELECT deptno,ename,job,sal FROM EMP WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);

4、內(nèi)聯(lián)視圖子查詢

(1)SELECT ename,job,sal,rownum FROM (SELECT ename,job,sal FROM EMP ORDER BY sal); (2)SELECT ename,job,sal,rownum FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal) WHERE rownum<=5;

5、在HAVING子句中使用子查詢

SELECT deptno,job,AVG(sal) FROM EMP GROUP BY deptno,job HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename='MARTIN');

6、內(nèi)連接 左連接 右連接舉例;

select sys_user.user_id ,sys_user.user_code from sys_user inner join XZFW_BANJIE on sys_user.user_id=XZFW_BANJIE.userid

小例子:

select top 10 * from sys_user where user_code not in (select user_code from sys_user where user_code like '%yzj%') select top 2 * from (select top 2 * from td.users order by us_username desc) users order by us_username desc

7、刪除約束語句:

alter table dbo.XZFW_SYS_USER drop CONSTRAINT FK1772E1891324F678

8、記錄數(shù)查詢

select count(user_pass) from sys_user select count(*) from sys_user where user_code!='admin'

9、在范圍之間取值( between ... and ..用法)

select sys_user.user_id,sys_user.user_name,xzfw_shoujian.caseid from sys_user inner join xzfw_shoujian on sys_user.user_id=xzfw_shoujian.userid where user_id between 5 and 100

或 select * from sys_user where user_id<10 and user_id>1

二、SQL基本語句

下列語句部分是Mssql語句,不可以在access中使用。

SQL分類:

DDL—數(shù)據(jù)定義語言(Create,Alter,Drop,DECLARE)

DML—數(shù)據(jù)操縱語言(Select,Delete,Update,Insert)

DCL—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,簡要介紹基礎(chǔ)語句:

1、說明:創(chuàng)建數(shù)據(jù)庫

Create DATABASE database-name

2、說明:刪除數(shù)據(jù)庫

drop database dbname

3、說明:備份sql server

--- 創(chuàng)建 備份數(shù)據(jù)的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

--- 開始 備份

BACKUP DATABASE pubs TO testBack

4、說明:創(chuàng)建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根據(jù)已有的表創(chuàng)建新表:

A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)

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中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。

7、說明:添加主鍵: Alter table tabname add primary key(col)

說明:刪除主鍵: Alter table tabname drop primary key(col)

8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….)

刪除索引:drop index idxname

注:索引是不可更改的,想更改必須刪除重新建。

9、說明:創(chuàng)建視圖: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]

總數(shù):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

最?。簊elect min(field1) as minvalue from table1

11、說明:幾個高級查詢運(yùn)算詞

A: UNION 運(yùn)算符

UNION 運(yùn)算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。

B: EXCEPT 運(yùn)算符

EXCEPT 運(yùn)算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行。

C: INTERSECT 運(yùn)算符

INTERSECT 運(yùn)算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行。

注:使用運(yùn)算詞的幾個查詢結(jié)果行必須是一致的。

12、說明:使用外連接

A、left outer join:

左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。

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:

右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。

C:full outer join:

全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

其次,大家來看一些不錯的sql語句

1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1 法二:select top 0 * into b from a

2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ where 條件 例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..

4、說明:子查詢(表名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)

5、說明:顯示文章、提交人和最后回復(fù)時間

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、說明:外連接查詢(表名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

7、說明:在線視圖查詢(表名1:a )

select * from (Select a,b,c FROM a) T where t.a > 1;

8、說明:between的用法,between限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括

select * from table1 where time between time1 and time2 select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2

9、說明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、說明:四表聯(lián)查問題:

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 .....

12、說明:日程安排提前五分鐘提醒

SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

13、說明:一條sql 語句搞定數(shù)據(jù)庫分頁

select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段

14、說明:前10條記錄

select top 10 * form table1 where 范圍

15、說明:選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個結(jié)果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、說明:隨機(jī)取出10條數(shù)據(jù)

select top 10 * from tablename order by newid()

18、說明:隨機(jī)選擇記錄

select newid()

19、說明:刪除重復(fù)記錄

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、說明:列出數(shù)據(jù)庫里所有的表名

select name from sysobjects where type='U'

21、說明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似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

顯示結(jié)果:

type vender pcs

電腦 A 1

電腦 A 1

光盤 B 2

光盤 A 2

手機(jī) B 3

手機(jī) C 3

23、說明:初始化表table1

TRUNCATE TABLE table1

24、說明:選擇從10到15的記錄

select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

隨機(jī)選擇數(shù)據(jù)庫記錄的方法(使用Randomize函數(shù),通過SQL語句實現(xiàn))

  對存儲在數(shù)據(jù)庫中的數(shù)據(jù)來說,隨機(jī)數(shù)特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP“找個隨機(jī)數(shù)”然后打印出來。實際上常見的解決方案是建立如下所示的循環(huán):

Randomize RNumber = Int(Rnd*499) +1 While Not objRec.EOF If objRec("ID") = RNumber THEN ... 這里是執(zhí)行腳本 ... end if objRec.MoveNext Wend

  這很容易理解。首先,你取出1到500范圍之內(nèi)的一個隨機(jī)數(shù)(假設(shè)500就是數(shù)據(jù)庫內(nèi)記錄的總數(shù))。然后,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執(zhí)行由THEN 關(guān)鍵字開始的那一塊代碼。假如你的RNumber 等于495,那么要循環(huán)一遍數(shù)據(jù)庫花的時間可就長了。雖然500這個數(shù)字看起來大了些,但相比更為穩(wěn)固的企業(yè)解決方案這還是個小型數(shù)據(jù)庫了,后者通常在一個數(shù)據(jù)庫內(nèi)就包含了成千上萬條記錄。這時候不就死定了?

  采用SQL,你就可以很快地找出準(zhǔn)確的記錄并且打開一個只包含該記錄的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,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作“隨機(jī)”記錄。Recordset沒有包含其他內(nèi)容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。

再談隨機(jī)數(shù)

  現(xiàn)在你下定決心要榨干Random 函數(shù)的最后一滴油,那么你可能會一次取出多條隨機(jī)記錄或者想采用一定隨機(jī)范圍內(nèi)的記錄。把上面的標(biāo)準(zhǔn)Random 示例擴(kuò)展一下就可以用SQL應(yīng)對上面兩種情況了。

  為了取出幾條隨機(jī)選擇的記錄并存放在同一recordset內(nèi),你可以存儲三個隨機(jī)數(shù),然后查詢數(shù)據(jù)庫獲得匹配這些數(shù)字的記錄:

SQL = "Select * FROM Customers Where ID = " & RNumber & " or ID = " & RNumber2 & " or ID = " & RNumber3

  假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數(shù)學(xué)等式選出第一條記錄和適當(dāng)數(shù)量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 Select 語句只顯示一種可能(這里的ID 是自動生成的號碼):

SQL = "Select * FROM Customers Where ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

  注意:以上代碼的執(zhí)行目的不是檢查數(shù)據(jù)庫內(nèi)是否有9條并發(fā)記錄。

隨機(jī)讀取若干條記錄,測試過

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左連接語法(最近開發(fā)要用左連接,Access幫助什么都沒有,網(wǎng)上沒有Access的SQL說明,只有自己測試, 現(xiàn)在記下以備后查)

語法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

使用SQL語句 用...代替過長的字符串顯示

語法:

SQL數(shù)據(jù)庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename Access數(shù)據(jù)庫:Select iif(len(field)>2,left(field,2)+'...',field) FROM tablename; Conn.Execute說明 Execute方法

  該方法用于執(zhí)行SQL語句。根據(jù)SQL語句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種:

1.執(zhí)行SQL查詢語句時,將返回查詢得到的記錄集。用法為:

Set 對象變量名=連接對象.Execute("SQL 查詢語言")

Execute方法調(diào)用后,會自動創(chuàng)建記錄集對象,并將查詢結(jié)果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以后對象變量就代表了該記錄集對象。

2.執(zhí)行SQL的操作性語言時,沒有記錄集的返回。此時用法為:

    連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]

      ·RecordAffected 為可選項,此出可放置一個變量,SQL語句執(zhí)行后,所生效的記錄數(shù)會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊多少條記錄進(jìn)行了操作。一、SQL子查詢語句

二、SQL基本語句

下列語句部分是Mssql語句,不可以在access中使用。

SQL分類:

DDL—數(shù)據(jù)定義語言(Create,Alter,Drop,DECLARE)

DML—數(shù)據(jù)操縱語言(Select,Delete,Update,Insert)

DCL—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,簡要介紹基礎(chǔ)語句:

1、說明:創(chuàng)建數(shù)據(jù)庫

Create DATABASE database-name

2、說明:刪除數(shù)據(jù)庫

drop database dbname

3、說明:備份sql server

--- 創(chuàng)建 備份數(shù)據(jù)的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

--- 開始 備份

BACKUP DATABASE pubs TO testBack

4、說明:創(chuàng)建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根據(jù)已有的表創(chuàng)建新表:

A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)

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中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長度。

7、說明:添加主鍵: Alter table tabname add primary key(col)

說明:刪除主鍵: Alter table tabname drop primary key(col)

8、說明:創(chuàng)建索引:create [unique] index idxname on tabname(col….)

刪除索引:drop index idxname

注:索引是不可更改的,想更改必須刪除重新建。

9、說明:創(chuàng)建視圖: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]

總數(shù):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

最?。簊elect min(field1) as minvalue from table1

11、說明:幾個高級查詢運(yùn)算詞

A: UNION 運(yùn)算符

UNION 運(yùn)算符通過組合其他兩個結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。

B: EXCEPT 運(yùn)算符

EXCEPT 運(yùn)算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復(fù)行。

C: INTERSECT 運(yùn)算符

INTERSECT 運(yùn)算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復(fù)行。

注:使用運(yùn)算詞的幾個查詢結(jié)果行必須是一致的。

12、說明:使用外連接

A、left outer join:

左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。

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:

右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。

C:full outer join:

全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

其次,大家來看一些不錯的sql語句

1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1

法二:select top 0 * into b from a

2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ where 條件

例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where..

4、說明:子查詢(表名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)

5、說明:顯示文章、提交人和最后回復(fù)時間

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、說明:外連接查詢(表名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

7、說明:在線視圖查詢(表名1:a )

select * from (Select a,b,c FROM a) T where t.a > 1;

8、說明:between的用法,between限制查詢數(shù)據(jù)范圍時包括了邊界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2

9、說明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、說明:四表聯(lián)查問題:

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 .....

12、說明:日程安排提前五分鐘提醒

SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

13、說明:一條sql 語句搞定數(shù)據(jù)庫分頁

select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段

14、說明:前10條記錄

select top 10 * form table1 where 范圍

15、說明:選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個結(jié)果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、說明:隨機(jī)取出10條數(shù)據(jù)

select top 10 * from tablename order by newid()

18、說明:隨機(jī)選擇記錄

select newid()

19、說明:刪除重復(fù)記錄

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、說明:列出數(shù)據(jù)庫里所有的表名

select name from sysobjects where type='U'

21、說明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現(xiàn)多重選擇,類似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

顯示結(jié)果:

type vender pcs

電腦 A 1

電腦 A 1

光盤 B 2

光盤 A 2

手機(jī) B 3

手機(jī) C 3

23、說明:初始化表table1

TRUNCATE TABLE table1

24、說明:選擇從10到15的記錄

select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

隨機(jī)選擇數(shù)據(jù)庫記錄的方法(使用Randomize函數(shù),通過SQL語句實現(xiàn))

  對存儲在數(shù)據(jù)庫中的數(shù)據(jù)來說,隨機(jī)數(shù)特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP“找個隨機(jī)數(shù)”然后打印出來。實際上常見的解決方案是建立如下所示的循環(huán):

Randomize

RNumber = Int(Rnd*499) +1

While Not objRec.EOF

If objRec("ID") = RNumber THEN

... 這里是執(zhí)行腳本 ...

end if

objRec.MoveNext

Wend

  這很容易理解。首先,你取出1到500范圍之內(nèi)的一個隨機(jī)數(shù)(假設(shè)500就是數(shù)據(jù)庫內(nèi)記錄的總數(shù))。然后,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執(zhí)行由THEN 關(guān)鍵字開始的那一塊代碼。假如你的RNumber 等于495,那么要循環(huán)一遍數(shù)據(jù)庫花的時間可就長了。雖然500這個數(shù)字看起來大了些,但相比更為穩(wěn)固的企業(yè)解決方案這還是個小型數(shù)據(jù)庫了,后者通常在一個數(shù)據(jù)庫內(nèi)就包含了成千上萬條記錄。這時候不就死定了?

  采用SQL,你就可以很快地找出準(zhǔn)確的記錄并且打開一個只包含該記錄的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,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作“隨機(jī)”記錄。Recordset沒有包含其他內(nèi)容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。

再談隨機(jī)數(shù)

  現(xiàn)在你下定決心要榨干Random 函數(shù)的最后一滴油,那么你可能會一次取出多條隨機(jī)記錄或者想采用一定隨機(jī)范圍內(nèi)的記錄。把上面的標(biāo)準(zhǔn)Random 示例擴(kuò)展一下就可以用SQL應(yīng)對上面兩種情況了。

  為了取出幾條隨機(jī)選擇的記錄并存放在同一recordset內(nèi),你可以存儲三個隨機(jī)數(shù),然后查詢數(shù)據(jù)庫獲得匹配這些數(shù)字的記錄:

SQL = "Select * FROM Customers Where ID = " & RNumber & " or ID = " & RNumber2 & " or ID = " & RNumber3

  假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數(shù)學(xué)等式選出第一條記錄和適當(dāng)數(shù)量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 Select 語句只顯示一種可能(這里的ID 是自動生成的號碼):

SQL = "Select * FROM Customers Where ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

  注意:以上代碼的執(zhí)行目的不是檢查數(shù)據(jù)庫內(nèi)是否有9條并發(fā)記錄。

隨機(jī)讀取若干條記錄,測試過

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左連接語法(最近開發(fā)要用左連接,Access幫助什么都沒有,網(wǎng)上沒有Access的SQL說明,只有自己測試, 現(xiàn)在記下以備后查)

語法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...

使用SQL語句 用...代替過長的字符串顯示

語法:

SQL數(shù)據(jù)庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename

Access數(shù)據(jù)庫:Select iif(len(field)>2,left(field,2)+'...',field) FROM tablename;

Conn.Execute說明

Execute方法

  該方法用于執(zhí)行SQL語句。根據(jù)SQL語句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種:

1.執(zhí)行SQL查詢語句時,將返回查詢得到的記錄集。用法為:

Set 對象變量名=連接對象.Execute("SQL 查詢語言")

Execute方法調(diào)用后,會自動創(chuàng)建記錄集對象,并將查詢結(jié)果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以后對象變量就代表了該記錄集對象。

2.執(zhí)行SQL的操作性語言時,沒有記錄集的返回。此時用法為:

    連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]

      ·RecordAffected 為可選項,此出可放置一個變量,SQL語句執(zhí)行后,所生效的記錄數(shù)會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊多少條記錄進(jìn)行了操作。

      ·Option 可選項,該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應(yīng)該將Execute方法之后的第一個字符解釋為命令文本。通過指定該參數(shù),可使執(zhí)行更高效。

·BeginTrans、RollbackTrans、CommitTrans方法

  這三個方法是連接對象提供的用于事務(wù)處理的方法。BeginTrans用于開始一個事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理。

  事務(wù)處理可以將一組操作視為一個整體,只有全部語句都成功執(zhí)行后,事務(wù)處理才算成功;若其中有一個語句執(zhí)行失敗,則整個處理就算失敗,并恢復(fù)到處里前的狀態(tài)。

BeginTrans和CommitTrans用于標(biāo)記事務(wù)的開始和結(jié)束,在這兩個之間的語句,就是作為事務(wù)處理的語句。判斷事務(wù)處理是否成功,可通過連接對象的Error集合來實現(xiàn),若Error集合的成員個數(shù)不為0,則說明有錯誤發(fā)生,事務(wù)處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。

      ·Option 可選項,該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應(yīng)該將Execute方法之后的第一個字符解釋為命令文本。通過指定該參數(shù),可使執(zhí)行更高效。

·BeginTrans、RollbackTrans、CommitTrans方法

  這三個方法是連接對象提供的用于事務(wù)處理的方法。BeginTrans用于開始一個事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理。

  事務(wù)處理可以將一組操作視為一個整體,只有全部語句都成功執(zhí)行后,事務(wù)處理才算成功;若其中有一個語句執(zhí)行失敗,則整個處理就算失敗,并恢復(fù)到處里前的狀態(tài)。

BeginTrans和CommitTrans用于標(biāo)記事務(wù)的開始和結(jié)束,在這兩個之間的語句,就是作為事務(wù)處理的語句。判斷事務(wù)處理是否成功,可通過連接對象的Error集合來實現(xiàn),若Error集合的成員個數(shù)不為0,則說明有錯誤發(fā)生,事務(wù)處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。






MySQL學(xué)習(xí)筆記和題目:級聯(lián)刪除,子查詢語法大全,用代碼建表【詩書畫唱】的評論 (共 條)

分享到微博請遵守國家法律
渝中区| 和顺县| 榕江县| 温泉县| 襄垣县| 武川县| 南漳县| 永嘉县| 长春市| 桦甸市| 河东区| 大同市| 横峰县| 象州县| 徐水县| 齐河县| 阳高县| 台中市| 谷城县| 汉川市| 西昌市| 兴隆县| 东乌珠穆沁旗| 开远市| 扎囊县| 灵台县| 麻城市| 洛宁县| 六盘水市| 长顺县| 云龙县| 尼勒克县| 东台市| 平舆县| 焦作市| 宝兴县| 油尖旺区| 石阡县| 普宁市| 股票| 纳雍县|