MySql常用SQL增删改查精
SQL语句的添加、删除、修改
添加、删除、修改使用db.Execute(Sql命令执行操作
(一Select 语句
A.普通查询
1. 查询全部的行和列
select * from users
2. 查询部分的行并用as命名列(as可用空格代替)
select UserName as用户名,NickName 密码,sex from users where sex = 0
select UserName,NickName,sex from users where sex <> 0
3. 查询空行
i. select UserName from users where sex is nu II;
ii. select UserName from users where sex ="";
4. 使用常量列
select UserName as用户名,"中北大学"as "学校"from users;
5. 限制固定行数
select UserId ,UserName a用户名from users limit 2,4;
6. 升序排列降序排列按照多列排序
i. select * from users where Height >178 order by age asc;
ii. select * from users where Height >178 order by age desc;
iii. select UserName as用户名,Height 身高,Age as 年龄from users where Age>20 order
by Height asc, Age desc;
7. 随机查询前20条数据
Select * from users order by rand ( limit 20;
8. 关键字顺序:
Where ---- group by——having --- o rder by
B.高级查询:
1. 模糊查询——like
select SName aS姓名from Students where Sname like 张% ;'
2. 模糊查询——IS NULL
select Sname as生名,SAddress as地址form Students where SAddress is null
3. 模糊查询 --- betwee n
select Stude ntld,Score from Score where Score betwee n 60 and 80
4. 模糊查询——in
select Sname a学员姓名,SAddress as地址from Students where SAddress in(北京',''广州’上海’;
SELECT ? r.'fytd.SrjInij FROM :砒比
WHERE lypa > "bunna?
,
SELECT SfSCQrtl 献* 甲场]£■
From Scon WHERE Scort >■ 60 SELECT AS 平均虜章一蘭&X I S EDT*)AS■■分一
MIU AS From Scot?WHERE Scan k>6C-
C.聚合函数
SELECT COUNT f(di5E9nict]|idl}| AS AH Aft From frcoirv
WHERE Scm BO WthMfieM*
D.分组查询
a分组查询—— GROUP BY
SELEC CountlD. AVGl£cc FROM Scora GROUP OV CourulD COurMd ?1 37L2 9托£ b分组查询---- 多列分组 SELECT SlvdtndD AS Goun?4D AS 冏*iM试 咖Zr平均畅 FROM Scon QRQUP ST S urU^tlD Co-- ", c分组查询——HAVING SELECT SiutT?ni>0 AS 富员■专,Covn?ED AS 内■■茁 Cc*uf?ID d分组查询总结 i. where字句从数据源中去掉不符合其搜索条件的数据 ii. group by字句搜集数据航到各个组中 iii. 统计函数为各个组计算统计值 iv. hav ing字句去掉不符合其搜索条件的各组数据行 v. 使用group by时,select后面出现的内容要么为聚合函数,要么为group by后面出现的内容 vi. 关键字的先后顺序:where ------ group by ------ h avi ng ------ o rder by E.多表连接查询 分类: 内连接(inner join):(等值连接、内连接)只返回两个表中连结字段相等的行外连接:1左外连接(left join )返回包括左表中的所有记录和右表中连结字段相等的记录 2右连接(right join ):返回包括右表中的所有记录和左表中连结字段相等的记录。 SELECT From INNER J6hl ON S C.C D4J I F3?IC I^ C.Scara S^Qr* AS C SUjd?nl$ AS S C.StudtmcliD ■ S S>Co>d? SELECT StudtimtM.SHjmia. ■上e>ur?l[L 罂迄w FROM Sludents, WHERE 52血110£3& -s SH&ore.SmdcntID SELECT S A£ C} CourwtNjm? A3 WK C Scor* INNER JOIN A$ CON |$ ?Cod* * C UudantlD) INNER J04N Cour*? AS C$ ?丁" [https://www.360docs.net/doc/3b6159734.html,urtvlD ? C CourttK}} SCiLECT i SHamfl AS. 匚■口AS C Sc&ri AS FROM StudarrEs AS S . Sc ora AS 匚Cour>i AS ci wti?ri S.SCoM ■ C SoiMntiD CS.CouriuHD ■ C.CiM*r??4D SELECT Frgm LEFT JOIN ON $ UtMuifl C CoursalQ C.$cor? S Sc@r? AS C C Stud?mli D ■ S SCcd? SELECT Tnl?i< Tnlv^kl! Titles Trata Publish?rs Pub^ridm* FROM tUlM RIGHT JOIN Puiblii4i?r3 Q 计TrtiHts.Pub^id - Publiis hort. P ub_id F.子查询 在某些特定的业务需求下,当进行查询的时候,需要的条件是另一个select语句的结果,这个时候,就要用到子查询。用于子查询的关键字包括:in、notin、 =、!=、exists、not exists … ■豊曲嵇肩举住年?大手累小凤的学t?? SELECT ' FROM ituteifc WHERE stuAgo > (SELECT事山心FROM 刊血g 鼻中凤] 1.子查询在where语句中的一般用法: ?SELECT ... FROM 知 WHERE字図1和子住询) ?押血的憲询林为肚冷兔*粘号中嵐.人的査逆聲为十杏询-UPDATE, INSERT. DELETE?nIUttffi+曲注矍亂于SELECTS旬.林子査询粗比牧远算裕联令檯用时.粥则t 证予育闻返回的値莒I平 Sc?rt 2.子查询in 3. ---------------- 子查询not in 4. ---------------- 子查询exists 5. ---------------- 子查询not exists 6.子查询---- from中子查询 7.子查询---- any、in、some any意思任意一个,即大于任意一个即可,注意与all的区别 Miter n fftOv n WHERE ?I “NYIWH MT n fROM 熾 -井析匸HAfttl中育一行也含(TO) . (U3!ltE2包肯(21. 14, 7) , n 豪it式为TRUE.因如中有亠牛■丹珀谟值屮子M.如果豪12邑常( 20. 10),車書卽栗豪t3为空赛?■!(煤氏为FUSE* fal星< NULL. NULL. KULL) , ■張堆式为MIKNO榔H + 词语IN< = AMY?a|*-冏此.?WtiS旬壘樺的: ' SELECT 51 FHOM tf WHERE ?1 ? ANY (SELECT FROM l2); ' SELECT fl FROMrl W*iER6 ?1 iM (SELECT ?1 FROM rj|r ^^SOMEJtANY的别fi.同此,述曲牛ift切是FKh -SELECT ?1 FROM tl WHERE >1 SELECT t1 FROW(2): -SELECT 41 FROM t1 WHERE a1 ■ ■ 4QME | SELECT s1 FROM t2|. 8.子查询——ALL all意思所有的值,注意与any的区别 SELECT *1 F^OM tl WbERE 11 AL^ {SELECT 11 FROM 121 * 井騎i Wi&fti中疽杼色盘 豪址式沖TRUE.稱为lOktta4>Rff* 三*f?K* (12, fi. NULL. -100) r MUil式対FALM.古耳鼻说中肝一仆■临人丁10. Jta鼻豪□包需<0, NULL. 1) ” ■農达式为5kn&bn. not in是ALL的别名 ?SELfCT tl FROM tl WHERE *1 v ALL (SELECT t1 FR0W l2):; -SELECT si FftOM tl WHERE tl NOT IM (SELfCT ? FROM l咼 9.补充: Sql = "Select Distinct 字段名From 数据表" Dist inct函数,查询数据库存表内不重复的记录 Sql = "Select Count(* From 数据表where 字段名1>#18:0:0# and 字段名1< #19:00# " count函数,查询数库表内有多少条记录,“字段名T是指同一字段 例: set rs=co nn .execute("select coun t(id as idnum from n ews" resp on se.write rs("id num" sql="select * from 数据表where 字段名between 值1 and 值2" Sql="select * from 数据表where 字段名between #2003-8-10# and #2003-8-12#" 在日期类数值为2003-8-10 19:55:08 的字段里查找2003-8-10至 2003-8-12的所有记录,而不管是几点几分。 select * from tb_n ame where datetime betwee n #2003-8-10# and #2003-8-12# 字段里面的数据格式为:2003-8-10 19:55:08 ,通过sql查出2003- 8-10 至2003-8-12的所有纪录,而不管是几点几分。 Sql="select * from 数据表where字段名=字段值order by 字段名[desc]" Sql="select * from 数据表where 字段名like '% 字段值%' order by字段 名[desc]" 模糊查询 Sql="select top 10 * from 数据表where 字段名order by 字段 名[desc]" 查找数据库中前10记录 Sql="select top n * form 数据表order by n ewid(" 随机取出数据库中的若干条记录的方法 top n,n就是要取出的记录数 Sql="select * from 数据表where字段名in ('值1','值2','值3 (二insert 语句 sql="insert into 数据表(字段1,字段2,字段3…values (值1,值2,值3… sql="insert into 数据表values (值1,值2,值3 …" 不指定具体字段名表示将按照数据表中字段的顺序,依次添加 sql="insert into 目标数据表select * from 源数据表" 把源数据表的记录添加到目标数据表 (三update 语句 Sql="update 数据表set 字段名=字段值where条件表达式" Sql="update 数据表set字段仁值1,字段2=值2 .............. 字段门=值n where条件表达式" Sql="update 数据表set 字段仁值1,字段2=值2字段门=值n " (四delete语句 Sql="delete from 数据表where条件表达式" Sql="delete from 数据表" 没有条件将删除数据表中所有记录 (五数据记录统计函数 AVG字段名得出一个表格栏平均值 COUNT(*|字段名对数据行数的统计或对某一栏有值的数据行数统计MAX字段名取得一个表格栏最大的值 MIN(字段名取得一个表格栏最小的值 SUM字段名把数据栏的值相加 引用以上函数的方法: sql="select sum( 字段名as别名from 数据表where条件表达式" set rs=c onn. excute(sql 用rs("别名"获取统的计值,其它函数运用同上。 (六数据表的建立和删除 CREATE TABL数据表名称(字段1类型1(长度,字段2类型2(长度例:CREATE TABLE tabO1(name varchar(50,datetime default now(DROP TABL救据表名称(永久性删除一个数据表 (七记录集对象的方法 rs.movenext将记录指针从当前的位置向下移一行 rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一行 rs.movelast 将记录指针移到数据表最后一行 rs.absolutepositio n=N 将记录指针移到数据表第N行 rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pageco unt 根据pagesize 的设置返回总页数 rs.pagesize=N 设置每页为N条记录 rs.recordco unt 返回记录总数 rs.bof返回记录指针是否超出数据表首端,true表示是,false为否rs.eof返回记录指针是否超出数据表末端,true表示是,false为否rs.delete 删除当前记录,但记录指针不会向下移动 rs.addnew添加记录到数据表末端 rs.update 更新数据表记录